Skip to main content

HostMeshShutdownGuard

Struct HostMeshShutdownGuard 

Source
pub struct HostMeshShutdownGuard(pub HostMesh);
Expand description

Wrapper around HostMesh that runs shutdown on Drop.

Tuple Fields§

§0: HostMesh

Methods from Deref<Target = HostMesh>§

Source

pub async fn shutdown(&mut self, cx: &impl Actor) -> Result<()>

Request a clean shutdown of all hosts owned by this HostMesh.

Uses a two-phase approach:

  1. Cast DrainHost and wait for every host to finish draining its user procs while networking stays alive.
  2. Cast ShutdownHost and wait for every host to acknowledge that its local shutdown handler has completed.
Source

pub async fn stop(&mut self, cx: &impl Actor) -> Result<()>

Stop all hosts owned by this HostMesh, draining user procs but keeping worker processes and their sockets alive for reconnection.

After stop, the same worker addresses can be passed to HostMesh::attach to create a new mesh.

Source

pub fn set_bootstrap(&mut self, cmd: BootstrapCommand)

Set the bootstrap command on the underlying HostMeshRef, so that future spawn calls use it. Unlike HostMeshRef::with_bootstrap this mutates in place, preserving ownership.

Methods from Deref<Target = HostMeshRef>§

Source

pub async fn spawn<C: Actor>( &self, cx: &C, name: &str, per_host: Extent, proc_bind: Option<Vec<ProcBind>>, per_rank_bootstrap: Option<Box<PerRankBootstrapFn>>, ) -> Result<ProcMesh>
where C::A: Handler<MeshFailure>,

Spawn a ProcMesh onto this host mesh. The per_host extent specifies the shape of the procs to spawn on each host.

proc_bind, when provided, is a per-process CPU/NUMA binding configuration. Its length must equal the number of ranks in per_host. Each entry maps binding keys (cpunodebind, membind, physcpubind, cpus) to their values. Only takes effect when running on Linux.

per_rank_bootstrap, when provided, is a function called once per proc to produce that proc’s BootstrapCommand. The function receives a view::Point over the combined host_extent ⊕ per_host extent. Its return value takes precedence over self.bootstrap_command for that proc only.

Spawn is issued as a single SpawnProcs cast — each HostAgent spawns all of its per-host proc slots — then fenced with an accumulated status barrier so returned procs are addressable and ready.

Source

pub fn id(&self) -> &HostMeshId

The identity of the referenced host mesh.

Source

pub fn host_addrs(&self) -> Vec<ChannelAddr>

The host channel addresses in rank order.

Trait Implementations§

Source§

impl Deref for HostMeshShutdownGuard

Source§

type Target = HostMesh

The resulting type after dereferencing.
Source§

fn deref(&self) -> &HostMesh

Dereferences the value.
Source§

impl DerefMut for HostMeshShutdownGuard

Source§

fn deref_mut(&mut self) -> &mut HostMesh

Mutably dereferences the value.
Source§

impl Drop for HostMeshShutdownGuard

Source§

fn drop(&mut self)

Best-effort cleanup for owned host meshes on drop.

When a HostMesh is dropped, it attempts to shut down all hosts it owns:

  • If a Tokio runtime is available, we spawn an ephemeral Proc + Instance and best-effort cast ShutdownHost through the owned hosts. This ensures that the embedded BootstrapProcManagers are dropped, and all child procs they spawned are killed when the cast succeeds.
  • If no runtime is available, we cannot perform async cleanup here; in that case we log a warning and rely on kernel-level PDEATHSIG or the individual BootstrapProcManager’s Drop as the final safeguard.

This path is last resort: callers should prefer explicit HostMesh::shutdown to guarantee orderly teardown. Drop only provides opportunistic cleanup to prevent process leaks if shutdown is skipped.

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

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

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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: 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: 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> QuoteExt for T
where T: ?Sized,

§

fn push_quoted<'q, Q, S>(&mut self, _q: Q, s: S)
where Q: QuoteInto<T>, S: Into<Quotable<'q>>,

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

§

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,

Source§

impl<M> Message for M
where M: Send + Sync + 'static,

§

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