diff --git a/command/agent/alloc_endpoint.go b/command/agent/alloc_endpoint.go index a5a7fef24d83..9c78c87496e1 100644 --- a/command/agent/alloc_endpoint.go +++ b/command/agent/alloc_endpoint.go @@ -119,8 +119,15 @@ func (s *HTTPServer) allocStop(allocID string, resp http.ResponseWriter, req *ht s.parseWriteRequest(req, &sr.WriteRequest) var out structs.AllocStopResponse - err := s.agent.RPC("Alloc.Stop", &sr, &out) - return &out, err + rpcErr := s.agent.RPC("Alloc.Stop", &sr, &out) + + if rpcErr != nil { + if structs.IsErrUnknownAllocation(rpcErr) { + rpcErr = CodedError(404, allocNotFoundErr) + } + } + + return &out, rpcErr } func (s *HTTPServer) ClientAllocRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { diff --git a/command/agent/alloc_endpoint_test.go b/command/agent/alloc_endpoint_test.go index ed497a6716d1..85de625f9a1d 100644 --- a/command/agent/alloc_endpoint_test.go +++ b/command/agent/alloc_endpoint_test.go @@ -424,17 +424,16 @@ func TestHTTP_AllocStop(t *testing.T) { // Test that we 404 when the allocid is invalid { // Make the HTTP request - req, err := http.NewRequest("POST", "/v1/allocation/"+alloc.ID+"/stop", nil) + req, err := http.NewRequest("POST", "/v1/allocation/"+uuid.Generate()+"/stop", nil) require.NoError(err) respW := httptest.NewRecorder() // Make the request - obj, err := s.Server.AllocSpecificRequest(respW, req) - require.NoError(err) - - a := obj.(*structs.AllocStopResponse) - require.NotEmpty(a.EvalID, "missing eval") - require.NotEmpty(a.Index, "missing index") + _, err = s.Server.AllocSpecificRequest(respW, req) + require.NotNil(err) + if !strings.Contains(err.Error(), allocNotFoundErr) { + t.Fatalf("err: %v", err) + } } }) } diff --git a/nomad/alloc_endpoint.go b/nomad/alloc_endpoint.go index 491541b32c18..995ce874aa20 100644 --- a/nomad/alloc_endpoint.go +++ b/nomad/alloc_endpoint.go @@ -231,6 +231,10 @@ func (a *Alloc) Stop(args *structs.AllocStopRequest, reply *structs.AllocStopRes return err } + if alloc == nil { + return fmt.Errorf(structs.ErrUnknownAllocationPrefix) + } + eval := &structs.Evaluation{ ID: uuid.Generate(), Namespace: alloc.Namespace,