From cedcc0d8df635e24f47f3428a508a78dc16d5543 Mon Sep 17 00:00:00 2001 From: Jonathan Boulle Date: Tue, 4 Nov 2014 11:21:24 -0800 Subject: [PATCH] etchttp: return 410 gone for permanently removed members --- etcdserver/etcdhttp/client.go | 2 ++ etcdserver/etcdhttp/client_test.go | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/etcdserver/etcdhttp/client.go b/etcdserver/etcdhttp/client.go index 2292fd436..4be7f8197 100644 --- a/etcdserver/etcdhttp/client.go +++ b/etcdserver/etcdhttp/client.go @@ -211,6 +211,8 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } err = h.server.RemoveMember(ctx, uint64(id)) switch { + case err == etcdserver.ErrIDRemoved: + writeError(w, httptypes.NewHTTPError(http.StatusGone, fmt.Sprintf("Member permanently removed: %s", idStr))) case err == etcdserver.ErrIDNotFound: writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", idStr))) case err != nil: diff --git a/etcdserver/etcdhttp/client_test.go b/etcdserver/etcdhttp/client_test.go index 53072392c..da0423cbd 100644 --- a/etcdserver/etcdhttp/client_test.go +++ b/etcdserver/etcdhttp/client_test.go @@ -785,6 +785,18 @@ func TestServeMembersFail(t *testing.T) { http.StatusInternalServerError, }, + { + // etcdserver.RemoveMember error with preivously removed ID + &http.Request{ + URL: mustNewURL(t, path.Join(membersPrefix, "0")), + Method: "DELETE", + }, + &errServer{ + etcdserver.ErrIDRemoved, + }, + + http.StatusGone, + }, { // etcdserver.RemoveMember error with nonexistent ID &http.Request{