aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-31 03:49:56 +0100
committertv <tv@krebsco.de>2026-10-31 03:49:56 +0100
commit884893244138d35d9dd3d07ef14b5543c6ee2117 (patch)
treea85175778e018057043db6e19f3062d20ab0487e /src
parent725110193bf2d8acc43a6951decc75d155352a46 (diff)
unify sync_on predicate
Diffstat (limited to 'src')
-rw-r--r--src/state/host.rs6
-rw-r--r--src/state/peer.rs8
-rw-r--r--src/swarm/peer/keepalive.rs9
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 {