Skip to main content

UniformReliableBroadcast

Struct UniformReliableBroadcast 

Source
pub struct UniformReliableBroadcast<P: Clone, L: VolatileLink<Data<P>> = PerfectLink<Data<P>>> { /* private fields */ }
Expand description

Broadcast with uniform agreement, over best-effort broadcast and a failure detector.

Implementations§

Source§

impl<P: Clone> UniformReliableBroadcast<P, PerfectLink<Data<P>>>

Source

pub fn new( me: NodeId, members: impl IntoIterator<Item = NodeId>, retransmit: Duration, heartbeat: Duration, detect_after: Duration, ) -> Self

Broadcast among members, which must include me.

heartbeat and detect_after configure the failure detector; detect_after must exceed heartbeat plus the network’s delivery bound, or the detector will accuse correct processes and uniform agreement can break.

Source§

impl<P: Clone, L: VolatileLink<Data<P>>> UniformReliableBroadcast<P, L>

Broadcast among members, over the link supplied.

Source

pub fn correct(&self) -> impl Iterator<Item = NodeId> + '_

The processes still believed correct, in a stable order.

Source

pub fn delivered_count(&self) -> usize

How many distinct messages have been delivered upward.

Source

pub fn pending_count(&self) -> usize

Messages seen but not yet deliverable.

Source

pub fn acknowledged_by( &self, id: BroadcastId, ) -> impl Iterator<Item = NodeId> + '_

Which processes have acknowledged id, for tests that need to see the condition forming.

Trait Implementations§

Source§

impl<P: Debug + Clone, L: Debug + VolatileLink<Data<P>>> Debug for UniformReliableBroadcast<P, L>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P: Clone, L> Protocol for UniformReliableBroadcast<P, L>
where L: VolatileLink<Data<P>>,

Source§

type Scope = <L as Protocol>::Scope

No scope conditions: this protocol’s guarantees do not lapse. Whatever the link’s guarantees are conditional on. This layer bridges an ending rather than absorbing it, but bridging is not the same as never having lapsed.

Source§

type Meta = Infallible

Keeps nothing durably: a crash loses everything this protocol knows.

Source§

fn on_init(&mut self, cx: &mut ProtoCx<'_, Self>)

Failure detection begins here, as Module 2.6 has it. It used to need a Start command because there was no init event to hang the detector’s first timer on.

Source§

fn on_scope_event(&mut self, scope: L::Scope, cx: &mut ProtoCx<'_, Self>)

Hand the scope ending down to the children. The trait’s default would drop it.

Source§

type Cmd = Cmd<P>

Requests from the layer above.
Source§

type Ind = Ind<P>

Indications to the layer above — this protocol delivering on its guarantee.
Source§

type Msg = Wire<<L as Protocol>::Msg>

What crosses the wire to a peer running the same protocol.
Source§

type Note = Note

The vocabulary in which this protocol narrates its decisions. Read more
Source§

type Entry = Infallible

The durable entries this protocol appends: what accumulates.
Source§

fn on_cmd(&mut self, cmd: Cmd<P>, cx: &mut ProtoCx<'_, Self>)

Handle a request from the layer above.
Source§

fn on_msg( &mut self, from: NodeId, msg: Wire<L::Msg>, cx: &mut ProtoCx<'_, Self>, )

Handle a message received from from.
Source§

fn on_timer(&mut self, id: TimerId, cx: &mut ProtoCx<'_, Self>)

Handle a timer that fired somewhere in this protocol or in what it composes. Read more
§

fn on_recovery( &mut self, _cx: &mut Cx<'_, Self::Msg, Self::Ind, Self::Note, Self::Meta, Self::Entry>, )

Resume after a crash, reading what survived. Read more

Auto Trait Implementations§

§

impl<P, L> Freeze for UniformReliableBroadcast<P, L>
where L: Freeze,

§

impl<P, L> RefUnwindSafe for UniformReliableBroadcast<P, L>

§

impl<P, L> Send for UniformReliableBroadcast<P, L>
where L: Send, P: Send,

§

impl<P, L> Sync for UniformReliableBroadcast<P, L>
where L: Sync, P: Sync,

§

impl<P, L> Unpin for UniformReliableBroadcast<P, L>
where L: Unpin, P: Unpin,

§

impl<P, L> UnsafeUnpin for UniformReliableBroadcast<P, L>
where L: UnsafeUnpin,

§

impl<P, L> UnwindSafe for UniformReliableBroadcast<P, L>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V