Skip to content

Commit 140db7a

Browse files
mruegbwplotka
andcommitted
Apply suggestions from code review
Co-authored-by: Bartlomiej Plotka <[email protected]> Signed-off-by: Manuel Rüger <[email protected]>
1 parent 9fea575 commit 140db7a

File tree

2 files changed

+16
-37
lines changed

2 files changed

+16
-37
lines changed

prometheus/promhttp/http.go

+14-29
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
190190
}
191191
rsp.Header().Set(contentTypeHeader, string(contentType))
192192

193-
w, encodingHeader, closeWriter, err := NegotiateEncodingWriter(req, rsp, opts.DisableCompression, compressions)
193+
w, encodingHeader, closeWriter, err := negotiateEncodingWriter(req, rsp, compressions)
194194
if err != nil {
195195
if opts.ErrorLog != nil {
196196
opts.ErrorLog.Println("error getting writer", err)
@@ -199,16 +199,7 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
199199
encodingHeader = string(Identity)
200200
}
201201

202-
if closeWriter != nil {
203-
defer func() {
204-
err := closeWriter()
205-
if err != nil {
206-
if opts.ErrorLog != nil {
207-
opts.ErrorLog.Println("error closing writer:", err)
208-
}
209-
}
210-
}()
211-
}
202+
defer closeWriter()
212203

213204
rsp.Header().Set(contentEncodingHeader, encodingHeader)
214205

@@ -440,41 +431,35 @@ func httpError(rsp http.ResponseWriter, err error) {
440431
// selects the right compression based on an allow-list of supported
441432
// compressions. It returns a writer implementing the compression and an the
442433
// correct value that the caller can set in the response header.
443-
func NegotiateEncodingWriter(r *http.Request, rw io.Writer, disableCompression bool, compressions []string) (_ io.Writer, encodingHeaderValue string, closeWriter func() error, _ error) {
444-
w := rw
445-
446-
if disableCompression {
447-
return w, string(Identity), nil, nil
434+
func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []string) (_ io.Writer, encodingHeaderValue string, closeWriter func(), _ error) {
435+
if len(compressions) == 0 {
436+
return rw, string(Identity), func() {}, nil
448437
}
449438

450439
// TODO(mrueg): Replace internal/github.com/gddo once https://github.com/golang/go/issues/19307 is implemented.
451-
compression := httputil.NegotiateContentEncoding(r, compressions)
440+
selected := httputil.NegotiateContentEncoding(r, compressions)
452441

453-
switch compression {
442+
switch selected {
454443
case "zstd":
455444
// TODO(mrueg): Replace klauspost/compress with stdlib implementation once https://github.com/golang/go/issues/62513 is implemented.
456445
z, err := zstd.NewWriter(rw, zstd.WithEncoderLevel(zstd.SpeedFastest))
457446
if err != nil {
458-
return nil, "", nil, err
447+
return nil, "", func() {}, err
459448
}
460449

461-
z.Reset(w)
462-
w = z
463-
464-
return w, compression, z.Close, nil
450+
z.Reset(rw)
451+
return z, selected, func() { _ = z.Close() }, nil
465452
case "gzip":
466453
gz := gzipPool.Get().(*gzip.Writer)
467454
defer gzipPool.Put(gz)
468455

469-
gz.Reset(w)
470-
471-
w = gz
472-
return w, compression, gz.Close, nil
456+
gz.Reset(rw)
457+
return gz, selected, func() { _ = gz.Close(); gzipPool.Put(gz) }, nil
473458
case "identity":
474459
// This means the content is not compressed.
475-
return w, compression, nil, nil
460+
return rw, selected, func() {}, nil
476461
default:
477462
// The content encoding was not implemented yet.
478-
return nil, "", nil, fmt.Errorf("content compression format not recognized: %s. Valid formats are: %s", compression, defaultCompressionFormats)
463+
return nil, "", func() {}, fmt.Errorf("content compression format not recognized: %s. Valid formats are: %s", selected, defaultCompressionFormats)
479464
}
480465
}

prometheus/promhttp/http_test.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -490,47 +490,41 @@ func TestNegotiateEncodingWriter(t *testing.T) {
490490

491491
testCases := []struct {
492492
name string
493-
disableCompression bool
494493
offeredCompressions []string
495494
acceptEncoding string
496495
expectedCompression string
497496
err error
498497
}{
499498
{
500499
name: "test without compression enabled",
501-
disableCompression: true,
502-
offeredCompressions: defaultCompressions,
500+
offeredCompressions: []string{},
503501
acceptEncoding: "",
504502
expectedCompression: "identity",
505503
err: nil,
506504
},
507505
{
508506
name: "test with compression enabled with empty accept-encoding header",
509-
disableCompression: false,
510507
offeredCompressions: defaultCompressions,
511508
acceptEncoding: "",
512509
expectedCompression: "identity",
513510
err: nil,
514511
},
515512
{
516513
name: "test with gzip compression requested",
517-
disableCompression: false,
518514
offeredCompressions: defaultCompressions,
519515
acceptEncoding: "gzip",
520516
expectedCompression: "gzip",
521517
err: nil,
522518
},
523519
{
524520
name: "test with gzip, zstd compression requested",
525-
disableCompression: false,
526521
offeredCompressions: defaultCompressions,
527522
acceptEncoding: "gzip,zstd",
528523
expectedCompression: "gzip",
529524
err: nil,
530525
},
531526
{
532527
name: "test with zstd, gzip compression requested",
533-
disableCompression: false,
534528
offeredCompressions: defaultCompressions,
535529
acceptEncoding: "zstd,gzip",
536530
expectedCompression: "gzip",
@@ -542,7 +536,7 @@ func TestNegotiateEncodingWriter(t *testing.T) {
542536
request, _ := http.NewRequest("GET", "/", nil)
543537
request.Header.Add(acceptEncodingHeader, test.acceptEncoding)
544538
rr := httptest.NewRecorder()
545-
_, encodingHeader, _, err := NegotiateEncodingWriter(request, rr, test.disableCompression, test.offeredCompressions)
539+
_, encodingHeader, _, err := negotiateEncodingWriter(request, rr, test.offeredCompressions)
546540

547541
if !errors.Is(err, test.err) {
548542
t.Errorf("got error: %v, expected: %v", err, test.err)

0 commit comments

Comments
 (0)