Skip to content

Commit 96974eb

Browse files
committed
gitbase: use a shared zlib encoder
Signed-off-by: Miguel Molina <[email protected]>
1 parent 35071b7 commit 96974eb

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

index.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99
"io"
1010
"io/ioutil"
11+
"sync"
1112

1213
errors "gopkg.in/src-d/go-errors.v1"
1314
"gopkg.in/src-d/go-mysql-server.v0/sql"
@@ -26,25 +27,42 @@ type Indexable interface {
2627
gitBase
2728
}
2829

29-
func encodeIndexKey(k indexKey) ([]byte, error) {
30-
bs, err := k.encode()
31-
if err != nil {
32-
return nil, err
33-
}
30+
type zlibEncoder struct {
31+
w *zlib.Writer
32+
mut sync.Mutex
33+
}
34+
35+
func (e *zlibEncoder) encode(data []byte) ([]byte, error) {
36+
e.mut.Lock()
37+
defer e.mut.Unlock()
3438

3539
var buf bytes.Buffer
36-
gz := zlib.NewWriter(&buf)
37-
if _, err := gz.Write(bs); err != nil {
40+
e.w.Reset(&buf)
41+
42+
if _, err := e.w.Write(data); err != nil {
3843
return nil, err
3944
}
4045

41-
if err := gz.Close(); err != nil {
46+
if err := e.w.Close(); err != nil {
4247
return nil, err
4348
}
4449

4550
return buf.Bytes(), nil
4651
}
4752

53+
var encoder = func() *zlibEncoder {
54+
return &zlibEncoder{w: zlib.NewWriter(bytes.NewBuffer(nil))}
55+
}()
56+
57+
func encodeIndexKey(k indexKey) ([]byte, error) {
58+
bs, err := k.encode()
59+
if err != nil {
60+
return nil, err
61+
}
62+
63+
return encoder.encode(bs)
64+
}
65+
4866
func decodeIndexKey(data []byte, k indexKey) error {
4967
gz, err := zlib.NewReader(bytes.NewReader(data))
5068
if err != nil {

0 commit comments

Comments
 (0)