func RetryWithBackoffCtx()

in pkg/utils/utils.go [65:83]


func RetryWithBackoffCtx(ctx context.Context, backoff Backoff, fn func() error) error {
	var err error
	for {
		select {
		case <-ctx.Done():
			return ctx.Err()
		default:
		}

		err = fn()
		retriableErr, isRetriableErr := err.(Retriable)
		if err == nil || (isRetriableErr && !retriableErr.Retry()) {
			return err
		}

		time.Sleep(backoff.Duration())
	}
	return err
}