Skip to main content

GroupCommitConsolidator

Struct GroupCommitConsolidator 

Source
pub struct GroupCommitConsolidator { /* private fields */ }
Expand description

The group commit consolidator accumulates frame batches from concurrent writers and flushes them to the WAL file in consolidated groups.

This struct manages the FILLING→FLUSHING→COMPLETE state machine. It is designed to be held behind a Mutex and accessed by concurrent writers through [GroupCommitQueue].

Implementations§

Source§

impl GroupCommitConsolidator

Source

pub fn new(config: GroupCommitConfig) -> Self

Create a new consolidator with the given configuration.

Source

pub const fn phase(&self) -> ConsolidationPhase

Current consolidation phase.

Source

pub const fn epoch(&self) -> u64

Current epoch.

Source

pub const fn max_group_delay(&self) -> Duration

Maximum time a batch may remain in the filling epoch before flush.

Source

pub const fn pending_frame_count(&self) -> usize

Number of pending frames in the current FILLING phase.

Source

pub fn pending_batch_count(&self) -> usize

Number of pending transaction batches.

Source

pub fn submit_batch( &mut self, batch: TransactionFrameBatch, ) -> Result<SubmitOutcome>

Submit a transaction’s frame batch for consolidation.

Returns Flusher if this writer should call flush_group, or Waiter if this writer should wait for the flush to complete.

§Errors

Returns Err if the consolidator is in an unexpected phase.

Source

pub fn should_flush_now(&self) -> bool

Check whether the flusher should flush now.

Returns true if:

  • The batch is full (pending_frame_count >= max_group_size), OR
  • The max group delay has been exceeded.
Source

pub fn time_until_flush(&self) -> Duration

Time remaining before the flusher must flush (for sleep/wait).

Source

pub fn fill_age(&self) -> Duration

Age of the current FILLING epoch from the first submitted batch.

Source

pub fn begin_flush(&mut self) -> Result<Vec<TransactionFrameBatch>>

Transition to FLUSHING phase and take ownership of the pending batches.

Returns the batches to be written and the page size needed for frame construction.

§Errors

Returns Err if not in FILLING phase.

Source

pub fn complete_flush(&mut self) -> Result<bool>

Mark the current flush as complete. Waiters can now proceed.

§Errors

Returns Err if not in FLUSHING phase. Returns true if pipelined batches were promoted and the caller should flush again. If the original flusher does not continue, a fresh submitter may explicitly claim the promoted epoch via Self::claim_flusher_vacancy.

Source

pub fn has_pipelined_batches(&self) -> bool

Whether pipelined batches are waiting for the next epoch.

Source

pub const fn has_flusher_vacancy(&self) -> bool

Whether a promoted epoch in Filling currently needs an explicit flusher claim before a replacement flusher takes over.

Source

pub fn claim_flusher_vacancy(&mut self) -> bool

Claim the promoted-epoch flusher vacancy after the original flusher stopped before calling begin_flush() again.

Returns true if the caller successfully claimed the vacancy.

Source

pub fn abort_flush(&mut self) -> Result<()>

Abort the current flush after the flusher observed an I/O error.

This transitions the state machine out of Flushing so waiters can be released with the epoch-level failure published by the caller.

§Errors

Returns Err if not in Flushing phase.

Source

pub const fn completed_epoch(&self) -> u64

The completed epoch counter (for waiter synchronization).

Trait Implementations§

Source§

impl Debug for GroupCommitConsolidator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, _span: NoopSpan) -> Self

Instruments this future with a span (no-op when disabled).
Source§

fn in_current_span(self) -> Self

Instruments this future with the current span (no-op when disabled).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more