aboutsummaryrefslogtreecommitdiff
path: root/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-06-13 20:51:41 +0200
committerDan Engelbrecht <[email protected]>2022-06-13 20:51:41 +0200
commitbf25f7aa746ab14d5e89c34973a43c8711b840e7 (patch)
tree0f874e3bbbfb1fa9591767de55105fa1107546a2 /zenstore/compactcas.cpp
parentadded _WIN32_WINNT define to be consistent with xmake file (diff)
downloadzen-bf25f7aa746ab14d5e89c34973a43c8711b840e7.tar.xz
zen-bf25f7aa746ab14d5e89c34973a43c8711b840e7.zip
Improved BlockStore::IterateChunks
Simplified interface Go through one block at a time Report back out of range ChunkLocations
Diffstat (limited to 'zenstore/compactcas.cpp')
-rw-r--r--zenstore/compactcas.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp
index 65f959a0e..4f83fb8a1 100644
--- a/zenstore/compactcas.cpp
+++ b/zenstore/compactcas.cpp
@@ -340,23 +340,30 @@ CasContainerStrategy::Scrub(ScrubContext& Ctx)
m_BlockStore.IterateChunks(
ChunkLocations,
[&](size_t ChunkIndex, const void* Data, uint64_t Size) {
- const IoHash ComputedHash = IoHash::HashBuffer(Data, Size);
- const IoHash& ExpectedHash = ChunkIndexToChunkHash[ChunkIndex];
- if (ComputedHash != ExpectedHash)
+ const IoHash& Hash = ChunkIndexToChunkHash[ChunkIndex];
+ if (!Data)
+ {
+ // ChunkLocation out of range of stored blocks
+ BadKeys.push_back(Hash);
+ return;
+ }
+ const IoHash ComputedHash = IoHash::HashBuffer(Data, Size);
+ if (ComputedHash != Hash)
{
// Hash mismatch
- BadKeys.push_back(ExpectedHash);
+ BadKeys.push_back(Hash);
+ return;
}
},
- [&](size_t ChunkIndex, Ref<BlockStoreFile> BlockFile, uint64_t Offset, uint64_t Size) {
+ [&](size_t ChunkIndex, BlockStoreFile& File, uint64_t Offset, uint64_t Size) {
IoHashStream Hasher;
- BlockFile->StreamByteRange(Offset, Size, [&](const void* Data, uint64_t Size) { Hasher.Append(Data, Size); });
+ File.StreamByteRange(Offset, Size, [&](const void* Data, uint64_t Size) { Hasher.Append(Data, Size); });
IoHash ComputedHash = Hasher.GetHash();
- const IoHash& ExpectedHash = ChunkIndexToChunkHash[ChunkIndex];
- if (ComputedHash != ExpectedHash)
+ const IoHash& Hash = ChunkIndexToChunkHash[ChunkIndex];
+ if (ComputedHash != Hash)
{
// Hash mismatch
- BadKeys.push_back(ExpectedHash);
+ BadKeys.push_back(Hash);
}
});