pub struct RaftLoop<A: CommitApplier, F: RequestForwarder = NoopForwarder> { /* private fields */ }Expand description
Raft event loop coordinator.
Owns the MultiRaft state (behind Arc<Mutex>) and drives it via periodic
ticks. Implements RaftRpcHandler so it can be passed directly to
NexarTransport::serve for incoming RPC dispatch.
Implementations§
Source§impl<A: CommitApplier> RaftLoop<A>
impl<A: CommitApplier> RaftLoop<A>
pub fn new( multi_raft: MultiRaft, transport: Arc<NexarTransport>, topology: Arc<RwLock<ClusterTopology>>, applier: A, ) -> Self
Source§impl<A: CommitApplier, F: RequestForwarder> RaftLoop<A, F>
impl<A: CommitApplier, F: RequestForwarder> RaftLoop<A, F>
Sourcepub fn with_forwarder(
multi_raft: MultiRaft,
transport: Arc<NexarTransport>,
topology: Arc<RwLock<ClusterTopology>>,
applier: A,
forwarder: Arc<F>,
) -> Self
pub fn with_forwarder( multi_raft: MultiRaft, transport: Arc<NexarTransport>, topology: Arc<RwLock<ClusterTopology>>, applier: A, forwarder: Arc<F>, ) -> Self
Create a RaftLoop with a custom request forwarder (for cluster mode).
Sourcepub fn with_vshard_handler(self, handler: VShardEnvelopeHandler) -> Self
pub fn with_vshard_handler(self, handler: VShardEnvelopeHandler) -> Self
Set a handler for incoming VShardEnvelope messages.
pub fn with_tick_interval(self, interval: Duration) -> Self
Sourcepub async fn run(&self, shutdown: Receiver<bool>)
pub async fn run(&self, shutdown: Receiver<bool>)
Run the event loop until shutdown.
This drives Raft elections, heartbeats, and message dispatch.
Call NexarTransport::serve separately with Arc<Self> as the handler.
Sourcepub fn propose(&self, vshard_id: u16, data: Vec<u8>) -> Result<(u64, u64)>
pub fn propose(&self, vshard_id: u16, data: Vec<u8>) -> Result<(u64, u64)>
Propose a command to the Raft group owning the given vShard.
Returns (group_id, log_index) on success.
Sourcepub fn group_statuses(&self) -> Vec<GroupStatus>
pub fn group_statuses(&self) -> Vec<GroupStatus>
Snapshot all Raft group states for observability (SHOW RAFT GROUPS).
Sourcepub fn propose_conf_change(
&self,
group_id: u64,
change: &ConfChange,
) -> Result<(u64, u64)>
pub fn propose_conf_change( &self, group_id: u64, change: &ConfChange, ) -> Result<(u64, u64)>
Propose a configuration change to a Raft group.
Returns (group_id, log_index) on success.
Trait Implementations§
Source§impl<A: CommitApplier, F: RequestForwarder> RaftRpcHandler for RaftLoop<A, F>
impl<A: CommitApplier, F: RequestForwarder> RaftRpcHandler for RaftLoop<A, F>
Auto Trait Implementations§
impl<A, F> Freeze for RaftLoop<A, F>where
A: Freeze,
impl<A, F = NoopForwarder> !RefUnwindSafe for RaftLoop<A, F>
impl<A, F> Send for RaftLoop<A, F>
impl<A, F> Sync for RaftLoop<A, F>
impl<A, F> Unpin for RaftLoop<A, F>where
A: Unpin,
impl<A, F> UnsafeUnpin for RaftLoop<A, F>where
A: UnsafeUnpin,
impl<A, F = NoopForwarder> !UnwindSafe for RaftLoop<A, F>
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.