mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-15 00:13:30 +01: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
@ -312,7 +312,11 @@ func aggrFuncCount(tss []*timeseries) []*timeseries {
|
|||||||
}
|
}
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
dst.Values[i] = float64(count)
|
v := float64(count)
|
||||||
|
if count == 0 {
|
||||||
|
v = nan
|
||||||
|
}
|
||||||
|
dst.Values[i] = v
|
||||||
}
|
}
|
||||||
return tss[:1]
|
return tss[:1]
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,12 @@ func mergeAggrCount(dst, src *incrementalAggrContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func finalizeAggrCount(iac *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) {
|
func updateAggrSum2(iac *incrementalAggrContext, values []float64) {
|
||||||
|
@ -81,7 +81,7 @@ func TestIncrementalAggr(t *testing.T) {
|
|||||||
})
|
})
|
||||||
t.Run("count", func(t *testing.T) {
|
t.Run("count", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
valuesExpected := []float64{6, 0, 5, 5}
|
valuesExpected := []float64{6, nan, 5, 5}
|
||||||
f("count", valuesExpected)
|
f("count", valuesExpected)
|
||||||
})
|
})
|
||||||
t.Run("sum2", func(t *testing.T) {
|
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.Run(`count(multi-vector)`, func(t *testing.T) {
|
||||||
t.Parallel()
|
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{
|
r := netstorage.Result{
|
||||||
MetricName: metricNameExpected,
|
MetricName: metricNameExpected,
|
||||||
Values: []float64{2, 2, 2, 1, 1, 1},
|
Values: []float64{2, 2, 2, 1, nan, nan},
|
||||||
Timestamps: timestampsExpected,
|
Timestamps: timestampsExpected,
|
||||||
}
|
}
|
||||||
resultExpected := []netstorage.Result{r}
|
resultExpected := []netstorage.Result{r}
|
||||||
|
Loading…
Reference in New Issue
Block a user