diff options
| author | Dan Engelbrecht <[email protected]> | 2022-05-02 11:01:12 +0200 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-05-02 11:01:12 +0200 |
| commit | 80a39f97f465465466ccd2d5914421db55efb80e (patch) | |
| tree | 891a826b28a17c908ef29ffb45109dfccf27c561 | |
| parent | use std::vector<std::pair>> instead of map (diff) | |
| download | zen-80a39f97f465465466ccd2d5914421db55efb80e.tar.xz zen-80a39f97f465465466ccd2d5914421db55efb80e.zip | |
add back gc space reclaim call
| -rw-r--r-- | zenserver/cache/structuredcachestore.cpp | 3 | ||||
| -rw-r--r-- | zenstore/blockstore.cpp | 11 | ||||
| -rw-r--r-- | zenstore/compactcas.cpp | 3 | ||||
| -rw-r--r-- | zenstore/include/zenstore/blockstore.h | 5 |
4 files changed, 14 insertions, 8 deletions
diff --git a/zenserver/cache/structuredcachestore.cpp b/zenserver/cache/structuredcachestore.cpp index 9cfb5fbf3..5b08ed83c 100644 --- a/zenserver/cache/structuredcachestore.cpp +++ b/zenserver/cache/structuredcachestore.cpp @@ -1687,7 +1687,8 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) m_Index[Entry.Key].Location = Entry.Location; } } - }); + }, + [&GcCtx]() { return GcCtx.CollectSmallObjects(); }); GcCtx.DeletedCas(DeletedChunks); } diff --git a/zenstore/blockstore.cpp b/zenstore/blockstore.cpp index 593ccc529..b3608687b 100644 --- a/zenstore/blockstore.cpp +++ b/zenstore/blockstore.cpp @@ -279,7 +279,8 @@ BlockStore::ReclaimSpace(const ReclaimSnapshotState& Snapshot, const std::vector<size_t>& KeepChunkIndexes, uint64_t PayloadAlignment, bool DryRun, - const ReclaimCallback& Callback) + const ReclaimCallback& ChangeCallback, + const ClaimGCReserveCallback& GcReserveCallback) { if (ChunkLocations.empty()) { @@ -437,7 +438,7 @@ BlockStore::ReclaimSpace(const ReclaimSnapshotState& Snapshot, { DeletedSize += ChunkLocations[DeleteIndex].Size; } - Callback({}, DeleteMap); + ChangeCallback({}, DeleteMap); DeletedCount += DeleteMap.size(); { RwLock::ExclusiveLockScope _i(m_InsertLock); @@ -477,7 +478,7 @@ BlockStore::ReclaimSpace(const ReclaimSnapshotState& Snapshot, NewBlockFile->Flush(); } { - Callback(MovedChunks, {}); + ChangeCallback(MovedChunks, {}); MovedCount += KeepMap.size(); MovedChunks.clear(); RwLock::ExclusiveLockScope __(m_InsertLock); @@ -512,7 +513,7 @@ BlockStore::ReclaimSpace(const ReclaimSnapshotState& Snapshot, } if (Space.Free < m_MaxBlockSize) { - uint64_t ReclaimedSpace = 0; // GcCtx.ClaimGCReserve(); + uint64_t ReclaimedSpace = GcReserveCallback(); if (Space.Free + ReclaimedSpace < m_MaxBlockSize) { ZEN_WARN("garbage collect for '{}' FAILED, required disk space {}, free {}", @@ -558,7 +559,7 @@ BlockStore::ReclaimSpace(const ReclaimSnapshotState& Snapshot, DeletedSize += ChunkLocations[DeleteIndex].Size; } - Callback(MovedChunks, DeleteMap); + ChangeCallback(MovedChunks, DeleteMap); MovedCount += KeepMap.size(); DeletedCount += DeleteMap.size(); MovedChunks.clear(); diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index 6a9cba817..5734a16b6 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -518,7 +518,8 @@ CasContainerStrategy::CollectGarbage(GcContext& GcCtx) m_LocationMap[Entry.Key] = Entry.Location; } } - }); + }, + [&GcCtx]() { return GcCtx.CollectSmallObjects(); }); GcCtx.DeletedCas(DeletedChunks); } diff --git a/zenstore/include/zenstore/blockstore.h b/zenstore/include/zenstore/blockstore.h index 17f4e090e..28f0a5541 100644 --- a/zenstore/include/zenstore/blockstore.h +++ b/zenstore/include/zenstore/blockstore.h @@ -120,6 +120,7 @@ public: typedef std::function<void(const std::vector<std::pair<size_t, BlockStoreLocation>>& MovedChunks, const std::vector<size_t>& RemovedChunks)> ReclaimCallback; + typedef std::function<uint64_t()> ClaimGCReserveCallback; typedef std::function<void(const BlockStoreLocation& Location)> WriteChunkCallback; typedef std::function<void(size_t ChunkIndex, const void* Data, uint64_t Size)> IterateChunksSmallSizeCallback; typedef std::function<void(size_t ChunkIndex, BasicFile& BlockFile, uint64_t Offset, uint64_t Size)> IterateChunksLargeSizeCallback; @@ -144,7 +145,9 @@ public: const std::vector<size_t>& KeepChunkIndexes, uint64_t PayloadAlignment, bool DryRun, - const ReclaimCallback& Callback = [](const std::vector<std::pair<size_t, BlockStoreLocation>>&, const std::vector<size_t>&) {}); + const ReclaimCallback& ChangeCallback = [](const std::vector<std::pair<size_t, BlockStoreLocation>>&, + const std::vector<size_t>&) {}, + const ClaimGCReserveCallback& GcReserveCallback = []() { return 0; }); void IterateChunks(const std::vector<BlockStoreLocation>& ChunkLocations, IterateChunksSmallSizeCallback SmallSizeCallback, IterateChunksLargeSizeCallback LargeSizeCallback); |