From f40b729d35bc85cebe43428d2ba37036cc96e36f Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 23 Oct 2026 23:13:58 +0200 Subject: peers that just became ready get syncs When keepalive says ready and we didn't have taht on record before, the peer is queued for sync. Hello and hello reply don't do this because the handshake already queues a sync. --- src/swarm/peer.rs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/swarm') diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs index 0ef42bf..bc3eaf9 100644 --- a/src/swarm/peer.rs +++ b/src/swarm/peer.rs @@ -129,9 +129,18 @@ pub(crate) async fn local_keepalive(state: &AppState, peer: &str) -> transport:: async fn note_keepalive(state: &AppState, peer: &str, remote: &transport::Keepalive) { if let Some(peer_state) = state.get_peer_state(peer).await { let mut peer_state = peer_state.lock().await; + let became_ready = remote.ready && peer_state.reports_ready != Some(true); peer_state.reports_ready = Some(remote.ready); peer_state.syncs_with_us = Some(remote.syncs_with_you); peer_state.reported_heads = remote.heads.heads().map(<[_]>::len); + drop(peer_state); + if became_ready { + // We may have left the opening to it while it wasn't ready, and nothing else + // would make us look again. + let _ = state + .sync_events + .send(SyncEvent::PeerNeedsSync(peer.to_owned())); + } } crate::swarm::source::reported(state, peer, remote.ready, Some(remote.syncs_with_you)); } -- cgit v1.3.1