summaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-26 04:24:52 +0100
committertv <tv@krebsco.de>2026-10-26 04:24:52 +0100
commit2f3d191a12b6e03ef1845c202d15c7b90736558c (patch)
treef9e0aecafd5d32f904ffd62893132994ee52958f /src/api
parent7b7dcb5a77061cb69d368de263a02b5ad26fbf51 (diff)
unify peers snapshot logic
Diffstat (limited to 'src/api')
-rw-r--r--src/api/peers.rs13
-rw-r--r--src/api/stats/prometheus.rs8
2 files changed, 3 insertions, 18 deletions
diff --git a/src/api/peers.rs b/src/api/peers.rs
index fac3440..c7b3c50 100644
--- a/src/api/peers.rs
+++ b/src/api/peers.rs
@@ -1,14 +1,11 @@
//! /peers handlers.
-use std::sync::Arc;
-
use axum::{
Json,
extract::{Path, Query, State},
http::StatusCode,
};
use serde::{Deserialize, Serialize};
-use tokio::sync::Mutex;
use tokio::time::Instant;
use tracing::warn;
use utoipa::ToSchema;
@@ -17,7 +14,7 @@ use super::store_status;
use crate::document::replica::Epoch;
use crate::document::store;
use crate::locks::MutexExt;
-use crate::state::{AppState, HelloState, Incidents, Liveness, PeerState};
+use crate::state::{AppState, HelloState, Incidents, Liveness};
use crate::swarm::peer::forgotten_path;
use crate::transport::traffic::PeerTraffic;
@@ -120,13 +117,7 @@ pub(crate) struct DeletePeerQuery {
pub(crate) async fn list_peers(
State(state): State<AppState>,
) -> Result<Json<PeerListResponse>, StatusCode> {
- let snapshot: Vec<(String, Arc<Mutex<PeerState>>)> = state
- .peer_states
- .read()
- .await
- .iter()
- .map(|(pk, m)| (pk.clone(), Arc::clone(m)))
- .collect();
+ let snapshot = state.peers_snapshot().await;
let now = Instant::now();
let local_epoch = state.local_epoch();
diff --git a/src/api/stats/prometheus.rs b/src/api/stats/prometheus.rs
index 07a6cc8..3709ea4 100644
--- a/src/api/stats/prometheus.rs
+++ b/src/api/stats/prometheus.rs
@@ -120,13 +120,7 @@ struct Peer {
async fn peers(state: &AppState) -> Vec<Peer> {
let now = Instant::now();
- let snapshot: Vec<_> = state
- .peer_states
- .read()
- .await
- .iter()
- .map(|(key, peer_state)| (key.clone(), peer_state.clone()))
- .collect();
+ let snapshot = state.peers_snapshot().await;
let mut aliases = crate::swarm::members::aliases(&state.doc.read().await.doc);
let mut peers = Vec::with_capacity(snapshot.len());
for (key, peer_state) in snapshot {