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)
 					}
 				}()
 			}