Merge pull request #84395 from RainbowMango/pr_fix_should_hide_version

Fix metrics may be hidden in current minor release issue
This commit is contained in:
Kubernetes Prow Robot 2019-10-27 00:59:24 -07:00 committed by GitHub
commit 3d7318f29d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 1 deletions

View File

@ -101,7 +101,7 @@ func (r *lazyMetric) determineDeprecationStatus(version semver.Version) {
klog.Warningf("Hidden metrics have been manually overridden, showing this very deprecated metric.")
return
}
if selfVersion.LT(version) {
if shouldHide(&version, selfVersion) {
klog.Warningf("This metric has been deprecated for more than one release, hiding.")
r.isHidden = true
}

View File

@ -17,6 +17,7 @@ limitations under the License.
package metrics
import (
"fmt"
"sync"
"sync/atomic"
@ -33,6 +34,21 @@ var (
showHidden atomic.Value
)
// shouldHide be used to check if a specific metric with deprecated version should be hidden
// according to metrics deprecation lifecycle.
func shouldHide(currentVersion *semver.Version, deprecatedVersion *semver.Version) bool {
guardVersion, err := semver.Make(fmt.Sprintf("%d.%d.0", currentVersion.Major, currentVersion.Minor))
if err != nil {
panic("failed to make version from current version")
}
if deprecatedVersion.LT(guardVersion) {
return true
}
return false
}
// SetShowHidden will enable showing hidden metrics. This will no-opt
// after the initial call
func SetShowHidden() {

View File

@ -60,6 +60,39 @@ var (
)
)
func TestShouldHide(t *testing.T) {
currentVersion := parseVersion(apimachineryversion.Info{
Major: "1",
Minor: "17",
GitVersion: "v1.17.1-alpha-1.12345",
})
var tests = []struct {
desc string
deprecatedVersion string
shouldHide bool
}{
{
desc: "current minor release should not be hidden",
deprecatedVersion: "1.17.0",
shouldHide: false,
},
{
desc: "older minor release should be hidden",
deprecatedVersion: "1.16.0",
shouldHide: true,
},
}
for _, test := range tests {
tc := test
t.Run(tc.desc, func(t *testing.T) {
result := shouldHide(&currentVersion, parseSemver(tc.deprecatedVersion))
assert.Equalf(t, tc.shouldHide, result, "expected should hide %v, but got %v", tc.shouldHide, result)
})
}
}
func TestRegister(t *testing.T) {
var tests = []struct {
desc string