pub struct GlobalClientActor { /* private fields */ }Expand description
Process-global “root client” actor.
This actor lives on the local_proc of the singleton Host
created by context(), symmetric with Python’s
RootClientActor on bootstrap_host()’s local proc.
It acts as a monitor for routing failures observed at the process boundary: undeliverable messages are treated as signals to be reported via mesh supervision (when a sink is installed), not as fatal errors.
The actor is driven by run(), which select!s over:
work_rx: the primary dispatch queue for bound handler work items (includingUndeliverable<MessageEnvelope>andMeshFailure>),supervision_rx: supervision events delivered to this actor, andsignal_rx: control signals (currently minimal handling).
Trait Implementations§
Source§impl Actor for GlobalClientActor
Handle a returned (undeliverable) message observed by the
process-global root client.
impl Actor for GlobalClientActor
Handle a returned (undeliverable) message observed by the process-global root client.
The global root client is a monitor, not a participant: it must not crash or propagate failures just because a routed message could not be delivered.
Instead, we translate the undeliverable into an
ActorSupervisionEvent and forward it to the active
ProcMesh via the process-global supervision sink (“last sink
wins”). If no sink has been installed yet (e.g., before the first
ProcMesh allocation completes), we log and drop the event.
Source§fn handle_supervision_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
event: &'life2 ActorSupervisionEvent,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_supervision_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
event: &'life2 ActorSupervisionEvent,
) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
The global root client is the root of the supervision tree: there is no parent to escalate to. Child-actor failures (e.g. ActorMeshControllers detecting dead procs after mesh teardown) are expected and must not crash the process.
Source§fn handle_undeliverable_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
__arg2: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle_undeliverable_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
__arg2: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Source§fn cleanup<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
_err: Option<&'life2 ActorError>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn cleanup<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
_this: &'life1 Instance<Self>,
_err: Option<&'life2 ActorError>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Source§fn spawn(self, cx: &impl Actor) -> Result<ActorHandle<Self>, Error>
fn spawn(self, cx: &impl Actor) -> Result<ActorHandle<Self>, Error>
Instance).
The spawned actor will be supervised by the parent (spawning) actor.Source§fn spawn_with_name(
self,
cx: &impl Actor,
name: &str,
) -> Result<ActorHandle<Self>, Error>
fn spawn_with_name( self, cx: &impl Actor, name: &str, ) -> Result<ActorHandle<Self>, Error>
spawn, but the child gets name in its ActorId.Source§fn spawn_detached(self) -> Result<ActorHandle<Self>, Error>
fn spawn_detached(self) -> Result<ActorHandle<Self>, Error>
Source§fn spawn_server_task<F>(future: F) -> JoinHandle<<F as Future>::Output>
fn spawn_server_task<F>(future: F) -> JoinHandle<<F as Future>::Output>
Source§fn display_name(&self) -> Option<String>
fn display_name(&self) -> Option<String>
Source§impl Binds<GlobalClientActor> for GlobalClientActor
impl Binds<GlobalClientActor> for GlobalClientActor
Source§impl Debug for GlobalClientActor
impl Debug for GlobalClientActor
Source§impl Handler<MeshFailure> for GlobalClientActor
MeshFailure is a terminal supervision signal for an ActorMesh.
impl Handler<MeshFailure> for GlobalClientActor
MeshFailure is a terminal supervision signal for an ActorMesh.
The process-global root client should never be a consumer of mesh-level supervision failures during normal operation: those events are expected to be observed and handled by the owning mesh/controller, not by the global client.
In processes that create and destroy multiple meshes (e.g.,
benchmarks), MeshFailure events may arrive here during or after
mesh teardown. Log loudly but do not crash — the global client is
a monitor and must preserve forward progress.
Source§impl Named for GlobalClientActor
impl Named for GlobalClientActor
Source§fn typename() -> &'static str
fn typename() -> &'static str
Source§fn typehash() -> u64
fn typehash() -> u64
Source§fn typeid() -> TypeId
fn typeid() -> TypeId
Source§fn port() -> u64
fn port() -> u64
impl Accepts<IntrospectMessage> for GlobalClientActor
impl Accepts<MeshFailure> for GlobalClientActor
impl Accepts<Signal> for GlobalClientActor
impl Referable for GlobalClientActor
impl RemoteHandles<IntrospectMessage> for GlobalClientActor
impl RemoteHandles<MeshFailure> for GlobalClientActor
impl RemoteHandles<Signal> for GlobalClientActor
Auto Trait Implementations§
impl Freeze for GlobalClientActor
impl !RefUnwindSafe for GlobalClientActor
impl Send for GlobalClientActor
impl Sync for GlobalClientActor
impl Unpin for GlobalClientActor
impl !UnwindSafe for GlobalClientActor
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
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<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>
Source§impl<A, M> Handler<IndexedErasedUnbound<M>> for A
impl<A, M> Handler<IndexedErasedUnbound<M>> for A
Source§impl<A> Handler<Undeliverable<MessageEnvelope>> for Awhere
A: Actor,
impl<A> Handler<Undeliverable<MessageEnvelope>> for Awhere
A: Actor,
Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, A>,
message: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
A: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, A>,
message: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
A: 'async_trait,
§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].