[VOL-5486] Upgrade library versions
Change-Id: I8b4e88699e03f44ee13e467867f45ae3f0a63c4b
Signed-off-by: Abhay Kumar <abhay.kumar@radisys.com>
diff --git a/vendor/github.com/IBM/sarama/zstd.go b/vendor/github.com/IBM/sarama/zstd.go
new file mode 100644
index 0000000..6073ce7
--- /dev/null
+++ b/vendor/github.com/IBM/sarama/zstd.go
@@ -0,0 +1,74 @@
+package sarama
+
+import (
+ "sync"
+
+ "github.com/klauspost/compress/zstd"
+)
+
+// zstdMaxBufferedEncoders maximum number of not-in-use zstd encoders
+// If the pool of encoders is exhausted then new encoders will be created on the fly
+const zstdMaxBufferedEncoders = 1
+
+type ZstdEncoderParams struct {
+ Level int
+}
+type ZstdDecoderParams struct {
+}
+
+var zstdDecMap sync.Map
+
+var zstdAvailableEncoders sync.Map
+
+func getZstdEncoderChannel(params ZstdEncoderParams) chan *zstd.Encoder {
+ if c, ok := zstdAvailableEncoders.Load(params); ok {
+ return c.(chan *zstd.Encoder)
+ }
+ c, _ := zstdAvailableEncoders.LoadOrStore(params, make(chan *zstd.Encoder, zstdMaxBufferedEncoders))
+ return c.(chan *zstd.Encoder)
+}
+
+func getZstdEncoder(params ZstdEncoderParams) *zstd.Encoder {
+ select {
+ case enc := <-getZstdEncoderChannel(params):
+ return enc
+ default:
+ encoderLevel := zstd.SpeedDefault
+ if params.Level != CompressionLevelDefault {
+ encoderLevel = zstd.EncoderLevelFromZstd(params.Level)
+ }
+ zstdEnc, _ := zstd.NewWriter(nil, zstd.WithZeroFrames(true),
+ zstd.WithEncoderLevel(encoderLevel),
+ zstd.WithEncoderConcurrency(1))
+ return zstdEnc
+ }
+}
+
+func releaseEncoder(params ZstdEncoderParams, enc *zstd.Encoder) {
+ select {
+ case getZstdEncoderChannel(params) <- enc:
+ default:
+ }
+}
+
+func getDecoder(params ZstdDecoderParams) *zstd.Decoder {
+ if ret, ok := zstdDecMap.Load(params); ok {
+ return ret.(*zstd.Decoder)
+ }
+ // It's possible to race and create multiple new readers.
+ // Only one will survive GC after use.
+ zstdDec, _ := zstd.NewReader(nil, zstd.WithDecoderConcurrency(0))
+ zstdDecMap.Store(params, zstdDec)
+ return zstdDec
+}
+
+func zstdDecompress(params ZstdDecoderParams, dst, src []byte) ([]byte, error) {
+ return getDecoder(params).DecodeAll(src, dst)
+}
+
+func zstdCompress(params ZstdEncoderParams, dst, src []byte) ([]byte, error) {
+ enc := getZstdEncoder(params)
+ out := enc.EncodeAll(src, dst)
+ releaseEncoder(params, enc)
+ return out, nil
+}