diff options
| author | Dan Engelbrecht <[email protected]> | 2024-05-03 16:34:37 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-05-03 16:34:37 +0200 |
| commit | d23b2ece61f92e8beef2d1113df2838e3fd7f5ac (patch) | |
| tree | c56fc3078fca4b47343222261b63f12d34451bde /src/zenstore/cache/cacherpc.cpp | |
| parent | assert improvements (#72) (diff) | |
| download | zen-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.cpp | 35 |
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 { |