aboutsummaryrefslogtreecommitdiffstats
path: root/src/document/sync.rs
Commit message (Collapse)AuthorAgeFilesLines
* sync: a message carries the signatures of its changestv3 days1-3/+3
| | | | | | | | | | | | | | | A sync message carried the signatures its peer wasn't sent yet, by a cursor per peer. Changes sent again, as after a message taken as delivered and lost on the way, went without them: the peer was past them. Under a policy requiring signatures they waited until the writer's next signed change, or the next session. A message now carries the signatures of the changes it carries (Signatures::for_changes), whatever the peer was sent before: changes sent again arrive vouched for as the first time. Past 256 (a message carrying the batches of many writers), each writer's latest instead, as a delta carries. The cursor goes, and with it resetting it after a failed send or a new session.
* sync: a test exchanging until level, not one answertv3 days1-0/+17
| | | | | | | | | delivered_messages_are_answered_with_changes_we_lack failed now and then: after the answer, the node still lacked the peer's change. Automerge's sync tells what each side has by a Bloom filter, whose false positives take more rounds. The test now exchanges up to four rounds more, each asking for what is still missing, until both are level.
* sync: signatures go with changes onlytv3 days1-0/+7
| | | | | | | | | | | A sync message took the signatures its peer wasn't sent yet whenever it had a body, an Automerge message saying only what we have included. A signature belongs with the changes it vouches for: they go along the trees, and a peer that got them elsewhere got the signatures with them. Signatures now go in a message that carries changes (pushed, offered as a delta, or in an Automerge message carrying some: SyncSession:: carrying), and in no other.
* document: tell whether a document holds a change without building ittv3 days1-11/+12
| | | | | | | | | | | | | | | With the policy's reads kept, judging a change still costs about one read (some 3.5 µs), and so does judging without a policy: what is left is At::new, which asks get_change_by_hash for each head. Automerge builds the change again from the document's operations to answer, at a cost growing with its history. Screening asks it again for every candidate and every dependency, and sync for heads. Ask by the missing dependencies instead (changes::holds), which look the hash up: one the document holds is not among them. A change queued in the document, waiting for its dependencies, isn't either; but then some are missing, and only then is it asked the slow way. Every check of whether a document holds a change goes through it.
* swarm: changes taken unjudged, dropped (REFUSALS)tv4 days1-0/+16
| | | | | | | | | 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: refused oncetv4 days1-0/+23
| | | | | | | | 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: the policy enforcedtv4 days1-0/+10
| | | | | | | | _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.
* refuse misplaced authorstv5 days1-8/+41
|
* heads heard in announcementstv5 days1-6/+6
|
* heads heard in repliestv5 days1-3/+3
|
* heads heard forget senttv5 days1-0/+90
|
* sent hashes elsewhere measuredtv6 days1-0/+10
|
* known elsewhere prunedtv6 days1-0/+5
|
* sent hashes trimmedtv6 days1-5/+78
|
* sent hashes measuredtv6 days1-0/+8
|
* answering behind countedtv6 days1-0/+17
|
* late messages keep newer headstv6 days1-0/+73
|
* session model testtv6 days1-0/+3
|
* automerge pinnedtv6 days1-0/+103
|
* one walk sincetv6 days1-5/+12
|
* no bloom bytestv6 days1-14/+9
|
* handed over stays senttv6 days1-2/+35
|
* offer answerstv6 days1-0/+10
|
* add pushes match automerge testtv6 days1-0/+48
|
* broken pushes refusedtv6 days1-11/+31
|
* pushed have is the senders headstv6 days1-10/+39
|
* pushed heads as tipstv7 days1-6/+60
|
* push changes experimenttv7 days1-0/+123
|
* announce only to those behindtv7 days1-0/+5
|
* asked known elsewheretv7 days1-7/+36
|
* predecessors go alongtv7 days1-3/+60
|
* covered neighbours have ittv7 days1-0/+36
|
* new changes per messagetv7 days1-3/+5
|
* delta from held headstv7 days1-15/+68
|
* offer again ungeneratedtv7 days1-0/+86
|
* stale delta offerstv7 days1-0/+60
|
* delta known to sendertv7 days1-5/+7
|
* offered deltas lapsetv7 days1-3/+38
|
* fix: level means the peer has our headstv7 days1-6/+13
|
* tests count the changes senttv7 days1-5/+7
|
* no reset for heads still on their waytv7 days1-1/+44
|
* benchmark what sync bytes aretv7 days1-0/+12
|
* changes from a peer never go backtv7 days1-0/+48
|
* older delivered messages leave us leveltv7 days1-35/+73
|
* resend only what is neededtv7 days1-26/+61
|
* delivered means has all up to our headstv7 days1-13/+59
|
* any message taken as deliveredtv7 days1-26/+82
|
* tree messages need no answertv7 days1-0/+194
|
* tree changes had alreadytv8 days1-0/+7
|
* replace eager links by treestv8 days1-7/+0
|