pub struct BufferedRaftLog<T>where
T: TypeConfig,{ /* private fields */ }Expand description
High-performance buffered Raft log with event-driven architecture
This implementation provides in-memory first access with configurable persistence strategies while ensuring thread safety and avoiding deadlocks.
Key design principles:
- Lock-free reads for 99% of operations
- Event-driven asynchronous processing
- Deadlock prevention through proper error handling
- Memory-efficient batch operations
Implementations§
Source§impl<T> BufferedRaftLog<T>where
T: TypeConfig,
impl<T> BufferedRaftLog<T>where
T: TypeConfig,
pub fn new( node_id: u32, persistence_config: PersistenceConfig, storage: Arc<SOF<T>>, ) -> (Self, UnboundedReceiver<IOTask>)
Sourcepub fn start(
self,
receiver: UnboundedReceiver<IOTask>,
log_flush_tx: Option<UnboundedSender<RoleEvent>>,
) -> Arc<Self>
pub fn start( self, receiver: UnboundedReceiver<IOTask>, log_flush_tx: Option<UnboundedSender<RoleEvent>>, ) -> Arc<Self>
Start the command processor and return an Arc-wrapped instance.
batch_processor runs on a dedicated OS thread (not a tokio worker) so that
synchronous RocksDB calls (db.write, flush_wal) never block the async runtime.
The thread owns its own new_current_thread runtime — fully independent of the
caller’s runtime lifecycle. When the caller’s runtime drops (e.g. at test teardown),
the IO thread’s timers and channels are unaffected; it exits cleanly on Shutdown.
Sourcepub fn remove_range(&self, range: RangeInclusive<u64>)
pub fn remove_range(&self, range: RangeInclusive<u64>)
Efficient range removal with targeted term index updates O(k + t) where k = number of entries removed, t = number of affected terms
Trait Implementations§
Source§impl<T> Debug for BufferedRaftLog<T>where
T: TypeConfig,
impl<T> Debug for BufferedRaftLog<T>where
T: TypeConfig,
Source§impl<T> Drop for BufferedRaftLog<T>where
T: TypeConfig,
impl<T> Drop for BufferedRaftLog<T>where
T: TypeConfig,
Auto Trait Implementations§
impl<T> !Freeze for BufferedRaftLog<T>
impl<T> !RefUnwindSafe for BufferedRaftLog<T>
impl<T> Send for BufferedRaftLog<T>
impl<T> Sync for BufferedRaftLog<T>
impl<T> Unpin for BufferedRaftLog<T>
impl<T> UnsafeUnpin for BufferedRaftLog<T>
impl<T> !UnwindSafe for BufferedRaftLog<T>
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
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>
T in a tonic::Request