Skip to main content

QuorumBridge

Trait QuorumBridge 

Source
pub trait QuorumBridge<Other>
where Self: QuorumSet, Other: QuorumSet<Id = Self::Id>,
{ // Required method fn bridge_to(&self, other: Other) -> Self; }
Expand description

Builds an intermediate quorum set that has QuorumIntersection with both the source and the target quorum set.

Required Methods§

Source

fn bridge_to(&self, other: Other) -> Self

Build a quorum set X so that self ~ X ~ other, where ~ is the QuorumIntersection relation.

Then X is the intermediate quorum set when changing membership from self to other.

E.g.(cᵢcⱼ is a joint of cᵢ and cⱼ, and no two distinct configs among c₁, c₂, c₃ have intersecting quorums):

  • c₁.bridge_to(c₁) returns c₁
  • c₁.bridge_to(c₂) returns c₁c₂
  • c₁c₂.bridge_to(c₂) returns c₂
  • c₁c₂.bridge_to(c₁) returns c₁
  • c₁c₂.bridge_to(c₃) returns c₂c₃

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> QuorumBridge<BTreeSet<ID>> for Vec<BTreeSet<ID>>
where ID: Ord + Clone,

Builds an intermediate joint quorum set for a target flat config.

The result is the target alone when QuorumIntersection::intersects_with proves that every quorum of self intersects every quorum of the target, e.g. when the target adds one voter to a uniform self. Otherwise it is the joint of the last config of self and the target.

A Raft-style caller that applies a target-alone result must first commit an entry of the leader’s own term. Otherwise two leaders of different terms can each move from the same committed config to a different target, and the two targets can have disjoint quorums.

Source§

fn bridge_to(&self, other: BTreeSet<ID>) -> Self

Implementors§