aboutsummaryrefslogtreecommitdiffstats
path: root/src/state/mod.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 04:48:00 +0100
committertv <tv@krebsco.de>2026-10-31 04:48:00 +0100
commit3a4f0c0413f7e4eef5313882a7bcc43193166bbb (patch)
tree898e7d2d958d46b4b918b1d8a84a2210ec8c15bb /src/state/mod.rs
parent602dcc39ba2f7cd8a3ef1cd9abbaa204d8b13643 (diff)
unify request_sync logic
Diffstat (limited to 'src/state/mod.rs')
-rw-r--r--src/state/mod.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/state/mod.rs b/src/state/mod.rs
index e8975e2..8f3a841 100644
--- a/src/state/mod.rs
+++ b/src/state/mod.rs
@@ -180,6 +180,24 @@ pub(crate) struct CatchUpSource {
}
impl AppState {
+ /// Asks the sync worker to look at `peer` (`SyncEvent::PeerNeedsSync`): whether to
+ /// send it a sync message now. Nothing if the worker is gone (the node stops).
+ pub(crate) fn request_sync(&self, peer: &str) {
+ let _ = self
+ .sync_events
+ .send(SyncEvent::PeerNeedsSync(peer.to_owned()));
+ }
+
+ /// `request_sync`, after `delay`.
+ pub(crate) fn request_sync_after(&self, peer: &str, delay: std::time::Duration) {
+ let events = self.sync_events.clone();
+ let peer = peer.to_owned();
+ tokio::spawn(async move {
+ tokio::time::sleep(delay).await;
+ let _ = events.send(SyncEvent::PeerNeedsSync(peer));
+ });
+ }
+
/// Whether the node shuts down (`closing`).
pub(crate) fn is_closing(&self) -> bool {
*self.closing.borrow()