Skip to content

Commit 6d83923

Browse files
author
Han Kang
committed
handle global registry version loading more than once (with different versions)
1 parent 91d3a79 commit 6d83923

File tree

5 files changed

+17
-11
lines changed

5 files changed

+17
-11
lines changed

staging/src/k8s.io/component-base/metrics/counter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestCounter(t *testing.T) {
7474

7575
for _, test := range tests {
7676
t.Run(test.desc, func(t *testing.T) {
77-
registry := NewKubeRegistry(&apimachineryversion.Info{
77+
registry := NewKubeRegistry(apimachineryversion.Info{
7878
Major: "1",
7979
Minor: "15",
8080
GitVersion: "v1.15.0-alpha-1.12345",
@@ -175,7 +175,7 @@ func TestCounterVec(t *testing.T) {
175175

176176
for _, test := range tests {
177177
t.Run(test.desc, func(t *testing.T) {
178-
registry := NewKubeRegistry(&apimachineryversion.Info{
178+
registry := NewKubeRegistry(apimachineryversion.Info{
179179
Major: "1",
180180
Minor: "15",
181181
GitVersion: "v1.15.0-alpha-1.12345",

staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package legacyregistry
1818

1919
import (
20+
"fmt"
2021
apimachineryversion "k8s.io/apimachinery/pkg/version"
2122
"k8s.io/component-base/metrics"
2223
"sync"
@@ -38,15 +39,20 @@ type metricsRegistryFactory struct {
3839
// SetRegistryFactoryVersion sets the kubernetes version information for all
3940
// subsequent metrics registry initializations. Only the first call has an effect.
4041
// If a version is not set, then metrics registry creation will no-opt
41-
func SetRegistryFactoryVersion(ver *apimachineryversion.Info) []error {
42+
func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error {
4243
globalRegistryFactory.registrationLock.Lock()
4344
defer globalRegistryFactory.registrationLock.Unlock()
4445
if globalRegistryFactory.kubeVersion != nil {
46+
if globalRegistryFactory.kubeVersion.String() != ver.String() {
47+
panic(fmt.Sprintf("Cannot load a global registry more than once, had %s tried to load %s",
48+
globalRegistryFactory.kubeVersion.String(),
49+
ver.String()))
50+
}
4551
return nil
4652
}
4753
registrationErrs := make([]error, 0)
4854
globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver)
49-
globalRegistryFactory.kubeVersion = ver
55+
globalRegistryFactory.kubeVersion = &ver
5056
for _, c := range globalRegistryFactory.registerQueue {
5157
err := globalRegistryFactory.globalRegistry.Register(c)
5258
if err != nil {

staging/src/k8s.io/component-base/metrics/legacyregistry/registry_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
)
2828

2929
func init() {
30-
SetRegistryFactoryVersion(&apimachineryversion.Info{
30+
SetRegistryFactoryVersion(apimachineryversion.Info{
3131
Major: "1",
3232
Minor: "15",
3333
GitVersion: "v1.15.0-alpha-1.12345",
@@ -161,7 +161,7 @@ func TestDeferredRegister(t *testing.T) {
161161
t.Errorf("Got err == %v, expected no error", err)
162162
}
163163
// set the global registry version
164-
errs := SetRegistryFactoryVersion(&apimachineryversion.Info{
164+
errs := SetRegistryFactoryVersion(apimachineryversion.Info{
165165
Major: "1",
166166
Minor: "15",
167167
GitVersion: "v1.15.0-alpha-1.12345",
@@ -185,7 +185,7 @@ func TestDeferredMustRegister(t *testing.T) {
185185
MustRegister(alphaDeprecatedCounter)
186186
assert.Panics(t,
187187
func() {
188-
SetRegistryFactoryVersion(&apimachineryversion.Info{
188+
SetRegistryFactoryVersion(apimachineryversion.Info{
189189
Major: "1",
190190
Minor: "15",
191191
GitVersion: "v1.15.0-alpha-1.12345",

staging/src/k8s.io/component-base/metrics/registry.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ func (kr *kubeRegistry) Gather() ([]*dto.MetricFamily, error) {
8888

8989
// NewKubeRegistry creates a new vanilla Registry without any Collectors
9090
// pre-registered.
91-
func NewKubeRegistry(v *apimachineryversion.Info) KubeRegistry {
91+
func NewKubeRegistry(v apimachineryversion.Info) KubeRegistry {
9292
return &kubeRegistry{
9393
PromRegistry: prometheus.NewRegistry(),
94-
version: parseVersion(*v),
94+
version: parseVersion(v),
9595
}
9696
}

staging/src/k8s.io/component-base/metrics/registry_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func TestRegister(t *testing.T) {
108108

109109
for _, test := range tests {
110110
t.Run(test.desc, func(t *testing.T) {
111-
registry := NewKubeRegistry(&apimachineryversion.Info{
111+
registry := NewKubeRegistry(apimachineryversion.Info{
112112
Major: "1",
113113
Minor: "15",
114114
GitVersion: "v1.15.0-alpha-1.12345",
@@ -179,7 +179,7 @@ func TestMustRegister(t *testing.T) {
179179

180180
for _, test := range tests {
181181
t.Run(test.desc, func(t *testing.T) {
182-
registry := NewKubeRegistry(&apimachineryversion.Info{
182+
registry := NewKubeRegistry(apimachineryversion.Info{
183183
Major: "1",
184184
Minor: "15",
185185
GitVersion: "v1.15.0-alpha-1.12345",

0 commit comments

Comments
 (0)