mirror of
https://github.com/prometheus/prometheus.git
synced 2025-08-07 06:37:17 +02:00
Merge pull request #16587 from prymitive/discoveryLocks
discovery: Try fixing potential deadlocks in discovery
This commit is contained in:
commit
eb8d34c2ad
@ -306,13 +306,13 @@ func (m *Manager) startProvider(ctx context.Context, p *Provider) {
|
|||||||
|
|
||||||
// cleaner cleans resources associated with provider.
|
// cleaner cleans resources associated with provider.
|
||||||
func (m *Manager) cleaner(p *Provider) {
|
func (m *Manager) cleaner(p *Provider) {
|
||||||
m.targetsMtx.Lock()
|
|
||||||
p.mu.RLock()
|
p.mu.RLock()
|
||||||
|
m.targetsMtx.Lock()
|
||||||
for s := range p.subs {
|
for s := range p.subs {
|
||||||
delete(m.targets, poolKey{s, p.name})
|
delete(m.targets, poolKey{s, p.name})
|
||||||
}
|
}
|
||||||
p.mu.RUnlock()
|
|
||||||
m.targetsMtx.Unlock()
|
m.targetsMtx.Unlock()
|
||||||
|
p.mu.RUnlock()
|
||||||
if p.done != nil {
|
if p.done != nil {
|
||||||
p.done()
|
p.done()
|
||||||
}
|
}
|
||||||
@ -413,9 +413,9 @@ func (m *Manager) allGroups() map[string][]*targetgroup.Group {
|
|||||||
n := map[string]int{}
|
n := map[string]int{}
|
||||||
|
|
||||||
m.mtx.RLock()
|
m.mtx.RLock()
|
||||||
m.targetsMtx.Lock()
|
|
||||||
for _, p := range m.providers {
|
for _, p := range m.providers {
|
||||||
p.mu.RLock()
|
p.mu.RLock()
|
||||||
|
m.targetsMtx.Lock()
|
||||||
for s := range p.subs {
|
for s := range p.subs {
|
||||||
// Send empty lists for subs without any targets to make sure old stale targets are dropped by consumers.
|
// Send empty lists for subs without any targets to make sure old stale targets are dropped by consumers.
|
||||||
// See: https://github.com/prometheus/prometheus/issues/12858 for details.
|
// See: https://github.com/prometheus/prometheus/issues/12858 for details.
|
||||||
@ -430,9 +430,9 @@ func (m *Manager) allGroups() map[string][]*targetgroup.Group {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m.targetsMtx.Unlock()
|
||||||
p.mu.RUnlock()
|
p.mu.RUnlock()
|
||||||
}
|
}
|
||||||
m.targetsMtx.Unlock()
|
|
||||||
m.mtx.RUnlock()
|
m.mtx.RUnlock()
|
||||||
|
|
||||||
for setName, v := range n {
|
for setName, v := range n {
|
||||||
|
Loading…
Reference in New Issue
Block a user