Commit 6d839235 authored by Han Kang's avatar Han Kang

handle global registry version loading more than once (with different versions)

parent 91d3a79a
......@@ -74,7 +74,7 @@ func TestCounter(t *testing.T) {
for _, test := range tests {
t.Run(test.desc, func(t *testing.T) {
registry := NewKubeRegistry(&apimachineryversion.Info{
registry := NewKubeRegistry(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......@@ -175,7 +175,7 @@ func TestCounterVec(t *testing.T) {
for _, test := range tests {
t.Run(test.desc, func(t *testing.T) {
registry := NewKubeRegistry(&apimachineryversion.Info{
registry := NewKubeRegistry(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......
......@@ -17,6 +17,7 @@ limitations under the License.
package legacyregistry
import (
"fmt"
apimachineryversion "k8s.io/apimachinery/pkg/version"
"k8s.io/component-base/metrics"
"sync"
......@@ -38,15 +39,20 @@ type metricsRegistryFactory struct {
// SetRegistryFactoryVersion sets the kubernetes version information for all
// subsequent metrics registry initializations. Only the first call has an effect.
// If a version is not set, then metrics registry creation will no-opt
func SetRegistryFactoryVersion(ver *apimachineryversion.Info) []error {
func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error {
globalRegistryFactory.registrationLock.Lock()
defer globalRegistryFactory.registrationLock.Unlock()
if globalRegistryFactory.kubeVersion != nil {
if globalRegistryFactory.kubeVersion.String() != ver.String() {
panic(fmt.Sprintf("Cannot load a global registry more than once, had %s tried to load %s",
globalRegistryFactory.kubeVersion.String(),
ver.String()))
}
return nil
}
registrationErrs := make([]error, 0)
globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver)
globalRegistryFactory.kubeVersion = ver
globalRegistryFactory.kubeVersion = &ver
for _, c := range globalRegistryFactory.registerQueue {
err := globalRegistryFactory.globalRegistry.Register(c)
if err != nil {
......
......@@ -27,7 +27,7 @@ import (
)
func init() {
SetRegistryFactoryVersion(&apimachineryversion.Info{
SetRegistryFactoryVersion(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......@@ -161,7 +161,7 @@ func TestDeferredRegister(t *testing.T) {
t.Errorf("Got err == %v, expected no error", err)
}
// set the global registry version
errs := SetRegistryFactoryVersion(&apimachineryversion.Info{
errs := SetRegistryFactoryVersion(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......@@ -185,7 +185,7 @@ func TestDeferredMustRegister(t *testing.T) {
MustRegister(alphaDeprecatedCounter)
assert.Panics(t,
func() {
SetRegistryFactoryVersion(&apimachineryversion.Info{
SetRegistryFactoryVersion(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......
......@@ -88,9 +88,9 @@ func (kr *kubeRegistry) Gather() ([]*dto.MetricFamily, error) {
// NewKubeRegistry creates a new vanilla Registry without any Collectors
// pre-registered.
func NewKubeRegistry(v *apimachineryversion.Info) KubeRegistry {
func NewKubeRegistry(v apimachineryversion.Info) KubeRegistry {
return &kubeRegistry{
PromRegistry: prometheus.NewRegistry(),
version: parseVersion(*v),
version: parseVersion(v),
}
}
......@@ -108,7 +108,7 @@ func TestRegister(t *testing.T) {
for _, test := range tests {
t.Run(test.desc, func(t *testing.T) {
registry := NewKubeRegistry(&apimachineryversion.Info{
registry := NewKubeRegistry(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......@@ -179,7 +179,7 @@ func TestMustRegister(t *testing.T) {
for _, test := range tests {
t.Run(test.desc, func(t *testing.T) {
registry := NewKubeRegistry(&apimachineryversion.Info{
registry := NewKubeRegistry(apimachineryversion.Info{
Major: "1",
Minor: "15",
GitVersion: "v1.15.0-alpha-1.12345",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment