From a0d480fbf3d1bbb0bc214f6ddb73b5701a052619 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 20 Aug 2019 22:51:45 +0300 Subject: [PATCH] app/vmselect/promql: pre-allocate memory for map for checking for duplicate timeseries This should reduce memory allocations for big number of timeseries --- app/vmselect/promql/exec.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/vmselect/promql/exec.go b/app/vmselect/promql/exec.go index b80686493..960113af0 100644 --- a/app/vmselect/promql/exec.go +++ b/app/vmselect/promql/exec.go @@ -105,14 +105,14 @@ func maySortResults(e expr, tss []*timeseries) bool { func timeseriesToResult(tss []*timeseries, maySort bool) ([]netstorage.Result, error) { tss = removeNaNs(tss) result := make([]netstorage.Result, len(tss)) - m := make(map[string]bool) + m := make(map[string]struct{}, len(tss)) bb := bbPool.Get() for i, ts := range tss { bb.B = marshalMetricNameSorted(bb.B[:0], &ts.MetricName) - if m[string(bb.B)] { + if _, ok := m[string(bb.B)]; ok { return nil, fmt.Errorf(`duplicate output timeseries: %s%s`, ts.MetricName.MetricGroup, stringMetricName(&ts.MetricName)) } - m[string(bb.B)] = true + m[string(bb.B)] = struct{}{} rs := &result[i] rs.MetricNameMarshaled = append(rs.MetricNameMarshaled[:0], bb.B...)