pub struct MultiRaft { /* private fields */ }Expand description
Multi-Raft coordinator managing multiple Raft groups on a single node.
This coordinator:
- Manages all Raft groups hosted on this node
- Batches heartbeats across groups sharing the same leader
- Routes incoming RPCs to the correct group
- Collects
Readyoutput from all groups for the caller to execute
Implementations§
Source§impl MultiRaft
impl MultiRaft
pub fn new(node_id: u64, routing: RoutingTable, data_dir: PathBuf) -> Self
Sourcepub fn with_election_timeout(self, min: Duration, max: Duration) -> Self
pub fn with_election_timeout(self, min: Duration, max: Duration) -> Self
Configure election timeout range.
Sourcepub fn with_heartbeat_interval(self, interval: Duration) -> Self
pub fn with_heartbeat_interval(self, interval: Duration) -> Self
Configure heartbeat interval.
Sourcepub fn add_group(&mut self, group_id: u64, peers: Vec<u64>) -> Result<()>
pub fn add_group(&mut self, group_id: u64, peers: Vec<u64>) -> Result<()>
Initialize a Raft group on this node.
Sourcepub fn tick(&mut self) -> MultiRaftReady
pub fn tick(&mut self) -> MultiRaftReady
Tick all Raft groups. Returns aggregated ready output.
Sourcepub fn propose(&mut self, vshard_id: u16, data: Vec<u8>) -> Result<(u64, u64)>
pub fn propose(&mut self, vshard_id: u16, data: Vec<u8>) -> Result<(u64, u64)>
Propose a command to the Raft group that owns the given vShard.
Returns (group_id, log_index) on success.
Sourcepub fn handle_append_entries(
&mut self,
req: &AppendEntriesRequest,
) -> Result<AppendEntriesResponse>
pub fn handle_append_entries( &mut self, req: &AppendEntriesRequest, ) -> Result<AppendEntriesResponse>
Route an AppendEntries RPC to the correct group.
Sourcepub fn handle_request_vote(
&mut self,
req: &RequestVoteRequest,
) -> Result<RequestVoteResponse>
pub fn handle_request_vote( &mut self, req: &RequestVoteRequest, ) -> Result<RequestVoteResponse>
Route a RequestVote RPC to the correct group.
Sourcepub fn handle_install_snapshot(
&mut self,
req: &InstallSnapshotRequest,
) -> Result<InstallSnapshotResponse>
pub fn handle_install_snapshot( &mut self, req: &InstallSnapshotRequest, ) -> Result<InstallSnapshotResponse>
Route an InstallSnapshot RPC to the correct group.
Sourcepub fn snapshot_metadata(&self, group_id: u64) -> Result<(u64, u64, u64)>
pub fn snapshot_metadata(&self, group_id: u64) -> Result<(u64, u64, u64)>
Get the current term and snapshot metadata for a group (for building InstallSnapshot RPCs).
Sourcepub fn handle_append_entries_response(
&mut self,
group_id: u64,
peer: u64,
resp: &AppendEntriesResponse,
) -> Result<()>
pub fn handle_append_entries_response( &mut self, group_id: u64, peer: u64, resp: &AppendEntriesResponse, ) -> Result<()>
Handle AppendEntries response for a specific group.
Sourcepub fn handle_request_vote_response(
&mut self,
group_id: u64,
peer: u64,
resp: &RequestVoteResponse,
) -> Result<()>
pub fn handle_request_vote_response( &mut self, group_id: u64, peer: u64, resp: &RequestVoteResponse, ) -> Result<()>
Handle RequestVote response for a specific group.
Sourcepub fn advance_applied(&mut self, group_id: u64, applied_to: u64) -> Result<()>
pub fn advance_applied(&mut self, group_id: u64, applied_to: u64) -> Result<()>
Advance applied index for a group after processing committed entries.
pub fn routing(&self) -> &RoutingTable
pub fn routing_mut(&mut self) -> &mut RoutingTable
pub fn node_id(&self) -> u64
pub fn group_count(&self) -> usize
Sourcepub fn groups_mut(&mut self) -> &mut HashMap<u64, RaftNode<RedbLogStorage>>
pub fn groups_mut(&mut self) -> &mut HashMap<u64, RaftNode<RedbLogStorage>>
Mutable access to the underlying Raft groups (for testing / bootstrap).
Sourcepub fn propose_conf_change(
&mut self,
group_id: u64,
change: &ConfChange,
) -> Result<(u64, u64)>
pub fn propose_conf_change( &mut self, group_id: u64, change: &ConfChange, ) -> Result<(u64, u64)>
Propose a configuration change to a Raft group.
The change is proposed as a regular Raft log entry with a special
prefix. When committed, the state machine applies it via
[reconfigure_group].
Returns (group_id, log_index) on success.
Sourcepub fn apply_conf_change(
&mut self,
group_id: u64,
change: &ConfChange,
) -> Result<()>
pub fn apply_conf_change( &mut self, group_id: u64, change: &ConfChange, ) -> Result<()>
Apply a committed configuration change to a Raft group.
Called by the state machine after a ConfChange entry is committed. Also updates the RoutingTable’s group membership.
Sourcepub fn match_index_for(&self, group_id: u64, peer: u64) -> Option<u64>
pub fn match_index_for(&self, group_id: u64, peer: u64) -> Option<u64>
Query a peer’s match_index from a specific Raft group’s leader state.
Sourcepub fn group_statuses(&self) -> Vec<GroupStatus>
pub fn group_statuses(&self) -> Vec<GroupStatus>
Snapshot of all Raft group states for observability.
Auto Trait Implementations§
impl Freeze for MultiRaft
impl !RefUnwindSafe for MultiRaft
impl Send for MultiRaft
impl Sync for MultiRaft
impl Unpin for MultiRaft
impl UnsafeUnpin for MultiRaft
impl !UnwindSafe for MultiRaft
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.