Skip to main content

SessionLease

Struct SessionLease 

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

A held single-writer lease on one session file. Dropping (or SessionLease::release) drops the kernel lock, removes the advisory metadata and any pending takeover request.

The .lock file itself is left in place while the session file exists (POSIX locks name an inode); it is removed when the session file does not exist (a lease eagerly taken for a session that was never written), best-effort on Windows where a live byte-range lock blocks deletion.

Implementations§

Source§

impl SessionLease

Source

pub fn acquire( session_file: &Path, holder: &LeaseInfo, ) -> Result<Self, SessionLockError>

Acquires the exclusive lease on session_file for holder. For a session file that does not exist yet (new session, file created at the first flush) the parent directory is created so the .lock sibling can claim the planned path before the file exists (D-LOCK “lazily at the first flush … before the file is created”).

§Errors

SessionLockError::HeldBy when this process or another writer already holds it (the info names the holder when the advisory metadata is readable); SessionLockError::Io when the lock file cannot be created or locked.

Source

pub fn info(&self) -> &LeaseInfo

The holder identity this lease was acquired for.

Source

pub fn session_file(&self) -> &Path

The leased session file (resolved absolute path).

Source

pub fn release(self)

Releases the lease: deletes any pending takeover request, drops the kernel lock and removes the advisory metadata (all best-effort except the lock itself).

Trait Implementations§

Source§

impl Debug for SessionLease

Source§

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

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

impl Drop for SessionLease

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, 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.