Documentation
¶
Overview ¶
Package lease provides an interface and implemetation for time-limited leases over arbitrary resources.
Index ¶
- Constants
- Variables
- type FakeLessor
- func (fl *FakeLessor) Attach(id LeaseID, items []LeaseItem) error
- func (fl *FakeLessor) Demote()
- func (fl *FakeLessor) Detach(id LeaseID, items []LeaseItem) error
- func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease
- func (fl *FakeLessor) Grant(id LeaseID, ttl int64) (*Lease, error)
- func (le *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) SetRangeDeleter(dr RangeDeleter)
- func (fl *FakeLessor) Stop()
- type Lease
- type LeaseID
- type LeaseItem
- type Lessor
- type RangeDeleter
Constants ¶
View Source
const (
// NoLease is a special LeaseID representing the absence of a lease.
NoLease = LeaseID(0)
)
Variables ¶
View Source
var (
ErrNotPrimary = errors.New("not a primary lessor")
ErrLeaseNotFound = errors.New("lease not found")
ErrLeaseExists = errors.New("lease already exists")
)
Functions ¶
This section is empty.
Types ¶
type FakeLessor ¶
type FakeLessor struct{}
FakeLessor is a fake implementation of Lessor interface. Used for testing only.
func (*FakeLessor) ExpiredLeasesC ¶
func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease
func (*FakeLessor) SetRangeDeleter ¶
func (fl *FakeLessor) SetRangeDeleter(dr RangeDeleter)
type Lease ¶
type Lease struct {
ID LeaseID
TTL int64 // time to live in seconds
// contains filtered or unexported fields
}
type Lessor ¶
type Lessor interface {
// SetRangeDeleter sets the RangeDeleter to the Lessor.
// Lessor deletes the items in the revoked or expired lease from the
// the set RangeDeleter.
SetRangeDeleter(dr RangeDeleter)
// 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
// 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
// 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
// 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.
type RangeDeleter ¶
type RangeDeleter interface {
DeleteRange(key, end []byte) (int64, int64)
}
RangeDeleter defines an interface with DeleteRange method. We define this interface only for lessor to limit the number of methods of mvcc.KV to what lessor actually needs.
Having a minimum interface makes testing easy.
Click to show internal directories.
Click to hide internal directories.