diff options
| author | tv <tv@krebsco.de> | 2026-11-07 22:35:22 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-07 22:35:22 +0100 |
| commit | 7323e8ed8598cda9784493aa3334d947120b53d8 (patch) | |
| tree | 1e772cdf74974f918cf07d2e4b9d8e8593bed9dd /docs/access.md | |
| parent | d322e7d4aa41d94232113cb7680cec1d65a11b0c (diff) | |
swarm: changes taken unjudged, dropped (REFUSALS)
A node refusing changes a peer brought tells it which broke a rule; the
peer judges them itself, and if its rules refuse them too, drops them
with all built on them (its document forked without them, a fresh
actor), quarantining its own writes among them. Wire version 42.
Auth plan M6 (rejoin on taint).
Diffstat (limited to 'docs/access.md')
| -rw-r--r-- | docs/access.md | 13 |
1 files changed, 12 insertions, 1 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: |
