Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add info field to query response #6207

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

* [FEATURE] Ruler: Experimental: Add `ruler.frontend-address` to allow query to query frontends instead of ingesters. #6151
* [FEATURE] Ruler: Minimize chances of missed rule group evaluations that can occur due to OOM kills, bad underlying nodes, or due to an unhealthy ruler that appears in the ring as healthy. This feature is enabled via `-ruler.enable-ha-evaluation` flag. #6129
* [ENHANCEMENT] Query Frontend: Add info field to query response. #6207
* [ENHANCEMENT] Query Frontend: Add peakSample in query stats response. #6188
* [ENHANCEMENT] Ruler: Add new ruler metric `cortex_ruler_rule_groups_in_store` that is the total rule groups per tenant in store, which can be used to compare with `cortex_prometheus_rule_group_rules` to count the number of rule groups that are not loaded by a ruler. #5869
* [ENHANCEMENT] Ingester/Ring: New `READONLY` status on ring to be used by Ingester. New ingester API to change mode of ingester #6163
Expand Down
9 changes: 9 additions & 0 deletions pkg/querier/tripperware/instantquery/instant_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,15 @@ func TestMergeResponse(t *testing.T) {
},
expectedResp: `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]},{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]},"warnings":["warning1","warning2","warning3"]}`,
},
{
name: "merge with infos.",
req: &tripperware.PrometheusRequest{Query: "topk(10, up) by(job)"},
resps: []string{
`{"status":"success","infos":["info1","info2"],"data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}`,
`{"status":"success","infos":["info1","info3"],"data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]}}`,
},
expectedResp: `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]},{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]},"infos":["info1","info2","info3"]}`,
},
{
name: "merge two responses with stats",
req: defaultReq,
Expand Down
5 changes: 5 additions & 0 deletions pkg/querier/tripperware/merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,15 @@ func MergeResponse(ctx context.Context, sumStats bool, req Request, responses ..
}
promResponses := make([]*PrometheusResponse, 0, len(responses))
warnings := make([][]string, 0, len(responses))
infos := make([][]string, 0, len(responses))
for _, resp := range responses {
promResponses = append(promResponses, resp.(*PrometheusResponse))
if w := resp.(*PrometheusResponse).Warnings; w != nil {
warnings = append(warnings, w)
}
if i := resp.(*PrometheusResponse).Infos; i != nil {
infos = append(infos, i)
}
}

// Check if it is a range query. Range query passed req as nil since
Expand Down Expand Up @@ -96,6 +100,7 @@ func MergeResponse(ctx context.Context, sumStats bool, req Request, responses ..
Status: StatusSuccess,
Data: data,
Warnings: strutil.MergeUnsortedSlices(warnings...),
Infos: strutil.MergeUnsortedSlices(infos...),
}
return res, nil
}
Expand Down
218 changes: 142 additions & 76 deletions pkg/querier/tripperware/query.pb.go

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pkg/querier/tripperware/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ message PrometheusResponse {
string Error = 4 [(gogoproto.jsontag) = "error,omitempty"];
repeated tripperware.PrometheusResponseHeader Headers = 5 [(gogoproto.jsontag) = "-"];
repeated string Warnings = 6 [(gogoproto.jsontag) = "warnings,omitempty"];
repeated string Infos = 7 [(gogoproto.jsontag) = "infos,omitempty"];
}

message PrometheusData {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ func TestRoundTrip(t *testing.T) {
_, err = w.Write([]byte(responseBody))
} else if r.RequestURI == queryWithWarnings {
_, err = w.Write([]byte(responseBodyWithWarnings))
} else if r.RequestURI == queryWithInfos {
_, err = w.Write([]byte(responseBodyWithInfos))
} else {
_, err = w.Write([]byte("bar"))
}
Expand Down
34 changes: 34 additions & 0 deletions pkg/querier/tripperware/queryrange/query_range_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,10 @@ func TestResponse(t *testing.T) {
t.Parallel()
r := *parsedResponse
rWithWarnings := *parsedResponseWithWarnings
rWithInfos := *parsedResponseWithInfos
r.Headers = respHeaders
rWithWarnings.Headers = respHeaders
rWithInfos.Headers = respHeaders
for i, tc := range []struct {
body string
expected *tripperware.PrometheusResponse
Expand All @@ -108,6 +110,10 @@ func TestResponse(t *testing.T) {
body: responseBodyWithWarnings,
expected: &rWithWarnings,
},
{
body: responseBodyWithInfos,
expected: &rWithInfos,
},
{
body: responseBody,
cancelCtxBeforeDecode: true,
Expand Down Expand Up @@ -484,6 +490,34 @@ func TestMergeAPIResponses(t *testing.T) {
},
},
},
{
name: "Merge response with infos.",
input: []tripperware.Response{
mustParse(t, `{"status":"success","infos":["info1","info2"],"data":{"resultType":"matrix","result":[{"metric":{"a":"b","c":"d"},"values":[[1,"1"]]}]}}`),
mustParse(t, `{"status":"success","infos":["info1","info3"],"data":{"resultType":"matrix","result":[{"metric":{"a":"b","c":"d"},"values":[[1,"1"]]}]}}`),
},
expected: &tripperware.PrometheusResponse{
Status: StatusSuccess,
Infos: []string{"info1", "info2", "info3"},
Data: tripperware.PrometheusData{
ResultType: matrix,
Result: tripperware.PrometheusQueryResult{
Result: &tripperware.PrometheusQueryResult_Matrix{
Matrix: &tripperware.Matrix{
SampleStreams: []tripperware.SampleStream{
{
Labels: []cortexpb.LabelAdapter{{Name: "a", Value: "b"}, {Name: "c", Value: "d"}},
Samples: []cortexpb.Sample{
{Value: 1, TimestampMs: 1000},
},
},
},
},
},
},
},
},
},
{
name: "Merging of samples where there is complete overlap.",
input: []tripperware.Response{
Expand Down
130 changes: 98 additions & 32 deletions pkg/querier/tripperware/queryrange/queryrange.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pkg/querier/tripperware/queryrange/queryrange.proto
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ message PrometheusResponse {
string Error = 4 [(gogoproto.jsontag) = "error,omitempty"];
repeated tripperware.PrometheusResponseHeader Headers = 5 [(gogoproto.jsontag) = "-"];
repeated string Warnings = 6 [(gogoproto.jsontag) = "warnings,omitempty"];
repeated string Infos = 7 [(gogoproto.jsontag) = "infos,omitempty"];
}

message PrometheusData {
Expand Down
5 changes: 5 additions & 0 deletions pkg/querier/tripperware/queryrange/results_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ func (PrometheusResponseExtractor) Extract(start, end int64, from tripperware.Re
},
Headers: promRes.Headers,
Warnings: promRes.Warnings,
Infos: promRes.Infos,
}
}

Expand All @@ -116,6 +117,7 @@ func (PrometheusResponseExtractor) ResponseWithoutHeaders(resp tripperware.Respo
Stats: promRes.Data.Stats,
},
Warnings: promRes.Warnings,
Infos: promRes.Infos,
}
}

Expand All @@ -130,6 +132,7 @@ func (PrometheusResponseExtractor) ResponseWithoutStats(resp tripperware.Respons
},
Headers: promRes.Headers,
Warnings: promRes.Warnings,
Infos: promRes.Infos,
}
}

Expand Down Expand Up @@ -600,6 +603,7 @@ func convertToTripperwarePrometheusResponse(resp tripperware.Response) tripperwa
Error: r.Error,
Headers: r.Headers,
Warnings: r.Warnings,
Infos: r.Infos,
}
}

Expand All @@ -621,6 +625,7 @@ func convertFromTripperwarePrometheusResponse(resp tripperware.Response) tripper
Error: r.Error,
Headers: r.Headers,
Warnings: r.Warnings,
Infos: r.Infos,
}
}

Expand Down
Loading
Loading