Browse Source

etchttp: return 410 gone for permanently removed members

Jonathan Boulle 11 years ago
parent
commit
cedcc0d8df
2 changed files with 14 additions and 0 deletions
  1. 2 0
      etcdserver/etcdhttp/client.go
  2. 12 0
      etcdserver/etcdhttp/client_test.go

+ 2 - 0
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:

+ 12 - 0
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{