ME Writers Anti-stuck and Quarantine fixes

Co-Authored-By: Nook Scheel <nook@live.ru>
This commit is contained in:
Alexey
2026-03-20 00:41:40 +03:00
parent 67dc1e8d18
commit 1c6c73beda
2 changed files with 41 additions and 20 deletions

View File

@@ -71,11 +71,19 @@ impl MePool {
}
if let Some((addr, expiry)) = earliest_quarantine {
let remaining = expiry.saturating_duration_since(now);
if remaining.is_zero() {
return vec![addr];
}
drop(guard);
debug!(
%addr,
wait_ms = expiry.saturating_duration_since(now).as_millis(),
"All ME endpoints are quarantined for the DC group; retrying earliest one"
wait_ms = remaining.as_millis(),
"All ME endpoints quarantined; waiting for earliest to expire"
);
// After sleeping, the quarantine entry is expired but not removed yet.
// Callers that check is_endpoint_quarantined() will lazily clean it via retain().
tokio::time::sleep(remaining).await;
return vec![addr];
}
@@ -311,4 +319,4 @@ impl MePool {
dc_guard.remove(&dc_key);
});
}
}
}