Retry when range header is set but not 206
This commit is contained in:
@@ -22,7 +22,7 @@ type HTTPClient struct {
|
|||||||
client *http.Client
|
client *http.Client
|
||||||
maxRetries int
|
maxRetries int
|
||||||
backoff func(attempt int) time.Duration
|
backoff func(attempt int) time.Duration
|
||||||
getRetryIncr func(resp *http.Response, err error) int
|
getRetryIncr func(resp *http.Response, hasRangeHeader bool, err error) int
|
||||||
bearerToken string
|
bearerToken string
|
||||||
cfg config.ConfigInterface
|
cfg config.ConfigInterface
|
||||||
ipv6 cmap.ConcurrentMap[string, string]
|
ipv6 cmap.ConcurrentMap[string, string]
|
||||||
@@ -44,11 +44,14 @@ func NewHTTPClient(token string, maxRetries int, timeoutSecs int, cfg config.Con
|
|||||||
}
|
}
|
||||||
return time.Duration(backoff) * time.Second
|
return time.Duration(backoff) * time.Second
|
||||||
},
|
},
|
||||||
getRetryIncr: func(resp *http.Response, err error) int {
|
getRetryIncr: func(resp *http.Response, hasRangeHeader bool, err error) int {
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
if resp.StatusCode == 429 || resp.StatusCode == 400 || resp.StatusCode == 403 {
|
if resp.StatusCode == 429 || resp.StatusCode == 400 || resp.StatusCode == 403 {
|
||||||
return 1 // retry but don't increment attempt
|
return 1 // retry but don't increment attempt
|
||||||
}
|
}
|
||||||
|
if resp.StatusCode != http.StatusPartialContent && hasRangeHeader {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
return 0 // don't retry
|
return 0 // don't retry
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
errStr := err.Error()
|
errStr := err.Error()
|
||||||
@@ -112,13 +115,15 @@ func (r *HTTPClient) Do(req *http.Request) (*http.Response, error) {
|
|||||||
if r.bearerToken != "" {
|
if r.bearerToken != "" {
|
||||||
req.Header.Set("Authorization", "Bearer "+r.bearerToken)
|
req.Header.Set("Authorization", "Bearer "+r.bearerToken)
|
||||||
}
|
}
|
||||||
|
// check if Range header is set
|
||||||
|
hasRangeHeader := req.Header.Get("Range") != ""
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var err error
|
var err error
|
||||||
attempt := 0
|
attempt := 0
|
||||||
for {
|
for {
|
||||||
resp, err = r.client.Do(req)
|
resp, err = r.client.Do(req)
|
||||||
if incr := r.getRetryIncr(resp, err); incr > 0 {
|
if incr := r.getRetryIncr(resp, hasRangeHeader, err); incr > 0 {
|
||||||
attempt += incr
|
attempt += incr
|
||||||
if attempt > r.maxRetries {
|
if attempt > r.maxRetries {
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user