From 7756556eb6d3bf590fe1822f274c0bcc28740eb4 Mon Sep 17 00:00:00 2001 From: Jeanette Tan Date: Fri, 20 Oct 2023 19:18:37 +0800 Subject: [PATCH 1/3] Remove NewPossibleNonCounterInfo until it can be made more efficient --- promql/functions.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/promql/functions.go b/promql/functions.go index ecd6f7c8b4..d4c7f73b78 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -88,14 +88,6 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod return enh.Out, annos.Add(annotations.NewMixedFloatsHistogramsWarning(metricName, args[0].PositionRange())) } - if isCounter && metricName != "" && len(samples.Floats) > 0 && - !strings.HasSuffix(metricName, "_total") && - !strings.HasSuffix(metricName, "_sum") && - !strings.HasSuffix(metricName, "_count") && - !strings.HasSuffix(metricName, "_bucket") { - annos.Add(annotations.NewPossibleNonCounterInfo(metricName, args[0].PositionRange())) - } - switch { case len(samples.Histograms) > 1: numSamplesMinusOne = len(samples.Histograms) - 1 From a9f19da42ece2cd8b6157dd4302662acbf372501 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 20 Oct 2023 13:36:56 +0000 Subject: [PATCH 2/3] promql: temporarily eliminate more overhead of Annotations Creating a map on every step of evaluation is expensive. This is a quick-fix; probably a better long-term solution is available. Signed-off-by: Bryan Boreham --- promql/functions.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/promql/functions.go b/promql/functions.go index d4c7f73b78..1b81cd6244 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -77,7 +77,7 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod resultHistogram *histogram.FloatHistogram firstT, lastT int64 numSamplesMinusOne int - annos = annotations.Annotations{} + annos annotations.Annotations ) // We need either at least two Histograms and no Floats, or at least two @@ -85,6 +85,7 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod // Vector element. metricName := samples.Metric.Get(labels.MetricName) if len(samples.Histograms) > 0 && len(samples.Floats) > 0 { + annos := annotations.Annotations{} return enh.Out, annos.Add(annotations.NewMixedFloatsHistogramsWarning(metricName, args[0].PositionRange())) } @@ -96,6 +97,7 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod var newAnnos annotations.Annotations resultHistogram, newAnnos = histogramRate(samples.Histograms, isCounter, metricName, args[0].PositionRange()) if resultHistogram == nil { + annos := annotations.Annotations{} // The histograms are not compatible with each other. return enh.Out, annos.Merge(newAnnos) } From 48e64fdd4d6c7ea0d511eac2189133ae478816e6 Mon Sep 17 00:00:00 2001 From: Jeanette Tan Date: Sat, 21 Oct 2023 00:37:11 +0800 Subject: [PATCH 3/3] Continue avoiding creating empty annotations as much as possible --- promql/engine.go | 2 +- promql/functions.go | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/promql/engine.go b/promql/engine.go index 034e545568..1756abbd68 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -2536,7 +2536,7 @@ type groupedAggregation struct { func (ev *evaluator) aggregation(e *parser.AggregateExpr, grouping []string, param interface{}, vec Vector, seriesHelper []EvalSeriesHelper, enh *EvalNodeHelper) (Vector, annotations.Annotations) { op := e.Op without := e.Without - annos := annotations.Annotations{} + var annos annotations.Annotations result := map[uint64]*groupedAggregation{} orderedResult := []*groupedAggregation{} var k int64 diff --git a/promql/functions.go b/promql/functions.go index 1b81cd6244..5fd54f6c76 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -85,7 +85,6 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod // Vector element. metricName := samples.Metric.Get(labels.MetricName) if len(samples.Histograms) > 0 && len(samples.Floats) > 0 { - annos := annotations.Annotations{} return enh.Out, annos.Add(annotations.NewMixedFloatsHistogramsWarning(metricName, args[0].PositionRange())) } @@ -97,7 +96,6 @@ func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNod var newAnnos annotations.Annotations resultHistogram, newAnnos = histogramRate(samples.Histograms, isCounter, metricName, args[0].PositionRange()) if resultHistogram == nil { - annos := annotations.Annotations{} // The histograms are not compatible with each other. return enh.Out, annos.Merge(newAnnos) } @@ -636,7 +634,7 @@ func funcQuantileOverTime(vals []parser.Value, args parser.Expressions, enh *Eva return enh.Out, nil } - annos := annotations.Annotations{} + var annos annotations.Annotations if math.IsNaN(q) || q < 0 || q > 1 { annos.Add(annotations.NewInvalidQuantileWarning(q, args[0].PositionRange())) } @@ -1099,7 +1097,7 @@ func funcHistogramFraction(vals []parser.Value, args parser.Expressions, enh *Ev func funcHistogramQuantile(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { q := vals[0].(Vector)[0].F inVec := vals[1].(Vector) - annos := annotations.Annotations{} + var annos annotations.Annotations if math.IsNaN(q) || q < 0 || q > 1 { annos.Add(annotations.NewInvalidQuantileWarning(q, args[0].PositionRange()))