From 3f64637acf66a92ee46a1987273ad740291d3c99 Mon Sep 17 00:00:00 2001 From: catalinaperalta Date: Wed, 29 Apr 2020 15:03:22 -0400 Subject: [PATCH] Updating RetryAfter on azcore.Response to only return duration (#8666) * Updating RetryAfter on azcore.Response to only return duration * updating doc comment Co-authored-by: Catalina Peralta --- sdk/azcore/policy_retry.go | 4 ++-- sdk/azcore/response.go | 14 +++++++------- sdk/azcore/response_test.go | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sdk/azcore/policy_retry.go b/sdk/azcore/policy_retry.go index ad4e34f2a504..96a82a27216e 100644 --- a/sdk/azcore/policy_retry.go +++ b/sdk/azcore/policy_retry.go @@ -182,8 +182,8 @@ func (p *retryPolicy) Do(ctx context.Context, req *Request) (resp *Response, err } // use the delay from retry-after if available - delay, ok := resp.RetryAfter() - if !ok { + delay := resp.RetryAfter() + if delay <= 0 { delay = options.calcDelay(try) } if shouldLog { diff --git a/sdk/azcore/response.go b/sdk/azcore/response.go index 75b649c5b364..501c035dd2ed 100644 --- a/sdk/azcore/response.go +++ b/sdk/azcore/response.go @@ -96,23 +96,23 @@ func (r *Response) removeBOM() { } } -// RetryAfter returns (non-zero, true) if the response contains a Retry-After header value. -func (r *Response) RetryAfter() (time.Duration, bool) { +// RetryAfter returns non-zero if the response contains a Retry-After header value. +func (r *Response) RetryAfter() time.Duration { if r == nil { - return 0, false + return 0 } ra := r.Header.Get(HeaderRetryAfter) if ra == "" { - return 0, false + return 0 } // retry-after values are expressed in either number of // seconds or an HTTP-date indicating when to try again if retryAfter, _ := strconv.Atoi(ra); retryAfter > 0 { - return time.Duration(retryAfter) * time.Second, true + return time.Duration(retryAfter) * time.Second } else if t, err := time.Parse(time.RFC1123, ra); err == nil { - return t.Sub(time.Now()), true + return t.Sub(time.Now()) } - return 0, false + return 0 } // WriteRequestWithResponse appends a formatted HTTP request into a Buffer. If request and/or err are diff --git a/sdk/azcore/response_test.go b/sdk/azcore/response_test.go index 660a8bc549ee..f55de3a03012 100644 --- a/sdk/azcore/response_test.go +++ b/sdk/azcore/response_test.go @@ -110,12 +110,12 @@ func TestRetryAfter(t *testing.T) { Header: http.Header{}, } resp := Response{raw} - if d, ok := resp.RetryAfter(); ok { + if d := resp.RetryAfter(); d > 0 { t.Fatalf("unexpected retry-after value %d", d) } raw.Header.Set(HeaderRetryAfter, "300") - d, ok := resp.RetryAfter() - if !ok { + d := resp.RetryAfter() + if d <= 0 { t.Fatal("expected retry-after value from seconds") } if d != 300*time.Second { @@ -123,8 +123,8 @@ func TestRetryAfter(t *testing.T) { } atDate := time.Now().Add(600 * time.Second) raw.Header.Set(HeaderRetryAfter, atDate.Format(time.RFC1123)) - d, ok = resp.RetryAfter() - if !ok { + d = resp.RetryAfter() + if d <= 0 { t.Fatal("expected retry-after value from date") } // d will not be exactly 600 seconds but it will be close