diff --git a/pkg/util/querylimits/middleware.go b/pkg/util/querylimits/middleware.go index b646bb4027..73cf0b3438 100644 --- a/pkg/util/querylimits/middleware.go +++ b/pkg/util/querylimits/middleware.go @@ -27,11 +27,8 @@ func (l *queryLimitsMiddleware) Wrap(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { limits, err := ExtractQueryLimitsHTTP(r) if err != nil { - w.WriteHeader(http.StatusBadRequest) - if _, err := w.Write([]byte(err.Error())); err != nil { - level.Error(util_log.Logger).Log("msg", "error in queryLimitsMiddleware Wrap", "err", err) - } - return + level.Warn(util_log.Logger).Log("msg", "could not extract query limits from header", "err", err) + limits = nil } if limits != nil { diff --git a/pkg/util/querylimits/middleware_test.go b/pkg/util/querylimits/middleware_test.go index 2ba1b16080..1861df3ce1 100644 --- a/pkg/util/querylimits/middleware_test.go +++ b/pkg/util/querylimits/middleware_test.go @@ -23,6 +23,25 @@ func Test_MiddlewareWithoutHeader(t *testing.T) { r, err := http.NewRequest("GET", "/example", nil) require.NoError(t, err) wrapped.ServeHTTP(rr, r) + response := rr.Result() + require.Equal(t, http.StatusOK, response.StatusCode) +} + +func Test_MiddlewareWithBrokenHeader(t *testing.T) { + nextHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + limits := ExtractQueryLimitsContext(r.Context()) + require.Nil(t, limits) + }) + m := NewQueryLimitsMiddleware(log.NewNopLogger()) + wrapped := m.Wrap(nextHandler) + + rr := httptest.NewRecorder() + r, err := http.NewRequest("GET", "/example", nil) + require.NoError(t, err) + r.Header.Add(HTTPHeaderQueryLimitsKey, "{broken}") + wrapped.ServeHTTP(rr, r) + response := rr.Result() + require.Equal(t, http.StatusOK, response.StatusCode) } func Test_MiddlewareWithHeader(t *testing.T) { @@ -50,4 +69,6 @@ func Test_MiddlewareWithHeader(t *testing.T) { err = InjectQueryLimitsHTTP(r, &limits) require.NoError(t, err) wrapped.ServeHTTP(rr, r) + response := rr.Result() + require.Equal(t, http.StatusOK, response.StatusCode) }