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, mode: DwbMode) -> Result<Self>

Open or create the double-write buffer file in the requested I/O mode.

Returns None-wrapped errors for unsupported modes via Err(WalError::…); callers that want “off” should not call this at all.

Source

pub fn mode(&self) -> DwbMode

I/O mode this buffer was opened with.

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 (Buffered mode) or directly to the block device (Direct mode) 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