pub struct BucketLease { /* private fields */ }Expand description
A held lease on {prefix}/LEASE. See the module docs.
Implementations§
Source§impl BucketLease
impl BucketLease
Sourcepub async fn acquire(
store: Arc<dyn ObjectStore>,
prefix: &str,
ttl_s: u64,
) -> Result<BucketLease, LeaseError>
pub async fn acquire( store: Arc<dyn ObjectStore>, prefix: &str, ttl_s: u64, ) -> Result<BucketLease, LeaseError>
Take the lease on prefix for ttl_s seconds (0 counts as 1), under
a new random instance id. See acquire_as.
§Errors
As acquire_as.
Sourcepub async fn acquire_as(
store: Arc<dyn ObjectStore>,
prefix: &str,
ttl_s: u64,
instance_id: &str,
watch: &mut LeaseWatch,
) -> Result<BucketLease, LeaseError>
pub async fn acquire_as( store: Arc<dyn ObjectStore>, prefix: &str, ttl_s: u64, instance_id: &str, watch: &mut LeaseWatch, ) -> Result<BucketLease, LeaseError>
Take the lease on prefix for ttl_s seconds (0 counts as 1) as
instance_id.
An instance passes the same id and watch to every attempt. A lease
already naming the id — an earlier attempt whose write landed though
its answer was lost — is taken back at once, and watch lets a suspect
foreign lease be taken over once it has sat unchanged for a TTL.
§Errors
LeaseError::ForeignActive when another instance holds a fresh
lease — or won the race for it against this call;
LeaseError::PreconditionsIgnored when the service ignores a
conditional PUT’s precondition; LeaseError::Store when the service
fails a request.
Sourcepub fn instance_id(&self) -> &str
pub fn instance_id(&self) -> &str
This process’s instance id, as the LEASE object names it.
Sourcepub fn renew_interval(&self) -> Duration
pub fn renew_interval(&self) -> Duration
How often to renew: a third of the TTL.
Sourcepub fn exclusion(&self) -> Exclusion
pub fn exclusion(&self) -> Exclusion
How strongly this lease excludes a second writer on this service.
Sourcepub fn is_lost(&self) -> bool
pub fn is_lost(&self) -> bool
Whether the lease was found replaced or deleted. A lost lease never comes back; take a new one.
Sourcepub fn write_deadline(&self) -> Option<Instant>
pub fn write_deadline(&self) -> Option<Instant>
The moment, on Tokio’s clock, after which this holder must not write:
two thirds of a TTL after the last successful renewal. None once the
lease is lost or that moment has passed on either clock.
Sourcepub fn may_write(&self) -> bool
pub fn may_write(&self) -> bool
Whether this holder may start a write now. See
write_deadline.
Sourcepub async fn renew(&self) -> Result<(), LeaseError>
pub async fn renew(&self) -> Result<(), LeaseError>
Extend the lease: rewrite it with a new renewed_at, provided it is
still exactly ours.
§Errors
LeaseError::Lost when the object was replaced or deleted since our
last write — the lease is then lost for good; LeaseError::Store
when the service fails a request (retry; the fence keeps the holder
safe meanwhile).
Sourcepub async fn release(self) -> Result<(), LeaseError>
pub async fn release(self) -> Result<(), LeaseError>
Give the lease up: DELETE {prefix}/LEASE if it still names us. A
lost lease, or one another instance now holds, is left alone.
The check and the delete are two requests (object_store 0.11 has no conditional DELETE): a takeover landing between them would be deleted, and its holder would rewrite it at its next renewal.
§Errors
LeaseError::Store when the service fails a request; the lease then
expires by itself after its TTL.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for BucketLease
impl !RefUnwindSafe for BucketLease
impl !UnwindSafe for BucketLease
impl Forget for BucketLease
impl Send for BucketLease
impl Sync for BucketLease
impl Unpin for BucketLease
impl UnsafeUnpin for BucketLease
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.