app/vmselect/promql: fix when the parameter of maxValue(), minValue() leading by NaN. it will cause {top,bottom}k_{max,min} return inappropriate result (#883)

This commit is contained in:
n4mine 2020-11-06 07:29:24 +08:00 committed by GitHub
parent 5943f49f60
commit 43823addea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -740,12 +740,21 @@ func minValue(values []float64) float64 {
if len(values) == 0 {
return nan
}
min := values[0]
for _, v := range values[1:] {
if v < min {
aNumberFounded := false
var min float64
for _, v := range values {
if !math.IsNaN(v) && !aNumberFounded {
min = v
aNumberFounded = true
continue
}
if !math.IsNaN(v) && v < min {
min = v
}
}
if !aNumberFounded {
return nan
}
return min
}
@ -753,12 +762,21 @@ func maxValue(values []float64) float64 {
if len(values) == 0 {
return nan
}
max := values[0]
for _, v := range values[1:] {
if v > max {
aNumberFounded := false
var max float64
for _, v := range values {
if !math.IsNaN(v) && !aNumberFounded {
max = v
aNumberFounded = true
continue
}
if !math.IsNaN(v) && v > max {
max = v
}
}
if !aNumberFounded {
return nan
}
return max
}