diff --git a/contrib/raftexample/httpapi.go b/contrib/raftexample/httpapi.go index b8dd6e7a7..9c1af96bb 100644 --- a/contrib/raftexample/httpapi.go +++ b/contrib/raftexample/httpapi.go @@ -73,12 +73,29 @@ func (h *httpKVAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) { } h.confChangeC <- cc + // As above, optimistic that raft will apply the conf change + w.WriteHeader(http.StatusNoContent) + case r.Method == "DELETE": + nodeId, err := strconv.ParseUint(key[1:], 0, 64) + if err != nil { + log.Printf("Failed to convert ID for conf change (%v)\n", err) + http.Error(w, "Failed on DELETE", http.StatusBadRequest) + return + } + + cc := raftpb.ConfChange{ + Type: raftpb.ConfChangeRemoveNode, + NodeID: nodeId, + } + h.confChangeC <- cc + // As above, optimistic that raft will apply the conf change w.WriteHeader(http.StatusNoContent) default: w.Header().Set("Allow", "PUT") w.Header().Add("Allow", "GET") w.Header().Add("Allow", "POST") + w.Header().Add("Allow", "DELETE") http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } }