aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cacherpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
-rw-r--r--src/zenstore/cache/cacherpc.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp
index 903033085..f12cee923 100644
--- a/src/zenstore/cache/cacherpc.cpp
+++ b/src/zenstore/cache/cacherpc.cpp
@@ -1661,33 +1661,36 @@ CacheRpcHandler::WriteGetCacheChunksResponse([[maybe_unused]] const CacheRequest
FragmentRawOffset = Request.RequestedOffset;
}
}
- Request.Value =
+
+ CompressedBuffer PartialValue =
Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize == 0 ? 1u : Request.RequestedSize);
- if (Request.Value)
+ if (PartialValue)
{
- uint64_t FragmentLength = Request.Value.DecodeRawSize();
+ uint64_t FragmentRawLength = PartialValue.DecodeRawSize();
+ ZEN_ASSERT(FragmentRawOffset <= Request.RequestedOffset);
+ ZEN_ASSERT(FragmentRawOffset + FragmentRawLength >= Request.RequestedOffset + Request.RequestedSize);
IoHashStream FragmentHashStream;
FragmentHashStream.Append(Request.Key->ChunkId.Hash, sizeof(Request.Key->ChunkId.Hash));
FragmentHashStream.Append(&FragmentRawOffset, sizeof(FragmentRawOffset));
- FragmentHashStream.Append(&FragmentLength, sizeof(FragmentLength));
+ FragmentHashStream.Append(&FragmentRawLength, sizeof(FragmentRawLength));
IoHash FragmentHash = FragmentHashStream.GetHash();
Writer.AddHash("FragmentHash", FragmentHash);
Writer.AddInteger("FragmentOffset", FragmentRawOffset);
- RpcResponse.AddAttachment(CbAttachment(Request.Value, FragmentHash));
+ RpcResponse.AddAttachment(CbAttachment(PartialValue, FragmentHash));
}
else
{
ZEN_WARN("GETCACHECHUNKS MISS (rawsize: {}, offset: {}, size: {}) - '{}/{}/{}/{}' in {}",
Namespace,
- Request.Key->Key.Bucket,
- Request.Key->Key.Hash,
- Request.Key->ValueId,
Request.Value.DecodeRawSize(),
Request.RequestedOffset,
Request.RequestedSize,
+ Request.Key->Key.Bucket,
+ Request.Key->Key.Hash,
+ Request.Key->ValueId,
NiceLatencyNs(Request.ElapsedTimeUs * 1000));
m_CacheStats.MissCount++;
Request.Exists = false;