diff options
| author | Martin Ridgers <[email protected]> | 2021-09-22 22:46:21 +0200 |
|---|---|---|
| committer | Martin Ridgers <[email protected]> | 2021-09-22 22:46:21 +0200 |
| commit | 1623f7471b9b0c09b7e9c98652c280d1f6559ca1 (patch) | |
| tree | 78518774fe79ddf3e266a75c699b697971f52f4b /zenstore/CAS.cpp | |
| parent | Merged main into linux-mac (diff) | |
| parent | Clang format fix. (diff) | |
| download | zen-1623f7471b9b0c09b7e9c98652c280d1f6559ca1.tar.xz zen-1623f7471b9b0c09b7e9c98652c280d1f6559ca1.zip | |
Merge main
Diffstat (limited to 'zenstore/CAS.cpp')
| -rw-r--r-- | zenstore/CAS.cpp | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/zenstore/CAS.cpp b/zenstore/CAS.cpp index 916e7f709..eaf72cb41 100644 --- a/zenstore/CAS.cpp +++ b/zenstore/CAS.cpp @@ -26,6 +26,39 @@ namespace zen { void +CasChunkSet::AddChunkToSet(const IoHash& HashToAdd) +{ + m_ChunkSet.insert(HashToAdd); +} + +void +CasChunkSet::RemoveChunksIf(std::function<bool(const IoHash& CandidateHash)>&& Predicate) +{ + for (auto It = begin(m_ChunkSet), ItEnd = end(m_ChunkSet); It != ItEnd;) + { + if (Predicate(*It)) + { + It = m_ChunkSet.erase(It); + } + else + { + ++It; + } + } +} + +void +CasChunkSet::IterateChunks(std::function<void(const IoHash& ChunkHash)>&& Callback) +{ + for (auto It = begin(m_ChunkSet), ItEnd = end(m_ChunkSet); It != ItEnd;) + { + Callback(*It); + } +} + +////////////////////////////////////////////////////////////////////////// + +void ScrubContext::ReportBadChunks(std::span<IoHash> BadChunks) { ZEN_UNUSED(BadChunks); @@ -111,9 +144,6 @@ CasImpl::Initialize(const CasStoreConfiguration& InConfig) m_TinyStrategy.Initialize("tobs", 16, IsNewStore); m_SmallStrategy.Initialize("sobs", 4096, IsNewStore); - - ScrubContext Ctx; - Scrub(Ctx); } CasStore::InsertResult @@ -176,6 +206,13 @@ CasImpl::Flush() void CasImpl::Scrub(ScrubContext& Ctx) { + if (m_LastScrubTime == Ctx.ScrubTimestamp()) + { + return; + } + + m_LastScrubTime = Ctx.ScrubTimestamp(); + m_SmallStrategy.Scrub(Ctx); m_TinyStrategy.Scrub(Ctx); m_LargeStrategy.Scrub(Ctx); @@ -222,11 +259,11 @@ TEST_CASE("CasStore") CHECK(Result2.New); CasChunkSet ChunkSet; - ChunkSet.AddChunk(Hash1); - ChunkSet.AddChunk(Hash2); + ChunkSet.AddChunkToSet(Hash1); + ChunkSet.AddChunkToSet(Hash2); Store->FilterChunks(ChunkSet); - CHECK(ChunkSet.GetChunkSet().size() == 0); + CHECK(ChunkSet.IsEmpty()); IoBuffer Lookup1 = Store->FindChunk(Hash1); CHECK(Lookup1); |