浏览代码

Merge pull request #8490 from lorneli/lease_dev

lease: fix typo and modify findExpiredLeases function
Xiang Li 8 年之前
父节点
当前提交
05d7dc307b
共有 2 个文件被更改,包括 15 次插入11 次删除
  1. 1 1
      lease/doc.go
  2. 14 10
      lease/lessor.go

+ 1 - 1
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

+ 14 - 10
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
+			}
 		}
 	}
 
@@ -649,9 +653,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 }