aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-04 05:14:12 +0100
committertv <tv@krebsco.de>2026-11-04 05:14:12 +0100
commit40073ebf9570464a69a928eba9c51b4dad6e699a (patch)
treef82fdd38ed24603be5c66740af39a786f213cd1a /docs
parente8d1cbddcaec18f79f54cad671f15bbaa189673b (diff)
announcements answered when lacking
A neighbour now answers an announcement only if it lacks some of the announced heads. Heads that merely differ are no longer enough, since they do while writes go on. The check reads the document, so it runs off the message consumer, as the pull check already does.
Diffstat (limited to 'docs')
-rw-r--r--docs/architecture.md2
-rw-r--r--docs/peers.md5
2 files changed, 4 insertions, 3 deletions
diff --git a/docs/architecture.md b/docs/architecture.md
index 0ef4f37..2ad7638 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -235,7 +235,7 @@ tree reaches them, else in the slow round 2 s later.
replies, admit (swarm key), mark the peer seen, record its epoch (ignoring late ones),
then by type: HELLO answered, HELLO_REPLY establishes membership and discovers peers,
sync queued on its lane if on our epoch (held back from everyone but the source while catching
-up), STATUS answered with a STATUS_REPLY (an announcement only if the heads differ) and compared for divergence, blobs served or collected,
+up), STATUS answered with a STATUS_REPLY (an announcement only if the receiver lacks some of its heads) and compared for divergence, blobs served or collected,
LINKS answered with the node's links if the asker is a member, and again on each change while it subscribes, or with other members' links it asks for the asker, which can't reach them (`swarm::links`, for the dashboard);
PING and PONG (the paths layer answered the PING already) only mark the peer seen, and
after a PONG the peer's round-trip time is its path's again.
diff --git a/docs/peers.md b/docs/peers.md
index c2f1ddb..8b58df0 100644
--- a/docs/peers.md
+++ b/docs/peers.md
@@ -281,8 +281,9 @@ backbone (with 20 stable of 250 members and k = 12: about 65 links per stable me
Changes travel through a partial mesh by announcement and pull ([`swarm/relay.rs`](../src/swarm/relay.rs)): a node
pushes its own writes to its neighbours; after applying changes from one neighbour it
sends its other neighbours a STATUS with its new heads (marked as an announcement: no
-keepalive, and answered only by a neighbour whose heads differ, so one that has the
-changes already sends nothing back; nor is a neighbour told whose latest heads, as its
+keepalive, and answered only by a neighbour that lacks some of those heads, so one that
+has the changes already sends nothing back, even if its heads differ, as they do while
+writes go on and newer changes are still on their way to it; nor is a neighbour told whose latest heads, as its
own announcement or STATUS brought them, are this node's: announcements wait 200 to
400 ms, at random, so of two neighbours with the same news one is usually first, and
the other skips it), and a neighbour that lacks those heads pulls them (it sets them as the peer's heads in its sync state, so Automerge asks