Skip to content

Commit 35071b7

Browse files
committed
gitbase: compress keys using zlib
Signed-off-by: Miguel Molina <[email protected]>
1 parent 09bc815 commit 35071b7

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

index.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package gitbase
22

33
import (
44
"bytes"
5+
"compress/zlib"
56
"crypto/sha1"
67
"encoding/binary"
78
"fmt"
89
"io"
10+
"io/ioutil"
911

1012
errors "gopkg.in/src-d/go-errors.v1"
1113
"gopkg.in/src-d/go-mysql-server.v0/sql"
@@ -25,11 +27,36 @@ type Indexable interface {
2527
}
2628

2729
func encodeIndexKey(k indexKey) ([]byte, error) {
28-
return k.encode()
30+
bs, err := k.encode()
31+
if err != nil {
32+
return nil, err
33+
}
34+
35+
var buf bytes.Buffer
36+
gz := zlib.NewWriter(&buf)
37+
if _, err := gz.Write(bs); err != nil {
38+
return nil, err
39+
}
40+
41+
if err := gz.Close(); err != nil {
42+
return nil, err
43+
}
44+
45+
return buf.Bytes(), nil
2946
}
3047

3148
func decodeIndexKey(data []byte, k indexKey) error {
32-
return k.decode(data)
49+
gz, err := zlib.NewReader(bytes.NewReader(data))
50+
if err != nil {
51+
return err
52+
}
53+
54+
bs, err := ioutil.ReadAll(gz)
55+
if err != nil {
56+
return err
57+
}
58+
59+
return k.decode(bs)
3360
}
3461

3562
func rowIndexValues(row sql.Row, columns []string, schema sql.Schema) ([]interface{}, error) {

index_test.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package gitbase
22

33
import (
44
"bytes"
5-
"encoding/gob"
65
"io"
76
"testing"
87

@@ -121,37 +120,29 @@ func testTableIndex(
121120
require.ElementsMatch(expected, rows)
122121
}
123122

124-
func TestEncodeKeySize(t *testing.T) {
123+
func TestEncodeRoundtrip(t *testing.T) {
125124
require := require.New(t)
126125

127-
k1 := packOffsetIndexKey{
126+
k := &packOffsetIndexKey{
128127
Repository: "/foo/bar/baz/repo.git",
129128
Packfile: plumbing.ZeroHash.String(),
130129
Offset: 12345,
131130
Hash: "",
132131
}
133132

134-
k2 := packOffsetIndexKey{
135-
Repository: "/foo/bar/baz/repo.git",
136-
Packfile: plumbing.ZeroHash.String(),
137-
Offset: -1,
138-
Hash: plumbing.ZeroHash.String(),
139-
}
140-
141-
var buf1, buf2 bytes.Buffer
142-
require.NoError(gob.NewEncoder(&buf1).Encode(k1))
143-
144-
bytes1, err := k1.encode()
133+
bs, err := encodeIndexKey(k)
145134
require.NoError(err)
146135

147-
require.True(len(bytes1) < len(buf1.Bytes()))
136+
bsraw, err := k.encode()
137+
require.NoError(err)
148138

149-
require.NoError(gob.NewEncoder(&buf2).Encode(k2))
139+
// check encodeIndexKey also compresses the encoded value
140+
require.True(len(bs) < len(bsraw))
150141

151-
bytes2, err := k2.encode()
152-
require.NoError(err)
142+
var k2 packOffsetIndexKey
143+
require.NoError(decodeIndexKey(bs, &k2))
153144

154-
require.True(len(bytes2) < len(buf2.Bytes()))
145+
require.Equal(k, &k2)
155146
}
156147

157148
func TestWriteReadInt64(t *testing.T) {

0 commit comments

Comments
 (0)