EventLog

Struct EventLog 

Source
pub struct EventLog {
    ring: Mutex<VecDeque<Event>>,
    disk_path: Option<PathBuf>,
}
Expand description

Append-only ring + optional disk persistence.

Cloneable via Arc<EventLog> from the IPC server context; append and events_since are cheap (Mutex held for microseconds — Vec push / scan, no I/O on the in-memory path).

Disk writes happen on a dedicated tokio task that subscribes to the broadcast bus separately from the in-memory append. This means the in-memory ring is updated synchronously from the IPC server’s dispatch path; disk persistence runs at its own pace and may lag.

Fields§

§ring: Mutex<VecDeque<Event>>§disk_path: Option<PathBuf>

Implementations§

Source§

impl EventLog

Source

pub fn new(disk_path: Option<PathBuf>) -> Self

Construct an event log. disk_path = None disables disk persistence (used in tests where filesystem state is inconvenient). The on-disk file is created on first append; no upfront I/O.

Source

pub fn append(&self, event: Event)

Append an event to the in-memory ring. Evicts the oldest entry when the ring is at capacity. Synchronous, O(1)-amortized.

Source

pub fn events_since(&self, since: u64) -> Vec<Event>

Snapshot of all events currently in the ring with version > since. Returned in insertion order (oldest first), so the caller applies them sequentially.

Phase D.3 — used by Command::GetEvents { since } to produce the replay slice. The snapshot is taken at-call-time; events arriving after this returns are NOT included (the subscriber sees them on the live broadcast stream).

Source

pub fn replay_truncated(&self, since: u64) -> bool

True if the requested since version is older than the oldest event in the ring (i.e. the subscriber missed events that have already been evicted). Caller should treat the resulting events_since slice as best-effort and may need to re-fetch a snapshot to recover canonical state.

Source

pub fn disk_path(&self) -> Option<&PathBuf>

Disk path for the writer task to flush to. None when disk persistence is disabled.

Trait Implementations§

Source§

impl Debug for EventLog

Source§

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

Formats the value using the given formatter. 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.

§

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