diff options
| author | Stefan Boberg <[email protected]> | 2023-05-15 21:50:24 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2023-05-15 21:50:24 +0200 |
| commit | 26b21f98b654d79b109f1e55e5fe4ee2ef4ac926 (patch) | |
| tree | 8217312b3003e9c458d2abdb740359de0b58ae09 /src/zenstore/blockstore.cpp | |
| parent | removed unnecessary #include directives from cas.h (diff) | |
| download | zen-26b21f98b654d79b109f1e55e5fe4ee2ef4ac926.tar.xz zen-26b21f98b654d79b109f1e55e5fe4ee2ef4ac926.zip | |
added error reporting for bad BlockStore chunks
also eliminated some copy-paste
Diffstat (limited to 'src/zenstore/blockstore.cpp')
| -rw-r--r-- | src/zenstore/blockstore.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/zenstore/blockstore.cpp b/src/zenstore/blockstore.cpp index f9e74fb0b..427364f84 100644 --- a/src/zenstore/blockstore.cpp +++ b/src/zenstore/blockstore.cpp @@ -665,6 +665,8 @@ BlockStore::IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, const IterateChunksSmallSizeCallback& SmallSizeCallback, const IterateChunksLargeSizeCallback& LargeSizeCallback) { + ZEN_LOG_SCOPE("iterating chunks from '{}'", m_BlocksBasePath); + std::vector<size_t> LocationIndexes; LocationIndexes.reserve(ChunkLocations.size()); for (size_t ChunkIndex = 0; ChunkIndex < ChunkLocations.size(); ++ChunkIndex) @@ -718,10 +720,13 @@ BlockStore::IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, size_t ChunkIndex = LocationIndexes[LocationIndexOffset]; const BlockStoreLocation& FirstLocation = ChunkLocations[ChunkIndex]; - auto FindBlockIt = m_ChunkBlocks.find(FirstLocation.BlockIndex); + const uint32_t BlockIndex = FirstLocation.BlockIndex; + auto FindBlockIt = m_ChunkBlocks.find(BlockIndex); if (FindBlockIt == m_ChunkBlocks.end()) { - while (ChunkLocations[ChunkIndex].BlockIndex == FirstLocation.BlockIndex) + ZEN_LOG_SCOPE("block #{} not available", BlockIndex); + + while (ChunkLocations[ChunkIndex].BlockIndex == BlockIndex) { SmallSizeCallback(ChunkIndex, nullptr, 0); LocationIndexOffset++; @@ -736,8 +741,8 @@ BlockStore::IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, const Ref<BlockStoreFile>& BlockFile = FindBlockIt->second; ZEN_ASSERT(BlockFile); - size_t BlockSize = BlockFile->FileSize(); - size_t RangeCount = GetNextRange(LocationIndexOffset); + const size_t BlockSize = BlockFile->FileSize(); + const size_t RangeCount = GetNextRange(LocationIndexOffset); if (RangeCount > 0) { size_t LastChunkIndex = LocationIndexes[LocationIndexOffset + RangeCount - 1]; @@ -748,8 +753,14 @@ BlockStore::IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, { size_t NextChunkIndex = LocationIndexes[LocationIndexOffset + RangeIndex]; const BlockStoreLocation& ChunkLocation = ChunkLocations[NextChunkIndex]; - if (ChunkLocation.Size == 0 || (ChunkLocation.Offset + ChunkLocation.Size > BlockSize)) + if (ChunkLocation.Size == 0 || ((ChunkLocation.Offset + ChunkLocation.Size) > BlockSize)) { + ZEN_LOG_SCOPE("chunk [{},{}] out of bounds (block #{} file size = {})", + ChunkLocation.Offset, + ChunkLocation.Size, + BlockIndex, + BlockSize); + SmallSizeCallback(NextChunkIndex, nullptr, 0); continue; } @@ -761,6 +772,12 @@ BlockStore::IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, } if (FirstLocation.Size == 0 || (FirstLocation.Offset + FirstLocation.Size > BlockSize)) { + ZEN_LOG_SCOPE("chunk [{},{}] out of bounds (block #{} file size = {})", + FirstLocation.Offset, + FirstLocation.Size, + BlockIndex, + BlockSize); + SmallSizeCallback(ChunkIndex, nullptr, 0); LocationIndexOffset++; continue; |