Skip to main content

StorageHelper

Struct StorageHelper 

Source
pub struct StorageHelper<'a, C, LS, SM>{ /* private fields */ }
Expand description

StorageHelper provides additional methods to access a RaftLogStorage and RaftStateMachine implementation.

Implementations§

Source§

impl<'a, C, LS, SM> StorageHelper<'a, C, LS, SM>

Source

pub fn new(sto: &'a mut LS, sm: &'a mut SM) -> StorageHelper<'a, C, LS, SM>

Creates a new StorageHelper that provides additional functions based on the underlying RaftLogStorage and RaftStateMachine implementation.

Source

pub async fn get_initial_state( &mut self, ) -> Result<RaftState<<C as RaftTypeConfig>::NodeId, <C as RaftTypeConfig>::Node, <<C as RaftTypeConfig>::AsyncRuntime as AsyncRuntime>::Instant>, StorageError<<C as RaftTypeConfig>::NodeId>>

Get Raft’s state information from storage.

When the Raft node is first started, it will call this interface to fetch the last known state from stable storage.

Source

pub async fn get_membership( &mut self, ) -> Result<MembershipState<<C as RaftTypeConfig>::NodeId, <C as RaftTypeConfig>::Node>, StorageError<<C as RaftTypeConfig>::NodeId>>

Returns the last 2 membership config found in log or state machine.

A raft node needs to store at most 2 membership config log:

  • The first one must be committed, because raft allows to propose new membership only when the previous one is committed.
  • The second may be committed or not.

Because when handling append-entries RPC, (1) a raft follower will delete logs that are inconsistent with the leader, and (2) a membership will take effect at once it is written, a follower needs to revert the effective membership to a previous one.

And because (3) there is at most one outstanding, uncommitted membership log, a follower only need to revert at most one membership log.

Thus a raft node will only need to store at most two recent membership logs.

Source

pub async fn last_membership_in_log( &mut self, since_index: u64, ) -> Result<Vec<StoredMembership<<C as RaftTypeConfig>::NodeId, <C as RaftTypeConfig>::Node>>, StorageError<<C as RaftTypeConfig>::NodeId>>

Get the last 2 membership configs found in the log.

This method returns at most membership logs with greatest log index which is >=since_index. If no such membership log is found, it returns None, e.g., when logs are cleaned after being applied.

Auto Trait Implementations§

§

impl<'a, C, LS, SM> !UnwindSafe for StorageHelper<'a, C, LS, SM>

§

impl<'a, C, LS, SM> Freeze for StorageHelper<'a, C, LS, SM>

§

impl<'a, C, LS, SM> RefUnwindSafe for StorageHelper<'a, C, LS, SM>

§

impl<'a, C, LS, SM> Send for StorageHelper<'a, C, LS, SM>

§

impl<'a, C, LS, SM> Sync for StorageHelper<'a, C, LS, SM>

§

impl<'a, C, LS, SM> Unpin for StorageHelper<'a, C, LS, SM>
where C: Unpin,

§

impl<'a, C, LS, SM> UnsafeUnpin for StorageHelper<'a, C, LS, SM>

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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> OptionalSend for T
where T: Send + ?Sized,

Source§

impl<T> OptionalSync for T
where T: Sync + ?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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more