aboutsummaryrefslogtreecommitdiff
path: root/weed/mount/weedfs_file_read.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/mount/weedfs_file_read.go')
-rw-r--r--weed/mount/weedfs_file_read.go28
1 files changed, 23 insertions, 5 deletions
diff --git a/weed/mount/weedfs_file_read.go b/weed/mount/weedfs_file_read.go
index 8375f9a5d..cedece137 100644
--- a/weed/mount/weedfs_file_read.go
+++ b/weed/mount/weedfs_file_read.go
@@ -1,7 +1,8 @@
package mount
import (
- "context"
+ "bytes"
+ "fmt"
"io"
"github.com/hanwen/go-fuse/v2/fuse"
@@ -40,8 +41,8 @@ func (wfs *WFS) Read(cancel <-chan struct{}, in *fuse.ReadIn, buff []byte) (fuse
return nil, fuse.ENOENT
}
- fh.orderedMutex.Acquire(context.Background(), 1)
- defer fh.orderedMutex.Release(1)
+ fh.Lock()
+ defer fh.Unlock()
offset := int64(in.Offset)
totalRead, err := readDataByFileHandle(buff, fh, offset)
@@ -50,6 +51,23 @@ func (wfs *WFS) Read(cancel <-chan struct{}, in *fuse.ReadIn, buff []byte) (fuse
return nil, fuse.EIO
}
+ if IsDebugFileReadWrite {
+ // print(".")
+ mirrorData := make([]byte, totalRead)
+ fh.mirrorFile.ReadAt(mirrorData, offset)
+ if bytes.Compare(mirrorData, buff[:totalRead]) != 0 {
+
+ againBuff := make([]byte, len(buff))
+ againRead, _ := readDataByFileHandle(buff, fh, offset)
+ againCorrect := bytes.Compare(mirrorData, againBuff[:againRead]) == 0
+ againSame := bytes.Compare(buff[:totalRead], againBuff[:againRead]) == 0
+
+ fmt.Printf("\ncompare %v [%d,%d) size:%d againSame:%v againCorrect:%v\n", fh.mirrorFile.Name(), offset, offset+totalRead, totalRead, againSame, againCorrect)
+ //fmt.Printf("read mirrow data: %v\n", mirrorData)
+ //fmt.Printf("read actual data: %v\n", buff[:totalRead])
+ }
+ }
+
return fuse.ReadResultData(buff[:totalRead]), fuse.OK
}
@@ -59,9 +77,9 @@ func readDataByFileHandle(buff []byte, fhIn *FileHandle, offset int64) (int64, e
fhIn.lockForRead(offset, size)
defer fhIn.unlockForRead(offset, size)
- n, err := fhIn.readFromChunks(buff, offset)
+ n, tsNs, err := fhIn.readFromChunks(buff, offset)
if err == nil || err == io.EOF {
- maxStop := fhIn.readFromDirtyPages(buff, offset)
+ maxStop := fhIn.readFromDirtyPages(buff, offset, tsNs)
n = max(maxStop-offset, n)
}
if err == io.EOF {