lib/promscrape/discovery/kubernetes: fix deadlock in startWatcherForURL

reloadObjects must be called without holding aw.mu lock
This commit is contained in:
Aliaksandr Valialkin 2021-02-28 15:25:30 +02:00
parent e77f2f8630
commit 5c9e657808

View file

@ -217,14 +217,16 @@ func (aw *apiWatcher) startWatchersForRole(role string) {
func (aw *apiWatcher) startWatcherForURL(role, apiURL string, parseObject parseObjectFunc, parseObjectList parseObjectListFunc) {
aw.mu.Lock()
defer aw.mu.Unlock()
if aw.watchersByURL[apiURL] != nil {
// Watcher for the given path already exists.
aw.mu.Unlock()
return
}
uw := aw.newURLWatcher(role, apiURL, parseObject, parseObjectList)
resourceVersion := uw.reloadObjects()
aw.watchersByURL[apiURL] = uw
aw.mu.Unlock()
resourceVersion := uw.reloadObjects()
go func() {
uw.watchForUpdates(resourceVersion)
aw.mu.Lock()