Skip to content

Commit a51e622

Browse files
authored
Close gzip readers after use (#9770)
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
1 parent f5a03c1 commit a51e622

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

pkg/continuoustest/client_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ func TestOTLPHttpClient_WriteSeries(t *testing.T) {
3737
// Handle compression
3838
reader, err := gzip.NewReader(request.Body)
3939
require.NoError(t, err)
40+
t.Cleanup(func() {
41+
require.NoError(t, reader.Close())
42+
})
4043

4144
// Then Unmarshal
4245
body, err := io.ReadAll(reader)

pkg/distributor/otel.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/grafana/dskit/httpgrpc"
1919
"github.com/grafana/dskit/httpgrpc/server"
2020
"github.com/grafana/dskit/middleware"
21+
"github.com/grafana/dskit/runutil"
2122
"github.com/grafana/dskit/tenant"
2223
"github.com/pierrec/lz4/v4"
2324
"github.com/pkg/errors"
@@ -84,10 +85,10 @@ func OTLPHandler(
8485
return httpgrpc.Errorf(http.StatusUnsupportedMediaType, "unsupported compression: %s. Only \"gzip\", \"lz4\", or no compression supported", contentEncoding)
8586
}
8687

87-
var decoderFunc func(io.ReadCloser) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error)
88+
var decoderFunc func(io.Reader) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error)
8889
switch contentType {
8990
case pbContentType:
90-
decoderFunc = func(reader io.ReadCloser) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error) {
91+
decoderFunc = func(reader io.Reader) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error) {
9192
exportReq := pmetricotlp.NewExportRequest()
9293
unmarshaler := otlpProtoUnmarshaler{
9394
request: &exportReq,
@@ -104,7 +105,7 @@ func OTLPHandler(
104105
}
105106

106107
case jsonContentType:
107-
decoderFunc = func(reader io.ReadCloser) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error) {
108+
decoderFunc = func(reader io.Reader) (req pmetricotlp.ExportRequest, uncompressedBodySize int, err error) {
108109
exportReq := pmetricotlp.NewExportRequest()
109110
sz := int(r.ContentLength)
110111
if sz > 0 {
@@ -114,16 +115,17 @@ func OTLPHandler(
114115
buf := buffers.Get(sz)
115116
switch compression {
116117
case util.Gzip:
117-
var err error
118-
reader, err = gzip.NewReader(reader)
118+
gzReader, err := gzip.NewReader(reader)
119119
if err != nil {
120120
return exportReq, 0, errors.Wrap(err, "create gzip reader")
121121
}
122+
defer runutil.CloseWithLogOnErr(logger, gzReader, "close gzip reader")
123+
reader = gzReader
122124
case util.Lz4:
123125
reader = io.NopCloser(lz4.NewReader(reader))
124126
}
125127

126-
reader = http.MaxBytesReader(nil, reader, int64(maxRecvMsgSize))
128+
reader = http.MaxBytesReader(nil, io.NopCloser(reader), int64(maxRecvMsgSize))
127129
if _, err := buf.ReadFrom(reader); err != nil {
128130
if util.IsRequestBodyTooLarge(err) {
129131
return exportReq, 0, httpgrpc.Error(http.StatusRequestEntityTooLarge, distributorMaxOTLPRequestSizeErr{

pkg/storegateway/indexheader/stream_binary_reader.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,9 @@ func (r *StreamBinaryReader) loadFromSparseIndexHeader(logger *spanlogger.SpanLo
197197
gzipped := bytes.NewReader(sparseData)
198198
gzipReader, err := gzip.NewReader(gzipped)
199199
if err != nil {
200-
return fmt.Errorf("failed to create sparse index-header reader: %w", err)
200+
return fmt.Errorf("failed to create sparse index-header gzip reader: %w", err)
201201
}
202+
defer runutil.CloseWithLogOnErr(logger, gzipReader, "close sparse index-header gzip reader")
202203

203204
sparseData, err = io.ReadAll(gzipReader)
204205
if err != nil {

pkg/util/http.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,15 @@ func decompressRequest(buffers *RequestBuffers, reader io.Reader, expectedSize,
220220
return decompressSnappyFromBuffer(buffers, buf, maxSize, sp)
221221
}
222222
case Gzip:
223-
var err error
224-
reader, err = gzip.NewReader(reader)
223+
gzReader, err := gzip.NewReader(reader)
225224
if err != nil {
226225
return nil, errors.Wrap(err, "create gzip reader")
227226
}
227+
228+
defer func() {
229+
_ = gzReader.Close()
230+
}()
231+
reader = gzReader
228232
case Lz4:
229233
reader = lz4.NewReader(reader)
230234
default:

0 commit comments

Comments
 (0)