From 5581992d5603322d7f02bd76625334be3f8a2b18 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 3 Nov 2026 04:44:49 +0100 Subject: measure 2-hop neighbourhood --- src/swarm/peer/keepalive.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/swarm/peer/keepalive.rs') diff --git a/src/swarm/peer/keepalive.rs b/src/swarm/peer/keepalive.rs index 37fcba8..c04b1ad 100644 --- a/src/swarm/peer/keepalive.rs +++ b/src/swarm/peer/keepalive.rs @@ -34,11 +34,14 @@ pub(crate) async fn send_status(state: &AppState, peer: &str) -> Result<()> { /// Sends `peer` a STATUS announcing our new heads (`swarm::relay`): no keepalive, so it /// leaves the keepalives' schedule as it is, and it is answered only if the peer's heads -/// differ (`Status::announcing`). -pub(crate) async fn announce_heads(state: &AppState, peer: &str) -> Result<()> { +/// differ (`Status::announcing`). Whom we reach only `with_reaches` (`swarm::reach`): +/// announcements of heads go often. +pub(crate) async fn announce_heads(state: &AppState, peer: &str, with_reaches: bool) -> Result<()> { + let local = local_status(state, peer).await; let status = transport::Status { announcing: true, - ..local_status(state, peer).await + reaches: local.reaches.filter(|_| with_reaches), + ..local }; state .transport @@ -192,6 +195,7 @@ pub(crate) async fn local_status(state: &AppState, peer: &str) -> transport::Sta leaving: state.is_closing(), announcing: false, eager, + reaches: Some(crate::swarm::reach::published(state)), } } @@ -229,6 +233,9 @@ pub(super) async fn note_status(state: &AppState, peer: &str, remote: &transport peer_state.reported_heads = remote.heads.heads().map(<[_]>::len); peer_state.last_heads = Some((remote.epoch, remote.heads.clone())); peer_state.eager_to = remote.eager; + if let Some(reaches) = &remote.reaches { + peer_state.reaches = Some((Instant::now(), reaches.clone())); + } drop(peer_state); if left { info!(peer = %peer, "Peer said farewell; dormant until it is heard from again"); -- cgit v1.3.1