diff --git a/promql/engine.go b/promql/engine.go index 466e4b1d8c..ef7e9ec246 100644 --- a/promql/engine.go +++ b/promql/engine.go @@ -1187,25 +1187,22 @@ func (ev *evaluator) rangeEval(prepSeries func(labels.Labels, *EvalSeriesHelper) bufHelpers[i] = bufHelpers[i][:0] } - add := func(si int, s Sample) { - vectors[i] = append(vectors[i], s) + for si, series := range matrixes[i] { + if 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}) + // 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:] + } else if 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}) + matrixes[i][si].Histograms = series.Histograms[1:] + } else { + continue + } if prepSeries != nil { 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 - // past points at the next step. - matrixes[i][si].Floats = series.Floats[1:] - } - if len(series.Histograms) > 0 && series.Histograms[0].T == ts { - add(si, Sample{Metric: series.Metric, H: series.Histograms[0].H, T: ts}) - matrixes[i][si].Histograms = series.Histograms[1:] - } if ev.currentSamples > ev.maxSamples { ev.error(ErrTooManySamples(env)) }