From 0fd40769b72b7a14a4273dbd61e8ff48b5b5a188 Mon Sep 17 00:00:00 2001 From: Oskar Haarklou Veileborg Date: Wed, 30 Nov 2022 10:12:41 +0100 Subject: [PATCH 1/2] lease: fix potential goroutine leak in lessor_test.go Signed-off-by: Oskar Haarklou Veileborg --- server/lease/lessor_test.go | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/server/lease/lessor_test.go b/server/lease/lessor_test.go index 58a36e612..a339251ba 100644 --- a/server/lease/lessor_test.go +++ b/server/lease/lessor_test.go @@ -207,6 +207,29 @@ func TestLessorRevoke(t *testing.T) { } } +func renew(t *testing.T, le *lessor, id LeaseID) int64 { + ch := make(chan int64, 1) + errch := make(chan error, 1) + go func() { + ttl, err := le.Renew(id) + if err != nil { + errch <- err + } else { + ch <- ttl + } + }() + + select { + case ttl := <-ch: + return ttl + case err := <-errch: + t.Fatalf("failed to renew lease (%v)", err) + case <-time.After(2 * time.Second): + t.Fatal("timed out while renewing lease") + } + panic("unreachable") +} + // TestLessorRenew ensures Lessor can renew an existing lease. func TestLessorRenew(t *testing.T) { lg := zap.NewNop() @@ -227,10 +250,7 @@ func TestLessorRenew(t *testing.T) { le.mu.Lock() l.ttl = 10 le.mu.Unlock() - ttl, err := le.Renew(l.ID) - if err != nil { - t.Fatalf("failed to renew lease (%v)", err) - } + ttl := renew(t, le, l.ID) if ttl != l.ttl { t.Errorf("ttl = %d, want %d", ttl, l.ttl) } @@ -268,10 +288,7 @@ func TestLessorRenewWithCheckpointer(t *testing.T) { l.ttl = 10 l.remainingTTL = 10 le.mu.Unlock() - ttl, err := le.Renew(l.ID) - if err != nil { - t.Fatalf("failed to renew lease (%v)", err) - } + ttl := renew(t, le, l.ID) if ttl != l.ttl { t.Errorf("ttl = %d, want %d", ttl, l.ttl) } From 08dd8d2e0e66933caac34d54c9063d0be983b782 Mon Sep 17 00:00:00 2001 From: Oskar Haarklou Veileborg Date: Thu, 1 Dec 2022 08:57:23 +0100 Subject: [PATCH 2/2] lease: increase renew timeout to 10s Signed-off-by: Oskar Haarklou Veileborg --- server/lease/lessor_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lease/lessor_test.go b/server/lease/lessor_test.go index a339251ba..1ee20c8da 100644 --- a/server/lease/lessor_test.go +++ b/server/lease/lessor_test.go @@ -224,7 +224,7 @@ func renew(t *testing.T, le *lessor, id LeaseID) int64 { return ttl case err := <-errch: t.Fatalf("failed to renew lease (%v)", err) - case <-time.After(2 * time.Second): + case <-time.After(10 * time.Second): t.Fatal("timed out while renewing lease") } panic("unreachable")