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)
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") )
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
FakeLessor is a fake implementation of Lessor interface. Used for testing only.
type FakeLessor struct{}
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 struct { backend.BatchTx }
func (ftd *FakeTxnDelete) DeleteRange(key, end []byte) (n, rev int64)
func (ftd *FakeTxnDelete) End()
type Lease struct { ID LeaseID // contains filtered or unexported fields }
func NewLease(id LeaseID, ttl int64) *Lease
func (l *Lease) Keys() []string
Keys returns all the keys attached to the lease.
func (l *Lease) Remaining() time.Duration
Remaining returns the remaining time of the lease.
func (l *Lease) RemainingTTL() int64
RemainingTTL returns the last checkpointed remaining TTL of the lease. TODO(jpbetz): do not expose this utility method
func (l *Lease) SetLeaseItem(item LeaseItem)
SetLeaseItem sets the given lease item, this func is thread-safe
func (l *Lease) TTL() int64
TTL returns the TTL of the Lease.
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 (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 int64
type LeaseItem struct { Key string }
type LeaseQueue []*LeaseWithTime
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)
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
}
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(lg *zap.Logger, b backend.Backend, cluster cluster, cfg LessorConfig) Lessor
type LessorConfig struct { MinLeaseTTL int64 CheckpointInterval time.Duration ExpiredLeasesRetryInterval time.Duration CheckpointPersist bool }
RangeDeleter is a TxnDelete constructor.
type RangeDeleter func() 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() }