promql: remove histogramMean from groupedAggregation

Re-use histogramValue since we don't need them separately.

Tidy up initialization.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
Bryan Boreham 2024-03-09 10:23:31 +00:00
parent 2cf3c9de8f
commit 5e3914a27c

View File

@ -2733,7 +2733,6 @@ type groupedAggregation struct {
floatValue float64
histogramValue *histogram.FloatHistogram
floatMean float64
histogramMean *histogram.FloatHistogram
groupCount int
heap vectorByValueHeap
reverseHeap vectorByReverseValueHeap
@ -2762,20 +2761,14 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, q float64, inputMatrix
floatMean: f,
groupCount: 1,
}
switch {
case h == nil:
group.hasFloat = true
case op == parser.SUM:
group.histogramValue = h.Copy()
group.hasHistogram = true
case op == parser.AVG:
group.histogramMean = h.Copy()
group.hasHistogram = true
case op == parser.STDVAR || op == parser.STDDEV:
group.groupCount = 0
}
switch op {
case parser.SUM, parser.AVG:
if h == nil {
group.hasFloat = true
} else {
group.histogramValue = h.Copy()
group.hasHistogram = true
}
case parser.STDVAR, parser.STDDEV:
group.floatValue = 0
case parser.QUANTILE:
@ -2807,11 +2800,11 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, q float64, inputMatrix
group.groupCount++
if h != nil {
group.hasHistogram = true
if group.histogramMean != nil {
if group.histogramValue != nil {
left := h.Copy().Div(float64(group.groupCount))
right := group.histogramMean.Copy().Div(float64(group.groupCount))
right := group.histogramValue.Copy().Div(float64(group.groupCount))
toAdd := left.Sub(right)
group.histogramMean.Add(toAdd)
group.histogramValue.Add(toAdd)
}
// Otherwise the aggregation contained floats
// previously and will be invalid anyway. No
@ -2886,7 +2879,7 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, q float64, inputMatrix
continue
}
if aggr.hasHistogram {
aggr.histogramValue = aggr.histogramMean.Compact(0)
aggr.histogramValue = aggr.histogramValue.Compact(0)
} else {
aggr.floatValue = aggr.floatMean
}