From 547ad6ee3bd8cc7875dd62486d4396bffff15f37 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 3 Jul 2013 15:35:25 -0700 Subject: [PATCH] add func arg to traverse func --- store/store.go | 44 ++++++++++++++++++++++++++++------------ store/tree.go | 12 +++++------ store/tree_store_test.go | 8 +++++--- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/store/store.go b/store/store.go index e78ea6381..ade3957f1 100644 --- a/store/store.go +++ b/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) + } + } } diff --git a/store/tree.go b/store/tree.go index 7fba9274c..9678ec618 100644 --- a/store/tree.go +++ b/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) } } } + diff --git a/store/tree_store_test.go b/store/tree_store_test.go index f4f1ca302..38afc939e 100644 --- a/store/tree_store_test.go +++ b/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}