From 5d87e76e844a950bbf406e49505e1227fe7aa69a Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Mon, 19 Aug 2024 10:43:23 +0200 Subject: If we fail to get compression info for a partial request - log and report a miss (#122) * If we fail to get compression info for a partial request - log and report a miss --- src/zenstore/cache/cacherpc.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/zenstore/cache/cacherpc.cpp') 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) { -- cgit v1.2.3