@@ -383,46 +383,48 @@ func (l *limitRegistry) loadOverrides(ctx context.Context) error {
383383 return nil
384384}
385385
386+ // loadOverridesWithRetry tries to loadOverrides, retrying at least every 30
387+ // seconds upon failure, up to a maximum elapsed time interval.
388+ func (l * limitRegistry ) loadOverridesWithRetry (ctx context.Context , interval time.Duration ) error {
389+ retries := 0
390+ started := time .Now ()
391+ for {
392+ err := l .loadOverrides (ctx )
393+ if err != nil {
394+ l .logger .Errf ("loading overrides: %v" , err )
395+ }
396+ if err == nil || time .Since (started ) > interval {
397+ return err
398+ }
399+ retries ++
400+ time .Sleep (core .RetryBackoff (retries , time .Second / 6 , time .Second * 15 , 2 ))
401+ }
402+ }
403+
386404// NewRefresher loads, and periodically refreshes, overrides using this
387405// registry's refreshOverrides function.
388406func (l * limitRegistry ) NewRefresher (interval time.Duration ) context.CancelFunc {
389407 ctx , cancel := context .WithCancel (context .Background ())
390408
391409 go func () {
392- // Load overrides immediately. Upon failure, retry at least every 30
393- // seconds, in case the SA wasn't ready yet.
394- retries := 0
395- started := time .Now ()
396- for {
397- err := l .loadOverrides (ctx )
398- if err != nil {
399- l .logger .Errf ("loading overrides (initial): %v" , err )
400- }
401- // If we've been retrying for an entire interval, back off; we'll
402- // try to refresh next interval.
403- if err == nil || time .Since (started ) > interval {
404- break
405- }
406- retries ++
407- time .Sleep (core .RetryBackoff (retries , time .Second / 6 , time .Second * 15 , 2 ))
410+ err := l .loadOverridesWithRetry (ctx , interval )
411+ if err != nil {
412+ l .logger .Errf ("loading overrides (initial): %v" , err )
408413 }
409414
410- // Now refresh overrides every interval.
411415 ticker := time .NewTicker (interval )
412- go func () {
413- defer ticker .Stop ()
414- for {
415- select {
416- case <- ticker .C :
417- err := l .loadOverrides (ctx )
418- if err != nil {
419- l .logger .Errf ("loading overrides (refresh): %v" , err )
420- }
421- case <- ctx .Done ():
422- return
416+ defer ticker .Stop ()
417+ for {
418+ select {
419+ case <- ticker .C :
420+ err := l .loadOverridesWithRetry (ctx , interval )
421+ if err != nil {
422+ l .logger .Errf ("loading overrides (refresh): %v" , err )
423423 }
424+ case <- ctx .Done ():
425+ return
424426 }
425- }()
427+ }
426428 }()
427429
428430 return cancel
0 commit comments