aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugeniy E. Mikhailov <evgmik@gmail.com>2024-09-10 16:30:18 -0400
committerGitHub <noreply@github.com>2024-09-10 13:30:18 -0700
commitc04edeed683595e780262a3ee461eb79b7b151a0 (patch)
treefdb1ef2a36fcec0125899253e3d6796aa9e44033
parentd660d5c7d47343419c2ecc50e0d6f2977673d5d0 (diff)
downloadseaweedfs-c04edeed683595e780262a3ee461eb79b7b151a0.tar.xz
seaweedfs-c04edeed683595e780262a3ee461eb79b7b151a0.zip
bug fix in the data received from cache processing (#6002)
The patch addresses #3745. The cache should return the exact amount of data requested by the buffer. By construction of the cache it is always all requested data range or we have error happening. The old use of minsize miscalculate the requested data size, if non zero offset is requested.
-rw-r--r--weed/util/chunk_cache/chunk_cache.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/weed/util/chunk_cache/chunk_cache.go b/weed/util/chunk_cache/chunk_cache.go
index 158f47cfc..866455a24 100644
--- a/weed/util/chunk_cache/chunk_cache.go
+++ b/weed/util/chunk_cache/chunk_cache.go
@@ -57,7 +57,7 @@ func (c *TieredChunkCache) ReadChunkAt(data []byte, fileId string, offset uint64
if err != nil {
glog.Errorf("failed to read from memcache: %s", err)
}
- if n >= int(minSize) {
+ if n == int(len(data)) {
return n, nil
}
}
@@ -65,24 +65,24 @@ func (c *TieredChunkCache) ReadChunkAt(data []byte, fileId string, offset uint64
fid, err := needle.ParseFileIdFromString(fileId)
if err != nil {
glog.Errorf("failed to parse file id %s", fileId)
- return n, nil
+ return 0, nil
}
if minSize <= c.onDiskCacheSizeLimit0 {
n, err = c.diskCaches[0].readChunkAt(data, fid.Key, offset)
- if n >= int(minSize) {
+ if n == int(len(data)) {
return
}
}
if minSize <= c.onDiskCacheSizeLimit1 {
n, err = c.diskCaches[1].readChunkAt(data, fid.Key, offset)
- if n >= int(minSize) {
+ if n == int(len(data)) {
return
}
}
{
n, err = c.diskCaches[2].readChunkAt(data, fid.Key, offset)
- if n >= int(minSize) {
+ if n == int(len(data)) {
return
}
}