aboutsummaryrefslogtreecommitdiff
path: root/zenstore/gc.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-03-11 12:17:46 +0100
committerDan Engelbrecht <[email protected]>2022-03-31 11:28:31 +0200
commit769dc100be423f43df52e24b78b210a969520478 (patch)
treef2eec935b3fa51d97899945e0ff5ea484c69800c /zenstore/gc.cpp
parentFix gc shutdown stalling if shutting down while gc is running (diff)
downloadzen-769dc100be423f43df52e24b78b210a969520478.tar.xz
zen-769dc100be423f43df52e24b78b210a969520478.zip
WIP
Diffstat (limited to 'zenstore/gc.cpp')
-rw-r--r--zenstore/gc.cpp53
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