summaryrefslogtreecommitdiffstats
path: root/src/swarm/peer
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-29 01:25:55 +0100
committertv <tv@krebsco.de>2026-10-29 01:25:55 +0100
commit22b7deb7f6ae8d353af94ef1f02bcccf2779e1c2 (patch)
tree55e3a3bb6fbf1f80aca9dd391c6e3807000e906c /src/swarm/peer
parentc7e0c0d93ebdac6a63211913ced1e972ef23666a (diff)
topology: introduce outbound members
Diffstat (limited to 'src/swarm/peer')
-rw-r--r--src/swarm/peer/keepalive.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/swarm/peer/keepalive.rs b/src/swarm/peer/keepalive.rs
index ea7ade2..afc2b3d 100644
--- a/src/swarm/peer/keepalive.rs
+++ b/src/swarm/peer/keepalive.rs
@@ -171,9 +171,14 @@ pub(super) async fn note_status(state: &AppState, peer: &str, remote: &transport
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);
+ let changed =
+ peer_state.syncs_with_us.replace(remote.syncs_with_you) != Some(remote.syncs_with_you);
peer_state.reported_heads = remote.heads.heads().map(<[_]>::len);
drop(peer_state);
+ if changed {
+ // A neighbour that only connects out stays one as long as it says so.
+ state.topology_changed.notify_one();
+ }
// Off the consumer: telling which heads we lack takes the document's lock.
{
let (state, peer, remote) = (state.clone(), peer.to_owned(), remote.clone());