Skip to main content

RedbMarkerBackend

Struct RedbMarkerBackend 

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

On-disk MarkerBackend backed by a per-run [redb] marker sidecar file.

The caller supplies the full file path, normally <base>/<instance_id>/<run_id>.markers.redb. The backend creates the parent directory on first open, stores every durable record with its precomputed 32-byte integrity hash, and commits each mutation with [Durability::Immediate]. Reopening an unsealed marker file seals it as RunStatus::CrashedRecovered and returns Ok(()), because marker files never block trader boot.

Implementations§

Source§

impl RedbMarkerBackend

Source

pub fn new(file_path: impl Into<PathBuf>) -> Self

Creates a backend for the supplied marker sidecar file path.

Source

pub fn current_path(&self) -> Result<&Path, EventStoreError>

Returns the path of the currently open marker file.

§Errors

Returns EventStoreError::Backend when no run is open.

Source

pub fn open_read_only_file( path: impl Into<PathBuf>, ) -> Result<Self, EventStoreError>

Opens an existing marker sidecar file read-only for verification.

Marker verification must not seal, recover, or otherwise mutate the sidecar it scans. This constructor accepts any manifest status and leaves lifecycle policy to the caller’s report.

§Errors

Returns EventStoreError::Backend when the marker file is missing, and EventStoreError::Corrupted when the file lacks a marker manifest or fails to decode.

Trait Implementations§

Source§

impl Debug for RedbMarkerBackend

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl MarkerBackend for RedbMarkerBackend

Source§

fn open_run(&mut self, manifest: MarkerManifest) -> Result<(), EventStoreError>

Opens a run for marker capture with the supplied manifest. Read more
Source§

fn append_snapshot( &mut self, snapshot: &DataCursorSnapshot, hash: [u8; 32], ) -> Result<(), EventStoreError>

Appends a cursor snapshot with its precomputed integrity hash. Read more
Source§

fn append_hifi( &mut self, marker: &HiFiMarker, hash: [u8; 32], ) -> Result<(), EventStoreError>

Appends a high-fidelity marker with its precomputed integrity hash. Read more
Source§

fn append_gap( &mut self, gap: &MarkerGap, hash: [u8; 32], ) -> Result<(), EventStoreError>

Appends a gap covering a dropped range of marker sequences, with its precomputed integrity hash. Read more
Source§

fn put_dict( &mut self, entry: &StreamDictEntry, hash: [u8; 32], ) -> Result<(), EventStoreError>

Records a slot dictionary entry with its precomputed integrity hash, write-once by slot. Read more
Source§

fn scan_snapshots(&self) -> Result<Vec<DataCursorSnapshot>, EventStoreError>

Scans all cursor snapshots in ascending marker_seq order. Read more
Source§

fn scan_snapshot_records( &self, ) -> Result<Option<Vec<StoredMarkerRecord<DataCursorSnapshot>>>, EventStoreError>

Scans cursor snapshots with stored integrity hashes when the backend exposes them. Read more
Source§

fn scan_hifi(&self) -> Result<Vec<HiFiMarker>, EventStoreError>

Scans all high-fidelity markers in ascending marker_seq order. Read more
Source§

fn scan_hifi_records( &self, ) -> Result<Option<Vec<StoredMarkerRecord<HiFiMarker>>>, EventStoreError>

Scans high-fidelity markers with stored integrity hashes when the backend exposes them. Read more
Source§

fn scan_gaps(&self) -> Result<Vec<MarkerGap>, EventStoreError>

Scans all recorded gaps in ascending from_marker_seq order. Read more
Source§

fn scan_gap_records( &self, ) -> Result<Option<Vec<StoredMarkerRecord<MarkerGap>>>, EventStoreError>

Scans marker gaps with stored integrity hashes when the backend exposes them. Read more
Source§

fn scan_dict(&self) -> Result<Vec<StreamDictEntry>, EventStoreError>

Scans all slot dictionary entries in ascending slot order. Read more
Source§

fn scan_dict_records( &self, ) -> Result<Option<Vec<StoredMarkerRecord<StreamDictEntry>>>, EventStoreError>

Scans dictionary entries with stored integrity hashes when the backend exposes them. Read more
Source§

fn seal(&mut self, status: RunStatus) -> Result<(), EventStoreError>

Seals the open run with the given terminal status. Read more
Source§

fn manifest(&self) -> Result<MarkerManifest, EventStoreError>

Returns the current marker manifest. 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> 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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

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.

§

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> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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
§

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 = 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<T> Ungil for T
where T: Send,

§

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