aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/filecas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenstore/filecas.cpp')
-rw-r--r--src/zenstore/filecas.cpp99
1 files changed, 63 insertions, 36 deletions
diff --git a/src/zenstore/filecas.cpp b/src/zenstore/filecas.cpp
index e28e0dea4..c021e0e21 100644
--- a/src/zenstore/filecas.cpp
+++ b/src/zenstore/filecas.cpp
@@ -1340,15 +1340,22 @@ public:
{
}
- virtual void CompactReferenceStore(GcCtx& Ctx)
+ virtual void CompactReferenceStore(GcCtx& Ctx, GcReferenceStoreStats& Stats)
{
- size_t CompactedCount = 0;
Stopwatch Timer;
const auto _ = MakeGuard([&] {
- ZEN_DEBUG("gc file store '{}': removed data for {} unused cids in {}",
- m_FileCasStrategy.m_RootDirectory,
- CompactedCount,
- NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
+ if (!Ctx.Settings.Verbose)
+ {
+ return;
+ }
+ ZEN_INFO("GCV2: filecas [COMPACT] '{}': Count: {}, Pruned: {}, Compacted: {}, RemovedDisk: {}, RemovedMemory: {} in {}",
+ m_FileCasStrategy.m_RootDirectory,
+ Stats.Count,
+ Stats.Pruned,
+ Stats.Compacted,
+ NiceBytes(Stats.RemovedDisk),
+ NiceBytes(Stats.RemovedMemory),
+ NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
});
std::vector<IoHash> ReferencedCleaned;
ReferencedCleaned.reserve(m_ReferencesToClean.size());
@@ -1382,7 +1389,7 @@ public:
{
continue;
}
- Ctx.RemovedDiskSpace.fetch_add(SizeOnDisk);
+ Stats.RemovedDisk += SizeOnDisk;
}
else
{
@@ -1401,8 +1408,7 @@ public:
ReferencedCleaned.push_back(ChunkHash);
}
}
- CompactedCount = ReferencedCleaned.size();
- Ctx.CompactedReferences.fetch_add(ReferencedCleaned.size());
+ Stats.Compacted += ReferencedCleaned.size();
}
private:
@@ -1415,27 +1421,38 @@ class FileCasReferencePruner : public GcReferencePruner
public:
FileCasReferencePruner(FileCasStrategy& Owner, std::vector<IoHash>&& Cids) : m_FileCasStrategy(Owner), m_Cids(std::move(Cids)) {}
- virtual GcReferenceStoreCompactor* RemoveUnreferencedData(GcCtx& Ctx, const GetUnusedReferencesFunc& GetUnusedReferences)
+ virtual GcReferenceStoreCompactor* RemoveUnreferencedData(GcCtx& Ctx,
+ GcReferenceStoreStats& Stats,
+ const GetUnusedReferencesFunc& GetUnusedReferences)
{
- size_t TotalCount = m_Cids.size();
- size_t PruneCount = 0;
Stopwatch Timer;
const auto _ = MakeGuard([&] {
- ZEN_DEBUG("gc file store '{}': removed {} unused cid out of {} in {}",
- m_FileCasStrategy.m_RootDirectory,
- PruneCount,
- TotalCount,
- NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
+ if (!Ctx.Settings.Verbose)
+ {
+ return;
+ }
+ ZEN_INFO("GCV2: filecas [PRUNE] '{}': Count: {}, Pruned: {}, Compacted: {}, RemovedDisk: {}, RemovedMemory: {} in {}",
+ m_FileCasStrategy.m_RootDirectory,
+ Stats.Count,
+ Stats.Pruned,
+ Stats.Compacted,
+ NiceBytes(Stats.RemovedDisk),
+ NiceBytes(Stats.RemovedMemory),
+ NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
});
- std::vector<IoHash> UnusedReferences = GetUnusedReferences(m_Cids);
- m_Cids.clear();
+ std::vector<IoHash> UnusedCids = GetUnusedReferences(m_Cids);
+ if (UnusedCids.empty())
+ {
+ // Nothing to collect
+ return nullptr;
+ }
std::vector<IoHash> PrunedReferences;
- PrunedReferences.reserve(UnusedReferences.size());
+ PrunedReferences.reserve(UnusedCids.size());
{
RwLock::ExclusiveLockScope __(m_FileCasStrategy.m_Lock);
- for (const IoHash& ChunkHash : UnusedReferences)
+ for (const IoHash& ChunkHash : UnusedCids)
{
auto It = m_FileCasStrategy.m_Index.find(ChunkHash);
if (It == m_FileCasStrategy.m_Index.end())
@@ -1454,8 +1471,7 @@ public:
}
}
- PruneCount = PrunedReferences.size();
- Ctx.PrunedReferences.fetch_add(PruneCount);
+ Stats.Pruned += PrunedReferences.size();
return new FileCasStoreCompactor(m_FileCasStrategy, std::move(PrunedReferences));
}
@@ -1464,33 +1480,44 @@ private:
std::vector<IoHash> m_Cids;
};
+std::string
+FileCasStrategy::GetGcName(GcCtx&)
+{
+ return fmt::format("filecas:'{}'", m_RootDirectory.string());
+}
+
GcReferencePruner*
-FileCasStrategy::CreateReferencePruner(GcCtx& Ctx)
+FileCasStrategy::CreateReferencePruner(GcCtx& Ctx, GcReferenceStoreStats& Stats)
{
- // TODO
- std::size_t TotalCount = 0;
Stopwatch Timer;
const auto _ = MakeGuard([&] {
- ZEN_DEBUG("gc file store '{}': found {} cid keys to check in {}",
- m_RootDirectory,
- TotalCount,
- NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
+ if (!Ctx.Settings.Verbose)
+ {
+ return;
+ }
+ ZEN_INFO("GCV2: filecas [CREATE PRUNERS] '{}': Count: {}, Pruned: {}, Compacted: {}, RemovedDisk: {}, RemovedMemory: {} in {}",
+ m_RootDirectory,
+ Stats.Count,
+ Stats.Pruned,
+ Stats.Compacted,
+ NiceBytes(Stats.RemovedDisk),
+ NiceBytes(Stats.RemovedMemory),
+ NiceTimeSpanMs(Timer.GetElapsedTimeMs()));
});
std::vector<IoHash> CidsToCheck;
{
RwLock::SharedLockScope __(m_Lock);
+ if (m_Index.empty())
+ {
+ return {};
+ }
CidsToCheck.reserve(m_Index.size());
for (const auto& It : m_Index)
{
CidsToCheck.push_back(It.first);
}
}
- TotalCount = CidsToCheck.size();
- if (TotalCount == 0)
- {
- return {};
- }
- Ctx.References.fetch_add(TotalCount);
+ Stats.Count += CidsToCheck.size();
return new FileCasReferencePruner(*this, std::move(CidsToCheck));
}