pub struct AuditBatchConfig {
pub max_pending_rows: NonZeroUsize,
pub max_rows_per_generation: NonZeroUsize,
pub max_commit_attempts: NonZeroU8,
pub retry_backoff: Duration,
pub admission_deadline: Duration,
pub resolution_deadline: Duration,
pub max_abandoned_appends: NonZeroUsize,
}Expand description
Tunables for the batch seam. Defaults are conservative; every field is exercised by at least one mechanism test.
Fields§
§max_pending_rows: NonZeroUsize§max_rows_per_generation: NonZeroUsize§max_commit_attempts: NonZeroU8§retry_backoff: Duration§admission_deadline: Duration§resolution_deadline: DurationCaps how much longer AuditBatch::submit_until_resolved keeps
waiting on a row’s real generation outcome once admission_deadline
has already elapsed on it. Without this bound a generation stuck on a
stalled EventStore::append_events_idempotent call retains the
completed write’s caller, its request slot, and its audit-lane waiter
forever, exhausting both request and audit capacity (khive#2331).
Must be at least admission_deadline — validated (debug-only) in
AuditBatch::new. Defaults to 6x admission_deadline.
Also the single source value the driver’s own per-generation append
bound (supervisor_loop’s driver_append_deadline) is derived from
— that bound exists so a stalled append cannot keep the driver from
ever draining pending again, which is what actually exhausts
admission for every later caller, not just the one already waiting
on the stuck row. See AuditTerminalReason::DriverAppendAbandoned.
max_abandoned_appends: NonZeroUsizeCaps how many AuditTerminalReason::DriverAppendAbandoned appends
may be outstanding (handed to a detached task, still running) at
once. Each outstanding append retains up to
max_rows_per_generation events until it finally returns, so the
retained-buffer bound this places on a wedged store is
max_abandoned_appends * max_rows_per_generation rows — without it,
a store whose append never returns mints one such task per
driver_append_deadline with no cap, and both the live task count
and the retained event batches inside them grow until the process
exits (khive#2331). Once the cap is reached, supervisor_loop sheds
further generations with AuditTerminalReason::StoreWedged instead
of attempting another append; it resumes attempting appends as soon
as an outstanding one returns and the count drops back below the
cap. Defaults to 4.
Trait Implementations§
Source§impl Clone for AuditBatchConfig
impl Clone for AuditBatchConfig
Source§impl Debug for AuditBatchConfig
impl Debug for AuditBatchConfig
Auto Trait Implementations§
impl Freeze for AuditBatchConfig
impl RefUnwindSafe for AuditBatchConfig
impl Send for AuditBatchConfig
impl Sync for AuditBatchConfig
impl Unpin for AuditBatchConfig
impl UnsafeUnpin for AuditBatchConfig
impl UnwindSafe for AuditBatchConfig
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§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