From b77f2ce13ec3dc3aff2495b93ca51a3a622bafa8 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(+) 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