Skip to main content

EntityLockManager

Struct EntityLockManager 

Source
pub struct EntityLockManager { /* private fields */ }
Expand description

Advisory entity lock manager for a single session.

Implementations§

Source§

impl EntityLockManager

Source

pub fn new(pool: DbPool, session_id: impl Into<String>) -> Self

Source

pub async fn try_acquire(&self, entity_name: &str) -> Result<bool, MemoryError>

Try to acquire an advisory lock on entity_name.

  • If no lock exists: INSERT and return true.
  • If the current session already holds the lock: UPDATE expires_at, return true.
  • If another session holds a non-expired lock: retry with exponential backoff.
  • After MAX_RETRIES failures: return false (caller proceeds without lock).

Expired locks (past expires_at) are atomically reclaimed on the INSERT conflict.

§Errors

Returns an error on database failures.

Source

pub async fn extend_lock( &self, entity_name: &str, extra_secs: i64, ) -> Result<bool, MemoryError>

Extend the TTL of a lock held by this session.

Called before long operations (e.g., an LLM call inside entity resolution) to prevent the lock from expiring while work is in progress.

Returns true if the lock was extended (still held by this session).

§Errors

Returns an error on database failures.

Source

pub async fn release(&self, entity_name: &str) -> Result<(), MemoryError>

Release the lock on entity_name held by this session.

No-op if the lock was already reclaimed by another session.

§Errors

Returns an error on database failures.

Source

pub async fn release_all(&self) -> Result<(), MemoryError>

Release all locks held by this session.

Called on agent shutdown to avoid leaving locks until TTL expiry.

§Errors

Returns an error on database failures.

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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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