Skip to main content

Healing

Struct Healing 

Source
pub(crate) struct Healing {
    workspace: Weak<Workspace>,
    restart: Arc<dyn SeatRestart>,
    notify: Arc<dyn Fn(&SessionSlot, &str) + Send + Sync>,
    seats: Mutex<HashMap<SessionSlot, Seat>>,
}
Expand description

The auto-heal supervisor. One per workspace, built lazily the first time a death reaches it.

Fields§

§workspace: Weak<Workspace>§restart: Arc<dyn SeatRestart>§notify: Arc<dyn Fn(&SessionSlot, &str) + Send + Sync>§seats: Mutex<HashMap<SessionSlot, Seat>>

Implementations§

Source§

impl Healing

Source

pub(crate) fn new( workspace: Weak<Workspace>, restart: Arc<dyn SeatRestart>, notify: Arc<dyn Fn(&SessionSlot, &str) + Send + Sync>, ) -> Arc<Self> ⓘ

Source

pub(crate) fn for_workspace(workspace: &Arc<Workspace>) -> Arc<Self> ⓘ

Production wiring: the restart dispatches through the workspace, and a worker’s notice is a peer message to its project’s lead.

Source

pub(crate) fn note_death(self: &Arc<Self>, slot: &SessionSlot, diagnostic: &str)

A seat that had been up died and its connection failed. Walks the policy and either schedules the next attempt or leaves the seat failed with its diagnostic.

Source

fn schedule( self: &Arc<Self>, workspace: &Arc<Workspace>, slot: &SessionSlot, project_key: &ProjectKey, diagnostic: &str, died_at: SystemTime, )

Count one death and either schedule the next attempt or leave the seat failed and escalate. A subprocess death and an attempt whose resume was refused both walk this path, so both spend the same budget and carry their own diagnostic.

Source

pub(crate) fn note_connected(&self, slot: &SessionSlot)

An occupant connected on slot: any scheduled attempt is cancelled, and the run’s clock starts.

Source

pub(crate) fn note_stopped(&self, slot: &SessionSlot)

The seat was deliberately stopped (a close or a despawn). Its count and its pending attempt go, and the stop is remembered so the subprocess death the stop causes is not mistaken for a crash.

Source

fn forget(&self, slot: &SessionSlot)

Forget one seat’s attempts without touching the row: used when a death turns out not to be heal-eligible.

Source

async fn fire( self: Arc<Self>, slot: &SessionSlot, generation: u64, died_at: SystemTime, diagnostic: &str, attempt: u32, attempts: usize, )

A scheduled attempt fired. Re-check that the seat is still the one that was scheduled, and still dead, then restart it and tell the lead what happened.

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
§

impl<T> Any for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

§

fn type_name(&self) -> &'static str

§

impl<T> AnySync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

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

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

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
§

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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

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

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