Skip to main content

Pending

Struct Pending 

Source
pub struct Pending<'a> { /* private fields */ }
Expand description

A streaming append in progress. See Log::begin.

Dropped without Pending::commit or Pending::abort, it aborts (twin-streaming, 2026-10-06). The partial frame is already in the segment file, and the writer appends with O_APPEND: before this, a ? between begin and commit (a write that failed, a wire that broke under a twin’s fetch) left the half frame where it was, the next append landed AFTER it while the index recorded the offset BEFORE it, and every read of that next frame was a corrupt header — a log broken by one failed transfer. Now the half frame is cut off the segment on every path out, and a partial transfer leaves exactly nothing.

Implementations§

Source§

impl Pending<'_>

Source

pub fn seq(&self) -> u64

The sequence number this frame will commit as.

Source

pub fn remaining(&self) -> u64

Bytes of the blob still owed.

Source

pub fn write(&mut self, chunk: &[u8]) -> Result<()>

Write a chunk of the blob.

Source

pub fn commit(self) -> Result<u64>

Finish: trailer, fsync, index. Durable when this returns — and so is every frame of a group committed before it (Pending::commit_unsynced).

Source

pub fn commit_unsynced(self) -> Result<u64>

Finish WITHOUT making it durable — one frame of a group commit (perf twin-apply-fsync, 2026-10-06). The frame is whole in the segment (staged or written, trailer and all), it holds its sequence number — the next begin takes the one after — but it is not fsynced, not indexed, not visible to readers and not the head until Log::sync (or any synced append, roll or release) makes the whole group durable with ONE fdatasync.

A crash before that loses the group’s tail, never anything acknowledged: open keeps every whole frame that reached the disk (each checks its own crc) and cuts the rest, and a twin re-fetches from its durable head.

Source

pub fn abort(self) -> Result<()>

Give up: the partial frame is cut off the segment.

Trait Implementations§

Source§

impl Drop for Pending<'_>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<'a> !Send for Pending<'a>

§

impl<'a> Freeze for Pending<'a>

§

impl<'a> RefUnwindSafe for Pending<'a>

§

impl<'a> Sync for Pending<'a>

§

impl<'a> Unpin for Pending<'a>

§

impl<'a> UnsafeUnpin for Pending<'a>

§

impl<'a> UnwindSafe for Pending<'a>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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