lease

package
v3.5.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2024 License: Apache-2.0 Imports: 16 Imported by: 17

Documentation

Overview

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

Index

Constants

View Source
const MaxLeaseTTL = 9000000000

MaxLeaseTTL is the maximum lease TTL value

View Source
const NoLease = LeaseID(0)

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

Variables

View Source
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")
)

Functions

This section is empty.

Types

type Checkpointer

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

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

type FakeLessor

type FakeLessor struct{}

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

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 added in v3.5.10

func NewLease(id LeaseID, ttl int64) *Lease

func (*Lease) Demoted added in v3.5.14

func (l *Lease) Demoted() bool

Demoted returns true if the lease's expiry has been reset to forever.

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 added in v3.5.10

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

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

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

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

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()
}

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

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

type RangeDeleter

type RangeDeleter func() TxnDelete

RangeDeleter is a TxnDelete constructor.

type TxnDelete

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

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

Directories

Path Synopsis
Package leasehttp serves lease renewals made through HTTP requests.
Package leasehttp serves lease renewals made through HTTP requests.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL