add func arg to traverse func
parent
4768b82b11
commit
547ad6ee3b
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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}
|
||||||
|
|
Loading…
Reference in New Issue