added experimental async cache write

This commit is contained in:
ston1th 2022-07-31 12:39:14 +02:00
commit 120464c0a5

View file

@ -127,16 +127,21 @@ func (f *File) readToCache(p []byte) (n int, err error) {
log := f.log
n, err = f.readSource(p)
if n > 0 {
if n, err = f.md.WriteAt(p[:n], f.offset); err != nil {
// async cache write
buf := make([]byte, n)
copy(buf, p[:n])
go func(p []byte, offset int64, n int) {
if n, err = f.md.WriteAt(p, offset); err != nil {
log.Error(err, "error writing cache file")
return
}
f.md.AddChunk(offset, n)
}(buf, f.offset, n)
}
if err != nil && err != io.EOF {
log.Error(err, "error reading source file")
return
}
f.md.AddChunk(f.offset, n)
f.offset += int64(n)
if n > 0 && n < len(p) {
_, err = f.Seek(f.offset, io.SeekStart)