Fix metrics will be hidden in current minor release issue.

This commit is contained in:
RainbowMango 2019-10-26 10:50:02 +08:00
parent 24ae4d6718
commit c3e4bae36d
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