mirror of
https://github.com/octoleo/syncthing.git
synced 2025-02-02 03:48:26 +00:00
Small goleveldb hack to reduce allocations somewhat
This commit is contained in:
parent
92eed3b33b
commit
b004155e8f
2
Godeps/Godeps.json
generated
2
Godeps/Godeps.json
generated
@ -49,7 +49,7 @@
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/syndtr/goleveldb/leveldb",
|
||||
"Rev": "fcb3916f495c513b7eab70340f030e942e67b7da"
|
||||
"Rev": "c9d6b7be1428942d4cf4f54055b991a8513392eb"
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/vitrun/qart/coding",
|
||||
|
16
Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/table/reader.go
generated
vendored
16
Godeps/_workspace/src/github.com/syndtr/goleveldb/leveldb/table/reader.go
generated
vendored
@ -13,6 +13,7 @@ import (
|
||||
"io"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"code.google.com/p/snappy-go/snappy"
|
||||
|
||||
@ -528,6 +529,8 @@ type Reader struct {
|
||||
dataEnd int64
|
||||
indexBlock *block
|
||||
filterBlock *filterBlock
|
||||
|
||||
blockPool sync.Pool
|
||||
}
|
||||
|
||||
func verifyChecksum(data []byte) bool {
|
||||
@ -538,7 +541,13 @@ func verifyChecksum(data []byte) bool {
|
||||
}
|
||||
|
||||
func (r *Reader) readRawBlock(bh blockHandle, checksum bool) ([]byte, error) {
|
||||
data := make([]byte, bh.length+blockTrailerLen)
|
||||
data, _ := r.blockPool.Get().([]byte) // data is either nil or a valid []byte from the pool
|
||||
if l := bh.length + blockTrailerLen; uint64(len(data)) >= l {
|
||||
data = data[:l]
|
||||
} else {
|
||||
r.blockPool.Put(data)
|
||||
data = make([]byte, l)
|
||||
}
|
||||
if _, err := r.reader.ReadAt(data, int64(bh.offset)); err != nil && err != io.EOF {
|
||||
return nil, err
|
||||
}
|
||||
@ -552,10 +561,13 @@ func (r *Reader) readRawBlock(bh blockHandle, checksum bool) ([]byte, error) {
|
||||
data = data[:bh.length]
|
||||
case blockTypeSnappyCompression:
|
||||
var err error
|
||||
data, err = snappy.Decode(nil, data[:bh.length])
|
||||
decData, _ := r.blockPool.Get().([]byte)
|
||||
decData, err = snappy.Decode(decData, data[:bh.length])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r.blockPool.Put(data[:cap(data)])
|
||||
data = decData
|
||||
default:
|
||||
return nil, fmt.Errorf("leveldb/table: Reader: unknown block compression type: %d", data[bh.length])
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user