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