From 14a51589c3fe5bd8eb1614a662c862bdd423a5f9 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Thu, 9 Sep 2021 16:38:59 +0200 Subject: [PATCH 1/2] Migratet to k8s.io/utils/clock in workqueue Kubernetes-commit: 392292ba81964e6ee7badec360a800b1f8645f2f --- util/workqueue/delaying_queue.go | 6 +++--- util/workqueue/delaying_queue_test.go | 12 ++++++------ util/workqueue/metrics.go | 2 +- util/workqueue/metrics_test.go | 6 +++--- util/workqueue/queue.go | 6 +++--- util/workqueue/rate_limiting_queue_test.go | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/util/workqueue/delaying_queue.go b/util/workqueue/delaying_queue.go index 31d9182d..61c4da53 100644 --- a/util/workqueue/delaying_queue.go +++ b/util/workqueue/delaying_queue.go @@ -21,8 +21,8 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/utils/clock" ) // DelayingInterface is an Interface that can Add an item at a later time. This makes it easier to @@ -51,11 +51,11 @@ func NewNamedDelayingQueue(name string) DelayingInterface { // NewDelayingQueueWithCustomClock constructs a new named workqueue // with ability to inject real or fake clock for testing purposes -func NewDelayingQueueWithCustomClock(clock clock.Clock, name string) DelayingInterface { +func NewDelayingQueueWithCustomClock(clock clock.WithTicker, name string) DelayingInterface { return newDelayingQueue(clock, NewNamed(name), name) } -func newDelayingQueue(clock clock.Clock, q Interface, name string) *delayingType { +func newDelayingQueue(clock clock.WithTicker, q Interface, name string) *delayingType { ret := &delayingType{ Interface: q, clock: clock, diff --git a/util/workqueue/delaying_queue_test.go b/util/workqueue/delaying_queue_test.go index 2af8ba3a..50d0c34d 100644 --- a/util/workqueue/delaying_queue_test.go +++ b/util/workqueue/delaying_queue_test.go @@ -23,12 +23,12 @@ import ( "testing" "time" - "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/wait" + testingclock "k8s.io/utils/clock/testing" ) func TestSimpleQueue(t *testing.T) { - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) q := NewDelayingQueueWithCustomClock(fakeClock, "") first := "foo" @@ -70,7 +70,7 @@ func TestSimpleQueue(t *testing.T) { } func TestDeduping(t *testing.T) { - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) q := NewDelayingQueueWithCustomClock(fakeClock, "") first := "foo" @@ -129,7 +129,7 @@ func TestDeduping(t *testing.T) { } func TestAddTwoFireEarly(t *testing.T) { - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) q := NewDelayingQueueWithCustomClock(fakeClock, "") first := "foo" @@ -178,7 +178,7 @@ func TestAddTwoFireEarly(t *testing.T) { } func TestCopyShifting(t *testing.T) { - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) q := NewDelayingQueueWithCustomClock(fakeClock, "") first := "foo" @@ -216,7 +216,7 @@ func TestCopyShifting(t *testing.T) { } func BenchmarkDelayingQueue_AddAfter(b *testing.B) { - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) q := NewDelayingQueueWithCustomClock(fakeClock, "") // Add items diff --git a/util/workqueue/metrics.go b/util/workqueue/metrics.go index 556e6432..4b0a6961 100644 --- a/util/workqueue/metrics.go +++ b/util/workqueue/metrics.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" ) // This file provides abstractions for setting the provider (e.g., prometheus) diff --git a/util/workqueue/metrics_test.go b/util/workqueue/metrics_test.go index e48cc38f..bfc9c1a3 100644 --- a/util/workqueue/metrics_test.go +++ b/util/workqueue/metrics_test.go @@ -21,7 +21,7 @@ import ( "testing" "time" - "k8s.io/apimachinery/pkg/util/clock" + testingclock "k8s.io/utils/clock/testing" ) type testMetrics struct { @@ -40,7 +40,7 @@ func TestMetricShutdown(t *testing.T) { m := &testMetrics{ updateCalled: ch, } - c := clock.NewFakeClock(time.Now()) + c := testingclock.NewFakeClock(time.Now()) q := newQueue(c, m, time.Millisecond) for !c.HasWaiters() { // Wait for the go routine to call NewTicker() @@ -170,7 +170,7 @@ func (m *testMetricsProvider) NewRetriesMetric(name string) CounterMetric { func TestMetrics(t *testing.T) { mp := testMetricsProvider{} t0 := time.Unix(0, 0) - c := clock.NewFakeClock(t0) + c := testingclock.NewFakeClock(t0) mf := queueMetricsFactory{metricsProvider: &mp} m := mf.newQueueMetrics("test", c) q := newQueue(c, m, time.Millisecond) diff --git a/util/workqueue/queue.go b/util/workqueue/queue.go index d563ae4e..14e3bb17 100644 --- a/util/workqueue/queue.go +++ b/util/workqueue/queue.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" ) type Interface interface { @@ -47,7 +47,7 @@ func NewNamed(name string) *Type { ) } -func newQueue(c clock.Clock, metrics queueMetrics, updatePeriod time.Duration) *Type { +func newQueue(c clock.WithTicker, metrics queueMetrics, updatePeriod time.Duration) *Type { t := &Type{ clock: c, dirty: set{}, @@ -92,7 +92,7 @@ type Type struct { metrics queueMetrics unfinishedWorkUpdatePeriod time.Duration - clock clock.Clock + clock clock.WithTicker } type empty struct{} diff --git a/util/workqueue/rate_limiting_queue_test.go b/util/workqueue/rate_limiting_queue_test.go index 3fbe07d0..84d8495d 100644 --- a/util/workqueue/rate_limiting_queue_test.go +++ b/util/workqueue/rate_limiting_queue_test.go @@ -20,13 +20,13 @@ import ( "testing" "time" - "k8s.io/apimachinery/pkg/util/clock" + testingclock "k8s.io/utils/clock/testing" ) func TestRateLimitingQueue(t *testing.T) { limiter := NewItemExponentialFailureRateLimiter(1*time.Millisecond, 1*time.Second) queue := NewRateLimitingQueue(limiter).(*rateLimitingType) - fakeClock := clock.NewFakeClock(time.Now()) + fakeClock := testingclock.NewFakeClock(time.Now()) delayingQueue := &delayingType{ Interface: New(), clock: fakeClock, From 8d49a0b9401651cd0071ab332eb5e7fbfd1e85d1 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Fri, 10 Sep 2021 09:37:30 +0200 Subject: [PATCH 2/2] Migrate to k8s.io/utils/clock in flowcontrol backoff Kubernetes-commit: 4ce452989bef21ab6d15bc659f463d8c706ad33e --- rest/request_test.go | 3 ++- util/flowcontrol/backoff.go | 5 +++-- util/flowcontrol/backoff_test.go | 12 ++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/rest/request_test.go b/rest/request_test.go index 8575f570..dcdc0edb 100644 --- a/rest/request_test.go +++ b/rest/request_test.go @@ -54,6 +54,7 @@ import ( restclientwatch "k8s.io/client-go/rest/watch" "k8s.io/client-go/util/flowcontrol" utiltesting "k8s.io/client-go/util/testing" + testingclock "k8s.io/utils/clock/testing" ) func TestNewRequestSetsAccept(t *testing.T) { @@ -1563,7 +1564,7 @@ func TestBackoffLifecycle(t *testing.T) { // which are used in the server implementation returning StatusOK above. seconds := []int{0, 1, 2, 4, 8, 0, 1, 2, 4, 0} request := c.Verb("POST").Prefix("backofftest").Suffix("abc") - clock := clock.FakeClock{} + clock := testingclock.FakeClock{} request.backoff = &URLBackoff{ // Use a fake backoff here to avoid flakes and speed the test up. Backoff: flowcontrol.NewFakeBackOff( diff --git a/util/flowcontrol/backoff.go b/util/flowcontrol/backoff.go index c48ba03e..ca60e107 100644 --- a/util/flowcontrol/backoff.go +++ b/util/flowcontrol/backoff.go @@ -20,7 +20,8 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" + testingclock "k8s.io/utils/clock/testing" "k8s.io/utils/integer" ) @@ -37,7 +38,7 @@ type Backoff struct { perItemBackoff map[string]*backoffEntry } -func NewFakeBackOff(initial, max time.Duration, tc *clock.FakeClock) *Backoff { +func NewFakeBackOff(initial, max time.Duration, tc *testingclock.FakeClock) *Backoff { return &Backoff{ perItemBackoff: map[string]*backoffEntry{}, Clock: tc, diff --git a/util/flowcontrol/backoff_test.go b/util/flowcontrol/backoff_test.go index 4d061d54..08f60d0e 100644 --- a/util/flowcontrol/backoff_test.go +++ b/util/flowcontrol/backoff_test.go @@ -20,12 +20,12 @@ import ( "testing" "time" - "k8s.io/apimachinery/pkg/util/clock" + testingclock "k8s.io/utils/clock/testing" ) func TestSlowBackoff(t *testing.T) { id := "_idSlow" - tc := clock.NewFakeClock(time.Now()) + tc := testingclock.NewFakeClock(time.Now()) step := time.Second maxDuration := 50 * step @@ -51,7 +51,7 @@ func TestSlowBackoff(t *testing.T) { func TestBackoffReset(t *testing.T) { id := "_idReset" - tc := clock.NewFakeClock(time.Now()) + tc := testingclock.NewFakeClock(time.Now()) step := time.Second maxDuration := step * 5 b := NewFakeBackOff(step, maxDuration, tc) @@ -77,7 +77,7 @@ func TestBackoffReset(t *testing.T) { func TestBackoffHighWaterMark(t *testing.T) { id := "_idHiWaterMark" - tc := clock.NewFakeClock(time.Now()) + tc := testingclock.NewFakeClock(time.Now()) step := time.Second maxDuration := 5 * step b := NewFakeBackOff(step, maxDuration, tc) @@ -99,7 +99,7 @@ func TestBackoffHighWaterMark(t *testing.T) { func TestBackoffGC(t *testing.T) { id := "_idGC" - tc := clock.NewFakeClock(time.Now()) + tc := testingclock.NewFakeClock(time.Now()) step := time.Second maxDuration := 5 * step @@ -127,7 +127,7 @@ func TestBackoffGC(t *testing.T) { func TestIsInBackOffSinceUpdate(t *testing.T) { id := "_idIsInBackOffSinceUpdate" - tc := clock.NewFakeClock(time.Now()) + tc := testingclock.NewFakeClock(time.Now()) step := time.Second maxDuration := 10 * step b := NewFakeBackOff(step, maxDuration, tc)