Pyroscope: Fix panic on query when symbol names are repeating (#72188)

Use EnumItemIndex type in values map
pull/72194/head
Andrej Ocenas 2 years ago committed by GitHub
parent a2442ef620
commit 689d9ed430
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      pkg/tsdb/grafana-pyroscope-datasource/query.go
  2. 9
      pkg/tsdb/grafana-pyroscope-datasource/query_test.go

@ -312,14 +312,14 @@ func treeToNestedSetDataFrame(tree *ProfileTree, unit string) *data.Frame {
type EnumField struct { type EnumField struct {
field *data.Field field *data.Field
valuesMap map[string]int64 valuesMap map[string]data.EnumItemIndex
counter int64 counter data.EnumItemIndex
} }
func NewEnumField(name string, labels data.Labels) *EnumField { func NewEnumField(name string, labels data.Labels) *EnumField {
return &EnumField{ return &EnumField{
field: data.NewField(name, labels, []data.EnumItemIndex{}), field: data.NewField(name, labels, []data.EnumItemIndex{}),
valuesMap: make(map[string]int64), valuesMap: make(map[string]data.EnumItemIndex),
} }
} }
@ -328,7 +328,7 @@ func (e *EnumField) Append(value string) {
e.field.Append(valueIndex) e.field.Append(valueIndex)
} else { } else {
e.valuesMap[value] = e.counter e.valuesMap[value] = e.counter
e.field.Append(data.EnumItemIndex(e.counter)) e.field.Append(e.counter)
e.counter++ e.counter++
} }
} }

@ -196,6 +196,7 @@ func Test_treeToNestedDataFrame(t *testing.T) {
}, },
{Value: 30, Level: 1, Self: 3, Name: "func2", Nodes: []*ProfileTree{ {Value: 30, Level: 1, Self: 3, Name: "func2", Nodes: []*ProfileTree{
{Value: 15, Level: 2, Self: 4, Name: "func1:func3"}, {Value: 15, Level: 2, Self: 4, Name: "func1:func3"},
{Value: 10, Level: 2, Self: 4, Name: "func1"},
}}, }},
}, },
} }
@ -211,10 +212,10 @@ func Test_treeToNestedDataFrame(t *testing.T) {
} }
require.Equal(t, require.Equal(t,
[]*data.Field{ []*data.Field{
data.NewField("level", nil, []int64{0, 1, 1, 2}), data.NewField("level", nil, []int64{0, 1, 1, 2, 2}),
data.NewField("value", nil, []int64{100, 40, 30, 15}).SetConfig(&data.FieldConfig{Unit: "short"}), data.NewField("value", nil, []int64{100, 40, 30, 15, 10}).SetConfig(&data.FieldConfig{Unit: "short"}),
data.NewField("self", nil, []int64{1, 2, 3, 4}).SetConfig(&data.FieldConfig{Unit: "short"}), data.NewField("self", nil, []int64{1, 2, 3, 4, 4}).SetConfig(&data.FieldConfig{Unit: "short"}),
data.NewField("label", nil, []data.EnumItemIndex{0, 1, 2, 3}).SetConfig(labelConfig), data.NewField("label", nil, []data.EnumItemIndex{0, 1, 2, 3, 1}).SetConfig(labelConfig),
}, frame.Fields) }, frame.Fields)
}) })

Loading…
Cancel
Save