mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 13:14:05 -08:00
Merge pull request #11897 from pracucci/propose-to-change-query-canceled-status-code
API: change HTTP status code from 503/422 to 499 if a request is canceled
This commit is contained in:
commit
6dcfb71740
|
@ -63,6 +63,10 @@ type status string
|
|||
const (
|
||||
statusSuccess status = "success"
|
||||
statusError status = "error"
|
||||
|
||||
// Non-standard status code (originally introduced by nginx) for the case when a client closes
|
||||
// the connection while the server is still processing the request.
|
||||
statusClientClosedConnection = 499
|
||||
)
|
||||
|
||||
type errorType string
|
||||
|
@ -593,6 +597,10 @@ func returnAPIError(err error) *apiError {
|
|||
return &apiError{errorInternal, err}
|
||||
}
|
||||
|
||||
if errors.Is(err, context.Canceled) {
|
||||
return &apiError{errorCanceled, err}
|
||||
}
|
||||
|
||||
return &apiError{errorExec, err}
|
||||
}
|
||||
|
||||
|
@ -1599,7 +1607,9 @@ func (api *API) respondError(w http.ResponseWriter, apiErr *apiError, data inter
|
|||
code = http.StatusBadRequest
|
||||
case errorExec:
|
||||
code = http.StatusUnprocessableEntity
|
||||
case errorCanceled, errorTimeout:
|
||||
case errorCanceled:
|
||||
code = statusClientClosedConnection
|
||||
case errorTimeout:
|
||||
code = http.StatusServiceUnavailable
|
||||
case errorInternal:
|
||||
code = http.StatusInternalServerError
|
||||
|
|
|
@ -58,7 +58,7 @@ func TestApiStatusCodes(t *testing.T) {
|
|||
"promql.ErrQueryCanceled": {
|
||||
err: promql.ErrQueryCanceled("some error"),
|
||||
expectedString: "query was canceled",
|
||||
expectedCode: http.StatusServiceUnavailable,
|
||||
expectedCode: statusClientClosedConnection,
|
||||
},
|
||||
|
||||
"promql.ErrQueryTimeout": {
|
||||
|
@ -76,7 +76,7 @@ func TestApiStatusCodes(t *testing.T) {
|
|||
"context.Canceled": {
|
||||
err: context.Canceled,
|
||||
expectedString: "context canceled",
|
||||
expectedCode: http.StatusUnprocessableEntity,
|
||||
expectedCode: statusClientClosedConnection,
|
||||
},
|
||||
} {
|
||||
for k, q := range map[string]storage.SampleAndChunkQueryable{
|
||||
|
|
Loading…
Reference in a new issue