diff --git a/weed/mount/filehandle.go b/weed/mount/filehandle.go index f0cf2a380..0dfcbd7f6 100644 --- a/weed/mount/filehandle.go +++ b/weed/mount/filehandle.go @@ -98,16 +98,15 @@ func (fh *FileHandle) AddChunks(chunks []*filer_pb.FileChunk) { fh.entryViewCache = nil } -func (fh *FileHandle) SetReader(reader *filer.ChunkReadAt) { +func (fh *FileHandle) CloseReader() { if fh.reader != nil { fh.reader.Close() } - fh.reader = reader } func (fh *FileHandle) Release() { fh.dirtyPages.Destroy() - fh.SetReader(nil) + fh.CloseReader() } func lessThan(a, b *filer_pb.FileChunk) bool { diff --git a/weed/mount/filehandle_read.go b/weed/mount/filehandle_read.go index 202730e88..45fc10a0b 100644 --- a/weed/mount/filehandle_read.go +++ b/weed/mount/filehandle_read.go @@ -62,21 +62,19 @@ func (fh *FileHandle) readFromChunks(buff []byte, offset int64) (int64, error) { if chunkResolveErr != nil { return 0, fmt.Errorf("fail to resolve chunk manifest: %v", chunkResolveErr) } - fh.SetReader(nil) + fh.CloseReader() } - reader := fh.reader - if reader == nil { + if fh.reader == nil { chunkViews := filer.ViewFromVisibleIntervals(fh.entryViewCache, 0, fileSize) glog.V(4).Infof("file handle read %s [%d,%d) from %d views", fileFullPath, offset, offset+int64(len(buff)), len(chunkViews)) for _, chunkView := range chunkViews { glog.V(4).Infof(" read %s [%d,%d) from chunk %+v", fileFullPath, chunkView.LogicOffset, chunkView.LogicOffset+int64(chunkView.Size), chunkView.FileId) } - reader = filer.NewChunkReaderAtFromClient(fh.wfs.LookupFn(), chunkViews, fh.wfs.chunkCache, fileSize) + fh.reader = filer.NewChunkReaderAtFromClient(fh.wfs.LookupFn(), chunkViews, fh.wfs.chunkCache, fileSize) } - fh.SetReader(reader) - totalRead, err := reader.ReadAt(buff, offset) + totalRead, err := fh.reader.ReadAt(buff, offset) if err != nil && err != io.EOF { glog.Errorf("file handle read %s: %v", fileFullPath, err)