From c04edeed683595e780262a3ee461eb79b7b151a0 Mon Sep 17 00:00:00 2001 From: "Eugeniy E. Mikhailov" Date: Tue, 10 Sep 2024 16:30:18 -0400 Subject: [PATCH] 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. --- weed/util/chunk_cache/chunk_cache.go | 10 +++++----- 1 file 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 } }