From 7470383534af8298d4154e579ed3d3fa644d18ed Mon Sep 17 00:00:00 2001 From: Eric Voskuil Date: Sat, 8 Aug 2026 11:01:42 -0400 Subject: [PATCH 1/2] Defer reload while accessors held. --- src/chasers/chaser_storage.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/chasers/chaser_storage.cpp b/src/chasers/chaser_storage.cpp index 5ee4a03c..7034e88c 100644 --- a/src/chasers/chaser_storage.cpp +++ b/src/chasers/chaser_storage.cpp @@ -152,6 +152,14 @@ void chaser_storage::do_reload() NOEXCEPT << "(" << full_node::store::tables.at(table) << ")"); })) { + // Reload blockeed by accessor holding remap lock. + if (ec == database::error::reload_locked) + { + LOGN("Reload deferred by in-flight accessors."); + disk_timer_->start(BIND(handle_timer, _1)); + return; + } + LOGF("Reload from disk full condition failed, " << ec.message()); } else From a5519fd110956f438b08ad381554155e95b44658 Mon Sep 17 00:00:00 2001 From: Eric Voskuil Date: Sat, 8 Aug 2026 11:02:42 -0400 Subject: [PATCH 2/2] Monitor the space condition, not suspension. --- src/chasers/chaser_storage.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/chasers/chaser_storage.cpp b/src/chasers/chaser_storage.cpp index 7034e88c..5ab3a18e 100644 --- a/src/chasers/chaser_storage.cpp +++ b/src/chasers/chaser_storage.cpp @@ -126,8 +126,8 @@ void chaser_storage::handle_timer(const code& ec) NOEXCEPT return; } - // Network is resumed or store is failed, cancel monitoring. - if (!suspended() || archive().is_fault()) + // Store is failed or the condition is clear, cancel monitoring. + if (archive().is_fault() || !to_bool(archive().get_space())) return; // There are often multiple events, each resetting the timer. @@ -152,7 +152,8 @@ void chaser_storage::do_reload() NOEXCEPT << "(" << full_node::store::tables.at(table) << ")"); })) { - // Reload blockeed by accessor holding remap lock. + // A locked reload is a wait (in-flight accessors), not a failure: + // retry on the timer. All other store errors are terminal. if (ec == database::error::reload_locked) { LOGN("Reload deferred by in-flight accessors.");