mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
app/vmselect/promql: return NaN from count()
over zero time series
This aligns `count` behavior with Prometheus.
This commit is contained in:
parent
0e52357f35
commit
aac482517f
4 changed files with 14 additions and 5 deletions
|
@ -312,7 +312,11 @@ func aggrFuncCount(tss []*timeseries) []*timeseries {
|
|||
}
|
||||
count++
|
||||
}
|
||||
dst.Values[i] = float64(count)
|
||||
v := float64(count)
|
||||
if count == 0 {
|
||||
v = nan
|
||||
}
|
||||
dst.Values[i] = v
|
||||
}
|
||||
return tss[:1]
|
||||
}
|
||||
|
|
|
@ -348,7 +348,12 @@ func mergeAggrCount(dst, src *incrementalAggrContext) {
|
|||
}
|
||||
|
||||
func finalizeAggrCount(iac *incrementalAggrContext) {
|
||||
// Nothing to do
|
||||
dstValues := iac.ts.Values
|
||||
for i, v := range dstValues {
|
||||
if v == 0 {
|
||||
dstValues[i] = nan
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateAggrSum2(iac *incrementalAggrContext, values []float64) {
|
||||
|
|
|
@ -81,7 +81,7 @@ func TestIncrementalAggr(t *testing.T) {
|
|||
})
|
||||
t.Run("count", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
valuesExpected := []float64{6, 0, 5, 5}
|
||||
valuesExpected := []float64{6, nan, 5, 5}
|
||||
f("count", valuesExpected)
|
||||
})
|
||||
t.Run("sum2", func(t *testing.T) {
|
||||
|
|
|
@ -2353,10 +2353,10 @@ func TestExecSuccess(t *testing.T) {
|
|||
})
|
||||
t.Run(`count(multi-vector)`, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
q := `count(label_set(10, "foo", "bar") or label_set((15-time()/100)^0.5, "baz", "sss"))`
|
||||
q := `count(label_set(time()<1500, "foo", "bar") or label_set(time()<1800, "baz", "sss"))`
|
||||
r := netstorage.Result{
|
||||
MetricName: metricNameExpected,
|
||||
Values: []float64{2, 2, 2, 1, 1, 1},
|
||||
Values: []float64{2, 2, 2, 1, nan, nan},
|
||||
Timestamps: timestampsExpected,
|
||||
}
|
||||
resultExpected := []netstorage.Result{r}
|
||||
|
|
Loading…
Reference in a new issue