From 3acbbd6cd6b64c6c39408dd254cc2dbcab1b3e65 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 20 Oct 2026 01:36:34 +0200 Subject: add epoch catch-up / snapshots --- src/state.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/state.rs') diff --git a/src/state.rs b/src/state.rs index a8b1917..b3a496c 100644 --- a/src/state.rs +++ b/src/state.rs @@ -566,13 +566,39 @@ impl Host for AppState { let mut summaries = Vec::with_capacity(peers.len()); for (id, peer) in peers { - let active = peer.lock().await.liveness == Liveness::Active; - summaries.push(PeerSummary { id, active }); + let peer = peer.lock().await; + summaries.push(PeerSummary { + id, + active: peer.liveness == Liveness::Active, + established: peer.hello_state == HelloState::Established, + epoch: peer.epoch, + }); } summaries } } + fn is_cluster_member(&self, peer: &str) -> impl Future + Send { + let state = self.clone(); + let peer = peer.to_owned(); + async move { + let Some(ours) = state.cluster_id().await else { + return false; + }; + crate::peer::peer_cluster(&state, &peer).await.as_deref() == Some(ours.as_str()) + } + } + + fn send_message( + &self, + peer: &str, + message: transport::ParsedMessage, + ) -> impl Future> + Send { + let state = self.clone(); + let peer = peer.to_owned(); + async move { state.transport.send_message(&peer, &message).await } + } + fn subscribe_changes(&self) -> broadcast::Receiver> { self.change_events.subscribe() } -- cgit v1.3.1