From 120464c0a596ba1ea2df613399015e78181c5aac Mon Sep 17 00:00:00 2001 From: ston1th Date: Sun, 31 Jul 2022 12:39:14 +0200 Subject: [PATCH] added experimental async cache write --- pkg/fs/file.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/fs/file.go b/pkg/fs/file.go index 7cc99df..8b2c08c 100644 --- a/pkg/fs/file.go +++ b/pkg/fs/file.go @@ -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 { - log.Error(err, "error writing cache file") - return - } + // 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)