diff options
Diffstat (limited to 'src/swarm/peer.rs')
| -rw-r--r-- | src/swarm/peer.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs index f98bf17..9fe9b07 100644 --- a/src/swarm/peer.rs +++ b/src/swarm/peer.rs @@ -132,6 +132,7 @@ async fn note_keepalive(state: &AppState, peer: &str, remote: &transport::Keepal peer_state.reports_ready = Some(remote.ready); peer_state.syncs_with_us = Some(remote.syncs_with_you); } + crate::swarm::source::reported(state, peer, remote.ready, Some(remote.syncs_with_you)); } async fn heal_if_diverged( @@ -442,7 +443,9 @@ pub(crate) async fn run_peer_worker(state: AppState) { ); } - if ping_due { + let probe_due = + !ping_due && crate::swarm::source::probe_due(&state, peer, Instant::now()); + if ping_due || probe_due { let local = local_keepalive(&state, peer).await; if let Err(error) = state .transport @@ -552,6 +555,8 @@ async fn observe_peer_epoch(state: &AppState, peer: &str, remote: Epoch) -> bool // (resetting both sides again) while this fresh sync is under way. peer_state.reset_sync(SessionCause::PeerEpochChanged); peer_state.last_sync_rx = Some(Instant::now()); + // Whether it would sync with us was said about its old epoch. + peer_state.syncs_with_us = None; } previous }; @@ -685,6 +690,7 @@ pub(crate) async fn handle_message( .lock() .await .mark_seen(Instant::now()); + crate::swarm::source::heard_from(state, &peer); if reactivated { info!(peer = %peer, "Dormant peer is active again; re-handshaking"); |
