Skip to content

Commit c88d0b0

Browse files
authored
promql: return NaN from irate() if second-last sample is NaN (prometheus#16199)
promql: return NaN from `irate()` if either of last two samples is NaN Signed-off-by: Charles Korn <[email protected]> --------- Signed-off-by: Charles Korn <[email protected]>
1 parent a4a4ef6 commit c88d0b0

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

promql/functions.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,11 @@ func instantValue(vals []parser.Value, args parser.Expressions, out Vector, isRa
367367
}
368368
switch {
369369
case ss[1].H == nil && ss[0].H == nil:
370-
if !isRate || ss[1].F >= ss[0].F {
371-
// Gauge or counter without reset.
370+
if !isRate || !(ss[1].F < ss[0].F) {
371+
// Gauge, or counter without reset, or counter with NaN value.
372372
resultSample.F = ss[1].F - ss[0].F
373373
}
374+
374375
// In case of a counter reset, we leave resultSample at
375376
// its current value, which is already ss[1].
376377
case ss[1].H != nil && ss[0].H != nil:

promql/promqltest/testdata/functions.test

+8
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ clear
218218
load 5m
219219
http_requests_total{path="/foo"} 0+10x10
220220
http_requests_total{path="/bar"} 0+10x5 0+10x5
221+
http_requests_nan{} 1 NaN NaN 5 11
221222
http_requests_histogram{path="/a"} {{sum:2 count:2}}+{{sum:3 count:3}}x5
222223
http_requests_histogram{path="/b"} 0 0 {{sum:1 count:1}} {{sum:4 count:4}}
223224
http_requests_histogram{path="/c"} 0 0 {{sum:1 count:1}} {{sum:4 count:4 counter_reset_hint:gauge}}
@@ -235,6 +236,9 @@ eval instant at 30m irate(http_requests_total[50m])
235236
{path="/foo"} .03333333333333333333
236237
{path="/bar"} 0
237238

239+
eval range from 0 to 20m step 5m irate(http_requests_nan[15m1s])
240+
{} _ NaN NaN NaN 0.02
241+
238242
eval instant at 20m irate(http_requests_histogram{path="/a"}[20m])
239243
{path="/a"} {{sum:0.01 count:0.01 counter_reset_hint:gauge}}
240244

@@ -288,6 +292,7 @@ clear
288292
load 5m
289293
http_requests{path="/foo"} 0 50 100 150
290294
http_requests{path="/bar"} 0 50 100 50
295+
http_requests_nan{} 1 NaN NaN 5 11
291296
http_requests_histogram{path="/a"} {{sum:2 count:2 counter_reset_hint:gauge}}+{{sum:1 count:3 counter_reset_hint:gauge}}x5
292297
http_requests_histogram{path="/b"} 0 0 {{sum:1 count:1 counter_reset_hint:gauge}} {{sum:2 count:2 counter_reset_hint:gauge}}
293298
http_requests_histogram{path="/c"} 0 0 {{sum:1 count:1}} {{sum:2 count:2 counter_reset_hint:gauge}}
@@ -300,6 +305,9 @@ eval instant at 20m idelta(http_requests[20m])
300305
{path="/foo"} 50
301306
{path="/bar"} -50
302307

308+
eval range from 0 to 20m step 5m idelta(http_requests_nan[15m1s])
309+
{} _ NaN NaN NaN 6
310+
303311
eval instant at 20m idelta(http_requests_histogram{path="/a"}[20m])
304312
{path="/a"} {{sum:1 count:3 counter_reset_hint:gauge}}
305313

0 commit comments

Comments
 (0)