added preload and streaming buffer pool
This commit is contained in:
parent
cd0b0254c7
commit
b010b3a93e
5 changed files with 70 additions and 20 deletions
|
|
@ -414,6 +414,7 @@ func (md *Metadata) addChunk(off int64, n int) {
|
|||
type writeAt struct {
|
||||
pos int64
|
||||
data []byte
|
||||
ret *[]byte
|
||||
}
|
||||
|
||||
func (md *Metadata) writer() {
|
||||
|
|
@ -428,6 +429,9 @@ func (md *Metadata) writer() {
|
|||
} else {
|
||||
md.err = err
|
||||
}
|
||||
if wa.ret != nil {
|
||||
streamingPool.Put(wa.ret)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
|
@ -442,8 +446,20 @@ func (md *Metadata) WriteAt(data []byte, pos int64) (int, error) {
|
|||
return 0, err
|
||||
}
|
||||
}
|
||||
md.wc <- writeAt{pos, data}
|
||||
return len(data), nil
|
||||
wa := writeAt{pos: pos}
|
||||
ret := streamingPool.Get()
|
||||
n := len(data)
|
||||
buf := *ret
|
||||
if n > len(buf) {
|
||||
streamingPool.Put(ret)
|
||||
buf = make([]byte, n)
|
||||
} else {
|
||||
wa.ret = ret
|
||||
}
|
||||
copy(buf, data)
|
||||
wa.data = buf[:n]
|
||||
md.wc <- wa
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (md *Metadata) openCacheFile() error {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue