diff options
| -rw-r--r-- | zenstore/compactcas.cpp | 2 | ||||
| -rw-r--r-- | zenstore/gc.cpp | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index d5987c11e..cc2657ddb 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -421,7 +421,7 @@ CasContainerStrategy::CollectGarbage(GcContext& GcCtx) if (m_CurrentInsertOffset == LastChunkNextChunkOffset) { - m_CurrentInsertOffset = WriteOffset; + m_CurrentInsertOffset = LastChunkLocation.GetOffset(); } } diff --git a/zenstore/gc.cpp b/zenstore/gc.cpp index b685200bc..8a9fceb65 100644 --- a/zenstore/gc.cpp +++ b/zenstore/gc.cpp @@ -661,6 +661,8 @@ TEST_CASE("gc.compact") CasStore->InsertChunk(Chunks[7], ChunkHashes[7]); CasStore->InsertChunk(Chunks[8], ChunkHashes[8]); + auto InitialSize = CasStore->TotalSize(); + // Keep first and last { GcContext GcCtx; @@ -790,8 +792,23 @@ TEST_CASE("gc.compact") CasStore->InsertChunk(Chunks[1], ChunkHashes[1]); CasStore->InsertChunk(Chunks[2], ChunkHashes[2]); CasStore->InsertChunk(Chunks[3], ChunkHashes[3]); + CasStore->InsertChunk(Chunks[4], ChunkHashes[4]); CasStore->InsertChunk(Chunks[5], ChunkHashes[5]); } + + // Verify that we nicely appended blocks even after all GC operations + CHECK(ChunkHashes[0] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[0]))); + CHECK(ChunkHashes[1] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[1]))); + CHECK(ChunkHashes[2] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[2]))); + CHECK(ChunkHashes[3] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[3]))); + CHECK(ChunkHashes[4] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[4]))); + CHECK(ChunkHashes[5] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[5]))); + CHECK(ChunkHashes[6] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[6]))); + CHECK(ChunkHashes[7] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[7]))); + CHECK(ChunkHashes[8] == IoHash::HashBuffer(CasStore->FindChunk(ChunkHashes[8]))); + + auto FinalSize = CasStore->TotalSize(); + CHECK(InitialSize.TinySize == FinalSize.TinySize); } #endif |