aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cacherpc.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-11-26 13:04:38 +0100
committerGitHub Enterprise <[email protected]>2025-11-26 13:04:38 +0100
commitb5ad9fb4c7475b4f4516bf401a7bb2cc2f20b3ee (patch)
treeb84003069c9a10c5be5773dc7c05f8961eda3cb1 /src/zenstore/cache/cacherpc.cpp
parentremove 'auto' option for zen builds download (#665) (diff)
downloadzen-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.cpp40
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
{