Skip to main content

LockStallTracker

Struct LockStallTracker 

Source
pub struct LockStallTracker { /* private fields */ }
Expand description

Stamps for handle locks found held, plus the ticker’s heartbeat.

Why: see the module docs. A std mutex guards the table because every critical section is a map operation with no .await. What: the stamp table, a poisoned flag, the health-path rate limit, and the ticker heartbeat. A poisoned lock is recovered with into_inner so stamps stay readable, and Self::degraded_at reports it from then on. Test: lock_stall_tests.rs.

Implementations§

Source§

impl LockStallTracker

Source

pub fn sweep_if_due( self: &Arc<Self>, registry: &PalaceRegistry, interval: Duration, )

Sweep unless a sweep ran within interval.

Why: memory.health is polled about once a second. Sweeping from it keeps stamps fresh even where no ticker runs, and the rate limit keeps the cheap path cheap. The ticker sweeps through here too, so the two paths share one rate limit instead of doubling each other’s work. What: records the sweep time under the rate-limit lock, then sweeps. Test: health_sweeps_are_rate_limited_to_the_interval, a_ticker_sweep_records_itself_against_the_health_rate_limit.

Source

pub fn oldest_stall_at(&self, now: Instant) -> Option<StalledLock>

The oldest stamp’s age at now, or None when nothing is stamped.

Why: an injected now lets tests age a stamp without sleeping. Test: a_lock_held_past_the_threshold_ages_past_it_and_clears_on_release.

Source

pub fn degraded_at(&self, now: Instant) -> Option<String>

Why the tracker cannot vouch for its stamps at now, if it cannot.

Why: a stopped ticker or poisoned state leaves stall detection partial. Reporting nothing would make health read ok on a signal that is gone. What: Some(reason) when a started ticker has missed three beats (TICKER_GRACE_INTERVALS), or when tracking state was poisoned. The stamp table is touched first: the poison flag is set by Self::guard, so a caller that has not read the stamps yet would otherwise see a stale false and report healthy. Test: a_ticker_that_stops_beating_reports_degraded, a_poisoned_tracker_keeps_its_stamps_and_reports_degraded, degraded_at_sees_poison_without_a_prior_stamp_read.

Trait Implementations§

Source§

impl Debug for LockStallTracker

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for LockStallTracker

Source§

fn default() -> Self

Returns the “default value” for a type. 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.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more