From 0011b78bd5a814b2f8b88b2d87f7ad921b12d76d Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Wed, 14 Jun 2017 12:54:50 -0700 Subject: [PATCH] lease: rate limit revoke runLoop Fix https://github.com/coreos/etcd/issues/8097. Signed-off-by: Gyu-Ho Lee --- lease/lessor.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lease/lessor.go b/lease/lessor.go index 5120d1cfcdd..6584a6fb488 100644 --- a/lease/lessor.go +++ b/lease/lessor.go @@ -31,6 +31,10 @@ import ( const ( // NoLease is a special LeaseID representing the absence of a lease. NoLease = LeaseID(0) + + // maximum number of leases to revoke per iteration + // TODO: make this configurable? + leaseRevokeRate = 1000 ) var ( @@ -422,6 +426,10 @@ func (le *lessor) runLoop() { le.mu.Unlock() if len(ls) != 0 { + // rate limit + if len(ls) > leaseRevokeRate/2 { + ls = ls[:leaseRevokeRate/2] + } select { case <-le.stopC: return