added preload and streaming buffer pool

This commit is contained in:
ston1th 2022-08-19 19:01:28 +02:00
commit b010b3a93e
5 changed files with 70 additions and 20 deletions

View file

@ -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 {