Skip to main content

Host

Struct Host 

Source
pub struct Host<M> { /* private fields */ }
Expand description

Lifecycle manager for the procs on one machine.

The host delegates all connectivity to its Gateway. It creates built-in service/local procs, asks its ProcManager to spawn children, and keeps the gateway peer registrations for those children alive.

Implementations§

Source§

impl<M: ProcManager> Host<M>

Source

pub async fn new(manager: M, addr: ChannelAddr) -> Result<Self, HostError>

Construct a host and start its gateway frontend server on addr.

Source

pub async fn new_with_default( manager: M, addr: ChannelAddr, listener: Option<TcpListener>, ) -> Result<Self, HostError>

Like [new], but optionally uses an already-bound listener.

When listener is Some, it is used as the frontend listening socket instead of binding a new one.

Source

pub async fn new_with_gateway( manager: M, addr: ChannelAddr, listener: Option<TcpListener>, gateway: Gateway, via: Option<ChannelAddr>, ) -> Result<Self, HostError>

Like [new_with_default], but uses a caller-provided Gateway instead of creating one internally.

Serving the backend and frontend endpoints, choosing the frontend transport, and adopting the frontend address as the gateway’s advertised location are all owned by the gateway. The host operates on a vanilla gateway: it never inspects the transport nor rewrites the gateway’s location. Adopting the bound frontend address makes the legacy pseudo-singleton proc ids (system, local) carry it so remote hosts can reach them by name.

When via is Some, the gateway attaches to that remote duplex address with Gateway::serve_via after the local frontend/backend serves but before minting the built-in procs, so the via session is the newest active serve. That ordering makes every ref minted on this host advertise the routable Via location rather than the bare local frontend, which is what lets an out-of-cluster client receive return traffic over the duplex.

Source

pub fn manager(&self) -> &M

The underlying proc manager.

Source

pub fn addr(&self) -> &ChannelAddr

The address which accepts messages destined for this host.

Source

pub fn system_proc(&self) -> &Proc

The system proc associated with this host. This is used to run host-level system services like host managers.

Source

pub fn local_proc(&self) -> &Proc

The local proc associated with this host (LOCAL_PROC_NAME).

Starts with zero actors; see invariant LP-1 on LOCAL_PROC_NAME for activation semantics.

Source

pub async fn spawn( &mut self, name: String, config: M::Config, ) -> Result<(ProcAddr, ActorRef<ManagerAgent<M>>), HostError>

Spawn a child proc with the given name.

On success, the proc is ready and reachable through the returned ProcAddr. The proc id is derived from name; its location is advertised through this host’s frontend gateway using a Via(child_uid, host_location) source route.

Source

pub fn gateway(&self) -> &Gateway

The host’s Gateway. All incoming traffic addressed to this host’s procs is routed through the gateway: in-process procs via the gateway’s local delivery path, and spawned child proc gateways through peer routes registered with Gateway::attach_peer.

Source§

impl<M: ProcManager + BulkTerminate> Host<M>

Source

pub async fn terminate_children( &mut self, cx: &impl Actor, timeout: Duration, max_in_flight: usize, reason: &str, ) -> TerminateSummary

Gracefully terminate all procs spawned by this host.

Delegates to the underlying manager’s BulkTerminate::terminate_all implementation. Use this to perform orderly teardown during scale-down or shutdown.

§Parameters
  • timeout: Per-child grace period before escalation.
  • max_in_flight: Upper bound on concurrent terminations.
§Returns

A TerminateSummary with counts of attempted/ok/failed terminations.

Trait Implementations§

Source§

impl<M> Drop for Host<M>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<M: ProcManager + SingleTerminate> SingleTerminate for Host<M>

Source§

fn terminate_proc<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, cx: &'life1 (impl 'async_trait + Actor), proc: &'life2 ProcAddr, timeout: Duration, reason: &'life3 str, ) -> Pin<Box<dyn Future<Output = Result<(Vec<ActorAddr>, Vec<ActorAddr>), Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Gracefully terminate the given proc. Read more

Auto Trait Implementations§

§

impl<M> Freeze for Host<M>
where M: Freeze,

§

impl<M> !RefUnwindSafe for Host<M>

§

impl<M> Send for Host<M>
where M: Send,

§

impl<M> Sync for Host<M>
where M: Sync,

§

impl<M> Unpin for Host<M>
where M: Unpin,

§

impl<M> UnsafeUnpin for Host<M>
where M: UnsafeUnpin,

§

impl<M> !UnwindSafe for Host<M>

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