aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-05-02 11:01:12 +0200
committerDan Engelbrecht <[email protected]>2022-05-02 11:01:12 +0200
commit80a39f97f465465466ccd2d5914421db55efb80e (patch)
tree891a826b28a17c908ef29ffb45109dfccf27c561
parentuse std::vector<std::pair>> instead of map (diff)
downloadzen-80a39f97f465465466ccd2d5914421db55efb80e.tar.xz
zen-80a39f97f465465466ccd2d5914421db55efb80e.zip
add back gc space reclaim call
-rw-r--r--zenserver/cache/structuredcachestore.cpp3
-rw-r--r--zenstore/blockstore.cpp11
-rw-r--r--zenstore/compactcas.cpp3
-rw-r--r--zenstore/include/zenstore/blockstore.h5
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);