pub struct PostgresDistributedLock { /* private fields */ }Expand description
PostgreSQL-based distributed lock implementation
Uses PostgreSQL advisory locks for distributed coordination. Advisory locks are fast, automatically cleaned up on connection termination, and support both blocking and non-blocking acquisition.
Implementations§
Source§impl PostgresDistributedLock
impl PostgresDistributedLock
Sourcepub async fn new(database_url: &str) -> StateResult<Self>
pub async fn new(database_url: &str) -> StateResult<Self>
Sourcepub async fn with_pool_size(
database_url: &str,
max_connections: u32,
) -> StateResult<Self>
pub async fn with_pool_size( database_url: &str, max_connections: u32, ) -> StateResult<Self>
Create a new PostgreSQL distributed lock with custom pool size
§Arguments
database_url- PostgreSQL connection URLmax_connections- Maximum number of connections in the pool
Trait Implementations§
Source§impl Debug for PostgresDistributedLock
impl Debug for PostgresDistributedLock
Source§impl DistributedLock for PostgresDistributedLock
impl DistributedLock for PostgresDistributedLock
Source§fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<LockGuard>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<LockGuard>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Acquire a lock for the given resource Read more
Source§fn try_acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<Option<LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn try_acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<Option<LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Try to acquire a lock without blocking Read more
Source§fn release_internal<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
resource: &'life1 str,
token: &'life2 LockToken,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn release_internal<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
resource: &'life1 str,
token: &'life2 LockToken,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Internal release method (used by Drop)
Source§fn is_locked<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
) -> Pin<Box<dyn Future<Output = StateResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_locked<'life0, 'life1, 'async_trait>(
&'life0 self,
resource: &'life1 str,
) -> Pin<Box<dyn Future<Output = StateResult<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Check if a resource is currently locked Read more
Source§fn extend<'life0, 'life1, 'async_trait>(
&'life0 self,
guard: &'life1 mut LockGuard,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn extend<'life0, 'life1, 'async_trait>(
&'life0 self,
guard: &'life1 mut LockGuard,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = StateResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Extend the TTL of an existing lock Read more
Source§impl Drop for PostgresDistributedLock
impl Drop for PostgresDistributedLock
Auto Trait Implementations§
impl !RefUnwindSafe for PostgresDistributedLock
impl !UnwindSafe for PostgresDistributedLock
impl Freeze for PostgresDistributedLock
impl Send for PostgresDistributedLock
impl Sync for PostgresDistributedLock
impl Unpin for PostgresDistributedLock
impl UnsafeUnpin for PostgresDistributedLock
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.