etcd: Index | Files | Directories

package lease

import ""

Package lease provides an interface and implementation for time-limited leases over arbitrary resources.


Package Files

doc.go lease_queue.go lessor.go metrics.go


const MaxLeaseTTL = 9000000000

MaxLeaseTTL is the maximum lease TTL value

const NoLease = LeaseID(0)

NoLease is a special LeaseID representing the absence of a lease.


var (
    ErrNotPrimary       = errors.New("not a primary lessor")
    ErrLeaseNotFound    = errors.New("lease not found")
    ErrLeaseExists      = errors.New("lease already exists")
    ErrLeaseTTLTooLarge = errors.New("too large lease TTL")

type Checkpointer Uses

type Checkpointer func(ctx context.Context, lc *pb.LeaseCheckpointRequest)

Checkpointer permits checkpointing of lease remaining TTLs to the consensus log. Defined here to avoid circular dependency with mvcc.

type FakeLessor Uses

type FakeLessor struct{}

FakeLessor is a fake implementation of Lessor interface. Used for testing only.

func (*FakeLessor) Attach Uses

func (fl *FakeLessor) Attach(id LeaseID, items []LeaseItem) error

func (*FakeLessor) Checkpoint Uses

func (fl *FakeLessor) Checkpoint(id LeaseID, remainingTTL int64) error

func (*FakeLessor) Demote Uses

func (fl *FakeLessor) Demote()

func (*FakeLessor) Detach Uses

func (fl *FakeLessor) Detach(id LeaseID, items []LeaseItem) error

func (*FakeLessor) ExpiredLeasesC Uses

func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease

func (*FakeLessor) GetLease Uses

func (fl *FakeLessor) GetLease(item LeaseItem) LeaseID

func (*FakeLessor) Grant Uses

func (fl *FakeLessor) Grant(id LeaseID, ttl int64) (*Lease, error)

func (*FakeLessor) Leases Uses

func (fl *FakeLessor) Leases() []*Lease

func (*FakeLessor) Lookup Uses

func (fl *FakeLessor) Lookup(id LeaseID) *Lease

func (*FakeLessor) Promote Uses

func (fl *FakeLessor) Promote(extend time.Duration)

func (*FakeLessor) Recover Uses

func (fl *FakeLessor) Recover(b backend.Backend, rd RangeDeleter)

func (*FakeLessor) Renew Uses

func (fl *FakeLessor) Renew(id LeaseID) (int64, error)

func (*FakeLessor) Revoke Uses

func (fl *FakeLessor) Revoke(id LeaseID) error

func (*FakeLessor) SetCheckpointer Uses

func (fl *FakeLessor) SetCheckpointer(cp Checkpointer)

func (*FakeLessor) SetRangeDeleter Uses

func (fl *FakeLessor) SetRangeDeleter(dr RangeDeleter)

func (*FakeLessor) Stop Uses

func (fl *FakeLessor) Stop()

type FakeTxnDelete Uses

type FakeTxnDelete struct {

func (*FakeTxnDelete) DeleteRange Uses

func (ftd *FakeTxnDelete) DeleteRange(key, end []byte) (n, rev int64)

func (*FakeTxnDelete) End Uses

func (ftd *FakeTxnDelete) End()

type Lease Uses

type Lease struct {
    ID LeaseID
    // contains filtered or unexported fields

func (*Lease) Keys Uses

func (l *Lease) Keys() []string

Keys returns all the keys attached to the lease.

func (*Lease) Remaining Uses

func (l *Lease) Remaining() time.Duration

Remaining returns the remaining time of the lease.

func (*Lease) RemainingTTL Uses

func (l *Lease) RemainingTTL() int64

RemainingTTL returns the last checkpointed remaining TTL of the lease. TODO(jpbetz): do not expose this utility method

func (*Lease) TTL Uses

func (l *Lease) TTL() int64

TTL returns the TTL of the Lease.

type LeaseExpiredNotifier Uses

type LeaseExpiredNotifier struct {
    // contains filtered or unexported fields

LeaseExpiredNotifier is a queue used to notify lessor to revoke expired lease. Only save one item for a lease, `Register` will update time of the corresponding lease.

func (*LeaseExpiredNotifier) Init Uses

func (mq *LeaseExpiredNotifier) Init()

func (*LeaseExpiredNotifier) Len Uses

func (mq *LeaseExpiredNotifier) Len() int

func (*LeaseExpiredNotifier) Poll Uses

func (mq *LeaseExpiredNotifier) Poll() *LeaseWithTime

func (*LeaseExpiredNotifier) RegisterOrUpdate Uses

func (mq *LeaseExpiredNotifier) RegisterOrUpdate(item *LeaseWithTime)

func (*LeaseExpiredNotifier) Unregister Uses

func (mq *LeaseExpiredNotifier) Unregister() *LeaseWithTime

type LeaseID Uses

type LeaseID int64

type LeaseItem Uses

type LeaseItem struct {
    Key string

type LeaseQueue Uses

type LeaseQueue []*LeaseWithTime

func (LeaseQueue) Len Uses

func (pq LeaseQueue) Len() int

func (LeaseQueue) Less Uses

func (pq LeaseQueue) Less(i, j int) bool

func (*LeaseQueue) Pop Uses

func (pq *LeaseQueue) Pop() interface{}

func (*LeaseQueue) Push Uses

func (pq *LeaseQueue) Push(x interface{})

func (LeaseQueue) Swap Uses

func (pq LeaseQueue) Swap(i, j int)

type LeaseWithTime Uses

type LeaseWithTime struct {
    // contains filtered or unexported fields

LeaseWithTime contains lease object with a time. For the lessor's lease heap, time identifies the lease expiration time. For the lessor's lease checkpoint heap, the time identifies the next lease checkpoint time.

type Lessor Uses

type Lessor interface {
    // SetRangeDeleter lets the lessor create TxnDeletes to the store.
    // Lessor deletes the items in the revoked or expired lease by creating
    // new TxnDeletes.
    SetRangeDeleter(rd RangeDeleter)

    SetCheckpointer(cp Checkpointer)

    // Grant grants a lease that expires at least after TTL seconds.
    Grant(id LeaseID, ttl int64) (*Lease, error)
    // Revoke revokes a lease with given ID. The item attached to the
    // given lease will be removed. If the ID does not exist, an error
    // will be returned.
    Revoke(id LeaseID) error

    // Checkpoint applies the remainingTTL of a lease. The remainingTTL is used in Promote to set
    // the expiry of leases to less than the full TTL when possible.
    Checkpoint(id LeaseID, remainingTTL int64) error

    // Attach attaches given leaseItem to the lease with given LeaseID.
    // If the lease does not exist, an error will be returned.
    Attach(id LeaseID, items []LeaseItem) error

    // GetLease returns LeaseID for given item.
    // If no lease found, NoLease value will be returned.
    GetLease(item LeaseItem) LeaseID

    // Detach detaches given leaseItem from the lease with given LeaseID.
    // If the lease does not exist, an error will be returned.
    Detach(id LeaseID, items []LeaseItem) error

    // Promote promotes the lessor to be the primary lessor. Primary lessor manages
    // the expiration and renew of leases.
    // Newly promoted lessor renew the TTL of all lease to extend + previous TTL.
    Promote(extend time.Duration)

    // Demote demotes the lessor from being the primary lessor.

    // Renew renews a lease with given ID. It returns the renewed TTL. If the ID does not exist,
    // an error will be returned.
    Renew(id LeaseID) (int64, error)

    // Lookup gives the lease at a given lease id, if any
    Lookup(id LeaseID) *Lease

    // Leases lists all leases.
    Leases() []*Lease

    // ExpiredLeasesC returns a chan that is used to receive expired leases.
    ExpiredLeasesC() <-chan []*Lease

    // Recover recovers the lessor state from the given backend and RangeDeleter.
    Recover(b backend.Backend, rd RangeDeleter)

    // Stop stops the lessor for managing leases. The behavior of calling Stop multiple
    // times is undefined.

Lessor owns leases. It can grant, revoke, renew and modify leases for lessee.

func NewLessor Uses

func NewLessor(lg *zap.Logger, b backend.Backend, cfg LessorConfig, ci cindex.ConsistentIndexer) Lessor

type LessorConfig Uses

type LessorConfig struct {
    MinLeaseTTL                int64
    CheckpointInterval         time.Duration
    ExpiredLeasesRetryInterval time.Duration

type RangeDeleter Uses

type RangeDeleter func() TxnDelete

RangeDeleter is a TxnDelete constructor.

type TxnDelete Uses

type TxnDelete interface {
    DeleteRange(key, end []byte) (n, rev int64)

TxnDelete is a TxnWrite that only permits deletes. Defined here to avoid circular dependency with mvcc.


leasehttpPackage leasehttp serves lease renewals made through HTTP requests.
leasepbPackage leasepb is a generated protocol buffer package.

Package lease imports 14 packages (graph) and is imported by 129 packages. Updated 2020-06-02. Refresh now. Tools for package owners.