From 4a527be3027f79df5f12caf6823c1466d48b7b48 Mon Sep 17 00:00:00 2001 From: Adam Wolfe Gordon Date: Fri, 5 Feb 2016 13:13:16 -0700 Subject: [PATCH] contrib/raftexample: Allow nodes to be removed from a running cluster A node with ID n can be removed by DELETEing /n on the HTTP server. --- contrib/raftexample/httpapi.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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) } }