aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/access.md13
-rw-r--r--docs/architecture.md2
-rw-r--r--docs/measurements.md2
-rw-r--r--docs/openapi.yaml5
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