summaryrefslogtreecommitdiffstats
path: root/src/swarm/peer.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-23 20:36:25 +0200
committertv <tv@krebsco.de>2026-10-23 20:48:19 +0200
commit7c9c903898fc15ef0b46973ddc05ee25926f3cfb (patch)
treed41245b19eb2dad41c0eaa58ef3d8cd44b9cdb99 /src/swarm/peer.rs
parent2e0b05c39138e79c49e17a52a01db82237d2a9e2 (diff)
record the cause that started a sync session
Diffstat (limited to 'src/swarm/peer.rs')
-rw-r--r--src/swarm/peer.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/swarm/peer.rs b/src/swarm/peer.rs
index 836a967..1e8b91d 100644
--- a/src/swarm/peer.rs
+++ b/src/swarm/peer.rs
@@ -13,7 +13,7 @@ use tracing::{debug, info, instrument, trace, warn};
use crate::document::replica::{Epoch, EpochRelation};
use crate::document::store::{self, StoreError};
-use crate::state::{AppState, HelloState, Liveness, PeerState, Standing};
+use crate::state::{AppState, HelloState, Liveness, PeerState, SessionCause, Standing};
use crate::swarm::sync::{SyncEvent, handle_sync};
use crate::transport::{self, ParsedMessage};
@@ -503,7 +503,7 @@ async fn establish_peer(
// Duplicate replies (caused by our own retries) don't reset again.
if peer_state.hello_state != HelloState::Established {
peer_state.hello_state = HelloState::Established;
- peer_state.reset_sync();
+ peer_state.reset_sync(SessionCause::HandshakeComplete);
info!(peer = %peer, "Handshake complete; sync state reset");
}
@@ -539,7 +539,7 @@ async fn observe_peer_epoch(state: &AppState, peer: &str, remote: Epoch) -> bool
// The peer switched documents; our sync state describes its old one. Count
// the restart as sync activity, so the keepalive heal doesn't re-handshake
// (resetting both sides again) while this fresh sync is under way.
- peer_state.reset_sync();
+ peer_state.reset_sync(SessionCause::PeerEpochChanged);
peer_state.last_sync_rx = Some(Instant::now());
}
previous
@@ -623,7 +623,7 @@ async fn admit(state: &AppState, peer: &str, message: &ParsedMessage) -> bool {
}
peer_state.standing = Standing::Stranger;
peer_state.hello_state = HelloState::NotSent;
- peer_state.reset_sync();
+ peer_state.reset_sync(SessionCause::KeyRejected);
}
// The one place an operator can see why a node can't join: rate limited,
// since anyone can send us handshakes.
@@ -690,7 +690,7 @@ pub(crate) async fn handle_message(
{
let peer_state_mutex = state.get_or_create_peer_state(&peer).await;
let mut peer_state = peer_state_mutex.lock().await;
- peer_state.reset_sync();
+ peer_state.reset_sync(SessionCause::PeerHello);
peer_state.reply_owed = true;
}