diff options
| author | Stefan Boberg <[email protected]> | 2021-10-19 22:21:45 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-10-19 22:21:45 +0200 |
| commit | 483a40f2cf28b52c4447d5a98bcc7f79c50f426c (patch) | |
| tree | 328c683489b92535a0d7094e7908d1d60f1df689 /zenstore | |
| parent | gc: moved GcContect from CAS into gc files (diff) | |
| download | zen-483a40f2cf28b52c4447d5a98bcc7f79c50f426c.tar.xz zen-483a40f2cf28b52c4447d5a98bcc7f79c50f426c.zip | |
cas: Hooked up GC to structured cache
Diffstat (limited to 'zenstore')
| -rw-r--r-- | zenstore/CAS.cpp | 7 | ||||
| -rw-r--r-- | zenstore/compactcas.cpp | 5 | ||||
| -rw-r--r-- | zenstore/compactcas.h | 1 | ||||
| -rw-r--r-- | zenstore/gc.cpp | 28 | ||||
| -rw-r--r-- | zenstore/include/zenstore/CAS.h | 1 | ||||
| -rw-r--r-- | zenstore/include/zenstore/gc.h | 26 |
6 files changed, 64 insertions, 4 deletions
diff --git a/zenstore/CAS.cpp b/zenstore/CAS.cpp index 807bba3b3..589637b62 100644 --- a/zenstore/CAS.cpp +++ b/zenstore/CAS.cpp @@ -100,6 +100,7 @@ public: virtual void FilterChunks(CasChunkSet& InOutChunks) override; virtual void Flush() override; virtual void Scrub(ScrubContext& Ctx) override; + virtual void GarbageCollect(GcContext& GcCtx) override; private: CasContainerStrategy m_TinyStrategy; @@ -234,6 +235,12 @@ CasImpl::Scrub(ScrubContext& Ctx) m_LargeStrategy.Scrub(Ctx); } +void +CasImpl::GarbageCollect(GcContext& GcCtx) +{ + m_LargeStrategy.GarbageCollect(GcCtx); +} + ////////////////////////////////////////////////////////////////////////// CasStore* diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index 612f87c7c..ee027b261 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -258,6 +258,11 @@ CasContainerStrategy::Scrub(ScrubContext& Ctx) } void +CasContainerStrategy::GarbageCollect(GcContext& GcCtx) +{ +} + +void CasContainerStrategy::MakeSnapshot() { RwLock::SharedLockScope _(m_LocationMapLock); diff --git a/zenstore/compactcas.h b/zenstore/compactcas.h index a512c3d93..8f7c0213b 100644 --- a/zenstore/compactcas.h +++ b/zenstore/compactcas.h @@ -61,6 +61,7 @@ struct CasContainerStrategy void Initialize(const std::string_view ContainerBaseName, uint64_t Alignment, bool IsNewStore); void Flush(); void Scrub(ScrubContext& Ctx); + void GarbageCollect(GcContext& GcCtx); private: const CasStoreConfiguration& m_Config; diff --git a/zenstore/gc.cpp b/zenstore/gc.cpp index e7c8f3a1a..c25ea344c 100644 --- a/zenstore/gc.cpp +++ b/zenstore/gc.cpp @@ -35,6 +35,18 @@ GcContext::ContributeCas(std::span<const IoHash> Cas) ////////////////////////////////////////////////////////////////////////// +GcContributor::GcContributor(CasGc& Gc) : m_Gc(Gc) +{ + m_Gc.AddGcContributor(this); +} + +GcContributor::~GcContributor() +{ + m_Gc.RemoveGcContributor(this); +} + +////////////////////////////////////////////////////////////////////////// + CasGc::CasGc(CasStore& Store) : m_CasStore(Store) { } @@ -43,13 +55,27 @@ CasGc::~CasGc() { } +void +CasGc::AddGcContributor(GcContributor* Contributor) +{ + RwLock::ExclusiveLockScope _(m_Lock); + m_GcContribs.push_back(Contributor); +} + +void +CasGc::RemoveGcContributor(GcContributor* Contributor) +{ + RwLock::ExclusiveLockScope _(m_Lock); + std::erase_if(m_GcContribs, [&](GcContributor* $) { return $ == Contributor; }); +} + void CasGc::CollectGarbage() { } void -CasGc::OnNewReferences(std::span<IoHash> Hashes) +CasGc::OnNewCidReferences(std::span<IoHash> Hashes) { ZEN_UNUSED(Hashes); } diff --git a/zenstore/include/zenstore/CAS.h b/zenstore/include/zenstore/CAS.h index dc7e260ab..738103f73 100644 --- a/zenstore/include/zenstore/CAS.h +++ b/zenstore/include/zenstore/CAS.h @@ -100,6 +100,7 @@ public: virtual void FilterChunks(CasChunkSet& InOutChunks) = 0; virtual void Flush() = 0; virtual void Scrub(ScrubContext& Ctx) = 0; + virtual void GarbageCollect(GcContext& GcCtx) = 0; protected: CasStoreConfiguration m_Config; diff --git a/zenstore/include/zenstore/gc.h b/zenstore/include/zenstore/gc.h index 33a43f4d2..dda33c9eb 100644 --- a/zenstore/include/zenstore/gc.h +++ b/zenstore/include/zenstore/gc.h @@ -3,12 +3,14 @@ #pragma once #include <zencore/iohash.h> +#include <zencore/thread.h> #include <span> namespace zen { class CasStore; +class CasGc; struct IoHash; /** Garbage Collection context object @@ -29,8 +31,20 @@ private: std::unique_ptr<GcState> m_State; }; +class GcContributor +{ +public: + GcContributor(CasGc& Gc); + ~GcContributor(); + + virtual void GarbageCollect(GcContext& GcCtx) = 0; + +protected: + CasGc& m_Gc; +}; + /** GC - */ + */ class CasGc { @@ -38,12 +52,18 @@ public: CasGc(CasStore& Store); ~CasGc(); + void AddGcContributor(GcContributor* Contributor); + void RemoveGcContributor(GcContributor* Contributor); + void CollectGarbage(); - void OnNewReferences(std::span<IoHash> Hashes); + void OnNewCidReferences(std::span<IoHash> Hashes); private: - CasStore& m_CasStore; + CasStore& m_CasStore; + RwLock m_Lock; + std::vector<GcContributor*> m_GcContribs; }; } // namespace zen + |