Browse Source

promql: simplify rangeEval a bit more

We can't have both a float and a histogram at the same timestep.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
pull/12732/head
Bryan Boreham 1 year ago
parent
commit
5ce990cabc
  1. 21
      promql/engine.go

21
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)
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})
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:]
}
if len(series.Histograms) > 0 && series.Histograms[0].T == ts {
add(si, Sample{Metric: series.Metric, H: series.Histograms[0].H, T: ts})
} 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++
if ev.currentSamples > ev.maxSamples {
ev.error(ErrTooManySamples(env))
}

Loading…
Cancel
Save