Skip to main content

DoubleWriteBuffer

Struct DoubleWriteBuffer 

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

Double-write buffer file.

Implementations§

Source§

impl DoubleWriteBuffer

Source

pub fn open(path: &Path) -> Result<Self>

Open or create the double-write buffer file.

Source

pub fn write_record(&mut self, record: &WalRecord) -> Result<()>

Write a WAL record to the double-write buffer before WAL append.

The record is written at the current circular position and the file is fsynced immediately. Use write_record_deferred + flush for batch mode (multiple records per fsync).

Source

pub fn write_record_deferred(&mut self, record: &WalRecord) -> Result<()>

Write a WAL record to the DWB without fsyncing.

The data is written to the OS page cache but not guaranteed durable until flush() is called. Use this in batch mode: write all records in a group commit batch, then call flush() once — reducing fsync calls from N-per-batch to 1-per-batch.

Source

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

Flush the DWB header and fsync the file.

Must be called after one or more write_record_deferred calls to make the records durable. The single fsync covers all deferred writes since the last flush — amortizing the cost across the group commit batch.

Source

pub fn path(&self) -> &Path

Path to the double-write buffer file.

Source

pub fn recover_record(&mut self, target_lsn: u64) -> Result<Option<WalRecord>>

Try to recover a WAL record by LSN from the double-write buffer.

Scans all DWB_CAPACITY slots for a record matching the given LSN with valid CRC. We scan every slot rather than relying on count or write_pos because the header itself may be stale or corrupted after a crash. Each slot is self-describing: the record’s own CRC validates whether the slot contains usable data.

Trait Implementations§

Source§

impl Debug for DoubleWriteBuffer

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: 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> 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<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