aboutsummaryrefslogtreecommitdiff
path: root/zenstore/CAS.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-19 23:19:06 +0200
committerStefan Boberg <[email protected]>2021-09-19 23:19:06 +0200
commit3cf9dedfd08fe4d7a049e51b14a937f7a34afce3 (patch)
treed68b5203818665f6f54aceea586f550dc6aadca4 /zenstore/CAS.cpp
parentAdded BasicFile::StreamFile helper function to support reading large files in... (diff)
downloadzen-3cf9dedfd08fe4d7a049e51b14a937f7a34afce3.tar.xz
zen-3cf9dedfd08fe4d7a049e51b14a937f7a34afce3.zip
Implemended basic scrubbing / detection of disk corruption. Still needs more code to propagate errors and make adjustments to account for them in higher level data structures
Diffstat (limited to 'zenstore/CAS.cpp')
-rw-r--r--zenstore/CAS.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/zenstore/CAS.cpp b/zenstore/CAS.cpp
index af0fcc609..b3ef7a320 100644
--- a/zenstore/CAS.cpp
+++ b/zenstore/CAS.cpp
@@ -25,6 +25,11 @@
namespace zen {
+void
+ScrubContext::ReportBadChunks(std::span<IoHash> BadChunks)
+{
+}
+
/**
* CAS store implementation
*
@@ -44,7 +49,7 @@ public:
virtual IoBuffer FindChunk(const IoHash& ChunkHash) override;
virtual void FilterChunks(CasChunkSet& InOutChunks) override;
virtual void Flush() override;
- virtual void Scrub() override;
+ virtual void Scrub(ScrubContext& Ctx) override;
private:
CasContainerStrategy m_TinyStrategy;
@@ -52,7 +57,7 @@ private:
FileCasStrategy m_LargeStrategy;
};
-CasImpl::CasImpl() : m_TinyStrategy(m_Config, m_Stats), m_SmallStrategy(m_Config, m_Stats), m_LargeStrategy(m_Config, m_Stats)
+CasImpl::CasImpl() : m_TinyStrategy(m_Config), m_SmallStrategy(m_Config), m_LargeStrategy(m_Config)
{
}
@@ -105,6 +110,9 @@ CasImpl::Initialize(const CasStoreConfiguration& InConfig)
m_TinyStrategy.Initialize("tobs", 16, IsNewStore);
m_SmallStrategy.Initialize("sobs", 4096, IsNewStore);
+
+ ScrubContext Ctx;
+ Scrub(Ctx);
}
CasStore::InsertResult
@@ -165,11 +173,11 @@ CasImpl::Flush()
}
void
-CasImpl::Scrub()
+CasImpl::Scrub(ScrubContext& Ctx)
{
- m_SmallStrategy.Scrub();
- m_TinyStrategy.Scrub();
- m_LargeStrategy.Scrub();
+ m_SmallStrategy.Scrub(Ctx);
+ m_TinyStrategy.Scrub(Ctx);
+ m_LargeStrategy.Scrub(Ctx);
}
//////////////////////////////////////////////////////////////////////////
@@ -194,7 +202,9 @@ TEST_CASE("CasStore")
std::unique_ptr<zen::CasStore> Store{CreateCasStore()};
Store->Initialize(config);
- Store->Scrub();
+
+ ScrubContext Ctx;
+ Store->Scrub(Ctx);
IoBuffer Value1{16};
memcpy(Value1.MutableData(), "1234567890123456", 16);