diff options
Diffstat (limited to 'src/zenstore/filecas.cpp')
| -rw-r--r-- | src/zenstore/filecas.cpp | 99 |
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)); } |