aboutsummaryrefslogtreecommitdiffstats
path: root/src/state/peer.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-08 09:49:26 +0000
committertv <tv@krebsco.de>2026-11-08 14:29:46 +0100
commit800ef4faf27abebbce8a553763d6e60662fde997 (patch)
tree72e60244cc9fb8e349221925cbe7ae24f28ecc45 /src/state/peer.rs
parent23f0b629e5d80f880e5a0809f2e47b2d836ee2f9 (diff)
sync: a member refused as a whole, synced with again once it changed document
A node refusing a member as a whole sent it nothing, and lifted that only when a change of the member's was taken again. But a member that dropped what was refused (REFUSALS) starts its sync sessions over, and a fresh session sends no changes until the other side answers: the two waited for each other, and the member stayed refused. The refusal now notes the member's run and epoch_seq when it began; a member with another document since (it dropped what was refused, or rejoined) is synced with again.
Diffstat (limited to 'src/state/peer.rs')
-rw-r--r--src/state/peer.rs5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/state/peer.rs b/src/state/peer.rs
index e0b161d..f6e4a62 100644
--- a/src/state/peer.rs
+++ b/src/state/peer.rs
@@ -141,6 +141,10 @@ pub(crate) struct PeerState {
pub(crate) epoch_seq: Option<u32>,
/// The peer's run, from its HELLO or HELLO_REPLY: a new one starts `epoch_seq` over.
pub(crate) run_id: Option<crate::transport::RunId>,
+ /// While we refuse the peer as a whole (`access::screen`): its run and `epoch_seq`
+ /// when we began to. Another means it has another document since (it dropped what
+ /// we refused, `swarm::refusals`, or rejoined): we sync with it again.
+ pub(crate) refused_with: Option<(Option<crate::transport::RunId>, Option<u32>)>,
/// The newest handshake the peer started with us: its run and number
/// (`HelloRequest::handshake`). A HELLO repeating it is a retry or a late copy.
pub(crate) last_hello: Option<(crate::transport::RunId, u32)>,
@@ -319,6 +323,7 @@ impl PeerState {
epoch: None,
epoch_seq: None,
run_id: None,
+ refused_with: None,
last_hello: None,
handshake: 0,
reports_ready: None,