fix index inconsistence in v1 api

This commit is contained in:
Xiang Li 2013-12-11 11:12:39 -08:00
parent f66bd1689d
commit a5bca025b1
4 changed files with 14 additions and 4 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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
}