diff --git a/pkg/querier/queryrange/marshaling_test.go b/pkg/querier/queryrange/marshaling_test.go index 5f355bee7a5..9e58f35edc3 100644 --- a/pkg/querier/queryrange/marshaling_test.go +++ b/pkg/querier/queryrange/marshaling_test.go @@ -19,7 +19,7 @@ func BenchmarkMarshalling(b *testing.B) { apiResp, err := PrometheusCodec.DecodeResponse(context.Background(), &http.Response{ StatusCode: 200, Body: ioutil.NopCloser(bytes.NewReader(buf)), - }) + }, nil) require.NoError(b, err) resp, err := PrometheusCodec.EncodeResponse(context.Background(), apiResp) diff --git a/pkg/querier/queryrange/query_range.go b/pkg/querier/queryrange/query_range.go index e1691c74033..2dfde812df4 100644 --- a/pkg/querier/queryrange/query_range.go +++ b/pkg/querier/queryrange/query_range.go @@ -40,8 +40,10 @@ type Codec interface { Merger // DecodeRequest decodes a Request from an http request. DecodeRequest(context.Context, *http.Request) (Request, error) - // DecodeResponse decodes a Response from an http response.. - DecodeResponse(context.Context, *http.Response) (Response, error) + // DecodeResponse decodes a Response from an http response. + // The original request is also passed as a parameter this is useful for implementation that needs the request + // to merge result or build the result correctly. + DecodeResponse(context.Context, *http.Response, Request) (Response, error) // EncodeRequest encodes a Request into an http request. EncodeRequest(context.Context, Request) (*http.Request, error) // EncodeResponse encodes a Response into an http response. @@ -198,7 +200,7 @@ func (prometheusCodec) EncodeRequest(ctx context.Context, r Request) (*http.Requ return req.WithContext(ctx), nil } -func (prometheusCodec) DecodeResponse(ctx context.Context, r *http.Response) (Response, error) { +func (prometheusCodec) DecodeResponse(ctx context.Context, r *http.Response, _ Request) (Response, error) { if r.StatusCode/100 != 2 { body, _ := ioutil.ReadAll(r.Body) return nil, httpgrpc.Errorf(r.StatusCode, string(body)) diff --git a/pkg/querier/queryrange/query_range_test.go b/pkg/querier/queryrange/query_range_test.go index f9649d27907..543dd01a71f 100644 --- a/pkg/querier/queryrange/query_range_test.go +++ b/pkg/querier/queryrange/query_range_test.go @@ -89,7 +89,7 @@ func TestResponse(t *testing.T) { Header: http.Header{"Content-Type": []string{"application/json"}}, Body: ioutil.NopCloser(bytes.NewBuffer([]byte(tc.body))), } - resp, err := PrometheusCodec.DecodeResponse(context.Background(), response) + resp, err := PrometheusCodec.DecodeResponse(context.Background(), response, nil) require.NoError(t, err) assert.Equal(t, tc.expected, resp) diff --git a/pkg/querier/queryrange/roundtrip.go b/pkg/querier/queryrange/roundtrip.go index 2f1dc6e2487..c2339eb934d 100644 --- a/pkg/querier/queryrange/roundtrip.go +++ b/pkg/querier/queryrange/roundtrip.go @@ -176,5 +176,5 @@ func (q roundTripper) Do(ctx context.Context, r Request) (Response, error) { } defer func() { _ = response.Body.Close() }() - return q.codec.DecodeResponse(ctx, response) + return q.codec.DecodeResponse(ctx, response, r) }