aboutsummaryrefslogtreecommitdiff
path: root/zenstore/CAS.cpp
diff options
context:
space:
mode:
authorMartin Ridgers <[email protected]>2021-09-22 22:46:21 +0200
committerMartin Ridgers <[email protected]>2021-09-22 22:46:21 +0200
commit1623f7471b9b0c09b7e9c98652c280d1f6559ca1 (patch)
tree78518774fe79ddf3e266a75c699b697971f52f4b /zenstore/CAS.cpp
parentMerged main into linux-mac (diff)
parentClang format fix. (diff)
downloadzen-1623f7471b9b0c09b7e9c98652c280d1f6559ca1.tar.xz
zen-1623f7471b9b0c09b7e9c98652c280d1f6559ca1.zip
Merge main
Diffstat (limited to 'zenstore/CAS.cpp')
-rw-r--r--zenstore/CAS.cpp49
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);