Skip to content

Commit 3d7318f

Browse files
authored
Merge pull request kubernetes#84395 from RainbowMango/pr_fix_should_hide_version
Fix metrics may be hidden in current minor release issue
2 parents 9832418 + c3e4bae commit 3d7318f

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (r *lazyMetric) determineDeprecationStatus(version semver.Version) {
101101
klog.Warningf("Hidden metrics have been manually overridden, showing this very deprecated metric.")
102102
return
103103
}
104-
if selfVersion.LT(version) {
104+
if shouldHide(&version, selfVersion) {
105105
klog.Warningf("This metric has been deprecated for more than one release, hiding.")
106106
r.isHidden = true
107107
}

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

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

1919
import (
20+
"fmt"
2021
"sync"
2122
"sync/atomic"
2223

@@ -33,6 +34,21 @@ var (
3334
showHidden atomic.Value
3435
)
3536

37+
// shouldHide be used to check if a specific metric with deprecated version should be hidden
38+
// according to metrics deprecation lifecycle.
39+
func shouldHide(currentVersion *semver.Version, deprecatedVersion *semver.Version) bool {
40+
guardVersion, err := semver.Make(fmt.Sprintf("%d.%d.0", currentVersion.Major, currentVersion.Minor))
41+
if err != nil {
42+
panic("failed to make version from current version")
43+
}
44+
45+
if deprecatedVersion.LT(guardVersion) {
46+
return true
47+
}
48+
49+
return false
50+
}
51+
3652
// SetShowHidden will enable showing hidden metrics. This will no-opt
3753
// after the initial call
3854
func SetShowHidden() {

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,39 @@ var (
6060
)
6161
)
6262

63+
func TestShouldHide(t *testing.T) {
64+
currentVersion := parseVersion(apimachineryversion.Info{
65+
Major: "1",
66+
Minor: "17",
67+
GitVersion: "v1.17.1-alpha-1.12345",
68+
})
69+
70+
var tests = []struct {
71+
desc string
72+
deprecatedVersion string
73+
shouldHide bool
74+
}{
75+
{
76+
desc: "current minor release should not be hidden",
77+
deprecatedVersion: "1.17.0",
78+
shouldHide: false,
79+
},
80+
{
81+
desc: "older minor release should be hidden",
82+
deprecatedVersion: "1.16.0",
83+
shouldHide: true,
84+
},
85+
}
86+
87+
for _, test := range tests {
88+
tc := test
89+
t.Run(tc.desc, func(t *testing.T) {
90+
result := shouldHide(&currentVersion, parseSemver(tc.deprecatedVersion))
91+
assert.Equalf(t, tc.shouldHide, result, "expected should hide %v, but got %v", tc.shouldHide, result)
92+
})
93+
}
94+
}
95+
6396
func TestRegister(t *testing.T) {
6497
var tests = []struct {
6598
desc string

0 commit comments

Comments
 (0)