pub struct ActorMeshController<A>where
A: Referable,{ /* private fields */ }Expand description
The implementation of monitoring works as follows:
- ActorMesh and ActorMeshRef subscribe for updates from this controller, which aggregates events from all owned actors.
- The monitor continuously polls for new events. When new events are found, it sends messages to all subscribers
- In addition to sending to subscribers, the owner is an automatic subscriber that also has to handle the events.
Trait Implementations§
Source§impl<A: Referable> Actor for ActorMeshController<A>
impl<A: Referable> Actor for ActorMeshController<A>
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
Self: 'async_trait,
'life0: 'async_trait,
'life1: '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
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Initialize the actor, after the runtime has been fully initialized.
Init thus provides a mechanism by which an actor can reliably and always
receive some initial event that can be used to kick off further
(potentially delayed) processing.
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
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Cleanup things used by this actor before shutting down. Notably this function
is async and allows more complex cleanup. Simpler cleanup can be handled
by the impl Drop for this Actor.
If err is not None, it is the error that this actor is failing with. Any
errors returned by this function will be logged and ignored.
If err is None, any errors returned by this function will be propagated
as an ActorError.
This function is not called if there is a panic in the actor, as the
actor may be in an indeterminate state. It is also not called if the
process is killed, there is no atexit handler or signal handler.
Source§fn handle_undeliverable_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
envelope: 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>,
envelope: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Default undeliverable message handling behavior.
Source§fn spawn(self, cx: &impl Actor) -> Result<ActorHandle<Self>, Error>
fn spawn(self, cx: &impl Actor) -> Result<ActorHandle<Self>, Error>
Spawn a child actor, given a spawning capability (usually given by
Instance).
The spawned actor will be supervised by the parent (spawning) actor.Source§fn spawn_detached(self) -> Result<ActorHandle<Self>, Error>
fn spawn_detached(self) -> Result<ActorHandle<Self>, Error>
Spawns this actor in a detached state, handling its messages
in a background task. The returned handle is used to control
the actor’s lifecycle and to interact with it. Read more
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>
This method is used by the runtime to spawn the actor server. It can be
used by actors that require customized runtime setups
(e.g., dedicated actor threads), or want to use a custom tokio runtime.
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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Handle actor supervision event. Return `Ok(true)`` if the event is handled here.
Source§fn display_name(&self) -> Option<String>
fn display_name(&self) -> Option<String>
If overridden, we will use this name in place of the
ActorId for talking about this actor in supervision error
messages.
Source§impl<A> Binds<ActorMeshController<A>> for ActorMeshController<A>where
A: Referable,
impl<A> Binds<ActorMeshController<A>> for ActorMeshController<A>where
A: Referable,
Source§impl<A: Referable> Debug for ActorMeshController<A>
impl<A: Referable> Debug for ActorMeshController<A>
Source§impl<A: Referable> Handler<CheckState> for ActorMeshController<A>
impl<A: Referable> Handler<CheckState> for ActorMeshController<A>
Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, Self>,
__arg2: CheckState,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, Self>,
__arg2: CheckState,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Checks actor states and reschedules as a self-message.
When any actor in this mesh changes state, including once for the initial state of all actors, send a message to the owners and subscribers of this mesh. The receivers will get a MeshFailure. The created rank is the original rank of the actor on the mesh, not the rank after slicing.
- SUPERVISION_POLL_FREQUENCY controls how frequently to poll.
- self-messaging stops when self.monitor is set to None.
Source§impl<A: Referable> Handler<CreateOrUpdate<Spec<()>>> for ActorMeshController<A>
impl<A: Referable> Handler<CreateOrUpdate<Spec<()>>> for ActorMeshController<A>
Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
_message: CreateOrUpdate<Spec<()>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
_message: CreateOrUpdate<Spec<()>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Currently a no-op as there’s nothing to create or update, but allows ActorMeshController to implement the resource mesh behavior.
Source§impl<A: Referable> Handler<Unsubscribe> for ActorMeshController<A>
impl<A: Referable> Handler<Unsubscribe> for ActorMeshController<A>
Source§impl<A: Referable> Mesh for ActorMeshController<A>
impl<A: Referable> Mesh for ActorMeshController<A>
Source§impl<A> Named for ActorMeshController<A>where
A: Referable,
impl<A> Named for ActorMeshController<A>where
A: Referable,
Source§fn typename() -> &'static str
fn typename() -> &'static str
The globally unique type name for the type.
This should typically be the fully qualified Rust name of the type.
Source§fn typehash() -> u64
fn typehash() -> u64
A globally unique hash for this type.
TODO: actually enforce perfect hashing
Source§fn typeid() -> TypeId
fn typeid() -> TypeId
The TypeId for this type. TypeIds are unique only within a binary,
and should not be used for global identification.
Source§fn port() -> u64
fn port() -> u64
The globally unique port for this type. Typed ports are in the range
of 1<<63..1<<64-1.
impl<A> Referable for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<CreateOrUpdate<Spec<()>>> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<GetState<State<()>>> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<IndexedErasedUnbound<CreateOrUpdate<Spec<()>>>> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<IndexedErasedUnbound<GetState<State<()>>>> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<IndexedErasedUnbound<Stop>> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<Signal> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<Stop> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<Subscribe> for ActorMeshController<A>where
A: Referable,
impl<A> RemoteHandles<Unsubscribe> for ActorMeshController<A>where
A: Referable,
Auto Trait Implementations§
impl<A> !Freeze for ActorMeshController<A>
impl<A> !RefUnwindSafe for ActorMeshController<A>
impl<A> Send for ActorMeshController<A>
impl<A> Sync for ActorMeshController<A>
impl<A> Unpin for ActorMeshController<A>
impl<A> !UnwindSafe for ActorMeshController<A>
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
Mutably borrows from an owned value. Read more
§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,
Handle the next M-typed message.
§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>
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 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>
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