diff options
| author | chrislu <chris.lu@gmail.com> | 2022-01-17 22:24:44 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-01-17 22:24:44 -0800 |
| commit | f4ad63528a35b8602060eb4d741532c840e4b2c2 (patch) | |
| tree | af700ea5678ee393d69c484902aabd90df631a9d /weed/filesys/filehandle.go | |
| parent | 0a3f95ca01a3667116b0a7420325bb523886ff75 (diff) | |
| download | seaweedfs-f4ad63528a35b8602060eb4d741532c840e4b2c2.tar.xz seaweedfs-f4ad63528a35b8602060eb4d741532c840e4b2c2.zip | |
wait for reading threads to complete before dropping sealed chunks
Diffstat (limited to 'weed/filesys/filehandle.go')
| -rw-r--r-- | weed/filesys/filehandle.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 8606ac0d2..d3b37a5b9 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -75,6 +75,8 @@ func (fh *FileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fus buff = make([]byte, req.Size) } + fh.lockForRead(req.Offset, len(buff)) + defer fh.unlockForRead(req.Offset, len(buff)) totalRead, err := fh.readFromChunks(buff, req.Offset) if err == nil || err == io.EOF { maxStop := fh.readFromDirtyPages(buff, req.Offset) @@ -101,6 +103,13 @@ func (fh *FileHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fus return err } +func (fh *FileHandle) lockForRead(startOffset int64, size int) { + fh.dirtyPages.LockForRead(startOffset, startOffset+int64(size)) +} +func (fh *FileHandle) unlockForRead(startOffset int64, size int) { + fh.dirtyPages.UnlockForRead(startOffset, startOffset+int64(size)) +} + func (fh *FileHandle) readFromDirtyPages(buff []byte, startOffset int64) (maxStop int64) { maxStop = fh.dirtyPages.ReadDirtyDataAt(buff, startOffset) return |
