From a60624ffbc265d61b35cab16ea9ded485909f3ed Mon Sep 17 00:00:00 2001 From: austin ce Date: Fri, 10 Mar 2023 17:48:10 -0500 Subject: [PATCH] Allow custom metric provider for retry metrics --- .../k8s.io/client-go/util/workqueue/delaying_queue.go | 6 +++--- staging/src/k8s.io/client-go/util/workqueue/metrics.go | 9 +++++++-- .../client-go/util/workqueue/rate_limiting_queue_test.go | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go index fdf923e1a35..c1df7203021 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -71,7 +71,7 @@ func NewDelayingQueueWithConfig(config DelayingQueueConfig) DelayingInterface { }) } - return newDelayingQueue(config.Clock, config.Queue, config.Name) + return newDelayingQueue(config.Clock, config.Queue, config.Name, config.MetricsProvider) } // NewDelayingQueueWithCustomQueue constructs a new workqueue with ability to @@ -100,14 +100,14 @@ func NewDelayingQueueWithCustomClock(clock clock.WithTicker, name string) Delayi }) } -func newDelayingQueue(clock clock.WithTicker, q Interface, name string) *delayingType { +func newDelayingQueue(clock clock.WithTicker, q Interface, name string, provider MetricsProvider) *delayingType { ret := &delayingType{ Interface: q, clock: clock, heartbeat: clock.NewTicker(maxWait), stopCh: make(chan struct{}), waitingForAddCh: make(chan *waitFor, 1000), - metrics: newRetryMetrics(name), + metrics: newRetryMetrics(name, provider), } go ret.waitingLoop() diff --git a/staging/src/k8s.io/client-go/util/workqueue/metrics.go b/staging/src/k8s.io/client-go/util/workqueue/metrics.go index 4b0a69616d3..f012ccc5548 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/metrics.go +++ b/staging/src/k8s.io/client-go/util/workqueue/metrics.go @@ -244,13 +244,18 @@ func (f *queueMetricsFactory) newQueueMetrics(name string, clock clock.Clock) qu } } -func newRetryMetrics(name string) retryMetrics { +func newRetryMetrics(name string, provider MetricsProvider) retryMetrics { var ret *defaultRetryMetrics if len(name) == 0 { return ret } + + if provider == nil { + provider = globalMetricsFactory.metricsProvider + } + return &defaultRetryMetrics{ - retries: globalMetricsFactory.metricsProvider.NewRetriesMetric(name), + retries: provider.NewRetriesMetric(name), } } diff --git a/staging/src/k8s.io/client-go/util/workqueue/rate_limiting_queue_test.go b/staging/src/k8s.io/client-go/util/workqueue/rate_limiting_queue_test.go index 84d8495dda3..77e161307e6 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/rate_limiting_queue_test.go +++ b/staging/src/k8s.io/client-go/util/workqueue/rate_limiting_queue_test.go @@ -33,7 +33,7 @@ func TestRateLimitingQueue(t *testing.T) { heartbeat: fakeClock.NewTicker(maxWait), stopCh: make(chan struct{}), waitingForAddCh: make(chan *waitFor, 1000), - metrics: newRetryMetrics(""), + metrics: newRetryMetrics("", nil), } queue.DelayingInterface = delayingQueue