pub struct DefaultStateMachineHandler<T>where
T: TypeConfig,{ /* private fields */ }Implementations§
Source§impl<T> DefaultStateMachineHandler<T>where
T: TypeConfig,
impl<T> DefaultStateMachineHandler<T>where
T: TypeConfig,
pub fn new( node_id: u32, last_applied_index: u64, max_entries_per_chunk: usize, state_machine: Arc<SMOF<T>>, snapshot_config: SnapshotConfig, snapshot_policy: SNP<T>, watch_event_tx: Option<Sender<WatchResponse>>, ) -> Self
Trait Implementations§
Source§impl<T> Debug for DefaultStateMachineHandler<T>where
T: TypeConfig + Debug,
impl<T> Debug for DefaultStateMachineHandler<T>where
T: TypeConfig + Debug,
Source§impl<T> StateMachineHandler<T> for DefaultStateMachineHandler<T>where
T: TypeConfig,
impl<T> StateMachineHandler<T> for DefaultStateMachineHandler<T>where
T: TypeConfig,
Source§fn pending_range(&self) -> Option<RangeInclusive<u64>>
fn pending_range(&self) -> Option<RangeInclusive<u64>>
Get the interval to be processed
Source§fn update_pending(&self, new_commit: u64)
fn update_pending(&self, new_commit: u64)
Update pending commit index
Source§fn read_from_state_machine(&self, keys: Vec<Bytes>) -> Option<Vec<ClientResult>>
fn read_from_state_machine(&self, keys: Vec<Bytes>) -> Option<Vec<ClientResult>>
TODO: decouple client related commands with RAFT internal logic
Source§fn load_snapshot_data<'life0, 'async_trait>(
&'life0 self,
metadata: SnapshotMetadata,
) -> Pin<Box<dyn Future<Output = Result<BoxStream<'static, Result<SnapshotChunk>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn load_snapshot_data<'life0, 'async_trait>(
&'life0 self,
metadata: SnapshotMetadata,
) -> Pin<Box<dyn Future<Output = Result<BoxStream<'static, Result<SnapshotChunk>>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Load snapshot data as a stream of chunks (ZERO-COPY)
fn last_applied(&self) -> u64
Source§fn wait_applied<'life0, 'async_trait>(
&'life0 self,
target_index: u64,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn wait_applied<'life0, 'async_trait>(
&'life0 self,
target_index: u64,
timeout: Duration,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Waits until the state machine has applied entries up to the target index.
Returns error if timeout is reached before the target is applied. Read more
Source§fn apply_chunk<'life0, 'async_trait>(
&'life0 self,
chunk: Vec<Entry>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn apply_chunk<'life0, 'async_trait>(
&'life0 self,
chunk: Vec<Entry>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Applies a batch of committed log entries to the state machine
Source§fn apply_snapshot_stream_from_leader<'life0, 'life1, 'async_trait>(
&'life0 self,
current_term: u64,
stream: Box<Streaming<SnapshotChunk>>,
ack_tx: Sender<SnapshotAck>,
config: &'life1 SnapshotConfig,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn apply_snapshot_stream_from_leader<'life0, 'life1, 'async_trait>(
&'life0 self,
current_term: u64,
stream: Box<Streaming<SnapshotChunk>>,
ack_tx: Sender<SnapshotAck>,
config: &'life1 SnapshotConfig,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Receives and installs a snapshot stream pushed by the leader
Used when leader proactively sends snapshot updates to followers
Source§fn should_snapshot(&self, new_commit_data: NewCommitData) -> bool
fn should_snapshot(&self, new_commit_data: NewCommitData) -> bool
Determines if a snapshot should be created based on new commit data
Source§fn create_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(SnapshotMetadata, PathBuf)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(SnapshotMetadata, PathBuf)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Asynchronously creates a state machine snapshot with the following steps: Read more
Source§fn cleanup_snapshot<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
retain_count: u64,
snapshot_dir: &'life1 Path,
snapshot_dir_prefix: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn cleanup_snapshot<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
retain_count: u64,
snapshot_dir: &'life1 Path,
snapshot_dir_prefix: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Cleans up old snapshots before specified version
Source§fn validate_purge_request<'life0, 'life1, 'async_trait>(
&'life0 self,
current_term: u64,
leader_id: Option<u32>,
req: &'life1 PurgeLogRequest,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn validate_purge_request<'life0, 'life1, 'async_trait>(
&'life0 self,
current_term: u64,
leader_id: Option<u32>,
req: &'life1 PurgeLogRequest,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Validates if a log purge request from leader is authorized
Source§fn handle_purge_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
current_term: u64,
leader_id: Option<u32>,
last_purged: Option<LogId>,
req: &'life1 PurgeLogRequest,
raft_log: &'life2 Arc<ROF<T>>,
) -> Pin<Box<dyn Future<Output = Result<PurgeLogResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_purge_request<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
current_term: u64,
leader_id: Option<u32>,
last_purged: Option<LogId>,
req: &'life1 PurgeLogRequest,
raft_log: &'life2 Arc<ROF<T>>,
) -> Pin<Box<dyn Future<Output = Result<PurgeLogResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Processes log purge requests (for non-leader nodes)
Source§fn get_latest_snapshot_metadata(&self) -> Option<SnapshotMetadata>
fn get_latest_snapshot_metadata(&self) -> Option<SnapshotMetadata>
Retrieves metadata of the latest valid snapshot
Source§fn load_snapshot_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
metadata: &'life1 SnapshotMetadata,
seq: u32,
) -> Pin<Box<dyn Future<Output = Result<SnapshotChunk>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn load_snapshot_chunk<'life0, 'life1, 'async_trait>(
&'life0 self,
metadata: &'life1 SnapshotMetadata,
seq: u32,
) -> Pin<Box<dyn Future<Output = Result<SnapshotChunk>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Loads a specific chunk of snapshot data by sequence number
Auto Trait Implementations§
impl<T> !Freeze for DefaultStateMachineHandler<T>
impl<T> !RefUnwindSafe for DefaultStateMachineHandler<T>
impl<T> Send for DefaultStateMachineHandler<T>
impl<T> Sync for DefaultStateMachineHandler<T>
impl<T> Unpin for DefaultStateMachineHandler<T>where
<T as TypeConfig>::SNP: Unpin,
impl<T> UnwindSafe for DefaultStateMachineHandler<T>where
<T as TypeConfig>::SNP: UnwindSafe,
<T as TypeConfig>::SM: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request