Skip to content

Commit c1240f0

Browse files
authored
Merge pull request #1014 from segmentio/snappy-configurable-level
compress/snappy: configurable compression level
2 parents 7501938 + cd7d6f4 commit c1240f0

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

compress/snappy/snappy.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"io"
55
"sync"
66

7+
"github.com/klauspost/compress/s2"
78
"github.com/klauspost/compress/snappy"
89
)
910

@@ -16,6 +17,16 @@ const (
1617
Unframed
1718
)
1819

20+
// Compression level.
21+
type Compression int
22+
23+
const (
24+
DefaultCompression Compression = iota
25+
FasterCompression
26+
BetterCompression
27+
BestCompression
28+
)
29+
1930
var (
2031
readerPool sync.Pool
2132
writerPool sync.Pool
@@ -28,6 +39,9 @@ type Codec struct {
2839
//
2940
// Default to Framed.
3041
Framing Framing
42+
43+
// Compression level.
44+
Compression Compression
3145
}
3246

3347
// Code implements the compress.Codec interface.
@@ -56,12 +70,19 @@ func (c *Codec) NewWriter(w io.Writer) io.WriteCloser {
5670
if x != nil {
5771
x.Reset(w)
5872
} else {
59-
x = &xerialWriter{
60-
writer: w,
61-
encode: snappy.Encode,
62-
}
73+
x = &xerialWriter{writer: w}
6374
}
6475
x.framed = c.Framing == Framed
76+
switch c.Compression {
77+
case FasterCompression:
78+
x.encode = s2.EncodeSnappy
79+
case BetterCompression:
80+
x.encode = s2.EncodeSnappyBetter
81+
case BestCompression:
82+
x.encode = s2.EncodeSnappyBest
83+
default:
84+
x.encode = snappy.Encode // aka. s2.EncodeSnappyBetter
85+
}
6586
return &writer{xerialWriter: x}
6687
}
6788

0 commit comments

Comments
 (0)