aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-15 01:03:17 -0700
committerchrislu <chris.lu@gmail.com>2022-07-15 01:03:17 -0700
commit1db012485f996df0615a1d6a7ece9faace2e536c (patch)
tree1947a2022d9cf91593fb596779c0548b62134542
parentaca20cd9f46d3eb890a7aed2921e35e85fc29dc9 (diff)
downloadseaweedfs-1db012485f996df0615a1d6a7ece9faace2e536c.tar.xz
seaweedfs-1db012485f996df0615a1d6a7ece9faace2e536c.zip
mount: fix bug during busy writes
fix https://github.com/chrislusf/seaweedfs/issues/3315
-rw-r--r--weed/filer/reader_cache.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/weed/filer/reader_cache.go b/weed/filer/reader_cache.go
index 4c92f71c8..4f375e764 100644
--- a/weed/filer/reader_cache.go
+++ b/weed/filer/reader_cache.go
@@ -76,7 +76,9 @@ func (rc *ReaderCache) ReadChunkAt(buffer []byte, fileId string, cipherKey []byt
rc.Lock()
defer rc.Unlock()
if cacher, found := rc.downloaders[fileId]; found {
- return cacher.readChunkAt(buffer, offset)
+ if n, err := cacher.readChunkAt(buffer, offset); n != 0 && err == nil {
+ return n, err
+ }
}
if shouldCache || rc.lookupFileIdFn == nil {
n, err := rc.chunkCache.ReadChunkAt(buffer, fileId, uint64(offset))
@@ -176,6 +178,9 @@ func (s *SingleChunkCacher) startCaching() {
}
func (s *SingleChunkCacher) destroy() {
+ s.Lock()
+ defer s.Unlock()
+
if s.data != nil {
mem.Free(s.data)
s.data = nil
@@ -194,6 +199,10 @@ func (s *SingleChunkCacher) readChunkAt(buf []byte, offset int64) (int, error) {
return 0, s.err
}
+ if len(s.data) == 0 {
+ return 0, nil
+ }
+
return copy(buf, s.data[offset:]), nil
}