...

Package lease

import "go.etcd.io/etcd/server/v3/lease"
Overview
Index
Subdirectories

Overview ▾

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

Index ▾

Constants
Variables
type Checkpointer
type FakeLessor
    func (fl *FakeLessor) Attach(id LeaseID, items []LeaseItem) error
    func (fl *FakeLessor) Checkpoint(id LeaseID, remainingTTL int64) error
    func (fl *FakeLessor) Demote()
    func (fl *FakeLessor) Detach(id LeaseID, items []LeaseItem) error
    func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease
    func (fl *FakeLessor) GetLease(item LeaseItem) LeaseID
    func (fl *FakeLessor) Grant(id LeaseID, ttl int64) (*Lease, error)
    func (fl *FakeLessor) Leases() []*Lease
    func (fl *FakeLessor) Lookup(id LeaseID) *Lease
    func (fl *FakeLessor) Promote(extend time.Duration)
    func (fl *FakeLessor) Recover(b backend.Backend, rd RangeDeleter)
    func (fl *FakeLessor) Renew(id LeaseID) (int64, error)
    func (fl *FakeLessor) Revoke(id LeaseID) error
    func (fl *FakeLessor) SetCheckpointer(cp Checkpointer)
    func (fl *FakeLessor) SetRangeDeleter(dr RangeDeleter)
    func (fl *FakeLessor) Stop()
type FakeTxnDelete
    func (ftd *FakeTxnDelete) DeleteRange(key, end []byte) (n, rev int64)
    func (ftd *FakeTxnDelete) End()
type Lease
    func NewLease(id LeaseID, ttl int64) *Lease
    func (l *Lease) Keys() []string
    func (l *Lease) Remaining() time.Duration
    func (l *Lease) RemainingTTL() int64
    func (l *Lease) SetLeaseItem(item LeaseItem)
    func (l *Lease) TTL() int64
type LeaseExpiredNotifier
    func (mq *LeaseExpiredNotifier) Init()
    func (mq *LeaseExpiredNotifier) Len() int
    func (mq *LeaseExpiredNotifier) Poll() *LeaseWithTime
    func (mq *LeaseExpiredNotifier) RegisterOrUpdate(item *LeaseWithTime)
    func (mq *LeaseExpiredNotifier) Unregister() *LeaseWithTime
type LeaseID
type LeaseItem
type LeaseQueue
    func (pq LeaseQueue) Len() int
    func (pq LeaseQueue) Less(i, j int) bool
    func (pq *LeaseQueue) Pop() interface{}
    func (pq *LeaseQueue) Push(x interface{})
    func (pq LeaseQueue) Swap(i, j int)
type LeaseWithTime
type Lessor
    func NewLessor(lg *zap.Logger, b backend.Backend, cluster cluster, cfg LessorConfig) Lessor
type LessorConfig
type RangeDeleter
type TxnDelete

Package files

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

Constants

MaxLeaseTTL is the maximum lease TTL value

const MaxLeaseTTL = 9000000000

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

const NoLease = LeaseID(0)

Variables

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

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

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

type FakeLessor

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

type FakeLessor struct{}

func (*FakeLessor) Attach

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

func (*FakeLessor) Checkpoint

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

func (*FakeLessor) Demote

func (fl *FakeLessor) Demote()

func (*FakeLessor) Detach

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

func (*FakeLessor) ExpiredLeasesC

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

func (*FakeLessor) GetLease

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

func (*FakeLessor) Grant

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

func (*FakeLessor) Leases

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

func (*FakeLessor) Lookup

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

func (*FakeLessor) Promote

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

func (*FakeLessor) Recover

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

func (*FakeLessor) Renew

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

func (*FakeLessor) Revoke

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

func (*FakeLessor) SetCheckpointer

func (fl *FakeLessor) SetCheckpointer(cp Checkpointer)

func (*FakeLessor) SetRangeDeleter

func (fl *FakeLessor) SetRangeDeleter(dr RangeDeleter)

func (*FakeLessor) Stop

func (fl *FakeLessor) Stop()

type FakeTxnDelete

type FakeTxnDelete struct {
    backend.BatchTx
}

func (*FakeTxnDelete) DeleteRange

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

func (*FakeTxnDelete) End

func (ftd *FakeTxnDelete) End()

type Lease

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

func NewLease

func NewLease(id LeaseID, ttl int64) *Lease

func (*Lease) Keys

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

Keys returns all the keys attached to the lease.

func (*Lease) Remaining

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

Remaining returns the remaining time of the lease.

func (*Lease) RemainingTTL

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) SetLeaseItem

func (l *Lease) SetLeaseItem(item LeaseItem)

SetLeaseItem sets the given lease item, this func is thread-safe

func (*Lease) TTL

func (l *Lease) TTL() int64

TTL returns the TTL of the Lease.

type LeaseExpiredNotifier

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.

type LeaseExpiredNotifier struct {
    // contains filtered or unexported fields
}

func (*LeaseExpiredNotifier) Init

func (mq *LeaseExpiredNotifier) Init()

func (*LeaseExpiredNotifier) Len

func (mq *LeaseExpiredNotifier) Len() int

func (*LeaseExpiredNotifier) Poll

func (mq *LeaseExpiredNotifier) Poll() *LeaseWithTime

func (*LeaseExpiredNotifier) RegisterOrUpdate

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

func (*LeaseExpiredNotifier) Unregister

func (mq *LeaseExpiredNotifier) Unregister() *LeaseWithTime

type LeaseID

type LeaseID int64

type LeaseItem

type LeaseItem struct {
    Key string
}

type LeaseQueue

type LeaseQueue []*LeaseWithTime

func (LeaseQueue) Len

func (pq LeaseQueue) Len() int

func (LeaseQueue) Less

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

func (*LeaseQueue) Pop

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

func (*LeaseQueue) Push

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

func (LeaseQueue) Swap

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

type LeaseWithTime

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 LeaseWithTime struct {
    // contains filtered or unexported fields
}

type Lessor

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

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.
    Demote()

    // 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.
    Stop()
}

func NewLessor

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

type LessorConfig

type LessorConfig struct {
    MinLeaseTTL                int64
    CheckpointInterval         time.Duration
    ExpiredLeasesRetryInterval time.Duration
    CheckpointPersist          bool
}

type RangeDeleter

RangeDeleter is a TxnDelete constructor.

type RangeDeleter func() TxnDelete

type TxnDelete

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

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

Subdirectories

Name Synopsis
..
leasehttp Package leasehttp serves lease renewals made through HTTP requests.
leasepb