fix FUSE read for large files

FUSE expects ReadAt do not return partial filled buffer with a nil error.
This commit is contained in:
Chris Lu
2020-03-27 04:50:51 -07:00
parent f06ca04451
commit d1439c5bd3
5 changed files with 135 additions and 45 deletions

View File

@@ -90,7 +90,7 @@ type WebDavFile struct {
off int64
entry *filer_pb.Entry
entryViewCache []filer2.VisibleInterval
reader io.ReadSeeker
reader io.ReaderAt
}
func NewWebDavFileSystem(option *WebDavOption) (webdav.FileSystem, error) {
@@ -475,12 +475,11 @@ func (f *WebDavFile) Read(p []byte) (readSize int, err error) {
f.reader = nil
}
if f.reader == nil {
chunkViews := filer2.ViewFromVisibleIntervals(f.entryViewCache, 0, math.MaxInt64)
f.reader = filer2.NewChunkStreamReaderFromClient(f.fs, chunkViews)
chunkViews := filer2.ViewFromVisibleIntervals(f.entryViewCache, 0, math.MaxInt32)
f.reader = filer2.NewChunkReaderAtFromClient(f.fs, chunkViews)
}
f.reader.Seek(f.off, io.SeekStart)
readSize, err = f.reader.Read(p)
readSize, err = f.reader.ReadAt(p, f.off)
glog.V(3).Infof("WebDavFileSystem.Read %v: [%d,%d)", f.name, f.off, f.off+int64(readSize))
f.off += int64(readSize)