mirror of
https://github.com/kubernetes/client-go.git
synced 2025-07-01 09:22:24 +00:00
leaderelection: Instrument for when slowpath is exercised
Signed-off-by: Eric Lin <exlin@google.com> Kubernetes-commit: 1e54c050936be1a1e3e5758718ebca86096dbaea
This commit is contained in:
parent
3c7c00d2d6
commit
2a48f1ee02
@ -315,6 +315,7 @@ func testTryAcquireOrRenew(t *testing.T, objectType string) {
|
||||
observedRawRecord: observedRawRecord,
|
||||
observedTime: test.observedTime,
|
||||
clock: clock,
|
||||
metrics: globalMetricsFactory.newLeaderMetrics(),
|
||||
}
|
||||
if test.expectSuccess != le.tryAcquireOrRenew(context.Background()) {
|
||||
if test.retryAfter != 0 {
|
||||
@ -491,6 +492,7 @@ func testReleaseLease(t *testing.T, objectType string) {
|
||||
observedRawRecord: observedRawRecord,
|
||||
observedTime: test.observedTime,
|
||||
clock: clock.RealClock{},
|
||||
metrics: globalMetricsFactory.newLeaderMetrics(),
|
||||
}
|
||||
if !le.tryAcquireOrRenew(context.Background()) {
|
||||
t.Errorf("unexpected result of tryAcquireOrRenew: [succeeded=%v]", true)
|
||||
|
@ -26,24 +26,26 @@ import (
|
||||
type leaderMetricsAdapter interface {
|
||||
leaderOn(name string)
|
||||
leaderOff(name string)
|
||||
slowpathExercised(name string)
|
||||
}
|
||||
|
||||
// GaugeMetric represents a single numerical value that can arbitrarily go up
|
||||
// and down.
|
||||
type SwitchMetric interface {
|
||||
// LeaderMetric instruments metrics used in leader election.
|
||||
type LeaderMetric interface {
|
||||
On(name string)
|
||||
Off(name string)
|
||||
SlowpathExercised(name string)
|
||||
}
|
||||
|
||||
type noopMetric struct{}
|
||||
|
||||
func (noopMetric) On(name string) {}
|
||||
func (noopMetric) Off(name string) {}
|
||||
func (noopMetric) On(name string) {}
|
||||
func (noopMetric) Off(name string) {}
|
||||
func (noopMetric) SlowpathExercised(name string) {}
|
||||
|
||||
// defaultLeaderMetrics expects the caller to lock before setting any metrics.
|
||||
type defaultLeaderMetrics struct {
|
||||
// leader's value indicates if the current process is the owner of name lease
|
||||
leader SwitchMetric
|
||||
leader LeaderMetric
|
||||
}
|
||||
|
||||
func (m *defaultLeaderMetrics) leaderOn(name string) {
|
||||
@ -60,19 +62,27 @@ func (m *defaultLeaderMetrics) leaderOff(name string) {
|
||||
m.leader.Off(name)
|
||||
}
|
||||
|
||||
func (m *defaultLeaderMetrics) slowpathExercised(name string) {
|
||||
if m == nil {
|
||||
return
|
||||
}
|
||||
m.leader.SlowpathExercised(name)
|
||||
}
|
||||
|
||||
type noMetrics struct{}
|
||||
|
||||
func (noMetrics) leaderOn(name string) {}
|
||||
func (noMetrics) leaderOff(name string) {}
|
||||
func (noMetrics) leaderOn(name string) {}
|
||||
func (noMetrics) leaderOff(name string) {}
|
||||
func (noMetrics) slowpathExercised(name string) {}
|
||||
|
||||
// MetricsProvider generates various metrics used by the leader election.
|
||||
type MetricsProvider interface {
|
||||
NewLeaderMetric() SwitchMetric
|
||||
NewLeaderMetric() LeaderMetric
|
||||
}
|
||||
|
||||
type noopMetricsProvider struct{}
|
||||
|
||||
func (_ noopMetricsProvider) NewLeaderMetric() SwitchMetric {
|
||||
func (noopMetricsProvider) NewLeaderMetric() LeaderMetric {
|
||||
return noopMetric{}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user