pub struct DurableEventJournal { /* private fields */ }Expand description
Append-only segmented journal with fsync-before-acknowledgement.
Implementations§
Source§impl DurableEventJournal
impl DurableEventJournal
Sourcepub fn open(
root: &Path,
config: JournalConfig,
clock: Arc<dyn BrokerClock>,
) -> Result<Self, JournalError>
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.
Sourcepub fn append(&mut self, event: &TraverseEvent) -> Result<String, JournalError>
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.
Sourcepub fn append_revocation(
&mut self,
revoked_cursor: &str,
) -> Result<String, JournalError>
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.
Sourcepub fn replay_from(
&self,
cursor: &str,
max_events: usize,
) -> Result<Vec<(String, TraverseEvent)>, JournalError>
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.
Sourcepub fn oldest_available_cursor(&self) -> String
pub fn oldest_available_cursor(&self) -> String
The cursor from which the oldest retained event replays; callers that
receive JournalError::CursorExpired resume from here.
Sourcepub fn prune(&mut self) -> Result<Vec<PathBuf>, JournalError>
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
impl JournalSink for DurableEventJournal
Source§fn append_event(
&mut self,
event: &TraverseEvent,
) -> Result<String, JournalError>
fn append_event( &mut self, event: &TraverseEvent, ) -> Result<String, JournalError>
Source§fn append_revocation(
&mut self,
revoked_cursor: &str,
) -> Result<String, JournalError>
fn append_revocation( &mut self, revoked_cursor: &str, ) -> Result<String, JournalError>
Auto Trait Implementations§
impl !Freeze for DurableEventJournal
impl !RefUnwindSafe for DurableEventJournal
impl !UnwindSafe for DurableEventJournal
impl Send for DurableEventJournal
impl Sync for DurableEventJournal
impl Unpin for DurableEventJournal
impl UnsafeUnpin for DurableEventJournal
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
Source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self file descriptor.Source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
Source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: Sized + AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: Sized + AsFilelike,
self file descriptor. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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