aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-07 11:49:40 -0700
committerchrislu <chris.lu@gmail.com>2022-07-07 11:49:40 -0700
commit05c53820b99d20a7123e1583e4853724034970f9 (patch)
treef223b6e5536808b879e75f230458154f7b2bcf35
parent69ef6459c30a9146e815ba0d04fd59f8d9eabdc4 (diff)
downloadseaweedfs-05c53820b99d20a7123e1583e4853724034970f9.tar.xz
seaweedfs-05c53820b99d20a7123e1583e4853724034970f9.zip
mount: file handler release memory
-rw-r--r--weed/mount/filehandle.go11
-rw-r--r--weed/mount/filehandle_read.go4
2 files changed, 11 insertions, 4 deletions
diff --git a/weed/mount/filehandle.go b/weed/mount/filehandle.go
index 49918c104..f0cf2a380 100644
--- a/weed/mount/filehandle.go
+++ b/weed/mount/filehandle.go
@@ -6,7 +6,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/util"
"golang.org/x/exp/slices"
- "io"
"sync"
)
@@ -24,7 +23,7 @@ type FileHandle struct {
dirtyMetadata bool
dirtyPages *PageWriter
entryViewCache []filer.VisibleInterval
- reader io.ReaderAt
+ reader *filer.ChunkReadAt
contentType string
handle uint64
sync.Mutex
@@ -99,8 +98,16 @@ func (fh *FileHandle) AddChunks(chunks []*filer_pb.FileChunk) {
fh.entryViewCache = nil
}
+func (fh *FileHandle) SetReader(reader *filer.ChunkReadAt) {
+ if fh.reader != nil {
+ fh.reader.Close()
+ }
+ fh.reader = reader
+}
+
func (fh *FileHandle) Release() {
fh.dirtyPages.Destroy()
+ fh.SetReader(nil)
}
func lessThan(a, b *filer_pb.FileChunk) bool {
diff --git a/weed/mount/filehandle_read.go b/weed/mount/filehandle_read.go
index 88ab8612c..202730e88 100644
--- a/weed/mount/filehandle_read.go
+++ b/weed/mount/filehandle_read.go
@@ -62,7 +62,7 @@ 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.reader = nil
+ fh.SetReader(nil)
}
reader := fh.reader
@@ -74,7 +74,7 @@ func (fh *FileHandle) readFromChunks(buff []byte, offset int64) (int64, error) {
}
reader = filer.NewChunkReaderAtFromClient(fh.wfs.LookupFn(), chunkViews, fh.wfs.chunkCache, fileSize)
}
- fh.reader = reader
+ fh.SetReader(reader)
totalRead, err := reader.ReadAt(buff, offset)