Retry when range header is set but not 206
This commit is contained in:
@@ -22,7 +22,7 @@ type HTTPClient struct {
|
||||
client *http.Client
|
||||
maxRetries int
|
||||
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
|
||||
cfg config.ConfigInterface
|
||||
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
|
||||
},
|
||||
getRetryIncr: func(resp *http.Response, err error) int {
|
||||
getRetryIncr: func(resp *http.Response, hasRangeHeader bool, err error) int {
|
||||
if resp != nil {
|
||||
if resp.StatusCode == 429 || resp.StatusCode == 400 || resp.StatusCode == 403 {
|
||||
return 1 // retry but don't increment attempt
|
||||
}
|
||||
if resp.StatusCode != http.StatusPartialContent && hasRangeHeader {
|
||||
return 1
|
||||
}
|
||||
return 0 // don't retry
|
||||
} else if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -112,13 +115,15 @@ func (r *HTTPClient) Do(req *http.Request) (*http.Response, error) {
|
||||
if 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 err error
|
||||
attempt := 0
|
||||
for {
|
||||
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
|
||||
if attempt > r.maxRetries {
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user