diff options
| author | Stefan Boberg <[email protected]> | 2021-09-19 23:19:06 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-19 23:19:06 +0200 |
| commit | 3cf9dedfd08fe4d7a049e51b14a937f7a34afce3 (patch) | |
| tree | d68b5203818665f6f54aceea586f550dc6aadca4 /zenstore/CAS.cpp | |
| parent | Added BasicFile::StreamFile helper function to support reading large files in... (diff) | |
| download | zen-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.cpp | 24 |
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); |