aboutsummaryrefslogtreecommitdiffstats
path: root/src/state
diff options
context:
space:
mode:
Diffstat (limited to 'src/state')
-rw-r--r--src/state/host.rs3
-rw-r--r--src/state/mod.rs18
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()