Skip to main content

DataDirLock

Struct DataDirLock 

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

RAII guard. Drop releases the kernel-level flock automatically (by closing the underlying file descriptor) and removes the pidfile.

Implementations§

Source§

impl DataDirLock

Source

pub fn data_dir(&self) -> &Path

Path of the data directory this lock protects. Used by callers that need to release-then-re-acquire (e.g. ResumeAfterAbort).

Source§

impl DataDirLock

Source

pub fn acquire(data_dir: &Path) -> Result<Self>

Acquire the writer lock on data_dir. Returns immediately with Error::LockHeld if another process holds it.

Source

pub fn acquire_or_break_stale(data_dir: &Path) -> Result<Self>

Like Self::acquire, but if the lock appears stale (pidfile names a PID that’s no longer alive), reclaim it. Refuses to break a lock held by a live named holder.

Strategy: re-attempt Self::acquire on the existing lockfile inode. When the named holder really has died, the kernel released its flock and the second attempt succeeds. When something else is genuinely holding the flock — an inherited FD outliving the named holder, or a PID-reuse race that briefly makes the pidfile lie — the second attempt still returns LockHeld and we surface Error::StaleLockBreakRefused.

We deliberately do NOT unlink the lockfile and acquire on a fresh inode: that path can leave two processes each holding “the lock” on separate inodes if the original inode’s flock is still held, violating invariant #1 (at most one process holds the writer lock).

Trait Implementations§

Source§

impl Debug for DataDirLock

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Drop for DataDirLock

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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, 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