Browse Source

fix index inconsistence in v1 api

Xiang Li 12 years ago
parent
commit
a5bca025b1
4 changed files with 14 additions and 4 deletions
  1. 1 1
      server/server.go
  2. 2 1
      server/v1/get_key_handler.go
  3. 2 1
      server/v1/watch_key_handler.go
  4. 9 1
      store/event.go

+ 1 - 1
server/server.go

@@ -260,7 +260,7 @@ func (s *Server) Dispatch(c raft.Command, w http.ResponseWriter, req *http.Reque
 
 		var b []byte
 		if strings.HasPrefix(req.URL.Path, "/v1") {
-			b, _ = json.Marshal(result.(*store.Event).Response())
+			b, _ = json.Marshal(result.(*store.Event).Response(0))
 			w.WriteHeader(http.StatusOK)
 		} else {
 			e, _ := result.(*store.Event)

+ 2 - 1
server/v1/get_key_handler.go

@@ -19,7 +19,8 @@ func GetKeyHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 	}
 
 	// Convert event to a response and write to client.
-	b, _ := json.Marshal(event.Response())
+	b, _ := json.Marshal(event.Response(s.Store().Index()))
+
 	w.WriteHeader(http.StatusOK)
 	w.Write(b)
 

+ 2 - 1
server/v1/watch_key_handler.go

@@ -31,7 +31,8 @@ func WatchKeyHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 	}
 	event := <-c
 
-	b, _ := json.Marshal(event.Response())
+	// Convert event to a response and write to client.
+	b, _ := json.Marshal(event.Response(s.Store().Index()))
 	w.WriteHeader(http.StatusOK)
 	w.Write(b)
 

+ 9 - 1
store/event.go

@@ -45,7 +45,7 @@ func (e *Event) Index() uint64 {
 }
 
 // Converts an event object into a response object.
-func (event *Event) Response() interface{} {
+func (event *Event) Response(currentIndex uint64) interface{} {
 	if !event.Node.Dir {
 		response := &Response{
 			Action:     event.Action,
@@ -57,6 +57,10 @@ func (event *Event) Response() interface{} {
 			Expiration: event.Node.Expiration,
 		}
 
+		if currentIndex != 0 {
+			response.Index = currentIndex
+		}
+
 		if response.Action == Set {
 			if response.PrevValue == "" {
 				response.NewKey = true
@@ -79,6 +83,10 @@ func (event *Event) Response() interface{} {
 				Dir:    node.Dir,
 				Index:  node.ModifiedIndex,
 			}
+
+			if currentIndex != 0 {
+				responses[i].Index = currentIndex
+			}
 		}
 		return responses
 	}