pub struct IbvManagerActor<I: IbvDeviceImpl> { /* private fields */ }Expand description
Manages all ibverbs-specific RDMA resources and operations.
This struct handles memory registration, queue pair management, and connection establishment using the ibverbs API.
Generic over I: IbvDeviceImpl so the same actor implementation
drives every concrete backend (IbvManagerActor<MlxDevice>,
IbvManagerActor<EfaDevice>, …).
Implementations§
Source§impl<I: IbvDeviceImpl> IbvManagerActor<I>
impl<I: IbvDeviceImpl> IbvManagerActor<I>
Trait Implementations§
Source§impl<I: IbvDeviceImpl> Actor for IbvManagerActor<I>
impl<I: IbvDeviceImpl> Actor for IbvManagerActor<I>
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 spawn_server_task<F>(future: F) -> JoinHandle<F::Output>
fn spawn_server_task<F>(future: F) -> JoinHandle<F::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_stop<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
this: &'life1 Instance<Self>,
mode: StopMode,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn handle_stop<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
this: &'life1 Instance<Self>,
mode: StopMode,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Handle a stop request from the runtime. Read more
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,
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_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 handle_delivery_failure_event<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn handle_delivery_failure_event<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Default delivery-failure event handling behavior.
Source§fn handle_undeliverable_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
reason: UndeliverableReason,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn handle_undeliverable_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
reason: UndeliverableReason,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Default undeliverable message handling behavior.
Source§fn handle_invalid_reference<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
invalid: InvalidReference,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn handle_invalid_reference<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
invalid: InvalidReference,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Default invalid-reference handling behavior.
Source§fn handle_expired_delivery<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
expired: ExpiredDelivery,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn handle_expired_delivery<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Instance<Self>,
expired: ExpiredDelivery,
undeliverable: Undeliverable<MessageEnvelope>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Default expired-delivery handling behavior.
Source§fn display_name(&self) -> Option<String>
fn display_name(&self) -> Option<String>
If overridden, we will use this name in place of the
ActorAddr for talking about this actor in supervision error
messages.
Source§impl<I: IbvDeviceImpl + Named> Binds<IbvManagerActor<I>> for IbvManagerActor<I>where
IbvManagerMessage: RemoteMessage,
IbvManagerActor<I>: Handler<IbvManagerMessage> + Handler<CreatePeerQueuePair<IbvManagerActor<I>>>,
CreatePeerQueuePair<IbvManagerActor<I>>: RemoteMessage,
impl<I: IbvDeviceImpl + Named> Binds<IbvManagerActor<I>> for IbvManagerActor<I>where
IbvManagerMessage: RemoteMessage,
IbvManagerActor<I>: Handler<IbvManagerMessage> + Handler<CreatePeerQueuePair<IbvManagerActor<I>>>,
CreatePeerQueuePair<IbvManagerActor<I>>: RemoteMessage,
Source§fn bind(ports: &HandlerPorts<Self>)
fn bind(ports: &HandlerPorts<Self>)
Bind ports in this actor.
Source§impl<I: Debug + IbvDeviceImpl> Debug for IbvManagerActor<I>
impl<I: Debug + IbvDeviceImpl> Debug for IbvManagerActor<I>
Source§impl<I: IbvDeviceImpl> Drop for IbvManagerActor<I>
impl<I: IbvDeviceImpl> Drop for IbvManagerActor<I>
Source§impl<I: IbvDeviceImpl> Handler<IbvManagerLocalMessage> for IbvManagerActor<I>
impl<I: IbvDeviceImpl> Handler<IbvManagerLocalMessage> for IbvManagerActor<I>
Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, Self>,
message: IbvManagerLocalMessage,
) -> 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>,
message: IbvManagerLocalMessage,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Handle the next M-typed message.
Source§impl<I: IbvDeviceImpl> Handler<IbvManagerMessage> for IbvManagerActor<I>
impl<I: IbvDeviceImpl> Handler<IbvManagerMessage> for IbvManagerActor<I>
Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
cx: &'life1 Context<'_, Self>,
message: IbvManagerMessage,
) -> 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>,
message: IbvManagerMessage,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Handle the next M-typed message.
Source§impl<I: IbvDeviceImpl> Handler<RawQueuePair> for IbvManagerActor<I>
impl<I: IbvDeviceImpl> Handler<RawQueuePair> for IbvManagerActor<I>
Source§impl<I: IbvDeviceImpl> IbvManagerLocalMessageHandler for IbvManagerActor<I>
impl<I: IbvDeviceImpl> IbvManagerLocalMessageHandler for IbvManagerActor<I>
Source§fn register_remote_buffer<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
remote_buf_id: usize,
local: KeepaliveLocalMemory,
) -> Pin<Box<dyn Future<Output = Result<Result<IbvBuffer, String>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_remote_buffer<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
remote_buf_id: usize,
local: KeepaliveLocalMemory,
) -> Pin<Box<dyn Future<Output = Result<Result<IbvBuffer, String>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The generated handler method for this enum variant.
Source§impl<I: IbvDeviceImpl> IbvManagerMessageHandler for IbvManagerActor<I>
impl<I: IbvDeviceImpl> IbvManagerMessageHandler for IbvManagerActor<I>
Source§fn release_buffer<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
remote_buf_id: usize,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn release_buffer<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_cx: &'life1 Context<'_, Self>,
remote_buf_id: usize,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The generated handler method for this enum variant.
Source§impl<I: IbvDeviceImpl + Named> Named for IbvManagerActor<I>
impl<I: IbvDeviceImpl + Named> Named for IbvManagerActor<I>
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.
impl<I: IbvDeviceImpl + Named> Accepts<IbvManagerMessage> for IbvManagerActor<I>where
IbvManagerMessage: RemoteMessage,
impl<I: IbvDeviceImpl + Named> Accepts<IntrospectMessage> for IbvManagerActor<I>
impl<I: IbvDeviceImpl + Named> Referable for IbvManagerActor<I>
impl<I: IbvDeviceImpl + Named> RemoteHandles<IbvManagerMessage> for IbvManagerActor<I>where
IbvManagerMessage: RemoteMessage,
impl<I: IbvDeviceImpl + Named> RemoteHandles<IntrospectMessage> for IbvManagerActor<I>
Auto Trait Implementations§
impl<I> !Freeze for IbvManagerActor<I>
impl<I> !RefUnwindSafe for IbvManagerActor<I>
impl<I> Send for IbvManagerActor<I>
impl<I> Sync for IbvManagerActor<I>
impl<I> Unpin for IbvManagerActor<I>where
<<I as IbvDeviceImpl>::Domain as IbvDomainImpl>::QueuePair: Unpin,
I: Unpin,
<I as IbvDeviceImpl>::Domain: Unpin,
impl<I> UnsafeUnpin for IbvManagerActor<I>
impl<I> !UnwindSafe for IbvManagerActor<I>
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
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> Handler<IntrospectMessage> for Awhere
A: Actor,
impl<A> Handler<IntrospectMessage> for Awhere
A: Actor,
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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
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>,
Applies the layer to a service and wraps it in [
Layered].