diff --git a/server/server.go b/server/server.go index e2b54f8b5..a435fbce0 100644 --- a/server/server.go +++ b/server/server.go @@ -225,6 +225,7 @@ func (s *Server) Close() { } } +// Dispatch command to the current leader func (s *Server) Dispatch(c raft.Command, w http.ResponseWriter, req *http.Request) error { ps := s.peerServer if ps.raftServer.State() == raft.Leader { @@ -252,6 +253,12 @@ func (s *Server) Dispatch(c raft.Command, w http.ResponseWriter, req *http.Reque e, _ := result.(*store.Event) b, _ = json.Marshal(e) + // etcd index should be the same as the event index + // which is also the last modified index of the node + w.Header().Add("X-Etcd-Index", fmt.Sprint(e.Index)) + w.Header().Add("X-Raft-Index", fmt.Sprint(s.CommitIndex())) + w.Header().Add("X-Raft-Term", fmt.Sprint(s.Term())) + if e.IsCreated() { w.WriteHeader(http.StatusCreated) } else { diff --git a/server/v2/get_handler.go b/server/v2/get_handler.go index f2d05c507..3e8ddee64 100644 --- a/server/v2/get_handler.go +++ b/server/v2/get_handler.go @@ -68,7 +68,9 @@ func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error { } } - w.Header().Add("X-Etcd-Index", fmt.Sprint(event.Index)) + w.Header().Add("X-Etcd-Index", fmt.Sprint(s.Store().Index())) + w.Header().Add("X-Raft-Index", fmt.Sprint(s.CommitIndex())) + w.Header().Add("X-Raft-Term", fmt.Sprint(s.Term())) w.WriteHeader(http.StatusOK) b, _ := json.Marshal(event) diff --git a/store/node.go b/store/node.go index 7ed78303c..9a7196bd3 100644 --- a/store/node.go +++ b/store/node.go @@ -17,7 +17,6 @@ type Node struct { Path string CreateIndex uint64 - CreateTerm uint64 ModifiedIndex uint64 Parent *Node `json:"-"` // should not encode this field! avoid circular dependency.