Oversized

Struct Oversized 

Source
pub struct Oversized<E: Storage + Metrics, I: Record, V: Codec> { /* private fields */ }
Expand description

Segmented journal for entries with oversized values.

Combines a fixed-size index journal with glob storage for variable-length values. Provides coordinated operations and crash recovery.

Implementations§

Source§

impl<E: Storage + Metrics, I: Record + Send + Sync, V: CodecShared> Oversized<E, I, V>

Source

pub async fn init(context: E, cfg: Config<V::Cfg>) -> Result<Self, Error>

Initialize with crash recovery validation.

Validates each index entry’s glob reference during replay. Invalid entries (pointing beyond glob size) are skipped, and the index journal is rewound to exclude trailing invalid entries.

Source

pub async fn append( &mut self, section: u64, entry: I, value: &V, ) -> Result<(u64, u64, u32), Error>

Append entry + value.

Writes value to glob first, then writes index entry with the value location.

Returns (position, offset, size) where:

  • position: Position in the index journal
  • offset: Byte offset in glob
  • size: Size of value in glob (including checksum)
Source

pub async fn get(&self, section: u64, position: u64) -> Result<I, Error>

Get entry at position (index entry only, not value).

Source

pub async fn last(&self, section: u64) -> Result<Option<I>, Error>

Get the last entry for a section, if any.

Source

pub async fn get_value( &self, section: u64, offset: u64, size: u32, ) -> Result<V, Error>

Get value using offset/size from entry.

The offset should be the byte offset from append() or from the entry’s value_location().

Source

pub async fn replay( &self, start_section: u64, start_position: u64, buffer: NonZeroUsize, ) -> Result<impl Stream<Item = Result<(u64, u64, I), Error>> + Send + '_, Error>

Replay index entries starting from given section.

Returns a stream of (section, position, entry) tuples.

Source

pub async fn sync(&self, section: u64) -> Result<(), Error>

Sync both journals for given section.

Source

pub async fn sync_all(&self) -> Result<(), Error>

Sync all sections.

Source

pub async fn prune(&mut self, min: u64) -> Result<bool, Error>

Prune both journals. Returns true if any sections were pruned.

Prunes index first, then glob. This order ensures crash safety:

  • If crash after index prune but before glob: orphan data in glob (acceptable)
  • If crash before index prune: no change, retry works
Source

pub async fn rewind( &mut self, section: u64, index_size: u64, ) -> Result<(), Error>

Rewind both journals to a specific section and index size.

This rewinds the section to the given index size and removes all sections after the given section. The value size is derived from the last entry.

Source

pub async fn rewind_section( &mut self, section: u64, index_size: u64, ) -> Result<(), Error>

Rewind only the given section to a specific index size.

Unlike rewind, this does not affect other sections. The value size is derived from the last entry after rewinding the index.

Source

pub async fn size(&self, section: u64) -> Result<u64, Error>

Get index size for checkpoint.

The value size can be derived from the last entry’s location when needed.

Source

pub async fn value_size(&self, section: u64) -> Result<u64, Error>

Get the value size for a section, derived from the last entry’s location.

Source

pub fn oldest_section(&self) -> Option<u64>

Returns the oldest section number, if any exist.

Source

pub fn newest_section(&self) -> Option<u64>

Returns the newest section number, if any exist.

Source

pub async fn destroy(self) -> Result<(), Error>

Destroy all underlying storage.

Auto Trait Implementations§

§

impl<E, I, V> Freeze for Oversized<E, I, V>
where <V as Read>::Cfg: Freeze, E: Freeze,

§

impl<E, I, V> !RefUnwindSafe for Oversized<E, I, V>

§

impl<E, I, V> Send for Oversized<E, I, V>
where I: Send,

§

impl<E, I, V> Sync for Oversized<E, I, V>
where I: Sync,

§

impl<E, I, V> Unpin for Oversized<E, I, V>
where <V as Read>::Cfg: Unpin, E: Unpin, I: Unpin,

§

impl<E, I, V> !UnwindSafe for Oversized<E, I, V>

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

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

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
Source§

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
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
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,