diff options
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
| -rw-r--r-- | src/zenstore/cache/cacherpc.cpp | 19 |
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; |