diff --git a/clientutil/retry.go b/clientutil/retry.go index 42730d258bb4c90f88b35ce32cd30df334461e01..ae5159f1cc0b053d4ae54d6c7c8d2b68834b7bda 100644 --- a/clientutil/retry.go +++ b/clientutil/retry.go @@ -9,6 +9,8 @@ import ( "github.com/cenkalti/backoff" ) +// NewExponentialBackOff creates a backoff.ExponentialBackOff object +// with our own default values. func NewExponentialBackOff() *backoff.ExponentialBackOff { b := backoff.NewExponentialBackOff() b.InitialInterval = 100 * time.Millisecond @@ -16,6 +18,7 @@ func NewExponentialBackOff() *backoff.ExponentialBackOff { return b } +// Retry operation op until it succeeds according to the backoff policy b. func Retry(op backoff.Operation, b backoff.BackOff) error { innerOp := func() error { err := op() @@ -32,6 +35,10 @@ func Retry(op backoff.Operation, b backoff.BackOff) error { var errHTTPBackOff = errors.New("http status 503") +// RetryHTTPDo retries an HTTP request until it succeeds, according to +// the backoff policy b. It will retry on temporary network errors and +// upon receiving specific throttling HTTP errors (currently just +// status code 503). func RetryHTTPDo(client *http.Client, req *http.Request, b backoff.BackOff) (*http.Response, error) { var resp *http.Response op := func() error {