pub trait QuorumSet {
type Id;
type Iter: Iterator<Item = Self::Id>;
// Required methods
fn is_quorum<'a, I>(&self, ids: I) -> bool
where Self::Id: 'a,
I: Iterator<Item = &'a Self::Id> + Clone;
fn ids(&self) -> Self::Iter;
}Expand description
Common interface for every quorum rule supported by this crate.
A quorum is a collection of nodes that a read or write operation in a distributed system has to contact. See: http://web.mit.edu/6.033/2005/wwwdocs/quorum_note.html
Every implementation must follow four rules:
- Upward-closed: adding IDs to an accepted quorum keeps it accepted.
VecProgressandverify_intersectionrely on this rule. - Closed over
ids(): an ID thatids()does not yield never changes the result ofis_quorum().verify_intersectionenumerates only the IDs thatids()yields, so it relies on this rule. - Duplicate-safe: an ID that appears more than once in the
is_quorum()input counts once, so callers may pass an iterator with repeats. - No empty quorum: an input that holds no ID from
ids(), such as an empty input, is never a quorum. An upward-closed rule that accepted the empty input would accept every input, so a read or write operation would succeed without contacting any node.
The crate provides implementations for flat majority sets, joint quorum sets,
ThresholdQuorumSet rules, Joint rules over any rule type, hierarchical QuorumTree
rules, and BothQuorums, which requires both a read and a write quorum.
ReadOrBoth holds either a read rule alone or a BothQuorums.
Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<ID> QuorumSet for BTreeSet<ID>
Majority quorum implementation for a flat voter set.
impl<ID> QuorumSet for BTreeSet<ID>
Majority quorum implementation for a flat voter set.
Source§impl<ID> QuorumSet for Vec<BTreeSet<ID>>
Joint quorum implementation for multiple flat voter sets.
impl<ID> QuorumSet for Vec<BTreeSet<ID>>
Joint quorum implementation for multiple flat voter sets.
A candidate set is accepted only when it is a majority quorum in every
member config. QuorumSet::ids returns the deduplicated union of all
config IDs. An empty Vec has no voter and accepts no candidate set,
like an empty BTreeSet.
Implementors§
Source§impl<ID> QuorumSet for QuorumTree<ID>
Hierarchical quorum implementation for QuorumTree.
impl<ID> QuorumSet for QuorumTree<ID>
Hierarchical quorum implementation for QuorumTree.
Evaluation follows the tree structure. ids() returns all leaf IDs once,
even when the same node appears in more than one subtree.