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.cpp35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp
index 5bd73e902..d2625b97c 100644
--- a/src/zenstore/cache/cacherpc.cpp
+++ b/src/zenstore/cache/cacherpc.cpp
@@ -1663,17 +1663,34 @@ CacheRpcHandler::WriteGetCacheChunksResponse([[maybe_unused]] const CacheRequest
}
Request.Value =
Request.Value.GetRange(Request.RequestedOffset, Request.RequestedSize == 0 ? 1u : Request.RequestedSize);
- uint64_t FragmentLength = Request.Value.DecodeRawSize();
- IoHashStream FragmentHashStream;
- FragmentHashStream.Append(Request.Key->ChunkId.Hash, sizeof(Request.Key->ChunkId.Hash));
- FragmentHashStream.Append(&FragmentRawOffset, sizeof(FragmentRawOffset));
- FragmentHashStream.Append(&FragmentLength, sizeof(FragmentLength));
- IoHash FragmentHash = FragmentHashStream.GetHash();
+ if (Request.Value)
+ {
+ uint64_t FragmentLength = Request.Value.DecodeRawSize();
+
+ IoHashStream FragmentHashStream;
+ FragmentHashStream.Append(Request.Key->ChunkId.Hash, sizeof(Request.Key->ChunkId.Hash));
+ FragmentHashStream.Append(&FragmentRawOffset, sizeof(FragmentRawOffset));
+ FragmentHashStream.Append(&FragmentLength, sizeof(FragmentLength));
+ IoHash FragmentHash = FragmentHashStream.GetHash();
- Writer.AddHash("FragmentHash", FragmentHash);
- Writer.AddInteger("FragmentOffset", FragmentRawOffset);
- RpcResponse.AddAttachment(CbAttachment(Request.Value, FragmentHash));
+ Writer.AddHash("FragmentHash", FragmentHash);
+ Writer.AddInteger("FragmentOffset", FragmentRawOffset);
+ RpcResponse.AddAttachment(CbAttachment(Request.Value, FragmentHash));
+ }
+ else
+ {
+ ZEN_WARN(
+ "Failed to get partial chunk for attachment {}/{}/{} (rawsize: {}, offset: {}, size: {}). Sending full "
+ "chunk",
+ Namespace,
+ Request.Key->Key.Bucket,
+ Request.Key->ChunkId,
+ Request.Value.DecodeRawSize(),
+ Request.RequestedOffset,
+ Request.RequestedSize)
+ RpcResponse.AddAttachment(CbAttachment(Request.Value, Request.Key->ChunkId));
+ }
}
else
{