Browse Source

fix resetting fh.reader

pull/3288/head
chrislu 2 years ago
parent
commit
e2ecf137a2
  1. 5
      weed/mount/filehandle.go
  2. 10
      weed/mount/filehandle_read.go

5
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 {

10
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)

Loading…
Cancel
Save