From dfc9d174d21b1236907fc521c50edd53354b2e9f Mon Sep 17 00:00:00 2001 From: Kaviraj Date: Tue, 17 May 2022 13:28:31 +0200 Subject: [PATCH] fix(querier): Record `result` length after response validation. Without this fix, it causes panic, if series or label endpoint returns error. Signed-off-by: Kaviraj --- pkg/querier/http.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/querier/http.go b/pkg/querier/http.go index 986cb1ea2bde..dfe4bbb7f33b 100644 --- a/pkg/querier/http.go +++ b/pkg/querier/http.go @@ -213,8 +213,12 @@ func (q *QuerierAPI) LabelHandler(w http.ResponseWriter, r *http.Request) { resp, err := q.querier.Label(r.Context(), req) queueTime, _ := ctx.Value(httpreq.QueryQueueTimeHTTPHeader).(time.Duration) + resLength := 0 + if resp != nil { + resLength = len(resp.Values) + } // record stats about the label query - statResult := statsCtx.Result(time.Since(start), queueTime, len(resp.Values)) + statResult := statsCtx.Result(time.Since(start), queueTime, resLength) statResult.Log(level.Debug(log)) status := 200 @@ -381,8 +385,13 @@ func (q *QuerierAPI) SeriesHandler(w http.ResponseWriter, r *http.Request) { resp, err := q.querier.Series(r.Context(), req) queueTime, _ := ctx.Value(httpreq.QueryQueueTimeHTTPHeader).(time.Duration) + resLength := 0 + if resp != nil { + resLength = len(resp.Series) + } + // record stats about the label query - statResult := statsCtx.Result(time.Since(start), queueTime, len(resp.Series)) + statResult := statsCtx.Result(time.Since(start), queueTime, resLength) statResult.Log(level.Debug(log)) status := 200