diff options
| author | chrislu <chris.lu@gmail.com> | 2022-07-15 01:03:17 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-07-15 01:03:17 -0700 |
| commit | 1db012485f996df0615a1d6a7ece9faace2e536c (patch) | |
| tree | 1947a2022d9cf91593fb596779c0548b62134542 | |
| parent | aca20cd9f46d3eb890a7aed2921e35e85fc29dc9 (diff) | |
| download | seaweedfs-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.go | 11 |
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 } |
