diff --git a/store/store.go b/store/store.go index fe27b0b23..4e51f9298 100644 --- a/store/store.go +++ b/store/store.go @@ -68,7 +68,7 @@ type Response struct { PrevValue string `json:"prevValue,omitempty"` Value string `json:"value,omitempty"` - // If the key did not exist before the action, + // If the key did not exist before the action, // this field should be set to true NewKey bool `json:"newKey,omitempty"` @@ -145,9 +145,9 @@ func (s *Store) Set(key string, value string, expireTime time.Time, index uint64 // base response resp := Response{ - Action: "SET", - Key: key, - Value: value, + Action: "SET", + Key: key, + Value: value, Index: index, } @@ -164,8 +164,8 @@ func (s *Store) Set(key string, value string, expireTime time.Time, index uint64 if isExpire { TTL = int64(expireTime.Sub(time.Now()) / time.Second) resp.Expiration = &expireTime - resp.TTL = TTL - } + resp.TTL = TTL + } // Get the node node, ok := s.Tree.get(key) @@ -259,18 +259,18 @@ func (s *Store) internalGet(key string) *Response { isExpire = !node.ExpireTime.Equal(PERMANENT) resp := &Response{ - Action: "GET", - Key: key, - Value: node.Value, + Action: "GET", + Key: key, + Value: node.Value, Index: s.Index, } // Update ttl if isExpire { TTL = int64(node.ExpireTime.Sub(time.Now()) / time.Second) - resp.Expiration = &node.ExpireTime - resp.TTL = TTL - } + resp.Expiration = &node.ExpireTime + resp.TTL = TTL + } return resp @@ -300,7 +300,7 @@ func (s *Store) Get(key string) ([]byte, error) { isExpire = !nodes[i].ExpireTime.Equal(PERMANENT) resps[i] = Response{ - Action: "GET", + Action: "GET", Index: s.Index, Key: path.Join(key, keys[i]), } @@ -314,9 +314,9 @@ func (s *Store) Get(key string) ([]byte, error) { // Update ttl if isExpire { TTL = int64(nodes[i].ExpireTime.Sub(time.Now()) / time.Second) - resps[i].Expiration = &nodes[i].ExpireTime - resps[i].TTL = TTL - } + resps[i].Expiration = &nodes[i].ExpireTime + resps[i].TTL = TTL + } } if len(resps) == 1 { @@ -342,9 +342,9 @@ func (s *Store) Delete(key string, index uint64) ([]byte, error) { if ok { resp := Response{ - Action: "DELETE", - Key: key, - PrevValue: node.Value, + Action: "DELETE", + Key: key, + PrevValue: node.Value, Index: index, } @@ -358,7 +358,7 @@ func (s *Store) Delete(key string, index uint64) ([]byte, error) { // Kill the expire go routine node.update <- PERMANENT s.Tree.delete(key) - + } msg, err := json.Marshal(resp) @@ -387,7 +387,7 @@ func (s *Store) TestAndSet(key string, prevValue string, value string, expireTim if resp == nil { err := NotFoundError(key) - return nil, err + return nil, err } if resp.Value == prevValue { @@ -432,10 +432,10 @@ func (s *Store) monitorExpiration(key string, update chan time.Time, expireTime s.Tree.delete(key) resp := Response{ - Action: "DELETE", - Key: key, - PrevValue: node.Value, - Expiration: &node.ExpireTime, + Action: "DELETE", + Key: key, + PrevValue: node.Value, + Expiration: &node.ExpireTime, Index: s.Index, } diff --git a/store/tree.go b/store/tree.go index 5a3a8b0e0..7069605d5 100644 --- a/store/tree.go +++ b/store/tree.go @@ -12,7 +12,7 @@ import ( // //------------------------------------------------------------------------------ -// A file system like tree structure. Each non-leaf node of the tree has a hashmap to +// A file system like tree structure. Each non-leaf node of the tree has a hashmap to // store its children nodes. Leaf nodes has no hashmap (a nil pointer) type tree struct { Root *treeNode @@ -21,7 +21,7 @@ type tree struct { // A treeNode wraps a Node. It has a hashmap to keep records of its children treeNodes. type treeNode struct { InternalNode Node - Dir bool + Dir bool NodeMap map[string]*treeNode } @@ -75,7 +75,7 @@ func (t *tree) set(key string, value Node) bool { // get the node from the nodeMap of the current level tn, ok := nodeMap[nodesName[i]] - + if !ok { // add a new directory and set newDir to true newDir = true @@ -85,7 +85,7 @@ func (t *tree) set(key string, value Node) bool { } else if ok && !tn.Dir { - // if we meet a non-directory node, we cannot set the key + // if we meet a non-directory node, we cannot set the key return false } else { @@ -102,7 +102,7 @@ func (t *tree) set(key string, value Node) bool { // we add a new treeNode tn := &treeNode{value, false, nil} nodeMap[nodesName[i]] = tn - + } else { if tn.Dir { return false @@ -114,12 +114,12 @@ func (t *tree) set(key string, value Node) bool { } -// Get the tree node of the key +// Get the tree node of the key func (t *tree)internalGet(key string) (*treeNode, bool) { nodesName := split(key) nodeMap := t.Root.NodeMap - + var i int for i = 0; i < len(nodesName) - 1; i++ { @@ -136,7 +136,7 @@ func (t *tree)internalGet(key string) (*treeNode, bool) { } else { return nil, ok } -} +} // get the internalNode of the key func (t *tree) get(key string) (Node, bool) { @@ -163,7 +163,7 @@ func (t *tree) list(directory string) ([]Node, []string, []bool, bool) { nodes := make([]Node, 1) nodes[0] = treeNode.InternalNode return nodes, make([]string, 1), make([]bool, 1), true - } + } length := len(treeNode.NodeMap) nodes := make([]Node, length) keys := make([]string, length) @@ -190,7 +190,7 @@ func (t *tree) delete(key string) bool { nodesName := split(key) nodeMap := t.Root.NodeMap - + var i int for i = 0; i < len(nodesName) - 1; i++ { @@ -214,11 +214,11 @@ func (t *tree) traverse(f func(string, *Node), sort bool) { if sort { sortDfs("", t.Root, f) } else { - dfs("", t.Root, f) + dfs("", t.Root, f) } } -// deep first search to traverse the tree +// deep first search to traverse the tree // apply the func f to each internal node func dfs(key string, t *treeNode, f func(string, *Node)) { diff --git a/store/tree_store_test.go b/store/tree_store_test.go index 8611138e2..0187c5c6f 100644 --- a/store/tree_store_test.go +++ b/store/tree_store_test.go @@ -10,13 +10,13 @@ import ( func TestStoreGet(t *testing.T) { - ts := &tree{ + ts := &tree{ &treeNode{ - CreateTestNode("/"), - true, + CreateTestNode("/"), + true, make(map[string]*treeNode), }, - } + } // create key ts.set("/foo", CreateTestNode("bar")) @@ -49,13 +49,13 @@ func TestStoreGet(t *testing.T) { } // delete a key - ok = ts.delete("/foo") + ok = ts.delete("/foo") if !ok { t.Fatalf("cannot delete key") } // delete a directory - ok = ts.delete("/hello") + ok = ts.delete("/hello") if ok { t.Fatalf("Expect cannot delet /hello, but deleted! ") } @@ -74,7 +74,7 @@ func TestStoreGet(t *testing.T) { for i := 0; i < length; i++ { fmt.Println(keys[i] , "=", nodes[i].Value, "[", dirs[i], "]") - } + } } // speed test diff --git a/store/watcher.go b/store/watcher.go index df590f4ba..ba663a16e 100644 --- a/store/watcher.go +++ b/store/watcher.go @@ -34,7 +34,7 @@ func CreateWatcher() *Watcher { } // Add a watcher to the watcherHub -func (w *WatcherHub) addWatcher(prefix string, watcher *Watcher, sinceIndex uint64, +func (w *WatcherHub) addWatcher(prefix string, watcher *Watcher, sinceIndex uint64, responseStartIndex uint64, currentIndex uint64, resMap *map[string]Response) error { prefix = path.Clean("/" + prefix)