Merge pull request #13267 from linasm/simplify-native-histogram-math

promql: simplify Native Histogram arithmetics
owilliams/utf8^2
Björn Rabenstein 10 months ago committed by GitHub
commit bfbb13cf36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -2507,22 +2507,12 @@ func vectorElemBinop(op parser.ItemType, lhs, rhs float64, hlhs, hrhs *histogram
switch op { switch op {
case parser.ADD: case parser.ADD:
if hlhs != nil && hrhs != nil { if hlhs != nil && hrhs != nil {
// The histogram being added must have the larger schema return 0, hlhs.Copy().Add(hrhs).Compact(0), true
// code (i.e. the higher resolution).
if hrhs.Schema >= hlhs.Schema {
return 0, hlhs.Copy().Add(hrhs).Compact(0), true
}
return 0, hrhs.Copy().Add(hlhs).Compact(0), true
} }
return lhs + rhs, nil, true return lhs + rhs, nil, true
case parser.SUB: case parser.SUB:
if hlhs != nil && hrhs != nil { if hlhs != nil && hrhs != nil {
// The histogram being subtracted must have the larger schema return 0, hlhs.Copy().Sub(hrhs).Compact(0), true
// code (i.e. the higher resolution).
if hrhs.Schema >= hlhs.Schema {
return 0, hlhs.Copy().Sub(hrhs).Compact(0), true
}
return 0, hrhs.Copy().Mul(-1).Add(hlhs).Compact(0), true
} }
return lhs - rhs, nil, true return lhs - rhs, nil, true
case parser.MUL: case parser.MUL:
@ -2707,13 +2697,7 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, grouping []string, par
if s.H != nil { if s.H != nil {
group.hasHistogram = true group.hasHistogram = true
if group.histogramValue != nil { if group.histogramValue != nil {
// The histogram being added must have group.histogramValue.Add(s.H)
// an equal or larger schema.
if s.H.Schema >= group.histogramValue.Schema {
group.histogramValue.Add(s.H)
} else {
group.histogramValue = s.H.Copy().Add(group.histogramValue)
}
} }
// Otherwise the aggregation contained floats // Otherwise the aggregation contained floats
// previously and will be invalid anyway. No // previously and will be invalid anyway. No
@ -2730,15 +2714,8 @@ func (ev *evaluator) aggregation(e *parser.AggregateExpr, grouping []string, par
if group.histogramMean != nil { if group.histogramMean != nil {
left := s.H.Copy().Div(float64(group.groupCount)) left := s.H.Copy().Div(float64(group.groupCount))
right := group.histogramMean.Copy().Div(float64(group.groupCount)) right := group.histogramMean.Copy().Div(float64(group.groupCount))
// The histogram being added/subtracted must have toAdd := left.Sub(right)
// an equal or larger schema. group.histogramMean.Add(toAdd)
if s.H.Schema >= group.histogramMean.Schema {
toAdd := right.Mul(-1).Add(left)
group.histogramMean.Add(toAdd)
} else {
toAdd := left.Sub(right)
group.histogramMean = toAdd.Add(group.histogramMean)
}
} }
// Otherwise the aggregation contained floats // Otherwise the aggregation contained floats
// previously and will be invalid anyway. No // previously and will be invalid anyway. No

@ -537,15 +537,8 @@ func funcAvgOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNode
count++ count++
left := h.H.Copy().Div(float64(count)) left := h.H.Copy().Div(float64(count))
right := mean.Copy().Div(float64(count)) right := mean.Copy().Div(float64(count))
// The histogram being added/subtracted must have toAdd := left.Sub(right)
// an equal or larger schema. mean.Add(toAdd)
if h.H.Schema >= mean.Schema {
toAdd := right.Mul(-1).Add(left)
mean.Add(toAdd)
} else {
toAdd := left.Sub(right)
mean = toAdd.Add(mean)
}
} }
return mean return mean
}), nil }), nil
@ -685,13 +678,7 @@ func funcSumOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNode
return aggrHistOverTime(vals, enh, func(s Series) *histogram.FloatHistogram { return aggrHistOverTime(vals, enh, func(s Series) *histogram.FloatHistogram {
sum := s.Histograms[0].H.Copy() sum := s.Histograms[0].H.Copy()
for _, h := range s.Histograms[1:] { for _, h := range s.Histograms[1:] {
// The histogram being added must have sum.Add(h.H)
// an equal or larger schema.
if h.H.Schema >= sum.Schema {
sum.Add(h.H)
} else {
sum = h.H.Copy().Add(sum)
}
} }
return sum return sum
}), nil }), nil

Loading…
Cancel
Save