diff options
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
| -rw-r--r-- | src/zenstore/cache/cacherpc.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp index f6e5d16b3..b7f456d5c 100644 --- a/src/zenstore/cache/cacherpc.cpp +++ b/src/zenstore/cache/cacherpc.cpp @@ -1700,25 +1700,37 @@ CacheRpcHandler::WriteGetCacheChunksResponse([[maybe_unused]] const CacheRequest }; if (AcceptsPartialChunks && IsPartialRangeRequest(Request)) { + bool Ok = true; uint64_t FragmentRawOffset = 0; if (Request.RequestedOffset > 0) { OodleCompressor Compressor; OodleCompressionLevel CompressionLevel; uint64_t BlockSize = 0; - const bool bOk = Request.Value.TryGetCompressParameters(Compressor, CompressionLevel, BlockSize); - ZEN_ASSERT(bOk); - if (BlockSize > 0) + Ok = Request.Value.TryGetCompressParameters(Compressor, CompressionLevel, BlockSize); + if (Ok) { - FragmentRawOffset = (Request.RequestedOffset / BlockSize) * BlockSize; + if (BlockSize > 0) + { + FragmentRawOffset = (Request.RequestedOffset / BlockSize) * BlockSize; + } + else + { + FragmentRawOffset = Request.RequestedOffset; + } } else { - FragmentRawOffset = Request.RequestedOffset; + ZEN_WARN("Failed to get compression parameters for {}/{}/{}/{}", + Namespace, + Request.Key->Key.Bucket, + Request.Key->Key.Hash, + Request.Key->ValueId); } } - CompressedBuffer PartialValue = Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize); + CompressedBuffer PartialValue = + Ok ? Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize) : CompressedBuffer::Null; if (PartialValue) { |