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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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