mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
clientv3: implement LeaseLeases API
Signed-off-by: Gyu-Ho Lee <gyuhox@gmail.com>
This commit is contained in:
parent
d25ae50c02
commit
15ef98a4ee
@ -60,6 +60,18 @@ type LeaseTimeToLiveResponse struct {
|
|||||||
Keys [][]byte `json:"keys"`
|
Keys [][]byte `json:"keys"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LeaseStatus represents a lease status.
|
||||||
|
type LeaseStatus struct {
|
||||||
|
ID LeaseID `json:"id"`
|
||||||
|
// TODO: TTL int64
|
||||||
|
}
|
||||||
|
|
||||||
|
// LeaseLeasesResponse is used to convert the protobuf lease list response.
|
||||||
|
type LeaseLeasesResponse struct {
|
||||||
|
*pb.ResponseHeader
|
||||||
|
Leases []LeaseStatus `json:"leases"`
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// defaultTTL is the assumed lease TTL used for the first keepalive
|
// defaultTTL is the assumed lease TTL used for the first keepalive
|
||||||
// deadline before the actual TTL is known to the client.
|
// deadline before the actual TTL is known to the client.
|
||||||
@ -98,6 +110,9 @@ type Lease interface {
|
|||||||
// TimeToLive retrieves the lease information of the given lease ID.
|
// TimeToLive retrieves the lease information of the given lease ID.
|
||||||
TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)
|
TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)
|
||||||
|
|
||||||
|
// Leases retrieves all leases.
|
||||||
|
Leases(ctx context.Context) (*LeaseLeasesResponse, error)
|
||||||
|
|
||||||
// KeepAlive keeps the given lease alive forever.
|
// KeepAlive keeps the given lease alive forever.
|
||||||
KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)
|
KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)
|
||||||
|
|
||||||
@ -219,6 +234,22 @@ func (l *lessor) TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *lessor) Leases(ctx context.Context) (*LeaseLeasesResponse, error) {
|
||||||
|
for {
|
||||||
|
resp, err := l.remote.LeaseLeases(ctx, &pb.LeaseLeasesRequest{}, grpc.FailFast(false))
|
||||||
|
if err == nil {
|
||||||
|
leases := make([]LeaseStatus, len(resp.Leases))
|
||||||
|
for i := range resp.Leases {
|
||||||
|
leases[i] = LeaseStatus{ID: LeaseID(resp.Leases[i].ID)}
|
||||||
|
}
|
||||||
|
return &LeaseLeasesResponse{ResponseHeader: resp.GetHeader(), Leases: leases}, nil
|
||||||
|
}
|
||||||
|
if isHaltErr(ctx, err) {
|
||||||
|
return nil, toErr(ctx, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) {
|
func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) {
|
||||||
ch := make(chan *LeaseKeepAliveResponse, leaseResponseChSize)
|
ch := make(chan *LeaseKeepAliveResponse, leaseResponseChSize)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user