Reuse slice for the range vector allocations. (#2219)

Signed-off-by: Cyril Tovena <cyril.tovena@gmail.com>
pull/2197/head^2
Cyril Tovena 5 years ago committed by GitHub
parent 721256403c
commit 91158abec1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      pkg/logql/range_vector.go

@ -27,6 +27,7 @@ type rangeVectorIterator struct {
selRange, step, end, current int64
window map[string]*promql.Series
metrics map[string]labels.Labels
at []promql.Sample
}
func newRangeVectorIterator(
@ -135,11 +136,14 @@ func (r *rangeVectorIterator) load(start, end int64) {
}
func (r *rangeVectorIterator) At(aggregator RangeVectorAggregator) (int64, promql.Vector) {
result := make([]promql.Sample, 0, len(r.window))
if r.at == nil {
r.at = make([]promql.Sample, 0, len(r.window))
}
r.at = r.at[:0]
// convert ts from nano to milli seconds as the iterator work with nanoseconds
ts := r.current / 1e+6
for _, series := range r.window {
result = append(result, promql.Sample{
r.at = append(r.at, promql.Sample{
Point: promql.Point{
V: aggregator(series.Points),
T: ts,
@ -147,7 +151,7 @@ func (r *rangeVectorIterator) At(aggregator RangeVectorAggregator) (int64, promq
Metric: series.Metric,
})
}
return ts, result
return ts, r.at
}
var seriesPool sync.Pool

Loading…
Cancel
Save