diff options
| author | Eugeniy E. Mikhailov <evgmik@gmail.com> | 2024-09-10 16:30:18 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-10 13:30:18 -0700 |
| commit | c04edeed683595e780262a3ee461eb79b7b151a0 (patch) | |
| tree | fdb1ef2a36fcec0125899253e3d6796aa9e44033 | |
| parent | d660d5c7d47343419c2ecc50e0d6f2977673d5d0 (diff) | |
| download | seaweedfs-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.go | 10 |
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 } } |
