diff options
| author | tv <tv@krebsco.de> | 2026-10-20 01:36:34 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-20 01:36:34 +0200 |
| commit | 3acbbd6cd6b64c6c39408dd254cc2dbcab1b3e65 (patch) | |
| tree | afaf883aeb949cdd79d7ef360ba9ee197072e368 /src/state.rs | |
| parent | 31dddb08e4f36392ed9b033f78efd00c243c46bb (diff) | |
add epoch catch-up / snapshots
Diffstat (limited to 'src/state.rs')
| -rw-r--r-- | src/state.rs | 30 |
1 files changed, 28 insertions, 2 deletions
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<Output = bool> + 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<Output = anyhow::Result<()>> + 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<Arc<ChangeSet>> { self.change_events.subscribe() } |
