diff options
| author | Dan Engelbrecht <[email protected]> | 2025-11-26 13:04:38 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-26 13:04:38 +0100 |
| commit | b5ad9fb4c7475b4f4516bf401a7bb2cc2f20b3ee (patch) | |
| tree | b84003069c9a10c5be5773dc7c05f8961eda3cb1 /src/zenstore/cache/cacherpc.cpp | |
| parent | remove 'auto' option for zen builds download (#665) (diff) | |
| download | zen-b5ad9fb4c7475b4f4516bf401a7bb2cc2f20b3ee.tar.xz zen-b5ad9fb4c7475b4f4516bf401a7bb2cc2f20b3ee.zip | |
RawOffset can be anything and we expect an empty buffer to be returned along with RawSize = 0 if the offset was out of bounds for the value. (#666)
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
| -rw-r--r-- | src/zenstore/cache/cacherpc.cpp | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp index 4c44f43ca..09a3d0afc 100644 --- a/src/zenstore/cache/cacherpc.cpp +++ b/src/zenstore/cache/cacherpc.cpp @@ -2004,24 +2004,30 @@ CacheRpcHandler::WriteGetCacheChunksResponse([[maybe_unused]] const CacheRequest } } - CompressedBuffer PartialValue = - Ok ? Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize) : CompressedBuffer::Null; - - if (PartialValue) + if (Ok) { - 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(&FragmentRawLength, sizeof(FragmentRawLength)); - IoHash FragmentHash = FragmentHashStream.GetHash(); - - Writer.AddHash("FragmentHash", FragmentHash); - Writer.AddInteger("FragmentOffset", FragmentRawOffset); - RpcResponse.AddAttachment(CbAttachment(PartialValue, FragmentHash)); + CompressedBuffer PartialValue = Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize); + + if (PartialValue) + { + uint64_t FragmentRawLength = PartialValue.DecodeRawSize(); + ZEN_ASSERT(FragmentRawOffset <= Request.RequestedOffset); + + IoHashStream FragmentHashStream; + FragmentHashStream.Append(Request.Key->ChunkId.Hash, sizeof(Request.Key->ChunkId.Hash)); + FragmentHashStream.Append(&FragmentRawOffset, sizeof(FragmentRawOffset)); + FragmentHashStream.Append(&FragmentRawLength, sizeof(FragmentRawLength)); + IoHash FragmentHash = FragmentHashStream.GetHash(); + + Writer.AddHash("FragmentHash", FragmentHash); + Writer.AddInteger("FragmentOffset", FragmentRawOffset); + RpcResponse.AddAttachment(CbAttachment(PartialValue, FragmentHash)); + } + else + { + Writer.AddInteger("RawSize", 0); + Request.Exists = true; + } } else { |