Browse Source

add func arg to traverse func

Xiang Li 12 years ago
parent
commit
547ad6ee3b
3 changed files with 42 additions and 22 deletions
  1. 31 13
      store/store.go
  2. 6 6
      store/tree.go
  3. 5 3
      store/tree_store_test.go

+ 31 - 13
store/store.go

@@ -375,21 +375,39 @@ func (s *Store) Recovery(state []byte) error {
 
 // clean all expired keys
 func clean() {
-	// for key, node := range s.Nodes {
+	for key, node := range s.Nodes {
 
-	// 	if node.ExpireTime.Equal(PERMANENT) {
-	// 		continue
-	// 	} else {
+		if node.ExpireTime.Equal(PERMANENT) {
+			continue
+		} else {
 
-	// 		if node.ExpireTime.Sub(time.Now()) >= time.Second {
-	// 			node.update = make(chan time.Time)
-	// 			go expire(key, node.update, node.ExpireTime)
+			if node.ExpireTime.Sub(time.Now()) >= time.Second {
+				node.update = make(chan time.Time)
+				go expire(key, node.update, node.ExpireTime)
 
-	// 		} else {
-	// 			// we should delete this node
-	// 			delete(s.Nodes, key)
-	// 		}
-	// 	}
+			} else {
+				// we should delete this node
+				delete(s.Nodes, key)
+			}
+		}
+
+	}
+}
 
-	// }
+
+func delteOldNode(t *TreeNode) {
+
+	if node.ExpireTime.Equal(PERMANENT) {
+		continue
+	} else {
+
+		if node.ExpireTime.Sub(time.Now()) >= time.Second {
+			node.update = make(chan time.Time)
+			go expire(key, node.update, node.ExpireTime)
+
+		} else {
+				// we should delete this node
+			delete(s.Nodes, key)
+		}
+	}
 }

+ 6 - 6
store/tree.go

@@ -3,7 +3,6 @@ package store
 import (
 	"path"
 	"strings"
-	"fmt"
 	)
 
 type tree struct {
@@ -142,17 +141,18 @@ func (s *tree) delete(key string) bool {
 	return false
 }
 
-func (t *tree) traverse() {
-	dfs(t.Root)
+func (t *tree) traverse(f func(*treeNode)) {
+	dfs(t.Root, f)
 }
 
-func dfs(t *treeNode) {
+func dfs(t *treeNode, f func(*treeNode)) {
 	if len(t.NodeMap) == 0{
-		fmt.Println(t.Value.Value)
+		f(t)
 	} else {
 		for _, _treeNode := range t.NodeMap {
-			dfs(_treeNode)
+			dfs(_treeNode, f)
 		}
 	}
 }
 
+

+ 5 - 3
store/tree_store_test.go

@@ -5,6 +5,7 @@ import (
 	"math/rand"
 	"strconv"
 	"time"
+	"fmt"
 )
 
 func TestStoreGet(t *testing.T) {
@@ -79,11 +80,12 @@ func TestStoreGet(t *testing.T) {
 		}
 
 	}
-
-	ts.traverse()
-
+	ts.traverse(f)
 }
 
+func f (t *treeNode) {
+	fmt.Println(t.Value.Value)
+}
 
 func CreateTestNode(value string) Node{
 	return Node{value, time.Unix(0,0), nil}