aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/sync.rs
Commit message (Collapse)AuthorAgeFilesLines
* screen: what a node receives judged, policy or nottv3 days1-7/+7
| | | | | | | | | | | | | | | | | | | | | Review 2, N7: a node screened received changes only while its own document had a policy it enforces. A joiner's empty document has none, so its first sync, as much history as the node it joins through chose, was applied unjudged, and under signatures required unvouched; the same for any node while the policy's own change arrived with later ones. Sync messages, deltas and downloaded changes are now always screened, each change judged by the policy at its dependencies (1135), so the verdicts are the swarm's. While neither the document nor the changes hold a policy (none touches a "policy" key: inspect::touch_key), only an epoch's root is judged and nothing is placed: bench_screening, after 1188, measured placing everything at about as much again as applying (564 ms + 543 ms for 100 000 changes), judging by the rules at about five times (+2.5 s), which a document with a policy pays anyway. access.md no longer lists the joiner's first sync, nor nodes agreeing only as the policy reaches them (judged at the dependencies, they agree), as left to do; changes::load_delta is for tests now.
* screen: a signature vouches for its change and what it builds ontv3 days1-0/+3
| | | | | | | | | | | | | | | Review finding 5: vouching by (actor, seq) isn't bound to a hash. A member can make a change under another member's actor at a seq that member's signature covers. The change is then taken as vouched, and if it breaks a rule, the honest member is refused as a whole and logged as the one whose own change broke the rules. A signature now vouches for its change and the changes of its actor it builds on: in the document, as before; among received changes, those it reaches through the batch's dependencies. A received change under an actor at a seq whose change the document holds (a signature verified up to it) is a fork: refused as forged, never as its actor's node's, not told back in REFUSALS, and logged with the peer that brought it.
* sync: a member refused as a whole, synced with again once it changed documenttv3 days1-3/+21
| | | | | | | | | | | | A node refusing a member as a whole sent it nothing, and lifted that only when a change of the member's was taken again. But a member that dropped what was refused (REFUSALS) starts its sync sessions over, and a fresh session sends no changes until the other side answers: the two waited for each other, and the member stayed refused. The refusal now notes the member's run and epoch_seq when it began; a member with another document since (it dropped what was refused, or rejoined) is synced with again.
* swarm: changes taken unjudged, dropped (REFUSALS)tv3 days1-4/+15
| | | | | | | | | 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).
* access: members refused as a wholetv3 days1-0/+8
| | | | | | | | | With signatures required, a member whose own change broke a rule is refused as a whole: sent nothing, shown in /peers (refused), in stats (sync.refusedPeers) and on the dashboard, until a change of its is taken again or the epoch changes. Auth plan M6 (diverged standing).
* access: refused oncetv3 days1-5/+28
| | | | | | | | A refused change is remembered by its hash: offered again it is refused without decoding, judging or logging, so is one built on it, and a peer offering nothing else is answered later each time, up to a minute. Auth plan M6 (re-sending).
* access: signatures requiredtv3 days1-5/+20
| | | | | | | | "signatures": "required": a change counts only once a signature by its committer vouches for it, and waits until then; every node then signs every change it makes. Auth plan M6.
* access: the policy enforcedtv3 days1-2/+31
| | | | | | | | _continuum/access/policy ({"version": 1}) has every node screen every change it receives, on every path changes come in. A policy a node doesn't know stops its writes through the API. GET /admin/refused. Auth plan M6.
* signatures: with sync messagestv3 days1-1/+40
| | | | | | | Sync messages carry, for each actor's writes, the latest signature the sender checked; the receiver checks it once it holds the change. Auth plan M5.
* HyParView (slim)tv5 days1-3/+6
|
* dissemination traittv5 days1-3/+6
|
* trees at runtimetv5 days1-0/+3
|
* delta end guardedtv5 days1-7/+23
|
* writers own treetv5 days1-1/+46
|
* asks by askertv6 days1-0/+1
|
* offerer asked firsttv6 days1-0/+1
|
* answering behind countedtv6 days1-2/+7
|
* one walk sincetv6 days1-11/+9
|
* no bloom bytestv6 days1-3/+3
|
* no epoch tag measuretv6 days1-3/+1
|
* waiting not twicetv6 days1-1/+8
|
* offer answerstv6 days1-0/+11
|
* push by defaulttv6 days1-5/+4
|
* broken pushes refusedtv6 days1-14/+7
|
* pushed have is the senders headstv6 days1-5/+1
|
* push only below deflatetv6 days1-2/+8
|
* push changes experimenttv6 days1-16/+78
|
* deflate blob chunkstv6 days1-5/+32
|
* epoch tag in synctv6 days1-6/+13
|
* no swarm ID in synctv6 days1-22/+7
|
* announce only to those behindtv6 days1-0/+3
|
* measure sync envelopestv6 days1-0/+10
|
* asked known elsewheretv6 days1-1/+4
|
* covered neighbours have ittv6 days1-8/+13
|
* new changes per messagetv6 days1-1/+2
|
* delta from held headstv6 days1-1/+4
|
* offer again ungeneratedtv6 days1-32/+53
|
* stale delta offerstv6 days1-0/+19
|
* delta known to sendertv6 days1-1/+7
|
* delta propagationtv6 days1-1/+17
|
* one delta at a timetv6 days1-2/+15
|
* log why a deltatv6 days1-0/+6
|
* offered deltas lapsetv6 days1-4/+14
|
* throughput from delivered messagetv6 days1-0/+9
|
* hop delaystv6 days1-1/+10
|
* benchmark delays by pathtv6 days1-0/+3
|
* benchmark what sync bytes aretv7 days1-1/+5
|
* changes from a peer never go backtv7 days1-0/+4
|
* older delivered messages leave us leveltv7 days1-1/+3
|
* benchmark where twice comes fromtv7 days1-1/+1
|