aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/architecture.md2
-rw-r--r--docs/measurements.md3
-rw-r--r--docs/openapi.yaml5
-rw-r--r--docs/peers.md12
4 files changed, 17 insertions, 5 deletions
diff --git a/docs/architecture.md b/docs/architecture.md
index a63e36c..0f0bad7 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -77,7 +77,7 @@ it switched to the right document without trusting anyone.
## Modules
**[`transport/`](../src/transport/)** — [`mod.rs`](../src/transport/mod.rs) defines the message types (HELLO, HELLO_REPLY, sync
-envelope, STATUS/STATUS_REPLY, PING/PONG, blob messages, LINKS/LINKS_REPLY) and the `Transport` trait;
+envelope, STATUS/STATUS_REPLY, PING/PONG, blob messages, LINKS/LINKS_REPLY, PROBE/PROBE_REPLY) and the `Transport` trait;
[`wire.rs`](../src/transport/wire.rs) is the wire format (a version byte, bumped with every change to the format,
and a kind byte, then the message in MessagePack, derived from the types in [`mod.rs`](../src/transport/mod.rs)
with codecs for hashes and IDs); [`mycelium/`](../src/transport/mycelium/) (with the `mycelium` feature) is the REST
diff --git a/docs/measurements.md b/docs/measurements.md
index f49f4ff..099bb40 100644
--- a/docs/measurements.md
+++ b/docs/measurements.md
@@ -179,7 +179,8 @@ clocks"); setting them is the operating system's job (NTP).
Messages and payload bytes by direction (`sent`, `received`, `refused`) and kind
(`hello`, `helloReply`, `sync`, `status`, `statusReply`, `blob`, `identity` for WHO and
-ME, and `paths` for PING and PONG). The layers below the node count WHO and ME, and the
+ME, `paths` for PING and PONG, `links` for LINKS and their replies, `probe` for PROBE
+and PROBE_REPLY). The layers below the node count WHO and ME, and the
paths layer's own PINGs and PONGs, under the address they went to or came from; a peer
(`/peers`) has those of its addresses too, where it is known to be at them. Payload bytes are what a transport's message carries (the wire
encoding): not the transport's framing (for Mycelium, its topic and the base64 of its
diff --git a/docs/openapi.yaml b/docs/openapi.yaml
index da89b6c..bd3186b 100644
--- a/docs/openapi.yaml
+++ b/docs/openapi.yaml
@@ -1707,7 +1707,7 @@ components:
ByKind:
type: object
- required: [hello, helloReply, sync, status, statusReply, blob, identity, paths, links]
+ required: [hello, helloReply, sync, status, statusReply, blob, identity, paths, links, probe]
properties:
hello:
$ref: '#/components/schemas/Counter'
@@ -1731,6 +1731,9 @@ components:
links:
$ref: '#/components/schemas/Counter'
description: LINKS and LINKS_REPLY, asked for and answered for a map of the swarm (the dashboard).
+ probe:
+ $ref: '#/components/schemas/Counter'
+ description: PROBE and PROBE_REPLY, asking others whether they reach a member before recording a link to it as unreached.
Traffic:
type: object
diff --git a/docs/peers.md b/docs/peers.md
index dd3186f..79f2abb 100644
--- a/docs/peers.md
+++ b/docs/peers.md
@@ -366,9 +366,17 @@ its neighbours by the graph it doesn't reach (`unreached`), once down for four k
intervals, and its neighbours it reaches that the graph doesn't link it to (`reached`:
a ring going round a member it doesn't reach, a member reaching out from behind NAT),
once up for one; each comes out again after the
-other hold. On a stable swarm the entry has none. A member that went away is recorded
+other hold; a link the other end records as unreached already isn't recorded again.
+On a stable swarm the entry has none. A member that went away is recorded
as unreached by its neighbours (they can't tell it from a link that broke), and taken
-out once they reach it again.
+out once they reach it again: so a node first asks up to three
+of the member's own neighbours it reaches whether they reach it (a PROBE, answered from
+what they know, contacting nobody: an active session that answers; a session that
+doesn't, held dormant or unanswered HELLOs; or can't tell): if some don't and none does, the member is away and nothing is recorded
+(asked again after another hold); otherwise, or with no answer within 10 s, the link
+is recorded. A node that reaches nobody at all is the one away, and
+records nothing. PROBEs are their own message, apart from the dashboard's
+LINKS, which a node may leave unanswered.
A writer's changes pass on along its tree ([`swarm/tree.rs`](../src/swarm/tree.rs)), the same on every node:
built on the graph the member list gives (as if every member reached every other), less