use tickers instead of time.After to avoid memory leak (#5220)

Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
This commit is contained in:
Chris O'Haver 2022-03-04 02:36:02 -05:00 committed by GitHub
parent d40d224271
commit 967814161a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 13 deletions

View file

@ -275,19 +275,25 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (onStart func() error, o
k.APIConn.Run()
}()
timeout := time.After(5 * time.Second)
logWaiting := time.After(500 * time.Millisecond)
ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop()
timeout := 5 * time.Second
timeoutTicker := time.NewTicker(timeout)
defer timeoutTicker.Stop()
logDelay := 500 * time.Millisecond
logTicker := time.NewTicker(logDelay)
defer logTicker.Stop()
checkSyncTicker := time.NewTicker(100 * time.Millisecond)
defer checkSyncTicker.Stop()
for {
timeoutTicker.Reset(timeout)
logTicker.Reset(logDelay)
select {
case <-ticker.C:
case <-checkSyncTicker.C:
if k.APIConn.HasSynced() {
return nil
}
case <-logWaiting:
case <-logTicker.C:
log.Info("waiting for Kubernetes API before starting server")
case <-timeout:
case <-timeoutTicker.C:
log.Warning("starting server with unsynced Kubernetes API")
return nil
}