pub struct ReplicationHandler<T>where
T: TypeConfig,{
pub my_id: u32,
/* private fields */
}Fields§
§my_id: u32Implementations§
Source§impl<T> ReplicationHandler<T>where
T: TypeConfig,
impl<T> ReplicationHandler<T>where
T: TypeConfig,
pub fn new(my_id: u32) -> Self
Sourcepub async fn generate_new_entries(
&self,
entry_payloads: Vec<EntryPayload>,
current_term: u64,
raft_log: &Arc<ROF<T>>,
) -> Result<Vec<Entry>>
pub async fn generate_new_entries( &self, entry_payloads: Vec<EntryPayload>, current_term: u64, raft_log: &Arc<ROF<T>>, ) -> Result<Vec<Entry>>
Generate a new log entry including insert them into local raft log
Sourcepub fn prepare_peer_entries(
&self,
new_entries: &[Entry],
data: &ReplicationData,
max_legacy_entries: u64,
raft_log: &Arc<ROF<T>>,
) -> DashMap<u32, Vec<Entry>>
pub fn prepare_peer_entries( &self, new_entries: &[Entry], data: &ReplicationData, max_legacy_entries: u64, raft_log: &Arc<ROF<T>>, ) -> DashMap<u32, Vec<Entry>>
Prepare the items that need to be synchronized for each node
Sourcepub fn build_append_request(
&self,
raft_log: &Arc<ROF<T>>,
peer_id: u32,
entries_per_peer: &DashMap<u32, Vec<Entry>>,
data: &ReplicationData,
) -> (u32, AppendEntriesRequest)
pub fn build_append_request( &self, raft_log: &Arc<ROF<T>>, peer_id: u32, entries_per_peer: &DashMap<u32, Vec<Entry>>, data: &ReplicationData, ) -> (u32, AppendEntriesRequest)
Build an append request for a single node
Trait Implementations§
Source§impl<T> Clone for ReplicationHandler<T>where
T: TypeConfig + Clone,
impl<T> Clone for ReplicationHandler<T>where
T: TypeConfig + Clone,
Source§fn clone(&self) -> ReplicationHandler<T>
fn clone(&self) -> ReplicationHandler<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T> Debug for ReplicationHandler<T>where
T: TypeConfig,
impl<T> Debug for ReplicationHandler<T>where
T: TypeConfig,
Source§impl<T> ReplicationCore<T> for ReplicationHandler<T>where
T: TypeConfig,
impl<T> ReplicationCore<T> for ReplicationHandler<T>where
T: TypeConfig,
Source§fn handle_append_entries<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: AppendEntriesRequest,
state_snapshot: &'life1 StateSnapshot,
raft_log: &'life2 Arc<ROF<T>>,
) -> Pin<Box<dyn Future<Output = Result<AppendResponseWithUpdates>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_append_entries<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: AppendEntriesRequest,
state_snapshot: &'life1 StateSnapshot,
raft_log: &'life2 Arc<ROF<T>>,
) -> Pin<Box<dyn Future<Output = Result<AppendResponseWithUpdates>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
As Follower only
Source§fn if_update_commit_index_as_follower(
my_commit_index: u64,
last_raft_log_id: u64,
leader_commit_index: u64,
) -> Option<u64>
fn if_update_commit_index_as_follower( my_commit_index: u64, last_raft_log_id: u64, leader_commit_index: u64, ) -> Option<u64>
If leaderCommit > commitIndex, set commitIndex = min(leaderCommit, index of last new entry)
Source§fn handle_raft_request_in_batch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
entry_payloads: Vec<EntryPayload>,
state_snapshot: StateSnapshot,
leader_state_snapshot: LeaderStateSnapshot,
cluster_metadata: &'life1 ClusterMetadata,
ctx: &'life2 RaftContext<T>,
) -> Pin<Box<dyn Future<Output = Result<AppendResults>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_raft_request_in_batch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
entry_payloads: Vec<EntryPayload>,
state_snapshot: StateSnapshot,
leader_state_snapshot: LeaderStateSnapshot,
cluster_metadata: &'life1 ClusterMetadata,
ctx: &'life2 RaftContext<T>,
) -> Pin<Box<dyn Future<Output = Result<AppendResults>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
As Leader, send replications to peers (combines regular heartbeats and client proposals). Read more
Source§fn handle_success_response(
&self,
peer_id: u32,
peer_term: u64,
success_result: SuccessResult,
leader_term: u64,
) -> Result<PeerUpdate>
fn handle_success_response( &self, peer_id: u32, peer_term: u64, success_result: SuccessResult, leader_term: u64, ) -> Result<PeerUpdate>
Handles successful AppendEntries responses Read more
Source§fn handle_conflict_response(
&self,
peer_id: u32,
conflict_result: ConflictResult,
raft_log: &Arc<ROF<T>>,
current_next_index: u64,
) -> Result<PeerUpdate>
fn handle_conflict_response( &self, peer_id: u32, conflict_result: ConflictResult, raft_log: &Arc<ROF<T>>, current_next_index: u64, ) -> Result<PeerUpdate>
Resolves log conflicts from follower responses Read more
Source§fn retrieve_to_be_synced_logs_for_peers(
&self,
new_entries: Vec<Entry>,
leader_last_index_before_inserting_new_entries: u64,
max_legacy_entries_per_peer: u64,
peer_next_indices: &HashMap<u32, u64>,
raft_log: &Arc<ROF<T>>,
) -> DashMap<u32, Vec<Entry>>
fn retrieve_to_be_synced_logs_for_peers( &self, new_entries: Vec<Entry>, leader_last_index_before_inserting_new_entries: u64, max_legacy_entries_per_peer: u64, peer_next_indices: &HashMap<u32, u64>, raft_log: &Arc<ROF<T>>, ) -> DashMap<u32, Vec<Entry>>
Gathers legacy logs for lagging peers Read more
Source§fn check_append_entries_request_is_legal(
&self,
my_term: u64,
request: &AppendEntriesRequest,
raft_log: &Arc<ROF<T>>,
) -> AppendEntriesResponse
fn check_append_entries_request_is_legal( &self, my_term: u64, request: &AppendEntriesRequest, raft_log: &Arc<ROF<T>>, ) -> AppendEntriesResponse
Validates an incoming AppendEntries RPC from a Leader against Raft protocol rules. Read more
Auto Trait Implementations§
impl<T> Freeze for ReplicationHandler<T>
impl<T> RefUnwindSafe for ReplicationHandler<T>where
T: RefUnwindSafe,
impl<T> Send for ReplicationHandler<T>
impl<T> Sync for ReplicationHandler<T>
impl<T> Unpin for ReplicationHandler<T>where
T: Unpin,
impl<T> UnwindSafe for ReplicationHandler<T>where
T: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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