Struct openraft::storage::StorageHelper
source · pub struct StorageHelper<'a, C, Sto>where
C: RaftTypeConfig,
Sto: RaftStorage<C>,{ /* private fields */ }
Expand description
StorageHelper provides additional methods to access a RaftStorage implementation.
Implementations§
source§impl<'a, C, Sto> StorageHelper<'a, C, Sto>where
C: RaftTypeConfig,
Sto: RaftStorage<C>,
impl<'a, C, Sto> StorageHelper<'a, C, Sto>where C: RaftTypeConfig, Sto: RaftStorage<C>,
pub fn new(sto: &'a mut Sto) -> Self
sourcepub async fn get_initial_state(
&mut self
) -> Result<RaftState<C::NodeId, C::Node>, StorageError<C::NodeId>>
pub async fn get_initial_state( &mut self ) -> Result<RaftState<C::NodeId, C::Node>, StorageError<C::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.
sourcepub async fn get_log_id(
&mut self,
log_index: u64
) -> Result<LogId<C::NodeId>, StorageError<C::NodeId>>
pub async fn get_log_id( &mut self, log_index: u64 ) -> Result<LogId<C::NodeId>, StorageError<C::NodeId>>
Get the log id of the entry at index
.
sourcepub async fn get_membership(
&mut self
) -> Result<MembershipState<C::NodeId, C::Node>, StorageError<C::NodeId>>
pub async fn get_membership( &mut self ) -> Result<MembershipState<C::NodeId, C::Node>, StorageError<C::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.
sourcepub async fn last_membership_in_log(
&mut self,
since_index: u64
) -> Result<Vec<StoredMembership<C::NodeId, C::Node>>, StorageError<C::NodeId>>
pub async fn last_membership_in_log( &mut self, since_index: u64 ) -> Result<Vec<StoredMembership<C::NodeId, C::Node>>, StorageError<C::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.
sourcepub async fn try_get_log_entry(
&mut self,
log_index: u64
) -> Result<Option<Entry<C>>, StorageError<C::NodeId>>
pub async fn try_get_log_entry( &mut self, log_index: u64 ) -> Result<Option<Entry<C>>, StorageError<C::NodeId>>
Try to get an log entry.
It does not return an error if the log entry at log_index
is not found.
sourcepub async fn get_log_entries<RB: RangeBounds<u64> + Clone + Debug + Send + Sync>(
&mut self,
range: RB
) -> Result<Vec<Entry<C>>, StorageError<C::NodeId>>
pub async fn get_log_entries<RB: RangeBounds<u64> + Clone + Debug + Send + Sync>( &mut self, range: RB ) -> Result<Vec<Entry<C>>, StorageError<C::NodeId>>
Get a series of log entries from storage.
Similar to try_get_log_entries
except an error will be returned if there is an entry not
found in the specified range.