diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/architecture.md | 2 | ||||
| -rw-r--r-- | docs/measurements.md | 3 | ||||
| -rw-r--r-- | docs/openapi.yaml | 5 | ||||
| -rw-r--r-- | docs/peers.md | 12 |
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 |
