Skip to main content

StorageWriteAheadBuffer

Struct StorageWriteAheadBuffer 

Source
pub struct StorageWriteAheadBuffer {
    pub entries: Vec<BufferedEntry>,
    pub config: BufferConfig,
    pub next_seq: u64,
    pub total_buffered_bytes: u64,
}
Expand description

In-memory write-ahead buffer with sequence-numbered entries.

Incoming WriteOps are appended with monotonically increasing sequence numbers. The buffer tracks total payload bytes and the age of the oldest unflushed entry so that callers can decide when to flush.

After a flush the entries remain in entries (marked flushed = true) until trim_flushed is called, enabling crash-recovery replay via replay_from.

Fields§

§entries: Vec<BufferedEntry>

All entries in arrival order.

§config: BufferConfig

Configuration controlling flush thresholds.

§next_seq: u64

Next sequence number to assign.

§total_buffered_bytes: u64

Running total of size_bytes for unflushed Put ops.

Implementations§

Source§

impl StorageWriteAheadBuffer

Source

pub fn new(config: BufferConfig) -> Self

Create a new, empty buffer with the supplied configuration.

Source

pub fn write(&mut self, op: WriteOp, now_secs: u64) -> u64

Stage op in the buffer and return the assigned sequence number.

  • Put ops increment total_buffered_bytes by their size_bytes.
  • Delete and Update ops do not affect the byte counter.
Source

pub fn should_flush(&self, now_secs: u64) -> bool

Returns true if any flush threshold has been reached.

Triggers when:

Source

pub fn flush(&mut self, _now_secs: u64) -> FlushResult

Mark every unflushed entry as flushed and return a FlushResult.

After this call total_buffered_bytes is reset to 0. Flushed entries are retained in entries until trim_flushed is called.

Source

pub fn pending_entries(&self) -> Vec<&BufferedEntry>

Returns references to all entries that have not yet been flushed, in arrival order.

Source

pub fn replay_from(&self, seq: u64) -> Vec<&BufferedEntry>

Returns references to all entries whose sequence number is ≥ seq, regardless of flushed state. Useful for crash-recovery replay.

Source

pub fn trim_flushed(&mut self)

Remove all entries that have been flushed, freeing memory.

After this call, replay_from will only see entries that have not yet been flushed.

Source

pub fn stats(&self) -> (usize, u64)

Returns (total_entry_count, unflushed_entry_count).

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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: 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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