summaryrefslogtreecommitdiffstats
path: root/src/swarm/sync.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm/sync.rs')
-rw-r--r--src/swarm/sync.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs
index 383cdaf..adf8146 100644
--- a/src/swarm/sync.rs
+++ b/src/swarm/sync.rs
@@ -305,6 +305,7 @@ pub(crate) async fn handle_sync(
let applied = {
let doc = Arc::clone(&state.doc);
let peer_state_mutex = Arc::clone(&peer_state_mutex);
+ let stats = Arc::clone(&state.stats);
let check_caught_up = !state.initial_sync_done.load(Ordering::Acquire);
let epoch = envelope.epoch;
let message = envelope.message;
@@ -334,7 +335,9 @@ pub(crate) async fn handle_sync(
peer_state.sync.reply_settled();
resend_if_needed(&peer, &mut peer_state.sync.state);
- let changed = replica.doc.get_heads() != heads_before;
+ let heads_after = replica.doc.get_heads();
+ stats.heads_seen(heads_after.len());
+ let changed = heads_after != heads_before;
Ok(Some((
// Only from a ready peer: a peer still catching up has empty heads, which
@@ -367,6 +370,9 @@ pub(crate) async fn handle_sync(
if caught_up && !state.initial_sync_done.swap(true, Ordering::AcqRel) {
info!(peer = %peer, "Initial sync complete");
+ state
+ .stats
+ .caught_up(state.traffic.total().received.sync.bytes);
source::finished(state, peer);
}