core/zero: fix ticker usage (#4969)

This commit is contained in:
Caleb Doxsey 2024-03-06 14:28:21 -07:00 committed by GitHub
parent 0d2705bebd
commit 67d1362a90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 26 deletions

View file

@ -29,10 +29,6 @@ func Retry(
}) })
watches, backoff := newConfig(opts...) watches, backoff := newConfig(opts...)
ticker := time.NewTicker(backoff.NextBackOff())
defer ticker.Stop()
s := makeSelect(ctx, watches, name, ticker.C, fn)
restart: restart:
for { for {
@ -51,10 +47,11 @@ restart:
backoff: backoff:
for { for {
interval := backoff.NextBackOff() interval := backoff.NextBackOff()
ticker.Reset(interval)
log.Ctx(ctx).Warn().Msgf("backing off for %s...", interval.String()) log.Ctx(ctx).Warn().Msgf("backing off for %s...", interval.String())
timer := time.NewTimer(interval)
s := makeSelect(ctx, watches, name, timer.C, fn)
next, err := s.Exec(ctx) next, err := s.Exec(ctx)
timer.Stop()
logNext(ctx, next, err) logNext(ctx, next, err)
switch next { switch next {
case nextRestart: case nextRestart:

View file

@ -5,7 +5,6 @@ import (
"context" "context"
"fmt" "fmt"
"sync/atomic" "sync/atomic"
"time"
"github.com/cenkalti/backoff/v4" "github.com/cenkalti/backoff/v4"
"github.com/hashicorp/go-multierror" "github.com/hashicorp/go-multierror"
@ -52,28 +51,16 @@ func (svc *Mux) Run(ctx context.Context, opts ...fanout.Option) error {
} }
func (svc *Mux) run(ctx context.Context) error { func (svc *Mux) run(ctx context.Context) error {
bo := backoff.NewExponentialBackOff() b := backoff.NewExponentialBackOff()
bo.MaxElapsedTime = 0 b.MaxElapsedTime = 0
ticker := time.NewTicker(time.Microsecond)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-ticker.C:
}
err := svc.subscribeAndDispatch(ctx, bo.Reset)
if err != nil {
ticker.Reset(bo.NextBackOff())
}
return backoff.Retry(func() error {
err := svc.subscribeAndDispatch(ctx, b.Reset)
if apierror.IsTerminalError(err) { if apierror.IsTerminalError(err) {
return err return backoff.Permanent(err)
} }
} return err
}, backoff.WithContext(b, ctx))
} }
func (svc *Mux) subscribeAndDispatch(ctx context.Context, onConnected func()) (err error) { func (svc *Mux) subscribeAndDispatch(ctx context.Context, onConnected func()) (err error) {