diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-11 12:17:46 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:28:31 +0200 |
| commit | 769dc100be423f43df52e24b78b210a969520478 (patch) | |
| tree | f2eec935b3fa51d97899945e0ff5ea484c69800c /zenstore/gc.cpp | |
| parent | Fix gc shutdown stalling if shutting down while gc is running (diff) | |
| download | zen-769dc100be423f43df52e24b78b210a969520478.tar.xz zen-769dc100be423f43df52e24b78b210a969520478.zip | |
WIP
Diffstat (limited to 'zenstore/gc.cpp')
| -rw-r--r-- | zenstore/gc.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/zenstore/gc.cpp b/zenstore/gc.cpp index 3b090cae9..0f15eef2c 100644 --- a/zenstore/gc.cpp +++ b/zenstore/gc.cpp @@ -618,6 +618,59 @@ TEST_CASE("gc.basic") CHECK(!CidStore.ContainsChunk(InsertResult.DecompressedId)); } +TEST_CASE("gc.compact") +{ + ScopedTemporaryDirectory TempDir; + + CasStoreConfiguration CasConfig; + CasConfig.RootDirectory = TempDir.Path() / "cas"; + + CasGc Gc; + std::unique_ptr<CasStore> CasStore = CreateCasStore(Gc); + CidStore CidStore{*CasStore, TempDir.Path() / "cid"}; + + CasStore->Initialize(CasConfig); + Gc.SetCidStore(&CidStore); + + uint64_t ChunkSizes[9] = {128, 541, 5123, 1293, 218, 37, 4, 4095, 5}; + CompressedBuffer CompressedChunks[9] = {Compress(CreateChunk(ChunkSizes[0])), + Compress(CreateChunk(ChunkSizes[1])), + Compress(CreateChunk(ChunkSizes[2])), + Compress(CreateChunk(ChunkSizes[3])), + Compress(CreateChunk(ChunkSizes[4])), + Compress(CreateChunk(ChunkSizes[5])), + Compress(CreateChunk(ChunkSizes[6])), + Compress(CreateChunk(ChunkSizes[7])), + Compress(CreateChunk(ChunkSizes[8]))}; + + CidStore::InsertResult InsertResults[9] = { + CidStore.AddChunk(CompressedChunks[0]), + CidStore.AddChunk(CompressedChunks[1]), + CidStore.AddChunk(CompressedChunks[2]), + CidStore.AddChunk(CompressedChunks[3]), + CidStore.AddChunk(CompressedChunks[4]), + CidStore.AddChunk(CompressedChunks[5]), + CidStore.AddChunk(CompressedChunks[6]), + CidStore.AddChunk(CompressedChunks[7]), + CidStore.AddChunk(CompressedChunks[8]), + }; + + GcContext GcCtx; + GcCtx.CollectSmallObjects(true); + + Gc.CollectGarbage(GcCtx); + + CHECK(!CidStore.ContainsChunk(InsertResults[0].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[1].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[2].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[3].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[4].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[5].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[6].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[7].DecompressedId)); + CHECK(!CidStore.ContainsChunk(InsertResults[8].DecompressedId)); +} + #endif void |