MultiResourceLock

Struct MultiResourceLock 

Source
pub struct MultiResourceLock { /* private fields */ }
Available on crate feature sync only.
Expand description

A distributed mutual exclusion lock backed by Redis.

Supports exclusion based on multiple resources and partial overlaps.

E.g. a lock on resources ["a", "b"] will block a lock on ["a"] or ["b", "c"].

Implementations§

Source§

impl MultiResourceLock

Source

pub fn new(client: &Client) -> RedisResult<Self>

Create a new instance of the lock.

§Errors

When Client::get_connection errors.

Source

pub fn acquire_default( &mut self, resources: &[String], ) -> RedisResult<Option<String>>

Source

pub fn acquire( &mut self, resources: &[String], expiration: Duration, timeout: Duration, sleep: Duration, ) -> RedisResult<Option<String>>

Attempts to acquire the lock blocking until the lock can be acquired.

Blocks up to timeout duration making attempts every sleep duration.

Returns None when it times out.

§Errors

When MultiResourceLock::try_acquire errors.

Source

pub fn try_acquire_default( &mut self, resources: &[String], ) -> RedisResult<Option<String>>

Source

pub fn try_acquire( &mut self, resources: &[String], expiration: Duration, ) -> RedisResult<Option<String>>

Attempts to acquire the lock returning immediately if it cannot be immediately acquired.

§Errors
  • When the acquire_lock function is missing from the Redis instance.
Source

pub fn release(&mut self, lock_id: &str) -> RedisResult<usize>

Releases a held lock.

§Errors
  • When the release_lock function is missing from the Redis instance.
  • When lock_id does not refer to a held lock.
Source

pub fn try_lock_default( &mut self, resources: &[String], ) -> RedisResult<Option<MultiResourceGuard<'_>>>

Source

pub fn try_lock( &mut self, resources: &[String], expiration: Duration, ) -> RedisResult<Option<MultiResourceGuard<'_>>>

Attempts to acquire the lock returning immediately if it cannot be immediately acquired.

Wraps the result in a guard that releases the lock when dropped.

§Errors

When MultiResourceLock::try_acquire errors.

Source

pub fn lock_default( &mut self, resources: &[String], ) -> RedisResult<Option<MultiResourceGuard<'_>>>

Source

pub fn lock( &mut self, resources: &[String], expiration: Duration, timeout: Duration, sleep: Duration, ) -> RedisResult<Option<MultiResourceGuard<'_>>>

Attempts to acquire the lock blocking until the lock can be acquired.

Blocks up to timeout duration making attempts every sleep duration.

Returns None when it times out.

Wraps the result in a guard that releases the lock when dropped.

§Errors

When MultiResourceLock::acquire errors.

Trait Implementations§

Source§

impl Debug for MultiResourceLock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,