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.") klog.Warningf("Hidden metrics have been manually overridden, showing this very deprecated metric.")
return return
} }
if selfVersion.LT(version) { if shouldHide(&version, selfVersion) {
klog.Warningf("This metric has been deprecated for more than one release, hiding.") klog.Warningf("This metric has been deprecated for more than one release, hiding.")
r.isHidden = true r.isHidden = true
} }

View File

@ -17,6 +17,7 @@ limitations under the License.
package metrics package metrics
import ( import (
"fmt"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -33,6 +34,21 @@ var (
showHidden atomic.Value 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 // SetShowHidden will enable showing hidden metrics. This will no-opt
// after the initial call // after the initial call
func SetShowHidden() { 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) { func TestRegister(t *testing.T) {
var tests = []struct { var tests = []struct {
desc string desc string