Skip to main content

CoreWalWriter

Struct CoreWalWriter 

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

Per-core WAL writer.

Each core owns its own writer, eliminating cross-core synchronization on the write path. Record format is compatible with [length: 4][crc32: 4][data: length]

Implementations§

Source§

impl CoreWalWriter

Source

pub fn new(core_id: usize, path: &Path) -> Result<Self, PerCoreWalError>

Creates a new per-core WAL writer.

§Arguments
  • core_id - The core ID for this writer
  • path - Path to the segment file
§Errors

Returns an error if the file cannot be created or opened.

Source

pub fn open_at( core_id: usize, path: &Path, position: u64, ) -> Result<Self, PerCoreWalError>

Opens an existing segment file at a specific position.

Used during recovery to resume writing.

§Errors

Returns an error if the file cannot be opened or truncated.

Source

pub fn core_id(&self) -> usize

Returns the core ID for this writer.

Source

pub fn position(&self) -> u64

Returns the current write position in bytes (includes un-synced data).

Source

pub fn synced_position(&self) -> u64

Returns the last synced position (durable after fdatasync).

Only data up to this position is guaranteed to survive a crash. Use this for checkpoint manifests instead of position().

Source

pub fn epoch(&self) -> u64

Returns the current epoch.

Source

pub fn sequence(&self) -> u64

Returns the current sequence number.

Source

pub fn path(&self) -> &Path

Returns the path to the segment file.

Source

pub fn entries_since_sync(&self) -> u64

Returns the number of entries since last sync.

Source

pub fn set_epoch(&mut self, epoch: u64)

Sets the current epoch (called by manager during checkpoint).

Source

pub fn append_put( &mut self, key: &[u8], value: &[u8], ) -> Result<u64, PerCoreWalError>

Appends a Put operation to the WAL.

§Errors

Returns an error if serialization or I/O fails.

Source

pub fn append_delete(&mut self, key: &[u8]) -> Result<u64, PerCoreWalError>

Appends a Delete operation to the WAL.

§Errors

Returns an error if serialization or I/O fails.

Source

pub fn append_put_via_storage_io( &mut self, key: &[u8], value: &[u8], sio: &mut dyn StorageIo, fd: IoFd, ) -> Result<u64, PerCoreWalError>

Appends a Put operation via [StorageIo].

§Errors

Returns an error if serialization or I/O submission fails.

Source

pub fn append_delete_via_storage_io( &mut self, key: &[u8], sio: &mut dyn StorageIo, fd: IoFd, ) -> Result<u64, PerCoreWalError>

Appends a Delete operation via [StorageIo].

§Errors

Returns an error if serialization or I/O submission fails.

Source

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

Appends a raw entry to the WAL.

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

§Errors

Returns an error if serialization or I/O fails.

Source

pub fn append_via_storage_io( &mut self, entry: &PerCoreWalEntry, sio: &mut dyn StorageIo, fd: IoFd, ) -> Result<u64, PerCoreWalError>

Appends a raw entry to the WAL via a [StorageIo] backend.

Identical to append but uses non-blocking I/O. The caller must poll sio.poll_completions() to drain completions.

§Errors

Returns an error if serialization fails or the I/O submission fails.

Source

pub fn sync_via_storage_io( &mut self, sio: &mut dyn StorageIo, fd: IoFd, ) -> Result<u64, PerCoreWalError>

Syncs the WAL segment via a [StorageIo] backend.

Submits an fdatasync through the I/O backend. Non-blocking — the caller must poll for the completion token.

§Errors

Returns an error if the submission fails.

Source

pub fn check_completions( &mut self, completions: &[IoCompletion], ) -> Result<bool, PerCoreWalError>

Check I/O completions and update sync state.

Scans completions for the pending sync token. If found and successful, calls mark_synced. If found and failed (negative result = errno), returns an error.

Returns Ok(true) if the sync completed successfully, Ok(false) if no matching completion was found, or Err if the sync failed.

Call this after every StorageIo::poll_completions round.

§Errors

Returns PerCoreWalError::Io if the kernel reported a sync failure.

Source

pub fn is_sync_pending(&self) -> bool

Returns true if a sync is pending (submitted but not yet completed).

Source

pub fn mark_synced(&mut self)

Mark the current write position as synced (durable).

Used by the direct (non-StorageIo) sync path after a blocking fdatasync where all data up to position is guaranteed durable. The StorageIo path uses Self::check_completions instead, which advances only to the boundary recorded at submission time.

Source

pub fn append_checkpoint( &mut self, checkpoint_id: u64, ) -> Result<u64, PerCoreWalError>

Appends a Checkpoint marker to the WAL.

§Errors

Returns an error if serialization or I/O fails.

Source

pub fn append_epoch_barrier(&mut self) -> Result<u64, PerCoreWalError>

Appends an EpochBarrier to the WAL.

§Errors

Returns an error if serialization or I/O fails.

Source

pub fn append_commit( &mut self, offsets: HashMap<String, u64>, watermark: Option<i64>, ) -> Result<u64, PerCoreWalError>

Appends a Commit entry to the WAL.

§Errors

Returns an error if serialization or I/O fails.

Source

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

Syncs the WAL segment to disk using fdatasync.

Uses sync_data() instead of sync_all() for better performance.

§Errors

Returns an error if the sync fails.

Source

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

Truncates the segment file at the specified position.

Used after checkpoint to remove entries that have been checkpointed.

§Errors

Returns an error if truncation fails.

Source

pub fn reset(&mut self) -> Result<(), PerCoreWalError>

Resets the segment (truncates to zero).

Used after successful checkpoint to clear the WAL.

§Errors

Returns an error if truncation fails.

Trait Implementations§

Source§

impl Debug for CoreWalWriter

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
§

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,