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

Loading…
Cancel
Save