Skip to content

Commit 750b87d

Browse files
authored
Merge pull request #9924 from jpbetz/persist-lease-deadline
lease: Persist remainingTTL to prevent indefinite auto-renewal of long lived leases
2 parents 6e0c0d0 + d1de41e commit 750b87d

21 files changed

+1434
-525
lines changed

Diff for: Documentation/dev-guide/api_reference_v3.md

+26
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,31 @@ Empty field.
476476

477477

478478

479+
##### message `LeaseCheckpoint` (etcdserver/etcdserverpb/rpc.proto)
480+
481+
| Field | Description | Type |
482+
| ----- | ----------- | ---- |
483+
| ID | ID is the lease ID to checkpoint. | int64 |
484+
| remaining_TTL | Remaining_TTL is the remaining time until expiry of the lease. | int64 |
485+
486+
487+
488+
##### message `LeaseCheckpointRequest` (etcdserver/etcdserverpb/rpc.proto)
489+
490+
| Field | Description | Type |
491+
| ----- | ----------- | ---- |
492+
| checkpoints | | (slice of) LeaseCheckpoint |
493+
494+
495+
496+
##### message `LeaseCheckpointResponse` (etcdserver/etcdserverpb/rpc.proto)
497+
498+
| Field | Description | Type |
499+
| ----- | ----------- | ---- |
500+
| header | | ResponseHeader |
501+
502+
503+
479504
##### message `LeaseGrantRequest` (etcdserver/etcdserverpb/rpc.proto)
480505

481506
| Field | Description | Type |
@@ -903,6 +928,7 @@ Empty field.
903928
| ----- | ----------- | ---- |
904929
| ID | | int64 |
905930
| TTL | | int64 |
931+
| RemainingTTL | | int64 |
906932

907933

908934

Diff for: clientv3/snapshot/v3_snapshot.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ func (s *v3Manager) saveDB() error {
373373
be := backend.NewDefaultBackend(dbpath)
374374

375375
// a lessor never timeouts leases
376-
lessor := lease.NewLessor(be, math.MaxInt64)
376+
lessor := lease.NewLessor(s.lg, be, lease.LessorConfig{MinLeaseTTL: math.MaxInt64})
377377

378378
mvs := mvcc.NewStore(s.lg, be, lessor, (*initIndex)(&commit))
379379
txn := mvs.Write()

Diff for: etcdserver/apply.go

+14
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ type applierV3 interface {
5858
LeaseGrant(lc *pb.LeaseGrantRequest) (*pb.LeaseGrantResponse, error)
5959
LeaseRevoke(lc *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error)
6060

61+
LeaseCheckpoint(lc *pb.LeaseCheckpointRequest) (*pb.LeaseCheckpointResponse, error)
62+
6163
Alarm(*pb.AlarmRequest) (*pb.AlarmResponse, error)
6264

6365
Authenticate(r *pb.InternalAuthenticateRequest) (*pb.AuthenticateResponse, error)
@@ -130,6 +132,8 @@ func (a *applierV3backend) Apply(r *pb.InternalRaftRequest) *applyResult {
130132
ar.resp, ar.err = a.s.applyV3.LeaseGrant(r.LeaseGrant)
131133
case r.LeaseRevoke != nil:
132134
ar.resp, ar.err = a.s.applyV3.LeaseRevoke(r.LeaseRevoke)
135+
case r.LeaseCheckpoint != nil:
136+
ar.resp, ar.err = a.s.applyV3.LeaseCheckpoint(r.LeaseCheckpoint)
133137
case r.Alarm != nil:
134138
ar.resp, ar.err = a.s.applyV3.Alarm(r.Alarm)
135139
case r.Authenticate != nil:
@@ -582,6 +586,16 @@ func (a *applierV3backend) LeaseRevoke(lc *pb.LeaseRevokeRequest) (*pb.LeaseRevo
582586
return &pb.LeaseRevokeResponse{Header: newHeader(a.s)}, err
583587
}
584588

589+
func (a *applierV3backend) LeaseCheckpoint(lc *pb.LeaseCheckpointRequest) (*pb.LeaseCheckpointResponse, error) {
590+
for _, c := range lc.Checkpoints {
591+
err := a.s.lessor.Checkpoint(lease.LeaseID(c.ID), c.Remaining_TTL)
592+
if err != nil {
593+
return &pb.LeaseCheckpointResponse{Header: newHeader(a.s)}, err
594+
}
595+
}
596+
return &pb.LeaseCheckpointResponse{Header: newHeader(a.s)}, nil
597+
}
598+
585599
func (a *applierV3backend) Alarm(ar *pb.AlarmRequest) (*pb.AlarmResponse, error) {
586600
resp := &pb.AlarmResponse{}
587601
oldCount := len(a.s.alarmStore.Get(ar.Alarm))

Diff for: etcdserver/config.go

+3
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ type ServerConfig struct {
140140
Debug bool
141141

142142
ForceNewCluster bool
143+
144+
// LeaseCheckpointInterval time.Duration is the wait duration between lease checkpoints.
145+
LeaseCheckpointInterval time.Duration
143146
}
144147

145148
// VerifyBootstrap sanity-checks the initial config for bootstrap case

Diff for: etcdserver/etcdserverpb/etcdserver.pb.go

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)