diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/access.md | 13 | ||||
| -rw-r--r-- | docs/architecture.md | 2 | ||||
| -rw-r--r-- | docs/measurements.md | 2 | ||||
| -rw-r--r-- | docs/openapi.yaml | 5 |
4 files changed, 18 insertions, 4 deletions
diff --git a/docs/access.md b/docs/access.md index 31efe4e..44c89f3 100644 --- a/docs/access.md +++ b/docs/access.md @@ -246,7 +246,18 @@ from then on builds on what was refused, and logs it once. It shows in `GET /pee (`refused`, with the change and why), in `/admin/stats` (`sync.refusedPeers`) and on the dashboard. A node that only passed a refused change on isn't: the committer is, whoever brought it. It lasts until a change of the member's is taken again (it rejoined and -writes anew), or the epoch changes; forgetting or banning it is the operators'. A change whose +writes anew), or the epoch changes; forgetting or banning it is the operators'. + +A node takes a change the others refuse only if it didn't judge it as they do: under a +policy it didn't know yet (it receives without judging then), or before the policy +came. Everything it writes from then on builds on that change, and is refused too. So +a node refusing changes a peer brought tells it which broke a rule (REFUSALS, at most +every 30 seconds). The peer doesn't take the word for it: it judges each it holds +itself, by its rules as they are now. If they refuse one too, it drops it with +everything built on it, its document becoming what it would be without them, and puts +its own writes among them in the quarantine (`GET /admin/quarantine`), to be replayed +or discarded; what it writes from then on goes everywhere. If its rules take the +change, the two policies disagree, which it logs. A change whose dependencies haven't come yet waits for them. What it doesn't do yet: diff --git a/docs/architecture.md b/docs/architecture.md index 1713d40..ef7928e 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, PROBE/PROBE_REPLY, SIGNATURES) and the `Transport` trait; +envelope, STATUS/STATUS_REPLY, PING/PONG, blob messages, PROBE/PROBE_REPLY, SIGNATURES, REFUSALS) 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 8e36a7e..4550357 100644 --- a/docs/measurements.md +++ b/docs/measurements.md @@ -181,7 +181,7 @@ Messages and payload bytes by direction (`sent`, `received`, `refused`) and kind (`hello`, `helloReply`, `sync`, `status`, `statusReply`, `blob`, `identity` for WHO and ME, `paths` for PING and PONG, `probe` for PROBE and PROBE_REPLY, `plumtree` for PRUNE and GRAFT, `hyparview` for NEIGHBOUR, -NEIGHBOUR_REPLY and DISCONNECT, `signatures` for SIGNATURES). The layers below the node count WHO and ME, and the +NEIGHBOUR_REPLY and DISCONNECT, `signatures` for SIGNATURES, `refusals` for REFUSALS). 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 832d941..9b75618 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -2230,7 +2230,7 @@ components: ByKind: type: object - required: [hello, helloReply, sync, status, statusReply, blob, identity, paths, probe, plumtree, hyparview, signatures] + required: [hello, helloReply, sync, status, statusReply, blob, identity, paths, probe, plumtree, hyparview, signatures, refusals] properties: hello: $ref: '#/components/schemas/Counter' @@ -2263,6 +2263,9 @@ components: signatures: $ref: '#/components/schemas/Counter' description: SIGNATURES, signatures of changes no sync message took. + refusals: + $ref: '#/components/schemas/Counter' + description: REFUSALS, the changes a peer brought that broke the swarm's rules. Traffic: type: object |
