Skip to content

Commit ecafc44

Browse files
committed
refactor query decompression
Signed-off-by: Ahmed Hassan <[email protected]>
1 parent 4f76eea commit ecafc44

File tree

1 file changed

+17
-36
lines changed

1 file changed

+17
-36
lines changed

pkg/querier/tripperware/query.go

Lines changed: 17 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -454,35 +454,9 @@ func BodyBytes(res *http.Response, logger log.Logger) ([]byte, error) {
454454
}
455455
}
456456

457-
// if the response is gzipped, lets unzip it here
458-
if strings.EqualFold(res.Header.Get("Content-Encoding"), "gzip") {
459-
gReader, err := gzip.NewReader(buf)
460-
if err != nil {
461-
return nil, err
462-
}
463-
defer runutil.CloseWithLogOnErr(logger, gReader, "close gzip reader")
464-
465-
return io.ReadAll(gReader)
466-
}
467-
468-
// if the response is snappy compressed, decode it here
469-
if strings.EqualFold(res.Header.Get("Content-Encoding"), "snappy") {
470-
sReader := snappy.NewReader(buf)
471-
return io.ReadAll(sReader)
472-
}
473-
474-
// if the response is zstd compressed, decode it here
475-
if strings.EqualFold(res.Header.Get("Content-Encoding"), "zstd") {
476-
zReader, err := zstd.NewReader(buf)
477-
if err != nil {
478-
return nil, err
479-
}
480-
defer runutil.CloseWithLogOnErr(logger, io.NopCloser(zReader), "close zstd decoder")
481-
482-
return io.ReadAll(zReader)
483-
}
484-
485-
return buf.Bytes(), nil
457+
// Handle decoding response if it was compressed
458+
encoding := res.Header.Get("Content-Encoding")
459+
return decode(buf, encoding, logger)
486460
}
487461

488462
func BodyBytesFromHTTPGRPCResponse(res *httpgrpc.HTTPResponse, logger log.Logger) ([]byte, error) {
@@ -491,9 +465,16 @@ func BodyBytesFromHTTPGRPCResponse(res *httpgrpc.HTTPResponse, logger log.Logger
491465
headers[h.Key] = h.Values
492466
}
493467

468+
// Handle decoding response if it was compressed
469+
encoding := headers.Get("Content-Encoding")
470+
buf := bytes.NewBuffer(res.Body)
471+
return decode(buf, encoding, logger)
472+
}
473+
474+
func decode(buf *bytes.Buffer, encoding string, logger log.Logger) ([]byte, error) {
494475
// if the response is gzipped, lets unzip it here
495-
if strings.EqualFold(headers.Get("Content-Encoding"), "gzip") {
496-
gReader, err := gzip.NewReader(bytes.NewBuffer(res.Body))
476+
if strings.EqualFold(encoding, "gzip") {
477+
gReader, err := gzip.NewReader(buf)
497478
if err != nil {
498479
return nil, err
499480
}
@@ -503,14 +484,14 @@ func BodyBytesFromHTTPGRPCResponse(res *httpgrpc.HTTPResponse, logger log.Logger
503484
}
504485

505486
// if the response is snappy compressed, decode it here
506-
if strings.EqualFold(headers.Get("Content-Encoding"), "snappy") {
507-
sReader := snappy.NewReader(bytes.NewBuffer(res.Body))
487+
if strings.EqualFold(encoding, "snappy") {
488+
sReader := snappy.NewReader(buf)
508489
return io.ReadAll(sReader)
509490
}
510491

511492
// if the response is zstd compressed, decode it here
512-
if strings.EqualFold(headers.Get("Content-Encoding"), "zstd") {
513-
zReader, err := zstd.NewReader(bytes.NewBuffer(res.Body))
493+
if strings.EqualFold(encoding, "zstd") {
494+
zReader, err := zstd.NewReader(buf)
514495
if err != nil {
515496
return nil, err
516497
}
@@ -519,7 +500,7 @@ func BodyBytesFromHTTPGRPCResponse(res *httpgrpc.HTTPResponse, logger log.Logger
519500
return io.ReadAll(zReader)
520501
}
521502

522-
return res.Body, nil
503+
return buf.Bytes(), nil
523504
}
524505

525506
// UnmarshalJSON implements json.Unmarshaler.

0 commit comments

Comments
 (0)