1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright 2020 Graydon Hoare <graydon@pobox.com>
// Licensed under the MIT and Apache-2.0 licenses.
/*!
* This crate is a work in progress attempt to implement a small, special-case
* consensus-like algorithm called "reconfigurable lattice agreement", which has
* some desirable properties:
*
* - It's asynchronous, small, fast and simple compared with other
* consensus-like algorithms. Few states, message types and round-trips. The
* paper introducing it describes it in 20 lines of pseudocode.
*
* - It supports _online reconfiguration_ without any separate phases: you can
* add or subtract peers while it's running and it adapts to the changed
* quorum on the fly.
*
* The price for these desirable properties is high relative to general
* consensus, but a price you may able and willing to pay:
*
* - The "object" domain of discourse -- about which you're trying to come
* to agreement -- has to be a (join semi-)lattice.
*
* - You have to be ok with the "lattice agreement" API, which is one
* where you might get an "object" value that's possibly further
* up its lattice from the value you proposed, and might not even be
* a value that anyone proposed (just a join of proposals).
*
* Further, the representation of your quorum system (eg. a set of peers) has
* itself to be a lattice, though in this implementation it is a fixed peer-set
* quorum system, so you don't really get an option about that here.
*
* ## Reference
*
* Petr Kuznetsov, Thibault Rieutord, Sara Tucci-Piergiovanni.
* Reconfigurable Lattice Agreement and Applications. [Research Report]
* Institut Polytechnique Paris; CEA List. 2019. ffcea-02321547f
*
* https://hal-cea.archives-ouvertes.fr/cea-02321547
*
* ## Name
*
* Wikipedia:
*
* > The Aérospatiale/BAC Concorde is a British–French turbojet-powered
* > supersonic passenger airliner
* >
* > ...
* >
* > Concorde is from the French word concorde, which has an English
* > equivalent, concord. Both words mean agreement, harmony or union.
*/
// TODO: rename Peer parameter to PeerID, Participant to Peer?
// TODO: timeouts?
// TODO: lots more testing, model checking.
// TODO: add mechanism to approve/disapprove of specific quorums.
// TODO: add a trim watermark to CfgLD so it's not ever-growing.
pub use ;
pub use Message;
pub use Opinion;
pub use ;
pub use ;