mirror of https://github.com/prometheus/prometheus
delete empty targets sets to avoid memory leaks
parent
abfd9f1920
commit
cabce21b70
|
@ -179,8 +179,16 @@ func (m *Manager) allGroups() map[string][]*targetgroup.Group {
|
||||||
m.actionCh <- func(ctx context.Context) {
|
m.actionCh <- func(ctx context.Context) {
|
||||||
tSetsAll := map[string][]*targetgroup.Group{}
|
tSetsAll := map[string][]*targetgroup.Group{}
|
||||||
for pkey, tsets := range m.targets {
|
for pkey, tsets := range m.targets {
|
||||||
|
del := true
|
||||||
for _, tg := range tsets {
|
for _, tg := range tsets {
|
||||||
tSetsAll[pkey.setName] = append(tSetsAll[pkey.setName], tg)
|
if len(tg.Targets) != 0 {
|
||||||
|
tSetsAll[pkey.setName] = append(tSetsAll[pkey.setName], tg)
|
||||||
|
del = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Delete the empty map for this target set to avoid memory leaks.
|
||||||
|
if del {
|
||||||
|
delete(m.targets, pkey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tSets <- tSetsAll
|
tSets <- tSetsAll
|
||||||
|
|
|
@ -649,6 +649,57 @@ func TestDiscoveryManagerSyncCalls(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "Single TP update with an empty group to check for memory leaks",
|
||||||
|
updates: map[string][]update{
|
||||||
|
"tp1": {
|
||||||
|
{
|
||||||
|
targetGroups: []targetgroup.Group{
|
||||||
|
{
|
||||||
|
Source: "tp1_group1",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "1"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Source: "tp1_group2",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "2"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
interval: 30,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
targetGroups: []targetgroup.Group{
|
||||||
|
{
|
||||||
|
Source: "tp1_group1",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "3"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Source: "tp1_group2",
|
||||||
|
Targets: nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
interval: 10,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedTargets: [][]*targetgroup.Group{
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Source: "tp1_group1",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "1"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Source: "tp1_group2",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "2"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Source: "tp1_group1",
|
||||||
|
Targets: []model.LabelSet{{"__instance__": "3"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for testIndex, testCase := range testCases {
|
for testIndex, testCase := range testCases {
|
||||||
|
|
Loading…
Reference in New Issue