github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/stores/indexshipper/compactor/retention/pool.go (about) 1 package retention 2 3 import ( 4 "bytes" 5 "sync" 6 ) 7 8 var ( 9 keyPool = sync.Pool{ 10 New: func() interface{} { 11 return &keyPair{ 12 key: bytes.NewBuffer(make([]byte, 0, 8)), 13 value: bytes.NewBuffer(make([]byte, 0, 512)), 14 } 15 }, 16 } 17 ) 18 19 type keyPair struct { 20 key *bytes.Buffer 21 value *bytes.Buffer 22 } 23 24 func getKeyPairBuffer(key, value []byte) (*keyPair, error) { 25 keyBuf := keyPool.Get().(*keyPair) 26 if _, err := keyBuf.key.Write(key); err != nil { 27 putKeyBuffer(keyBuf) 28 return nil, err 29 } 30 if _, err := keyBuf.value.Write(value); err != nil { 31 putKeyBuffer(keyBuf) 32 return nil, err 33 } 34 return keyBuf, nil 35 } 36 37 func putKeyBuffer(pair *keyPair) { 38 pair.key.Reset() 39 pair.value.Reset() 40 keyPool.Put(pair) 41 }