diff options
Diffstat (limited to 'src/zenstore/scrubcontext.cpp')
| -rw-r--r-- | src/zenstore/scrubcontext.cpp | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/src/zenstore/scrubcontext.cpp b/src/zenstore/scrubcontext.cpp index f35178de6..f5a3784c3 100644 --- a/src/zenstore/scrubcontext.cpp +++ b/src/zenstore/scrubcontext.cpp @@ -6,7 +6,19 @@ namespace zen { -ScrubContext::ScrubContext() +ScrubDeadlineExpiredException::ScrubDeadlineExpiredException() : std::runtime_error("scrubbing deadline expired") +{ +} + +ScrubDeadlineExpiredException::~ScrubDeadlineExpiredException() +{ +} + +////////////////////////////////////////////////////////////////////////// + +ScrubContext::ScrubContext(WorkerThreadPool& InWorkerThreadPool, std::chrono::steady_clock::time_point Deadline) +: m_WorkerThreadPool(InWorkerThreadPool) +, m_Deadline(Deadline) { } @@ -14,4 +26,33 @@ ScrubContext::~ScrubContext() { } -} // namespace zen
\ No newline at end of file +HashKeySet +ScrubContext::BadCids() const +{ + RwLock::SharedLockScope _(m_Lock); + return m_BadCid; +} + +void +ScrubContext::ReportBadCidChunks(std::span<IoHash> BadCasChunks) +{ + RwLock::ExclusiveLockScope _(m_Lock); + m_BadCid.AddHashesToSet(BadCasChunks); +} + +bool +ScrubContext::IsWithinDeadline() const +{ + return std::chrono::steady_clock::now() < m_Deadline; +} + +void +ScrubContext::ThrowIfDeadlineExpired() const +{ + if (IsWithinDeadline()) + return; + + throw ScrubDeadlineExpiredException(); +} + +} // namespace zen |