From 77a19cd9d4ed88a79f45d439ad02fa1c8c717ec7 Mon Sep 17 00:00:00 2001 From: lorneli Date: Sun, 3 Sep 2017 14:46:40 +0800 Subject: [PATCH 1/2] lease: fix typos a. fix typo in godoc b. make receiver of FakeLessor's function identical --- lease/doc.go | 2 +- lease/lessor.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lease/doc.go b/lease/doc.go index 73e7d0ec5..a74eaf76f 100644 --- a/lease/doc.go +++ b/lease/doc.go @@ -12,5 +12,5 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package lease provides an interface and implemetation for time-limited leases over arbitrary resources. +// Package lease provides an interface and implementation for time-limited leases over arbitrary resources. package lease diff --git a/lease/lessor.go b/lease/lessor.go index 815e10c0f..75d3ec146 100644 --- a/lease/lessor.go +++ b/lease/lessor.go @@ -649,9 +649,9 @@ func (fl *FakeLessor) Demote() {} func (fl *FakeLessor) Renew(id LeaseID) (int64, error) { return 10, nil } -func (le *FakeLessor) Lookup(id LeaseID) *Lease { return nil } +func (fl *FakeLessor) Lookup(id LeaseID) *Lease { return nil } -func (le *FakeLessor) Leases() []*Lease { return nil } +func (fl *FakeLessor) Leases() []*Lease { return nil } func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease { return nil } From 7063a5e5cc6da940173556b0d14efe0f9ec7f79b Mon Sep 17 00:00:00 2001 From: lorneli Date: Sun, 3 Sep 2017 22:49:53 +0800 Subject: [PATCH 2/2] lease: add limit in lessor.findExpiredLeases function Function findExpiredLeases finds expired leases in the leaseMap until reaching expired limit. --- lease/lessor.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lease/lessor.go b/lease/lessor.go index 75d3ec146..6187ec8ce 100644 --- a/lease/lessor.go +++ b/lease/lessor.go @@ -478,17 +478,16 @@ func (le *lessor) runLoop() { for { var ls []*Lease + // rate limit + revokeLimit := leaseRevokeRate / 2 + le.mu.Lock() if le.isPrimary() { - ls = le.findExpiredLeases() + ls = le.findExpiredLeases(revokeLimit) } le.mu.Unlock() if len(ls) != 0 { - // rate limit - if len(ls) > leaseRevokeRate/2 { - ls = ls[:leaseRevokeRate/2] - } select { case <-le.stopC: return @@ -508,9 +507,9 @@ func (le *lessor) runLoop() { } } -// findExpiredLeases loops all the leases in the leaseMap and returns the expired -// leases that needed to be revoked. -func (le *lessor) findExpiredLeases() []*Lease { +// findExpiredLeases loops leases in the leaseMap until reaching expired limit +// and returns the expired leases that needed to be revoked. +func (le *lessor) findExpiredLeases(limit int) []*Lease { leases := make([]*Lease, 0, 16) for _, l := range le.leaseMap { @@ -518,6 +517,11 @@ func (le *lessor) findExpiredLeases() []*Lease { // make up committing latency. if l.expired() { leases = append(leases, l) + + // reach expired limit + if len(leases) == limit { + break + } } }