diff options
| author | Dan Engelbrecht <[email protected]> | 2024-11-25 15:26:03 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-11-25 15:26:03 +0100 |
| commit | 877f5b3dc5a366d164e7f1302c4f4279d0eeee44 (patch) | |
| tree | 04e25bff973f73a0ed4f92f0b038100e11027344 /src | |
| parent | caller controls threshold for bulk-loading chunks in IterateChunks (#222) (diff) | |
| download | zen-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.cpp | 93 |
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; }, |