Skip to main content

DurableEventJournal

Struct DurableEventJournal 

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

Append-only segmented journal with fsync-before-acknowledgement.

Implementations§

Source§

impl DurableEventJournal

Source

pub fn open( root: &Path, config: JournalConfig, clock: Arc<dyn BrokerClock>, ) -> Result<Self, JournalError>

Open (or create) the journal under root, recovering existing segments. Recovery ignores only an incomplete final record of the newest segment and fails loudly on any malformed completed record (066 FR-009).

§Errors

Returns JournalError::InvalidConfig for zero limits, JournalError::Io on filesystem failures, and JournalError::Corrupt when a completed record is malformed.

Source

pub fn append(&mut self, event: &TraverseEvent) -> Result<String, JournalError>

Append an event, fsync it, and return its cursor (066 FR-006: the record is durable before this returns). Rolls the active segment over at the configured size or age bound, whichever occurs first (067 FR-001).

§Errors

Returns JournalError::Io when the durable write fails; the event is not acknowledged in that case.

Source

pub fn append_revocation( &mut self, revoked_cursor: &str, ) -> Result<String, JournalError>

Durably record that the event at revoked_cursor was rejected and must never be delivered through replay (067 FR-004). Used when a caller abandoned a write that later completed, or when a durably written event could not be delivered.

§Errors

Returns JournalError::InvalidCursor for unparseable cursors and JournalError::Io when the durable write fails.

Source

pub fn replay_from( &self, cursor: &str, max_events: usize, ) -> Result<Vec<(String, TraverseEvent)>, JournalError>

Replay up to max_events events strictly after cursor.

"0" replays from the start of retained history. Cursors are opaque monotonic sequence identifiers independent of segment layout (066 FR-007).

§Errors

Returns JournalError::InvalidCursor for unparseable cursors, JournalError::CursorExpired with the oldest available cursor when the requested history was reclaimed (066 FR-008), and JournalError::Io / JournalError::Corrupt on read failures.

Source

pub fn oldest_available_cursor(&self) -> String

The cursor from which the oldest retained event replays; callers that receive JournalError::CursorExpired resume from here.

Source

pub fn prune(&mut self) -> Result<Vec<PathBuf>, JournalError>

Reclaim expired history by deleting whole sealed segments only — never rewriting or truncating in place (067 FR-002). A segment is deleted only once every event in it falls outside the retention window; the active segment is never deleted, bounding the overhang to one rollover period.

§Errors

Returns JournalError::Io when a reclaimable segment cannot be deleted.

Trait Implementations§

Source§

impl JournalSink for DurableEventJournal

Source§

fn append_event( &mut self, event: &TraverseEvent, ) -> Result<String, JournalError>

Durably append an event, returning its cursor. Read more
Source§

fn append_revocation( &mut self, revoked_cursor: &str, ) -> Result<String, JournalError>

Durably suppress a previously written cursor from replay. 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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> GetSetFdFlags for T

Source§

fn get_fd_flags(&self) -> Result<FdFlags, Error>
where T: AsFilelike,

Query the “status” flags for the self file descriptor.
Source§

fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>
where T: AsFilelike,

Create a new SetFdFlags value for use with set_fd_flags. Read more
Source§

fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>
where T: Sized + AsFilelike,

Set the “status” flags for the self file descriptor. 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> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

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