Trait paxakos::State[][src]

pub trait State: 'static + Clone + Debug + Send + Sized + Sync {
    type LogEntry: LogEntry;
    type Context: Debug + Send;
    type Outcome: 'static + Clone + Debug + Send + Sync + Unpin;
    type Effect: 'static + Send + Debug;
    type Node: NodeInfo;
    fn apply(
        &mut self,
        log_entry: &Self::LogEntry,
        context: &mut Self::Context
    ) -> (Self::Outcome, Self::Effect);
fn cluster_at(&self, round_offset: NonZeroUsize) -> Vec<Self::Node>; fn apply_unobserved(
        &mut self,
        log_entry: &Self::LogEntry,
        context: &mut Self::Context
    ) -> Self::Effect { ... }
fn concurrency(&self) -> NonZeroUsize { ... } }
Expand description

Distributed state to which log entries are applied.

Associated Types

Type of log entry that can be applied to this state.

An execution context.

The execution context commonly provides access to a working directory or other state that is node and instance specific.

Result of applying a log entry to the state.

This result is what those actively appending to the log receive.

Result of applying a log entry to the state.

This result is emitted as an Apply event event.

Node descriptor type, see NodeInfo.

Required methods

Applies the given log entry to this state object.

Implementations do not have to account for out-of-order application. Log entries are applied in a consistent order accross the cluster.

Note: The distributed log may contain duplicates of the same event, i.e. entries e1 and e2 may be appended to the log for rounds r1 and r2 such that e1.id() == e2.id() and r1 != r2. Implementations that choose to ignore the application of the second entry must take care to do so in a fashion that is consistent across the cluster.

Returns the set of nodes that make up the cluster at the given round offset.

The round offset is guaranteed to be less than or equal to the current level of concurrency. As such there must always be a known set of nodes that make up the cluster for the given round.

The order of the returned set must be determisistic, meaning it must be consistent across the entire cluster.

Provided methods

Applies the given log entry to this state object.

This method may be implemented as an optimization. It is called instead of apply when there are no observers for the result object.

Careful: Implementations must be equivalent to the default implementation in their effects.

Returns the current level of concurrency, defaults to one.

Implementors