diff --git a/lease/lessor.go b/lease/lessor.go index 5120d1cfcdd3..5466eaa7bbc0 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? + leaseRevokesRate = 1000 ) var ( @@ -422,6 +426,10 @@ func (le *lessor) runLoop() { le.mu.Unlock() if len(ls) != 0 { + // keep half for next iteration + if len(ls) > leaseRevokesRate/2 { + ls = ls[:leaseRevokesRate/2] + } select { case <-le.stopC: return