Merge pull request #1492 from jonboulle/1492_nonexistent_member

Attempting to remove nonexistent member mishandled
This commit is contained in:
Jonathan Boulle 2014-10-30 09:58:02 -07:00
commit bf44219766
2 changed files with 31 additions and 6 deletions

View File

@ -212,13 +212,16 @@ func (h *membersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
writeError(w, httptypes.NewHTTPError(http.StatusBadRequest, err.Error()))
return
}
log.Printf("etcdhttp: remove node %x", id)
if err := h.server.RemoveMember(ctx, id); err != nil {
err = h.server.RemoveMember(ctx, id)
switch {
case err == etcdserver.ErrIDNotFound:
writeError(w, httptypes.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such member: %s", idStr)))
case err != nil:
log.Printf("etcdhttp: error removing node %x: %v", id, err)
writeError(w, err)
return
default:
w.WriteHeader(http.StatusNoContent)
}
w.WriteHeader(http.StatusNoContent)
}
}

View File

@ -762,7 +762,7 @@ func TestServeMembersFail(t *testing.T) {
http.StatusInternalServerError,
},
{
// etcdserver.RemoveMember error
// etcdserver.RemoveMember error with arbitrary server error
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "1")),
Method: "DELETE",
@ -774,7 +774,29 @@ func TestServeMembersFail(t *testing.T) {
http.StatusInternalServerError,
},
{
// etcdserver.RemoveMember error
// etcdserver.RemoveMember error with nonexistent ID
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "0")),
Method: "DELETE",
},
&errServer{
etcdserver.ErrIDNotFound,
},
http.StatusNotFound,
},
{
// etcdserver.RemoveMember error with badly formed ID
&http.Request{
URL: mustNewURL(t, path.Join(membersPrefix, "bad_id")),
Method: "DELETE",
},
nil,
http.StatusBadRequest,
},
{
// etcdserver.RemoveMember with no ID
&http.Request{
URL: mustNewURL(t, membersPrefix),
Method: "DELETE",