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 Aliaksandr Valialkin
parent 8accbc14d8
commit 3127aa92b5

View File

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