From 43230f03f7b7bd3ed3b4d45c04529ab3527a5ceb Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 03:49:56 +0100 Subject: unify sync_on predicate --- src/state/host.rs | 6 ++---- src/state/peer.rs | 8 ++++++++ src/swarm/peer/keepalive.rs | 9 ++------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/state/host.rs b/src/state/host.rs index ee67b80..04b328c 100644 --- a/src/state/host.rs +++ b/src/state/host.rs @@ -41,10 +41,8 @@ impl AppState { let mut peer_state = peer_state_mutex.lock().await; // What it said about syncing with us was about our old epoch. peer_state.syncs_with_us = None; - let gets_our_opening = !peer_state.liveness.is_dormant() - && matches!(peer_state.standing, Standing::Member { .. }) - && peer_state.epoch == Some(local) - && peer_state.reports_ready == Some(true); + let gets_our_opening = + peer_state.syncs_on(local) && peer_state.reports_ready == Some(true); if !gets_our_opening { announce.push(id); } diff --git a/src/state/peer.rs b/src/state/peer.rs index dc1b0ec..95a9dc3 100644 --- a/src/state/peer.rs +++ b/src/state/peer.rs @@ -275,6 +275,14 @@ impl PeerState { } } + /// Whether we sync with it on `epoch`: an active member on that epoch (what our + /// STATUS tells it as `syncs_with_you`). + pub(crate) fn syncs_on(&self, epoch: Epoch) -> bool { + !self.liveness.is_dormant() + && matches!(self.standing, Standing::Member { .. }) + && self.epoch == Some(epoch) + } + /// Whether to leave the peer out when choosing neighbours (`swarm::topology`). pub(crate) fn is_unreachable(&self) -> bool { self.unreachable_since.is_some() diff --git a/src/swarm/peer/keepalive.rs b/src/swarm/peer/keepalive.rs index 367b1d9..4b529f5 100644 --- a/src/swarm/peer/keepalive.rs +++ b/src/swarm/peer/keepalive.rs @@ -16,7 +16,7 @@ use tokio::time::Instant; use tracing::{debug, info, warn}; use super::handshake::ensure_handshake; -use crate::state::{AppState, Standing}; +use crate::state::AppState; use crate::swarm::sync::SyncEvent; use crate::swarm::topology; use crate::transport::{self, ParsedMessage}; @@ -138,12 +138,7 @@ pub(crate) async fn local_status(state: &AppState, peer: &str) -> transport::Sta ) }; let syncs_with_you = match state.get_peer_state(peer).await { - Some(peer_state) => { - let peer_state = peer_state.lock().await; - !peer_state.liveness.is_dormant() - && matches!(peer_state.standing, Standing::Member { .. }) - && peer_state.epoch == Some(epoch) - } + Some(peer_state) => peer_state.lock().await.syncs_on(epoch), None => false, }; transport::Status { -- cgit v1.3.1