func RetryUntil()

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