From 1ef02aad26ede808a869d1d4994478e72731152d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Pazos?= Date: Wed, 1 Nov 2023 21:35:52 -0300 Subject: [PATCH] optimize more allocs --- storage/remote/compression.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/storage/remote/compression.go b/storage/remote/compression.go index a7d5dbe045..d810bc1238 100644 --- a/storage/remote/compression.go +++ b/storage/remote/compression.go @@ -163,15 +163,22 @@ func (s *s2Compression) Decompress(data []byte) ([]byte, error) { type zstdCompression struct { level zstd.EncoderLevel buf []byte + r *reZstd.Decoder + w *reZstd.Encoder } func (z *zstdCompression) Compress(data []byte) ([]byte, error) { - w, err := reZstd.NewWriter(nil, reZstd.WithEncoderLevel(z.level)) - if err != nil { - return nil, err + var err error + if z.w == nil { + z.w, err = reZstd.NewWriter(nil, reZstd.WithEncoderLevel(z.level)) + if err != nil { + return nil, err + } } + z.w.Reset(nil) + z.buf = z.buf[:0] - res := w.EncodeAll(data, z.buf) + res := z.w.EncodeAll(data, z.buf) if len(res) > cap(z.buf) { z.buf = res } @@ -179,12 +186,20 @@ func (z *zstdCompression) Compress(data []byte) ([]byte, error) { } func (z *zstdCompression) Decompress(data []byte) ([]byte, error) { - decoder, err := reZstd.NewReader(nil) + var err error + if z.r == nil { + z.r, err = reZstd.NewReader(nil) + if err != nil { + return nil, err + } + } + err = z.r.Reset(nil) if err != nil { return nil, err } + z.buf = z.buf[:0] - buf, err := decoder.DecodeAll(data, z.buf) + buf, err := z.r.DecodeAll(data, z.buf) if err != nil { return nil, err }