Handle NaN for min/max.

Similar to topk and sort, prefer not returning NaN
where possible.
This commit is contained in:
Brian Brazil 2016-01-06 12:41:40 +00:00
parent b683581f8f
commit 89760dd77d
2 changed files with 24 additions and 2 deletions

View file

@ -1084,11 +1084,11 @@ func (ev *evaluator) aggregation(op itemType, grouping model.LabelNames, keepExt
groupedResult.value += sample.Value
groupedResult.groupCount++
case itemMax:
if groupedResult.value < sample.Value {
if groupedResult.value < sample.Value || math.IsNaN(float64(groupedResult.value)) {
groupedResult.value = sample.Value
}
case itemMin:
if groupedResult.value > sample.Value {
if groupedResult.value > sample.Value || math.IsNaN(float64(groupedResult.value)) {
groupedResult.value = sample.Value
}
case itemCount:

22
promql/testdata/operators.test vendored Normal file
View file

@ -0,0 +1,22 @@
# Tests for min/max.
clear
load 5m
http_requests{job="api-server", instance="0", group="production"} 1
http_requests{job="api-server", instance="1", group="production"} 2
http_requests{job="api-server", instance="0", group="canary"} NaN
http_requests{job="api-server", instance="1", group="canary"} 3
http_requests{job="api-server", instance="2", group="canary"} 4
eval instant at 0m max(http_requests)
{} 4
eval instant at 0m min(http_requests)
{} 1
eval instant at 0m max by (group) (http_requests)
{group="production"} 2
{group="canary"} 4
eval instant at 0m min by (group) (http_requests)
{group="production"} 1
{group="canary"} 3