aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cacherpc.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-05-03 16:34:37 +0200
committerGitHub Enterprise <[email protected]>2024-05-03 16:34:37 +0200
commitd23b2ece61f92e8beef2d1113df2838e3fd7f5ac (patch)
treec56fc3078fca4b47343222261b63f12d34451bde /src/zenstore/cache/cacherpc.cpp
parentassert improvements (#72) (diff)
downloadzen-d23b2ece61f92e8beef2d1113df2838e3fd7f5ac.tar.xz
zen-d23b2ece61f92e8beef2d1113df2838e3fd7f5ac.zip
check partial chunk result (#73)
* validate result when getting partial chunk and warn on failure * changelog
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
{