add func arg to traverse func

release-0.4
Xiang Li 2013-07-03 15:35:25 -07:00
parent 4768b82b11
commit 547ad6ee3b
3 changed files with 42 additions and 22 deletions

View File

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

View File

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

View File

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