From c3faf6ecde8157154a01daa2ddc0ac02e6c761f1 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 4 Nov 2026 19:46:17 +0100 Subject: tree messages need no answer --- src/swarm/sync.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/swarm/sync.rs') diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs index b20f7ef..02c6379 100644 --- a/src/swarm/sync.rs +++ b/src/swarm/sync.rs @@ -148,6 +148,13 @@ async fn deliver_sync_to_peer(state: &AppState, peer: &str) -> Result<()> { let replica = doc.blocking_read(); let mut peer_state = psm.blocking_lock(); let (epoch, epoch_seq) = (replica.epoch, replica.epoch_seq); + // Whose change it passes on, if any: this message carries it. + let writer = peer_state.tree_writer.take(); + // Along a tree, to a peer that had nothing we lack, with nothing + // awaited: taken as delivered (`SyncSession::assume_delivered`). + let level = writer.is_some() + && peer_state.sync.reply.is_none() + && peer_state.sync.have_all_theirs(&replica.doc); // Under the same locks as the epoch label: the message belongs to // this document. let message = @@ -171,8 +178,9 @@ async fn deliver_sync_to_peer(state: &AppState, peer: &str) -> Result<()> { ); transport::SyncBody::Delta(spec) }); - // Whose change it passes on, if any: this message carries it. - let writer = peer_state.tree_writer.take(); + if level && matches!(body, Some(transport::SyncBody::Message(_))) { + peer_state.sync.assume_delivered(replica.heads()); + } (peer_state.sync.id(), epoch, epoch_seq, body, writer) }; let Some(body) = body else { @@ -411,6 +419,11 @@ pub(crate) async fn handle_sync( peer_state.sync.resend_if_needed(&peer); replica.refresh_heads(); let heads_after = replica.heads().to_vec(); + if writer.is_some() { + // Level with the sender now: it takes the message as delivered, so + // there is nothing to answer (`SyncSession::answered_along_tree`). + peer_state.sync.answered_along_tree(&heads_after); + } stats.heads_seen(heads_after.len()); let changed = heads_after != heads_before; // Whose they are, to pass them on along their writers' trees, however they -- cgit v1.3.1