From 1771cec23d036987d9b384c891e40a0cf901014b Mon Sep 17 00:00:00 2001 From: qsyqian Date: Wed, 19 Oct 2022 18:26:41 +0800 Subject: [PATCH] lessor: refactor expireExists to make it more clear Signed-off-by: qsyqian --- server/lease/lease_queue_test.go | 12 ++++++------ server/lease/lessor.go | 19 ++++++++----------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/server/lease/lease_queue_test.go b/server/lease/lease_queue_test.go index 9b9bb772f..a25af1a4f 100644 --- a/server/lease/lease_queue_test.go +++ b/server/lease/lease_queue_test.go @@ -45,13 +45,13 @@ func TestLeaseQueue(t *testing.T) { } existExpiredEvent := func() { - l, ok, more := le.expireExists() + l, more := le.expireExists() + if l == nil { + t.Fatalf("expect expiry lease exists") + } if l.ID != 1 { t.Fatalf("first item expected lease ID %d, got %d", 1, l.ID) } - if !ok { - t.Fatal("expect expiry lease exists") - } if more { t.Fatal("expect no more expiry lease") } @@ -67,8 +67,8 @@ func TestLeaseQueue(t *testing.T) { noExpiredEvent := func() { // re-acquire the expired item, nothing exists - _, ok, more := le.expireExists() - if ok { + l, more := le.expireExists() + if l != nil { t.Fatal("expect no expiry lease exists") } if more { diff --git a/server/lease/lessor.go b/server/lease/lessor.go index 613bee215..0dd8f9e6d 100644 --- a/server/lease/lessor.go +++ b/server/lease/lessor.go @@ -675,12 +675,12 @@ func (le *lessor) clearLeaseExpiredNotifier() { le.leaseExpiredNotifier = newLeaseExpiredNotifier() } -// expireExists returns true if expiry items exist. +// expireExists returns "l" which is not nil if expiry items exist. // It pops only when expiry item exists. // "next" is true, to indicate that it may exist in next attempt. -func (le *lessor) expireExists() (l *Lease, ok bool, next bool) { +func (le *lessor) expireExists() (l *Lease, next bool) { if le.leaseExpiredNotifier.Len() == 0 { - return nil, false, false + return nil, false } item := le.leaseExpiredNotifier.Peek() @@ -689,19 +689,19 @@ func (le *lessor) expireExists() (l *Lease, ok bool, next bool) { // lease has expired or been revoked // no need to revoke (nothing is expiry) le.leaseExpiredNotifier.Unregister() // O(log N) - return nil, false, true + return nil, true } now := time.Now() if now.Before(item.time) /* item.time: expiration time */ { // Candidate expirations are caught up, reinsert this item // and no need to revoke (nothing is expiry) - return l, false, false + return nil, false } // recheck if revoke is complete after retry interval item.time = now.Add(le.expiredLeaseRetryInterval) le.leaseExpiredNotifier.RegisterOrUpdate(item) - return l, true, false + return l, false } // findExpiredLeases loops leases in the leaseMap until reaching expired limit @@ -710,13 +710,10 @@ func (le *lessor) findExpiredLeases(limit int) []*Lease { leases := make([]*Lease, 0, 16) for { - l, ok, next := le.expireExists() - if !ok && !next { + l, next := le.expireExists() + if l == nil && !next { break } - if !ok { - continue - } if next { continue }