aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/blockstore.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-15 21:50:24 +0200
committerStefan Boberg <[email protected]>2023-05-15 21:50:24 +0200
commit26b21f98b654d79b109f1e55e5fe4ee2ef4ac926 (patch)
tree8217312b3003e9c458d2abdb740359de0b58ae09 /src/zenstore/blockstore.cpp
parentremoved unnecessary #include directives from cas.h (diff)
downloadzen-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.cpp27
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;