Skip to main content

WriteAheadLog

Struct WriteAheadLog 

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

Write-Ahead Log implementation.

Implementations§

Source§

impl WriteAheadLog

Source

pub fn new<P: AsRef<Path>>( path: P, sync_interval: Duration, ) -> Result<Self, WalError>

Create a new WAL instance.

§Arguments
  • path - Path to the WAL file
  • sync_interval - Interval for group commit
§Errors

Returns WalError::Io if the file cannot be created or opened.

Source

pub fn set_sync_on_write(&mut self, enabled: bool)

Enable sync on every write for stronger durability.

When enabled, every append() call triggers an immediate sync(), providing per-write durability at the cost of throughput (~10x lower). Without this, up to sync_interval of data may be lost on crash.

Source

pub fn append(&mut self, entry: &WalEntry) -> Result<u64, WalError>

Append an entry to the WAL.

Record format: [length: 4 bytes][crc32: 4 bytes][data: length bytes]

§Arguments
  • entry - The entry to append
§Errors

Returns WalError::Serialization if the entry cannot be serialized, or WalError::Io if the write fails.

Source

pub fn sync(&mut self) -> Result<(), WalError>

Force sync to disk using fdatasync.

Uses sync_data() instead of sync_all() for better performance. This syncs file data without updating metadata, saving 50-100μs per sync.

§Errors

Returns WalError::Io if the sync fails.

Source

pub fn read_from(&self, position: u64) -> Result<WalReader, WalError>

Read entries from a specific position.

§Arguments
  • position - Starting position to read from
§Errors

Returns WalError::Io if the file cannot be opened or seeked.

Source

pub fn position(&self) -> u64

Get the current position in the log.

Source

pub fn path(&self) -> &Path

Get the path to the WAL file.

Source

pub fn truncate(&mut self, position: u64) -> Result<(), WalError>

Truncate the log at the specified position.

Used after successful checkpointing to remove old entries.

§Errors

Returns WalError::Io if the truncation or file operations fail.

Source

pub fn repair(&mut self) -> Result<u64, WalError>

Repair the WAL by truncating to the last valid record.

This should be called during recovery to handle torn writes from crashes. It reads through the WAL, validates each record, and truncates at the first invalid record (torn write or corruption).

§Returns

Returns Ok(valid_position) where valid_position is the end of the last valid record (and the new WAL length).

§Errors

Returns WalError::Io if file operations fail.

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
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

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

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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
§

impl<T> LayoutRaw for T

§

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

Returns the layout of the type.
§

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

§

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

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

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

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

impl<T> Pointee for T

§

type Metadata = ()

The metadata type for pointers and references to this type.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Scope for T

§

fn with<F, R>(self, f: F) -> R
where Self: Sized, F: FnOnce(Self) -> R,

Scoped with ownership.
§

fn with_ref<F, R>(&self, f: F) -> R
where F: FnOnce(&Self) -> R,

Scoped with reference.
§

fn with_mut<F, R>(&mut self, f: F) -> R
where F: FnOnce(&mut Self) -> R,

Scoped with mutable reference.
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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

§

impl<T> Value for T
where T: Send + Sync + 'static,