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>
impl<M: ProcManager> Host<M>
Sourcepub async fn new(manager: M, addr: ChannelAddr) -> Result<Self, HostError>
pub async fn new(manager: M, addr: ChannelAddr) -> Result<Self, HostError>
Construct a host and start its gateway frontend server on addr.
Sourcepub async fn new_with_default(
manager: M,
addr: ChannelAddr,
listener: Option<TcpListener>,
) -> Result<Self, HostError>
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.
Sourcepub async fn new_with_gateway(
manager: M,
addr: ProcAddr,
listener: Option<TcpListener>,
gateway: Gateway,
via: Option<ChannelAddr>,
) -> Result<Self, HostError>
pub async fn new_with_gateway( manager: M, addr: ProcAddr, listener: Option<TcpListener>, gateway: Gateway, via: Option<ChannelAddr>, ) -> Result<Self, HostError>
Like [new_with_default], but uses a caller-provided Gateway and
service ProcAddr.
addr is a startup specification: its proc id becomes the service proc
identity, and its direct location is used to serve the frontend. The
final service proc location comes from the gateway after binding, so it
may differ because of an alias, an ephemeral address, or via. A
source-routed Location::Via is therefore rejected here.
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.
Sourcepub fn addr(&self) -> &ChannelAddr
pub fn addr(&self) -> &ChannelAddr
The address which accepts messages destined for this host.
Sourcepub fn system_proc(&self) -> &Proc
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.
Sourcepub fn local_proc(&self) -> &Proc
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.
Sourcepub fn gateway(&self) -> &Gateway
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>
impl<M: ProcManager + BulkTerminate> Host<M>
Sourcepub async fn terminate_children(
&mut self,
cx: &impl Actor,
timeout: Duration,
max_in_flight: usize,
reason: &str,
) -> TerminateSummary
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: ProcManager + SingleTerminate> SingleTerminate for Host<M>
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,
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,
Auto Trait Implementations§
impl<M> !RefUnwindSafe for Host<M>
impl<M> !UnwindSafe for Host<M>
impl<M> Freeze for Host<M>
impl<M> Send for Host<M>
impl<M> Sync for Host<M>
impl<M> Unpin for Host<M>
impl<M> UnsafeUnpin for Host<M>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
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>
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>
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
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].