pub struct InMemoryCrossClusterDirectory { /* private fields */ }Expand description
In-memory implementation for testing and single-process multi-cluster setups.
Implementations§
Trait Implementations§
Source§impl CrossClusterDirectory for InMemoryCrossClusterDirectory
impl CrossClusterDirectory for InMemoryCrossClusterDirectory
Source§fn lookup<'life0, 'life1, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
) -> Pin<Box<dyn Future<Output = Result<Option<GrainOwnership>, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn lookup<'life0, 'life1, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
) -> Pin<Box<dyn Future<Output = Result<Option<GrainOwnership>, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Look up which cluster owns a grain.
Source§fn register<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
cluster_id: &'life2 ClusterId,
epoch: u64,
) -> Pin<Box<dyn Future<Output = Result<GrainOwnership, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn register<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
cluster_id: &'life2 ClusterId,
epoch: u64,
) -> Pin<Box<dyn Future<Output = Result<GrainOwnership, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
CAS register. Returns actual owner (may differ from requested if another
cluster won the race). The epoch is a monotonic fencing token — stale
registrations with a lower epoch are rejected.
Source§fn deregister<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
cluster_id: &'life2 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<(), DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn deregister<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grain_id: &'life1 GrainId,
cluster_id: &'life2 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<(), DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Release ownership. Only the owning cluster can deregister.
Source§fn list_owned_by<'life0, 'life1, 'async_trait>(
&'life0 self,
cluster_id: &'life1 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<Vec<(GrainId, GrainOwnership)>, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_owned_by<'life0, 'life1, 'async_trait>(
&'life0 self,
cluster_id: &'life1 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<Vec<(GrainId, GrainOwnership)>, DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Enumerate grains currently owned by a given cluster. Used by failover
to discover which grains require promotion when a peer is declared dead. Read more
Source§fn renew<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_grain_id: &'life1 GrainId,
_cluster_id: &'life2 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<(), DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn renew<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_grain_id: &'life1 GrainId,
_cluster_id: &'life2 ClusterId,
) -> Pin<Box<dyn Future<Output = Result<(), DirectoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Extend TTL for ownership. No-op for backends without TTL (e.g., PostgreSQL).
Source§impl Default for InMemoryCrossClusterDirectory
impl Default for InMemoryCrossClusterDirectory
Source§fn default() -> InMemoryCrossClusterDirectory
fn default() -> InMemoryCrossClusterDirectory
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl !Freeze for InMemoryCrossClusterDirectory
impl RefUnwindSafe for InMemoryCrossClusterDirectory
impl Send for InMemoryCrossClusterDirectory
impl Sync for InMemoryCrossClusterDirectory
impl Unpin for InMemoryCrossClusterDirectory
impl UnsafeUnpin for InMemoryCrossClusterDirectory
impl UnwindSafe for InMemoryCrossClusterDirectory
Blanket Implementations§
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request