pub struct LandingReservation { /* private fields */ }Expand description
What: One transaction’s view of the reservation: whether another transaction holds it, waiting for it, requesting it, and releasing it. Why: The landing loop takes the reservation after its lost races and must give it back when the loop ends, landed or failed.
In TS you’d write (pseudocode):
type LandingReservation = AsyncDisposable & { awaitSlot; heldByAnother; reserve };Implementations§
Source§impl LandingReservation
impl LandingReservation
Sourcepub fn open(
registry_root: &Path,
transaction_directory: &Path,
transaction_id: &str,
nested: bool,
) -> Self
pub fn open( registry_root: &Path, transaction_directory: &Path, transaction_id: &str, nested: bool, ) -> Self
What:
Opens the reservation view for one landing loop.
Why:
The caller decides nested from its inherited landing lease, which this module does not read.
In TS you’d write (pseudocode):
await openLandingReservation({ registryRoot, transactionDirectory, transactionId });Sourcepub fn held_by_another(&self) -> Result<bool, ReservationError>
pub fn held_by_another(&self) -> Result<bool, ReservationError>
What: Whether another transaction holds a live reservation right now. Why: The holder’s own token never counts against itself.
In TS you’d write (pseudocode):
await reservation.heldByAnother();Sourcepub fn await_slot(&self) -> Result<(), ReservationError>
pub fn await_slot(&self) -> Result<(), ReservationError>
What: Waits while a live reservation owned by another transaction exists. Why: A landing may take the landing lock only after the holder has finished its landing loop.
In TS you’d write (pseudocode):
await reservation.awaitSlot();Sourcepub fn await_slot_for(&self, limit: Duration) -> Result<(), ReservationError>
pub fn await_slot_for(&self, limit: Duration) -> Result<(), ReservationError>
What:
Waits while a live reservation owned by another transaction exists, for at most limit.
Why:
Tests and the default wait share one loop; only the limit differs.
In TS you’d write (pseudocode):
await reservation.awaitSlot({ limitMs });Sourcepub fn reserve(&mut self, lost_races: u64) -> Result<bool, ReservationError>
pub fn reserve(&mut self, lost_races: u64) -> Result<bool, ReservationError>
What: Writes the request, then waits until this transaction is the oldest live requester and the lock is free, and takes the reservation. Why: The first requester in grant order gets the next slot, so a starving commit cannot be overtaken again. An inherited landing lease neither asks nor waits.
In TS you’d write (pseudocode):
await reservation.reserve(lostRaces); // false when already held or not applicableSourcepub fn reserve_for(
&mut self,
lost_races: u64,
limit: Duration,
) -> Result<bool, ReservationError>
pub fn reserve_for( &mut self, lost_races: u64, limit: Duration, ) -> Result<bool, ReservationError>
What:
Writes the request and waits for the grant, for at most limit.
Why:
Tests and the default wait share one loop; only the limit differs.
In TS you’d write (pseudocode):
await reservation.reserve(lostRaces, { limitMs });Sourcepub fn release(self) -> Result<(), ReservationError>
pub fn release(self) -> Result<(), ReservationError>
What: Releases the reservation if held and removes the request file. Why: The request goes even when the reservation was never granted, so no stale request blocks the next grant.
In TS you’d write (pseudocode):
await reservation[Symbol.asyncDispose]();Auto Trait Implementations§
impl Freeze for LandingReservation
impl RefUnwindSafe for LandingReservation
impl Send for LandingReservation
impl Sync for LandingReservation
impl Unpin for LandingReservation
impl UnsafeUnpin for LandingReservation
impl UnwindSafe for LandingReservation
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
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> ⓘ
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> ⓘ
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