From 812c90ec6969947fb1cd18aa09b58b88ba5892ab Mon Sep 17 00:00:00 2001 From: Denis Limarev Date: Mon, 23 Jan 2023 22:44:27 +0600 Subject: [PATCH] Perfomance: Add preallocation for some slices (#61632) --- pkg/codegen/jenny_docs.go | 7 +++---- pkg/setting/setting.go | 2 +- pkg/tsdb/cloudmonitoring/cloudmonitoring.go | 2 +- pkg/tsdb/cloudwatch/models/cloudwatch_query.go | 2 +- pkg/tsdb/elasticsearch/parse_query.go | 10 ++++++---- pkg/tsdb/influxdb/influxdb.go | 2 +- pkg/tsdb/influxdb/model_parser.go | 15 +++++++++------ pkg/tsdb/influxdb/query.go | 4 ++-- pkg/tsdb/influxdb/response_parser.go | 2 +- pkg/tsdb/loki/frame.go | 2 +- pkg/tsdb/parca/query.go | 4 ++-- pkg/tsdb/parca/resources.go | 2 +- pkg/tsdb/phlare/query.go | 4 ++-- 13 files changed, 31 insertions(+), 27 deletions(-) diff --git a/pkg/codegen/jenny_docs.go b/pkg/codegen/jenny_docs.go index 3087cb84995..1d899df3b70 100644 --- a/pkg/codegen/jenny_docs.go +++ b/pkg/codegen/jenny_docs.go @@ -324,11 +324,10 @@ func printProperties(w io.Writer, s *schema) { table.SetAutoWrapText(false) // Buffer all property rows so that we can sort them before printing them. - var rows [][]string - + rows := make([][]string, 0, len(s.Properties)) for k, p := range s.Properties { // Generate relative links for objects and arrays of objects. - var propType []string + propType := make([]string, 0, len(p.Type)) for _, pt := range p.Type { switch pt { case PropertyTypeObject: @@ -372,7 +371,7 @@ func printProperties(w io.Writer, s *schema) { desc := p.Description if len(p.Enum) > 0 { - var vals []string + vals := make([]string, 0, len(p.Enum)) for _, e := range p.Enum { vals = append(vals, e.String()) } diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index a52e745c7aa..8fac999f44a 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -1777,8 +1777,8 @@ func (cfg *Cfg) readDataSourcesSettings() { } func GetAllowedOriginGlobs(originPatterns []string) ([]glob.Glob, error) { - var originGlobs []glob.Glob allowedOrigins := originPatterns + originGlobs := make([]glob.Glob, 0, len(allowedOrigins)) for _, originPattern := range allowedOrigins { g, err := glob.Compile(originPattern) if err != nil { diff --git a/pkg/tsdb/cloudmonitoring/cloudmonitoring.go b/pkg/tsdb/cloudmonitoring/cloudmonitoring.go index 386c661aeff..99c117b8f8d 100644 --- a/pkg/tsdb/cloudmonitoring/cloudmonitoring.go +++ b/pkg/tsdb/cloudmonitoring/cloudmonitoring.go @@ -380,7 +380,7 @@ func queryModel(query backend.DataQuery) (grafanaQuery, error) { } func (s *Service) buildQueryExecutors(logger log.Logger, req *backend.QueryDataRequest) ([]cloudMonitoringQueryExecutor, error) { - var cloudMonitoringQueryExecutors []cloudMonitoringQueryExecutor + cloudMonitoringQueryExecutors := make([]cloudMonitoringQueryExecutor, 0, len(req.Queries)) startTime := req.Queries[0].TimeRange.From endTime := req.Queries[0].TimeRange.To durationSeconds := int(endTime.Sub(startTime).Seconds()) diff --git a/pkg/tsdb/cloudwatch/models/cloudwatch_query.go b/pkg/tsdb/cloudwatch/models/cloudwatch_query.go index 29a67b3d80a..5ee725ec866 100644 --- a/pkg/tsdb/cloudwatch/models/cloudwatch_query.go +++ b/pkg/tsdb/cloudwatch/models/cloudwatch_query.go @@ -248,7 +248,7 @@ func ParseMetricDataQueries(dataQueries []backend.DataQuery, startTime time.Time metricDataQueries[query.RefID] = metricsDataQuery } - var result []*CloudWatchQuery + result := make([]*CloudWatchQuery, 0, len(metricDataQueries)) for refId, mdq := range metricDataQueries { cwQuery := &CloudWatchQuery{ logger: logger, diff --git a/pkg/tsdb/elasticsearch/parse_query.go b/pkg/tsdb/elasticsearch/parse_query.go index 433687cc7fe..e43ea6059cb 100644 --- a/pkg/tsdb/elasticsearch/parse_query.go +++ b/pkg/tsdb/elasticsearch/parse_query.go @@ -46,8 +46,9 @@ func parseQuery(tsdbQuery []backend.DataQuery) ([]*Query, error) { func parseBucketAggs(model *simplejson.Json) ([]*BucketAgg, error) { var err error - var result []*BucketAgg - for _, t := range model.Get("bucketAggs").MustArray() { + bucketAggs := model.Get("bucketAggs").MustArray() + result := make([]*BucketAgg, 0, len(bucketAggs)) + for _, t := range bucketAggs { aggJSON := simplejson.NewFromAny(t) agg := &BucketAgg{} @@ -71,8 +72,9 @@ func parseBucketAggs(model *simplejson.Json) ([]*BucketAgg, error) { func parseMetrics(model *simplejson.Json) ([]*MetricAgg, error) { var err error - var result []*MetricAgg - for _, t := range model.Get("metrics").MustArray() { + metrics := model.Get("metrics").MustArray() + result := make([]*MetricAgg, 0, len(metrics)) + for _, t := range metrics { metricJSON := simplejson.NewFromAny(t) metric := &MetricAgg{} diff --git a/pkg/tsdb/influxdb/influxdb.go b/pkg/tsdb/influxdb/influxdb.go index 9f3638cba86..04f43d79f51 100644 --- a/pkg/tsdb/influxdb/influxdb.go +++ b/pkg/tsdb/influxdb/influxdb.go @@ -101,7 +101,7 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) logger.Debug("Making a non-Flux type query") var allRawQueries string - var queries []Query + queries := make([]Query, 0, len(req.Queries)) for _, reqQuery := range req.Queries { query, err := s.queryParser.Parse(reqQuery) diff --git a/pkg/tsdb/influxdb/model_parser.go b/pkg/tsdb/influxdb/model_parser.go index 85462d0e7d7..9b8930d0bd9 100644 --- a/pkg/tsdb/influxdb/model_parser.go +++ b/pkg/tsdb/influxdb/model_parser.go @@ -70,9 +70,10 @@ func (qp *InfluxdbQueryParser) Parse(query backend.DataQuery) (*Query, error) { } func (qp *InfluxdbQueryParser) parseSelects(model *simplejson.Json) ([]*Select, error) { - var result []*Select + selectObjs := model.Get("select").MustArray() + result := make([]*Select, 0, len(selectObjs)) - for _, selectObj := range model.Get("select").MustArray() { + for _, selectObj := range selectObjs { selectJson := simplejson.NewFromAny(selectObj) var parts Select @@ -93,8 +94,9 @@ func (qp *InfluxdbQueryParser) parseSelects(model *simplejson.Json) ([]*Select, } func (*InfluxdbQueryParser) parseTags(model *simplejson.Json) ([]*Tag, error) { - var result []*Tag - for _, t := range model.Get("tags").MustArray() { + tags := model.Get("tags").MustArray() + result := make([]*Tag, 0, len(tags)) + for _, t := range tags { tagJson := simplejson.NewFromAny(t) tag := &Tag{} var err error @@ -159,8 +161,9 @@ func (*InfluxdbQueryParser) parseQueryPart(model *simplejson.Json) (*QueryPart, } func (qp *InfluxdbQueryParser) parseGroupBy(model *simplejson.Json) ([]*QueryPart, error) { - var result []*QueryPart - for _, groupObj := range model.Get("groupBy").MustArray() { + groupBy := model.Get("groupBy").MustArray() + result := make([]*QueryPart, 0, len(groupBy)) + for _, groupObj := range groupBy { groupJson := simplejson.NewFromAny(groupObj) queryPart, err := qp.parseQueryPart(groupJson) if err != nil { diff --git a/pkg/tsdb/influxdb/query.go b/pkg/tsdb/influxdb/query.go index 7193198a9f8..abf160edd15 100644 --- a/pkg/tsdb/influxdb/query.go +++ b/pkg/tsdb/influxdb/query.go @@ -44,7 +44,7 @@ func (query *Query) Build(queryContext *backend.QueryDataRequest) (string, error } func (query *Query) renderTags() []string { - var res []string + res := make([]string, 0, len(query.Tags)) for i, tag := range query.Tags { str := "" @@ -91,7 +91,7 @@ func (query *Query) renderTimeFilter(queryContext *backend.QueryDataRequest) str func (query *Query) renderSelectors(queryContext *backend.QueryDataRequest) string { res := "SELECT " - var selectors []string + selectors := make([]string, 0, len(query.Selects)) for _, sel := range query.Selects { stk := "" for _, s := range *sel { diff --git a/pkg/tsdb/influxdb/response_parser.go b/pkg/tsdb/influxdb/response_parser.go index a0b1755f32c..0c3cf21b57e 100644 --- a/pkg/tsdb/influxdb/response_parser.go +++ b/pkg/tsdb/influxdb/response_parser.go @@ -189,7 +189,7 @@ func formatFrameName(row Row, column string, query Query) string { } func buildFrameNameFromQuery(row Row, column string) string { - var tags []string + tags := make([]string, 0, len(row.Tags)) for k, v := range row.Tags { tags = append(tags, fmt.Sprintf("%s: %s", k, v)) } diff --git a/pkg/tsdb/loki/frame.go b/pkg/tsdb/loki/frame.go index 3d06812b702..d64c6b63b4d 100644 --- a/pkg/tsdb/loki/frame.go +++ b/pkg/tsdb/loki/frame.go @@ -178,7 +178,7 @@ func makeIdField(stringTimeField *data.Field, lineField *data.Field, labelsField } func formatNamePrometheusStyle(labels map[string]string) string { - var parts []string + parts := make([]string, 0, len(labels)) for k, v := range labels { parts = append(parts, fmt.Sprintf("%s=%q", k, v)) diff --git a/pkg/tsdb/parca/query.go b/pkg/tsdb/parca/query.go index 253e41209fb..d3f8db05e8d 100644 --- a/pkg/tsdb/parca/query.go +++ b/pkg/tsdb/parca/query.go @@ -142,7 +142,7 @@ type Node struct { } func walkTree(tree *v1alpha1.FlamegraphRootNode, fn func(level int64, value int64, name string, self int64)) { - var stack []*Node + stack := make([]*Node, 0, len(tree.Children)) var childrenValue int64 = 0 for _, child := range tree.Children { @@ -217,7 +217,7 @@ func normalizeUnit(unit string) string { } func seriesToDataFrame(seriesResp *connect.Response[v1alpha1.QueryRangeResponse], profileTypeID string) []*data.Frame { - var frames []*data.Frame + frames := make([]*data.Frame, 0, len(seriesResp.Msg.Series)) for _, series := range seriesResp.Msg.Series { frame := data.NewFrame("series") diff --git a/pkg/tsdb/parca/resources.go b/pkg/tsdb/parca/resources.go index a6aaa055471..87fad90a0e5 100644 --- a/pkg/tsdb/parca/resources.go +++ b/pkg/tsdb/parca/resources.go @@ -28,7 +28,7 @@ func (d *ParcaDatasource) callProfileTypes(ctx context.Context, req *backend.Cal return err } - var types []*ProfileType + types := make([]*ProfileType, 0, len(res.Msg.Types)) for _, t := range res.Msg.Types { var id string if t.Delta { diff --git a/pkg/tsdb/phlare/query.go b/pkg/tsdb/phlare/query.go index 80a6d3b1997..a49e730c673 100644 --- a/pkg/tsdb/phlare/query.go +++ b/pkg/tsdb/phlare/query.go @@ -285,14 +285,14 @@ func walkTree(tree *ProfileTree, fn func(tree *ProfileTree)) { } func seriesToDataFrames(seriesResp *connect.Response[querierv1.SelectSeriesResponse], profileTypeID string) []*data.Frame { - var frames []*data.Frame + frames := make([]*data.Frame, 0, len(seriesResp.Msg.Series)) for _, series := range seriesResp.Msg.Series { // We create separate data frames as the series may not have the same length frame := data.NewFrame("series") frame.Meta = &data.FrameMeta{PreferredVisualization: "graph"} - fields := data.Fields{} + fields := make(data.Fields, 0, 2) timeField := data.NewField("time", nil, []time.Time{}) fields = append(fields, timeField)