mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Merge pull request #15168 from aknuds1/arve/refactor-range-eval
[Release 2.55] Refactor evaluator.rangeEval by splitting out gatherVector method
This commit is contained in:
commit
249969d7ff
|
@ -1219,38 +1219,17 @@ func (ev *evaluator) rangeEval(ctx context.Context, prepSeries func(labels.Label
|
||||||
ev.currentSamples = tempNumSamples
|
ev.currentSamples = tempNumSamples
|
||||||
// Gather input vectors for this timestamp.
|
// Gather input vectors for this timestamp.
|
||||||
for i := range exprs {
|
for i := range exprs {
|
||||||
vectors[i] = vectors[i][:0]
|
var bh []EvalSeriesHelper
|
||||||
|
var sh []EvalSeriesHelper
|
||||||
if prepSeries != nil {
|
if prepSeries != nil {
|
||||||
bufHelpers[i] = bufHelpers[i][:0]
|
bh = bufHelpers[i][:0]
|
||||||
}
|
sh = seriesHelpers[i]
|
||||||
|
|
||||||
for si, series := range matrixes[i] {
|
|
||||||
switch {
|
|
||||||
case len(series.Floats) > 0 && series.Floats[0].T == ts:
|
|
||||||
vectors[i] = append(vectors[i], Sample{Metric: series.Metric, F: series.Floats[0].F, T: ts, DropName: series.DropName})
|
|
||||||
// Move input vectors forward so we don't have to re-scan the same
|
|
||||||
// past points at the next step.
|
|
||||||
matrixes[i][si].Floats = series.Floats[1:]
|
|
||||||
case len(series.Histograms) > 0 && series.Histograms[0].T == ts:
|
|
||||||
vectors[i] = append(vectors[i], Sample{Metric: series.Metric, H: series.Histograms[0].H, T: ts, DropName: series.DropName})
|
|
||||||
matrixes[i][si].Histograms = series.Histograms[1:]
|
|
||||||
default:
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if prepSeries != nil {
|
|
||||||
bufHelpers[i] = append(bufHelpers[i], seriesHelpers[i][si])
|
|
||||||
}
|
|
||||||
// Don't add histogram size here because we only
|
|
||||||
// copy the pointer above, not the whole
|
|
||||||
// histogram.
|
|
||||||
ev.currentSamples++
|
|
||||||
if ev.currentSamples > ev.maxSamples {
|
|
||||||
ev.error(ErrTooManySamples(env))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
vectors[i], bh = ev.gatherVector(ts, matrixes[i], vectors[i], bh, sh)
|
||||||
args[i] = vectors[i]
|
args[i] = vectors[i]
|
||||||
ev.samplesStats.UpdatePeak(ev.currentSamples)
|
if prepSeries != nil {
|
||||||
|
bufHelpers[i] = bh
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make the function call.
|
// Make the function call.
|
||||||
|
@ -3682,3 +3661,41 @@ func newHistogramStatsSeries(series storage.Series) *histogramStatsSeries {
|
||||||
func (s histogramStatsSeries) Iterator(it chunkenc.Iterator) chunkenc.Iterator {
|
func (s histogramStatsSeries) Iterator(it chunkenc.Iterator) chunkenc.Iterator {
|
||||||
return NewHistogramStatsIterator(s.Series.Iterator(it))
|
return NewHistogramStatsIterator(s.Series.Iterator(it))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gatherVector gathers a Vector for ts from the series in input.
|
||||||
|
// output is used as a buffer.
|
||||||
|
// If bufHelpers and seriesHelpers are provided, seriesHelpers[i] is appended to bufHelpers for every input index i.
|
||||||
|
// The gathered Vector and bufHelper are returned.
|
||||||
|
func (ev *evaluator) gatherVector(ts int64, input Matrix, output Vector, bufHelpers, seriesHelpers []EvalSeriesHelper) (Vector, []EvalSeriesHelper) {
|
||||||
|
output = output[:0]
|
||||||
|
for i, series := range input {
|
||||||
|
switch {
|
||||||
|
case len(series.Floats) > 0 && series.Floats[0].T == ts:
|
||||||
|
s := series.Floats[0]
|
||||||
|
output = append(output, Sample{Metric: series.Metric, F: s.F, T: ts, DropName: series.DropName})
|
||||||
|
// Move input vectors forward so we don't have to re-scan the same
|
||||||
|
// past points at the next step.
|
||||||
|
input[i].Floats = series.Floats[1:]
|
||||||
|
case len(series.Histograms) > 0 && series.Histograms[0].T == ts:
|
||||||
|
s := series.Histograms[0]
|
||||||
|
output = append(output, Sample{Metric: series.Metric, H: s.H, T: ts, DropName: series.DropName})
|
||||||
|
input[i].Histograms = series.Histograms[1:]
|
||||||
|
default:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if len(seriesHelpers) > 0 {
|
||||||
|
bufHelpers = append(bufHelpers, seriesHelpers[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't add histogram size here because we only
|
||||||
|
// copy the pointer above, not the whole
|
||||||
|
// histogram.
|
||||||
|
ev.currentSamples++
|
||||||
|
if ev.currentSamples > ev.maxSamples {
|
||||||
|
ev.error(ErrTooManySamples(env))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ev.samplesStats.UpdatePeak(ev.currentSamples)
|
||||||
|
|
||||||
|
return output, bufHelpers
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue