mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-09 23:24:05 -08:00
fix(discovery): prevent the manager from storing stale targetGroups
Some checks failed
buf.build / lint and publish (push) Has been cancelled
CI / Go tests (push) Has been cancelled
CI / More Go tests (push) Has been cancelled
CI / Go tests with previous Go version (push) Has been cancelled
CI / UI tests (push) Has been cancelled
CI / Go tests on Windows (push) Has been cancelled
CI / Mixins tests (push) Has been cancelled
CI / Build Prometheus for common architectures (0) (push) Has been cancelled
CI / Build Prometheus for common architectures (1) (push) Has been cancelled
CI / Build Prometheus for common architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (0) (push) Has been cancelled
CI / Build Prometheus for all architectures (1) (push) Has been cancelled
CI / Build Prometheus for all architectures (10) (push) Has been cancelled
CI / Build Prometheus for all architectures (11) (push) Has been cancelled
CI / Build Prometheus for all architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (3) (push) Has been cancelled
CI / Build Prometheus for all architectures (4) (push) Has been cancelled
CI / Build Prometheus for all architectures (5) (push) Has been cancelled
CI / Build Prometheus for all architectures (6) (push) Has been cancelled
CI / Build Prometheus for all architectures (7) (push) Has been cancelled
CI / Build Prometheus for all architectures (8) (push) Has been cancelled
CI / Build Prometheus for all architectures (9) (push) Has been cancelled
CI / Check generated parser (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / fuzzing (push) Has been cancelled
CI / codeql (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CI / Report status of build Prometheus for all architectures (push) Has been cancelled
CI / Publish main branch artifacts (push) Has been cancelled
CI / Publish release artefacts (push) Has been cancelled
CI / Publish UI on npm Registry (push) Has been cancelled
Some checks failed
buf.build / lint and publish (push) Has been cancelled
CI / Go tests (push) Has been cancelled
CI / More Go tests (push) Has been cancelled
CI / Go tests with previous Go version (push) Has been cancelled
CI / UI tests (push) Has been cancelled
CI / Go tests on Windows (push) Has been cancelled
CI / Mixins tests (push) Has been cancelled
CI / Build Prometheus for common architectures (0) (push) Has been cancelled
CI / Build Prometheus for common architectures (1) (push) Has been cancelled
CI / Build Prometheus for common architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (0) (push) Has been cancelled
CI / Build Prometheus for all architectures (1) (push) Has been cancelled
CI / Build Prometheus for all architectures (10) (push) Has been cancelled
CI / Build Prometheus for all architectures (11) (push) Has been cancelled
CI / Build Prometheus for all architectures (2) (push) Has been cancelled
CI / Build Prometheus for all architectures (3) (push) Has been cancelled
CI / Build Prometheus for all architectures (4) (push) Has been cancelled
CI / Build Prometheus for all architectures (5) (push) Has been cancelled
CI / Build Prometheus for all architectures (6) (push) Has been cancelled
CI / Build Prometheus for all architectures (7) (push) Has been cancelled
CI / Build Prometheus for all architectures (8) (push) Has been cancelled
CI / Build Prometheus for all architectures (9) (push) Has been cancelled
CI / Check generated parser (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / fuzzing (push) Has been cancelled
CI / codeql (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CI / Report status of build Prometheus for all architectures (push) Has been cancelled
CI / Publish main branch artifacts (push) Has been cancelled
CI / Publish release artefacts (push) Has been cancelled
CI / Publish UI on npm Registry (push) Has been cancelled
Signed-off-by: machine424 <ayoubmrini424@gmail.com>
This commit is contained in:
parent
d63f5b35df
commit
d23d196db5
|
@ -394,8 +394,16 @@ func (m *Manager) updateGroup(poolKey poolKey, tgs []*targetgroup.Group) {
|
||||||
m.targets[poolKey] = make(map[string]*targetgroup.Group)
|
m.targets[poolKey] = make(map[string]*targetgroup.Group)
|
||||||
}
|
}
|
||||||
for _, tg := range tgs {
|
for _, tg := range tgs {
|
||||||
if tg != nil { // Some Discoverers send nil target group so need to check for it to avoid panics.
|
// Some Discoverers send nil target group so need to check for it to avoid panics.
|
||||||
|
if tg == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if len(tg.Targets) > 0 {
|
||||||
m.targets[poolKey][tg.Source] = tg
|
m.targets[poolKey][tg.Source] = tg
|
||||||
|
} else {
|
||||||
|
// The target group is empty, drop the corresponding entry to avoid leaks.
|
||||||
|
// In case the group yielded targets before, allGroups() will take care of making consumers drop them.
|
||||||
|
delete(m.targets[poolKey], tg.Source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1051,8 +1051,8 @@ func TestDiscovererConfigs(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestTargetSetRecreatesEmptyStaticConfigs ensures that reloading a config file after
|
// TestTargetSetRecreatesEmptyStaticConfigs ensures that reloading a config file after
|
||||||
// removing all targets from the static_configs sends an update with empty targetGroups.
|
// removing all targets from the static_configs cleans the corresponding targetGroups entries to avoid leaks and sends an empty update.
|
||||||
// This is required to signal the receiver that this target set has no current targets.
|
// The update is required to signal the consumers that the previous targets should be dropped.
|
||||||
func TestTargetSetRecreatesEmptyStaticConfigs(t *testing.T) {
|
func TestTargetSetRecreatesEmptyStaticConfigs(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -1085,16 +1085,14 @@ func TestTargetSetRecreatesEmptyStaticConfigs(t *testing.T) {
|
||||||
discoveryManager.ApplyConfig(c)
|
discoveryManager.ApplyConfig(c)
|
||||||
|
|
||||||
syncedTargets = <-discoveryManager.SyncCh()
|
syncedTargets = <-discoveryManager.SyncCh()
|
||||||
|
require.Len(t, discoveryManager.targets, 1)
|
||||||
p = pk("static", "prometheus", 1)
|
p = pk("static", "prometheus", 1)
|
||||||
targetGroups, ok := discoveryManager.targets[p]
|
targetGroups, ok := discoveryManager.targets[p]
|
||||||
require.True(t, ok, "'%v' should be present in target groups", p)
|
require.True(t, ok, "'%v' should be present in targets", p)
|
||||||
group, ok := targetGroups[""]
|
// Otherwise the targetGroups will leak, see https://github.com/prometheus/prometheus/issues/12436.
|
||||||
require.True(t, ok, "missing '' key in target groups %v", targetGroups)
|
require.Empty(t, targetGroups, 0, "'%v' should no longer have any associated target groups", p)
|
||||||
|
require.Len(t, syncedTargets, 1, "an update with no targetGroups should still be sent.")
|
||||||
require.Empty(t, group.Targets, "Invalid number of targets.")
|
require.Empty(t, syncedTargets["prometheus"], 0)
|
||||||
require.Len(t, syncedTargets, 1)
|
|
||||||
require.Len(t, syncedTargets["prometheus"], 1)
|
|
||||||
require.Nil(t, syncedTargets["prometheus"][0].Labels)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIdenticalConfigurationsAreCoalesced(t *testing.T) {
|
func TestIdenticalConfigurationsAreCoalesced(t *testing.T) {
|
||||||
|
|
|
@ -1178,7 +1178,7 @@ scrape_configs:
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestOnlyStaleTargetsAreDropped makes sure that when a job has multiple providers, when aone of them should no,
|
// TestOnlyStaleTargetsAreDropped makes sure that when a job has multiple providers, when one of them should no
|
||||||
// longer discover targets, only the stale targets of that provier are dropped.
|
// longer discover targets, only the stale targets of that provier are dropped.
|
||||||
func TestOnlyStaleTargetsAreDropped(t *testing.T) {
|
func TestOnlyStaleTargetsAreDropped(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
Loading…
Reference in a new issue