pub struct ReplicaApplyMetrics {
pub gap_total: AtomicU64,
pub divergence_total: AtomicU64,
pub apply_error_total: AtomicU64,
pub decode_error_total: AtomicU64,
pub apply_miss_total: AtomicU64,
pub fenced_total: AtomicU64,
pub bytes_applied_total: AtomicU64,
pub records_applied_total: AtomicU64,
}Expand description
PLAN.md Phase 11.5 — counters the replica apply loop bumps when an
invariant breaks. Surfaced via reddb_replica_apply_errors_total.
Decode errors aren’t strictly apply errors but they share the same
observability lane so dashboards alert on “replica is ingesting
trash from primary regardless of cause”.
Fields§
§gap_total: AtomicU64§divergence_total: AtomicU64§apply_error_total: AtomicU64§decode_error_total: AtomicU64§apply_miss_total: AtomicU64Issue #814 — a delete (or other apply) that found no target on the
replica: a missing collection or a missing entity. Non-fatal (the
LSN chain still advances so idempotent re-pull converges, see
#813), but recorded so a missed delete that drives collection-count
drift leaves a trail instead of being swallowed by let _ =.
fenced_total: AtomicU64Issue #835 — a record carrying a term behind the replica’s current term was fenced at the apply boundary (a returning ex-primary on a stale term). Fail-closed: the record is rejected and the LSN/term chain does not advance, so the deposed primary cannot move any watermark until it re-syncs under the new term.
bytes_applied_total: AtomicU64Issue #1242 — entity-payload bytes from successfully applied WAL
records (entity_bytes for insert/update, refresh payload for
refresh; deletes carry no payload and contribute 0). Monotonic
within one process lifetime; reset-aware for readers after restart.
Surfaced via reddb_replication_apply_bytes_total.
records_applied_total: AtomicU64Issue #1242 — count of WAL records successfully applied (Applied
outcome only; Idempotent and Skipped are excluded). Monotonic
within one process lifetime. Surfaced via
reddb_replication_apply_records_total.
Implementations§
Source§impl ReplicaApplyMetrics
impl ReplicaApplyMetrics
pub fn record(&self, kind: ApplyErrorKind)
pub fn snapshot(&self) -> [(ApplyErrorKind, u64); 6]
Sourcepub fn snapshot_throughput(&self) -> (u64, u64)
pub fn snapshot_throughput(&self) -> (u64, u64)
Issue #1242 — throughput snapshot: (bytes_applied_total, records_applied_total). Both are monotonic within a process
lifetime and zero after restart, so callers that track rate must
detect a reset (new value < prior value) and treat it as a restart.
Trait Implementations§
Source§impl Debug for ReplicaApplyMetrics
impl Debug for ReplicaApplyMetrics
Source§impl Default for ReplicaApplyMetrics
impl Default for ReplicaApplyMetrics
Source§fn default() -> ReplicaApplyMetrics
fn default() -> ReplicaApplyMetrics
Auto Trait Implementations§
impl !Freeze for ReplicaApplyMetrics
impl RefUnwindSafe for ReplicaApplyMetrics
impl Send for ReplicaApplyMetrics
impl Sync for ReplicaApplyMetrics
impl Unpin for ReplicaApplyMetrics
impl UnsafeUnpin for ReplicaApplyMetrics
impl UnwindSafe for ReplicaApplyMetrics
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> 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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request