aboutsummaryrefslogtreecommitdiff
path: root/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-03-28 23:53:43 +0200
committerDan Engelbrecht <[email protected]>2022-03-31 11:29:28 +0200
commit48af35f02dae1a5f6739cbe5e936f93f76f54a12 (patch)
treeb0a4618e5cf0ad2253632d50a0e6d6f3c470d64d /zenstore/compactcas.cpp
parentcleanup (diff)
downloadzen-48af35f02dae1a5f6739cbe5e936f93f76f54a12.tar.xz
zen-48af35f02dae1a5f6739cbe5e936f93f76f54a12.zip
Properly figure out block ranges in migration
Don't assume chunks don't have space between them.
Diffstat (limited to 'zenstore/compactcas.cpp')
-rw-r--r--zenstore/compactcas.cpp11
1 files changed, 3 insertions, 8 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp
index 45140b79a..1c4f7db51 100644
--- a/zenstore/compactcas.cpp
+++ b/zenstore/compactcas.cpp
@@ -330,15 +330,9 @@ namespace {
return Result;
}
- uint64_t MaxUsedSize = 0;
for (const auto& Entry : LegacyDiskIndex)
{
const LegacyCasDiskIndexEntry& Record(Entry.second);
- uint64_t EntryEnd = Record.Location.GetOffset() + Record.Location.GetSize();
- if (EntryEnd > MaxUsedSize)
- {
- MaxUsedSize = EntryEnd;
- }
TotalSize += Record.Location.GetSize();
}
@@ -441,12 +435,13 @@ namespace {
uint64_t ChunkOffset = LegacyChunkLocation.GetOffset();
uint64_t ChunkSize = LegacyChunkLocation.GetSize();
+ uint64_t ChunkEnd = ChunkOffset + ChunkSize;
if (BlockSize == 0)
{
BlockOffset = ChunkOffset;
}
- if ((BlockSize + ChunkSize) > MaxBlockSize)
+ if ((ChunkEnd - BlockOffset) > MaxBlockSize)
{
BlockData BlockRange{.BlockOffset = BlockOffset, .BlockSize = BlockSize, .BlockIndex = WriteBlockIndex};
BlockRange.Chunks.swap(Chunks);
@@ -463,7 +458,7 @@ namespace {
BlockSize = RoundUp(BlockSize, PayloadAlignment);
BlockStoreLocation ChunkLocation = {.BlockIndex = WriteBlockIndex, .Offset = BlockSize, .Size = ChunkSize};
Chunks.push_back({ChunkHash, ChunkLocation});
- BlockSize += ChunkSize;
+ BlockSize += ChunkEnd - BlockOffset;
}
if (BlockSize > 0)
{