mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Pyroscope: Fix panic on query when symbol names are repeating (#72188)
Use EnumItemIndex type in values map
This commit is contained in:
@@ -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)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user