diff --git a/pkg/http/client.go b/pkg/http/client.go index 127a099..29af2bb 100644 --- a/pkg/http/client.go +++ b/pkg/http/client.go @@ -67,7 +67,7 @@ func NewHTTPClient( client: &http.Client{}, maxRetries: maxRetries, timeoutSecs: timeoutSecs, - rateLimitSleepSecs: 4, + rateLimitSleepSecs: 1, backoff: backoffFunc, dnsCache: cmap.New[string](), hosts: hosts, @@ -269,14 +269,20 @@ func (r *HTTPClient) shouldRetry(req *http.Request, resp *http.Response, err err time.Sleep(secs) return true case -1: // Internal error - if attempts >= r.maxRetries { - r.log.Debugf("RD Internal error, attempt #%d", attempts+1) - return false - } secs := r.backoff(attempts, 1) r.log.Debugf("RD Internal error, attempt #%d, retrying in %d seconds", attempts+1, secs/time.Second) time.Sleep(secs) return true + case 429: + secs := r.backoff(attempts, rateLimitSleep) + r.log.Debugf("API rate limit reached, attempt #%d, retrying in %d seconds", attempts+1, secs/time.Second) + time.Sleep(secs) + return true + case 503: + secs := r.backoff(attempts, rateLimitSleep) + r.log.Debugf("RD Service Unavailable, attempt #%d, retrying in %d seconds", attempts+1, secs/time.Second) + time.Sleep(secs) + return true default: return false } @@ -319,7 +325,7 @@ func (r *HTTPClient) shouldRetry(req *http.Request, resp *http.Response, err err func backoffFunc(attempt, base int) time.Duration { maxDuration := 60 - backoff := int(math.Pow(float64(base), float64(attempt+1))) + backoff := base * int(math.Pow(2, float64(attempt))) if backoff > maxDuration { backoff = maxDuration }