diff options
| author | tv <tv@krebsco.de> | 2026-10-31 04:48:00 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-31 04:48:00 +0100 |
| commit | 3a4f0c0413f7e4eef5313882a7bcc43193166bbb (patch) | |
| tree | 898e7d2d958d46b4b918b1d8a84a2210ec8c15bb /src/state | |
| parent | 602dcc39ba2f7cd8a3ef1cd9abbaa204d8b13643 (diff) | |
unify request_sync logic
Diffstat (limited to 'src/state')
| -rw-r--r-- | src/state/host.rs | 3 | ||||
| -rw-r--r-- | src/state/mod.rs | 18 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/state/host.rs b/src/state/host.rs index a165637..9d77f35 100644 --- a/src/state/host.rs +++ b/src/state/host.rs @@ -15,7 +15,6 @@ use super::{AppState, HelloState, NodeLifecycle, StaleView, Standing}; use crate::document::replica::Epoch; use crate::document::store::ChangeSet; use crate::remake::{Host, PeerSummary, RemakeState}; -use crate::swarm::sync::SyncEvent; impl AppState { /// After the document was replaced: every peer's sync state refers to the old @@ -56,7 +55,7 @@ impl AppState { } for (id, _) in peers { - let _ = self.sync_events.send(SyncEvent::PeerNeedsSync(id)); + self.request_sync(&id); } } } 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() |
