@@ -41,11 +41,11 @@ import (
41
41
"sync"
42
42
"time"
43
43
44
- "github.com/klauspost/compress/zstd"
45
44
"github.com/prometheus/common/expfmt"
46
45
47
46
"github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil"
48
47
"github.com/prometheus/client_golang/prometheus"
48
+ "github.com/prometheus/client_golang/prometheus/promhttp/internal"
49
49
)
50
50
51
51
const (
@@ -65,7 +65,13 @@ const (
65
65
Zstd Compression = "zstd"
66
66
)
67
67
68
- var defaultCompressionFormats = []Compression {Identity , Gzip , Zstd }
68
+ func defaultCompressionFormats () []Compression {
69
+ if internal .NewZstdWriter != nil {
70
+ return []Compression {Identity , Gzip , Zstd }
71
+ } else {
72
+ return []Compression {Identity , Gzip }
73
+ }
74
+ }
69
75
70
76
var gzipPool = sync.Pool {
71
77
New : func () interface {} {
@@ -138,7 +144,7 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
138
144
// Select compression formats to offer based on default or user choice.
139
145
var compressions []string
140
146
if ! opts .DisableCompression {
141
- offers := defaultCompressionFormats
147
+ offers := defaultCompressionFormats ()
142
148
if len (opts .OfferedCompressions ) > 0 {
143
149
offers = opts .OfferedCompressions
144
150
}
@@ -466,14 +472,12 @@ func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []strin
466
472
467
473
switch selected {
468
474
case "zstd" :
469
- // TODO(mrueg): Replace klauspost/compress with stdlib implementation once https://github.com/golang/go/issues/62513 is implemented.
470
- z , err := zstd .NewWriter (rw , zstd .WithEncoderLevel (zstd .SpeedFastest ))
471
- if err != nil {
472
- return nil , "" , func () {}, err
475
+ if internal .NewZstdWriter == nil {
476
+ // The content encoding was not implemented yet.
477
+ return nil , "" , func () {}, fmt .Errorf ("content compression format not recognized: %s. Valid formats are: %s" , selected , defaultCompressionFormats ())
473
478
}
474
-
475
- z .Reset (rw )
476
- return z , selected , func () { _ = z .Close () }, nil
479
+ writer , closeWriter , err := internal .NewZstdWriter (rw )
480
+ return writer , selected , closeWriter , err
477
481
case "gzip" :
478
482
gz := gzipPool .Get ().(* gzip.Writer )
479
483
gz .Reset (rw )
@@ -483,6 +487,6 @@ func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []strin
483
487
return rw , selected , func () {}, nil
484
488
default :
485
489
// The content encoding was not implemented yet.
486
- return nil , "" , func () {}, fmt .Errorf ("content compression format not recognized: %s. Valid formats are: %s" , selected , defaultCompressionFormats )
490
+ return nil , "" , func () {}, fmt .Errorf ("content compression format not recognized: %s. Valid formats are: %s" , selected , defaultCompressionFormats () )
487
491
}
488
492
}
0 commit comments