From c2b13e6a042bfa05fe44076c16824f1d6c79a4d9 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin <valyala@victoriametrics.com> Date: Fri, 22 Apr 2022 23:13:33 +0300 Subject: [PATCH] lib/promscrape/discovery/kubernetes: limit the minimum sleep time between updating dependent ScrapeWork objects Previously the sleep time could be dropped to nanoseconds, which could result in CPU time waste --- lib/promscrape/discovery/kubernetes/api_watcher.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/promscrape/discovery/kubernetes/api_watcher.go b/lib/promscrape/discovery/kubernetes/api_watcher.go index debed8567..2fff3f249 100644 --- a/lib/promscrape/discovery/kubernetes/api_watcher.go +++ b/lib/promscrape/discovery/kubernetes/api_watcher.go @@ -304,7 +304,8 @@ func (gw *groupWatcher) startWatchersForRole(role string, aw *apiWatcher) { // as soon as the objects they depend on are updated. // This should fix https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1240 . go func() { - sleepTime := 20 * time.Second + const minSleepTime = 5 * time.Second + sleepTime := minSleepTime for { time.Sleep(sleepTime) startTime := time.Now() @@ -312,9 +313,12 @@ func (gw *groupWatcher) startWatchersForRole(role string, aw *apiWatcher) { if uw.needUpdateScrapeWorks { uw.needUpdateScrapeWorks = false uw.updateScrapeWorksLocked(uw.objectsByKey, uw.aws) + sleepTime = time.Since(startTime) + if sleepTime < minSleepTime { + sleepTime = minSleepTime + } } gw.mu.Unlock() - sleepTime = time.Since(startTime) } }() }