in tools/mc2bq/pkg/backoff/retry.go [22:42]
func RetryUntil(ctx context.Context, backoff Backoff, f func() (done bool, err error)) error {
for {
done, err := f()
if err != nil {
return err
}
if done {
return nil
}
sleepDuration := backoff.Step()
if deadline, ok := ctx.Deadline(); ok {
if time.Now().Add(sleepDuration).After(deadline) {
return context.DeadlineExceeded
}
}
time.Sleep(sleepDuration)
}
}