promql: simplify inner loop of rangeEval

Took out the loops with break after one iteration, and extract some
common code to a function.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
Bryan Boreham 2023-08-21 19:52:14 +01:00
parent 4d8e380269
commit 3879488476

View file

@ -1187,44 +1187,29 @@ func (ev *evaluator) rangeEval(prepSeries func(labels.Labels, *EvalSeriesHelper)
bufHelpers[i] = bufHelpers[i][:0] bufHelpers[i] = bufHelpers[i][:0]
} }
for si, series := range matrixes[i] { add := func(si int, s Sample) {
for _, point := range series.Floats { vectors[i] = append(vectors[i], s)
if point.T == ts {
if ev.currentSamples < ev.maxSamples {
vectors[i] = append(vectors[i], Sample{Metric: series.Metric, F: point.F, T: ts})
if prepSeries != nil { if prepSeries != nil {
bufHelpers[i] = append(bufHelpers[i], seriesHelpers[i][si]) bufHelpers[i] = append(bufHelpers[i], seriesHelpers[i][si])
} }
ev.currentSamples++
}
for si, series := range matrixes[i] {
if len(series.Floats) > 0 && series.Floats[0].T == ts {
add(si, Sample{Metric: series.Metric, F: series.Floats[0].F, T: ts})
// Move input vectors forward so we don't have to re-scan the same // Move input vectors forward so we don't have to re-scan the same
// past points at the next step. // past points at the next step.
matrixes[i][si].Floats = series.Floats[1:] matrixes[i][si].Floats = series.Floats[1:]
ev.currentSamples++
} else {
ev.error(ErrTooManySamples(env))
} }
} if len(series.Histograms) > 0 && series.Histograms[0].T == ts {
break add(si, Sample{Metric: series.Metric, H: series.Histograms[0].H, T: ts})
}
for _, point := range series.Histograms {
if point.T == ts {
if ev.currentSamples < ev.maxSamples {
vectors[i] = append(vectors[i], Sample{Metric: series.Metric, H: point.H, T: ts})
if prepSeries != nil {
bufHelpers[i] = append(bufHelpers[i], seriesHelpers[i][si])
}
// Move input vectors forward so we don't have to re-scan the same
// past points at the next step.
matrixes[i][si].Histograms = series.Histograms[1:] matrixes[i][si].Histograms = series.Histograms[1:]
ev.currentSamples++ }
} else { if ev.currentSamples > ev.maxSamples {
ev.error(ErrTooManySamples(env)) ev.error(ErrTooManySamples(env))
} }
} }
break
}
}
args[i] = vectors[i] args[i] = vectors[i]
ev.samplesStats.UpdatePeak(ev.currentSamples) ev.samplesStats.UpdatePeak(ev.currentSamples)
} }