etchttp: return 410 gone for permanently removed members

release-2.0
Jonathan Boulle 2014-11-04 11:21:24 -08:00
parent ac49e1d50f
commit cedcc0d8df
2 changed files with 14 additions and 0 deletions

View File

@ -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:

View File

@ -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{