aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--CHANGELOG.md5
-rw-r--r--src/zenstore/cache/cacherpc.cpp35
2 files changed, 31 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 41e272d4d..4959a4f06 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
##
+- Bugfix: If we get a request for a partial chunk that can not be fulfilled we warn and send back the full chunk
+- Improvement: Asserts gives an immediate ERROR log entry with callstack and reason
+- Improvement: Asserts flushes the log before sending error report to Sentry
+
+## 5.5.1
- Bugfix: Remove extra loop causing GetProjectFiles for project store to find all chunks once for each chunk found
- Bugfix: Don't capture ChunkIndex variable in CasImpl::IterateChunks by reference as it causes crash
- Bugfix: Don't try to respond with zero size partial cache value when partial size is zero
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
{