struct SizeEvictionReporter {
cache: &'static str,
dropped: AtomicU64,
last_warned: Mutex<Option<Instant>>,
}Expand description
Keeps capacity evictions observable without letting them flood the log.
Routine causes (expiry, explicit invalidation, replacement) are the steady state and stay at
DEBUG. [RemovalCause::Size] is different: it means the cache is too small for the offered
load, entries are lost that nothing asked to drop, and only an operator can fix it. Those
evictions also arrive in bursts of thousands, so they are summarised rather than logged one by
one - every drop is counted, and at most one WARN per SIZE_EVICTION_WARN_INTERVAL reports
how many were shed since the previous one.
Fields§
§cache: &'static strWhich cache this reports for, as it appears in the warning.
dropped: AtomicU64§last_warned: Mutex<Option<Instant>>None until the first warning, so the first capacity eviction is reported immediately.
Implementations§
Auto Trait Implementations§
impl !Freeze for SizeEvictionReporter
impl !RefUnwindSafe for SizeEvictionReporter
impl Send for SizeEvictionReporter
impl Sync for SizeEvictionReporter
impl Unpin for SizeEvictionReporter
impl UnsafeUnpin for SizeEvictionReporter
impl UnwindSafe for SizeEvictionReporter
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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 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>
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