mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-24 23:26:43 +00:00
Formalize LeaseInfo interface in preparation for another implementation
This commit is contained in:
parent
3b41419523
commit
234b8dcde2
@ -15,6 +15,11 @@ import struct, time
|
|||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
|
from zope.interface import (
|
||||||
|
Interface,
|
||||||
|
implementer,
|
||||||
|
)
|
||||||
|
|
||||||
from allmydata.util.hashutil import timing_safe_compare
|
from allmydata.util.hashutil import timing_safe_compare
|
||||||
|
|
||||||
# struct format for representation of a lease in an immutable share
|
# struct format for representation of a lease in an immutable share
|
||||||
@ -23,6 +28,84 @@ IMMUTABLE_FORMAT = ">L32s32sL"
|
|||||||
# struct format for representation of a lease in a mutable share
|
# struct format for representation of a lease in a mutable share
|
||||||
MUTABLE_FORMAT = ">LL32s32s20s"
|
MUTABLE_FORMAT = ">LL32s32s20s"
|
||||||
|
|
||||||
|
|
||||||
|
class ILeaseInfo(Interface):
|
||||||
|
"""
|
||||||
|
Represent a marker attached to a share that indicates that share should be
|
||||||
|
retained for some amount of time.
|
||||||
|
|
||||||
|
Typically clients will create and renew leases on their shares as a way to
|
||||||
|
inform storage servers that there is still interest in those shares. A
|
||||||
|
share may have more than one lease. If all leases on a share have
|
||||||
|
expiration times in the past then the storage server may take this as a
|
||||||
|
strong hint that no one is interested in the share anymore and therefore
|
||||||
|
the share may be deleted to reclaim the space.
|
||||||
|
"""
|
||||||
|
def renew(new_expire_time):
|
||||||
|
"""
|
||||||
|
Create a new ``ILeaseInfo`` with the given expiration time.
|
||||||
|
|
||||||
|
:param Union[int, float] new_expire_time: The expiration time the new
|
||||||
|
``ILeaseInfo`` will have.
|
||||||
|
|
||||||
|
:return: The new ``ILeaseInfo`` provider with the new expiration time.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_expiration_time():
|
||||||
|
"""
|
||||||
|
:return Union[int, float]: this lease's expiration time
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_grant_renew_time_time():
|
||||||
|
"""
|
||||||
|
:return Union[int, float]: a guess about the last time this lease was
|
||||||
|
renewed
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_age():
|
||||||
|
"""
|
||||||
|
:return Union[int, float]: a guess about how long it has been since this
|
||||||
|
lease was renewed
|
||||||
|
"""
|
||||||
|
|
||||||
|
def to_immutable_data():
|
||||||
|
"""
|
||||||
|
:return bytes: a serialized representation of this lease suitable for
|
||||||
|
inclusion in an immutable container
|
||||||
|
"""
|
||||||
|
|
||||||
|
def to_mutable_data():
|
||||||
|
"""
|
||||||
|
:return bytes: a serialized representation of this lease suitable for
|
||||||
|
inclusion in a mutable container
|
||||||
|
"""
|
||||||
|
|
||||||
|
def immutable_size():
|
||||||
|
"""
|
||||||
|
:return int: the size of the serialized representation of this lease in an
|
||||||
|
immutable container
|
||||||
|
"""
|
||||||
|
|
||||||
|
def mutable_size():
|
||||||
|
"""
|
||||||
|
:return int: the size of the serialized representation of this lease in a
|
||||||
|
mutable container
|
||||||
|
"""
|
||||||
|
|
||||||
|
def is_renew_secret(candidate_secret):
|
||||||
|
"""
|
||||||
|
:return bool: ``True`` if the given byte string is this lease's renew
|
||||||
|
secret, ``False`` otherwise
|
||||||
|
"""
|
||||||
|
|
||||||
|
def is_cancel_secret(candidate_secret):
|
||||||
|
"""
|
||||||
|
:return bool: ``True`` if the given byte string is this lease's cancel
|
||||||
|
secret, ``False`` otherwise
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(ILeaseInfo)
|
||||||
@attr.s(frozen=True)
|
@attr.s(frozen=True)
|
||||||
class LeaseInfo(object):
|
class LeaseInfo(object):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user