diff options
Diffstat (limited to 'src')
| -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; |