aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-11-25 15:26:03 +0100
committerGitHub Enterprise <[email protected]>2024-11-25 15:26:03 +0100
commit877f5b3dc5a366d164e7f1302c4f4279d0eeee44 (patch)
tree04e25bff973f73a0ed4f92f0b038100e11027344 /src
parentcaller controls threshold for bulk-loading chunks in IterateChunks (#222) (diff)
downloadzen-877f5b3dc5a366d164e7f1302c4f4279d0eeee44.tar.xz
zen-877f5b3dc5a366d164e7f1302c4f4279d0eeee44.zip
/chunkinfo /files response size and rawsize size consistency (#230)
* don't provide size if compressed buffer validation fails
Diffstat (limited to 'src')
-rw-r--r--src/zenserver/projectstore/projectstore.cpp93
1 files changed, 54 insertions, 39 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 3bcc3c51d..802f112c4 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -3959,28 +3959,41 @@ ProjectStore::GetProjectFiles(const std::string_view ProjectId,
{
if (Payload)
{
- if (WantsRawSizeField)
+ if (Payload.GetContentType() == ZenContentType::kCompressedBinary)
{
- if (Payload.GetContentType() == ZenContentType::kCompressedBinary)
+ if (WantsRawSizeField)
{
- IoHash _;
- uint64_t RawSize;
- if (!CompressedBuffer::ValidateCompressedHeader(Payload, _, RawSize))
+ IoHash _;
+ if (CompressedBuffer::ValidateCompressedHeader(Payload, _, RawSizes[Index]))
+ {
+ if (WantsSizeField)
+ {
+ Sizes[Index] = Payload.GetSize();
+ }
+ }
+ else
{
ZEN_WARN("oplog '{}/{}': payload for project file info for id {} is not a valid compressed binary.",
ProjectId,
OplogId,
Ids[Index]);
}
- else
- {
- RawSizes[Index] = RawSize;
- }
+ }
+ else if (WantsSizeField)
+ {
+ Sizes[Index] = Payload.GetSize();
}
}
- if (WantsSizeField)
+ else
{
- Sizes[Index] = Payload.GetSize();
+ if (WantsSizeField)
+ {
+ Sizes[Index] = Payload.GetSize();
+ }
+ if (WantsRawSizeField)
+ {
+ RawSizes[Index] = Payload.GetSize();
+ }
}
}
else
@@ -4098,48 +4111,46 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId,
WorkerThreadPool& WorkerPool = GetSmallWorkerPool(EWorkloadType::Burst); // GetSyncWorkerPool();
(void)FoundLog->IterateChunks(
Hashes,
- [&](size_t Index, const IoBuffer& Chunk) -> bool {
+ [&](size_t Index, const IoBuffer& Payload) -> bool {
try
{
- if (Chunk)
+ if (Payload)
{
- if (WantsRawSizeField)
+ if (Payload.GetContentType() == ZenContentType::kCompressedBinary)
{
- if (Chunk.GetContentType() == ZenContentType::kCompressedBinary)
+ if (WantsRawSizeField)
{
- uint64_t RawSize;
- IoHash RawHash;
- if (!CompressedBuffer::ValidateCompressedHeader(Chunk, RawHash, RawSize))
+ IoHash _;
+ if (CompressedBuffer::ValidateCompressedHeader(Payload, _, RawSizes[Index]))
{
- ZEN_WARN("oplog '{}/{}': payload for project file info for id {} is not a valid compressed binary.",
- ProjectId,
- OplogId,
- Ids[Index]);
- }
- else if (RawHash != Hashes[Index])
- {
- ZEN_WARN(
- "oplog '{}/{}': payload for project file info for id {} does not match expected raw hash {}, found "
- "{}.",
- ProjectId,
- OplogId,
- Ids[Index],
- Hashes[Index],
- RawHash);
+ if (WantsSizeField)
+ {
+ Sizes[Index] = Payload.GetSize();
+ }
}
else
{
- RawSizes[Index] = RawSize;
+ ZEN_WARN("oplog '{}/{}': payload for project chunk for id {} is not a valid compressed binary.",
+ ProjectId,
+ OplogId,
+ Ids[Index]);
}
}
- else
+ else if (WantsSizeField)
{
- RawSizes[Index] = Chunk.GetSize();
+ Sizes[Index] = Payload.GetSize();
}
}
- if (WantsSizeField)
+ else
{
- Sizes[Index] = Chunk.GetSize();
+ if (WantsSizeField)
+ {
+ Sizes[Index] = Payload.GetSize();
+ }
+ if (WantsRawSizeField)
+ {
+ RawSizes[Index] = Payload.GetSize();
+ }
}
}
else
@@ -4149,7 +4160,11 @@ ProjectStore::GetProjectChunkInfos(const std::string_view ProjectId,
}
catch (const std::exception& Ex)
{
- ZEN_WARN("oplog '{}/{}': failed getting chunk info for id {}. Reason: '{}'", ProjectId, OplogId, Ids[Index], Ex.what());
+ ZEN_WARN("oplog '{}/{}': failed getting project chunk info for id {}. Reason: '{}'",
+ ProjectId,
+ OplogId,
+ Ids[Index],
+ Ex.what());
}
return true;
},