From e643437ee6f355c565bf4f1ddf337c9da168cf29 Mon Sep 17 00:00:00 2001 From: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com> Date: Tue, 28 Feb 2023 20:08:01 +0200 Subject: [PATCH] Prometheus: Fix panic-ing when closing response body (#63895) Prometheus: Fix panicing when closing response body --- pkg/tsdb/prometheus/querydata/request.go | 34 +++++++++++++----------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/pkg/tsdb/prometheus/querydata/request.go b/pkg/tsdb/prometheus/querydata/request.go index f9a3af593bd..f95994f4f61 100644 --- a/pkg/tsdb/prometheus/querydata/request.go +++ b/pkg/tsdb/prometheus/querydata/request.go @@ -153,6 +153,12 @@ func (s *QueryData) fetch(ctx context.Context, client *client.Client, q *models. func (s *QueryData) rangeQuery(ctx context.Context, c *client.Client, q *models.Query, headers map[string]string) backend.DataResponse { res, err := c.QueryRange(ctx, q) + if err != nil { + return backend.DataResponse{ + Error: err, + } + } + defer func() { err := res.Body.Close() if err != nil { @@ -160,16 +166,17 @@ func (s *QueryData) rangeQuery(ctx context.Context, c *client.Client, q *models. } }() - if err != nil { - return backend.DataResponse{ - Error: err, - } - } return s.parseResponse(ctx, q, res) } func (s *QueryData) instantQuery(ctx context.Context, c *client.Client, q *models.Query, headers map[string]string) backend.DataResponse { res, err := c.QueryInstant(ctx, q) + if err != nil { + return backend.DataResponse{ + Error: err, + } + } + defer func() { err := res.Body.Close() if err != nil { @@ -177,28 +184,23 @@ func (s *QueryData) instantQuery(ctx context.Context, c *client.Client, q *model } }() - if err != nil { - return backend.DataResponse{ - Error: err, - } - } return s.parseResponse(ctx, q, res) } func (s *QueryData) exemplarQuery(ctx context.Context, c *client.Client, q *models.Query, headers map[string]string) backend.DataResponse { res, err := c.QueryExemplars(ctx, q) + if err != nil { + return backend.DataResponse{ + Error: err, + } + } + defer func() { err := res.Body.Close() if err != nil { s.log.Warn("failed to close response body", "error", err) } }() - - if err != nil { - return backend.DataResponse{ - Error: err, - } - } return s.parseResponse(ctx, q, res) }