Browse Source

change behavior of flag disable_http_retry_backoff (#2426)

now it does not attempt any retry, instead of attempting all retries
immediately

example: cannot reach LAPI

Before:

$ CROWDSEC_FEATURE_DISABLE_HTTP_RETRY_BACKOFF=true cscli decisions list
ERRO[27-07-2023 10:44:44] error while performing request: dial tcp [::1]:8080: connect: connection refused; 4 retries left
INFO[27-07-2023 10:44:44] retrying in 0 seconds (attempt 2 of 5)
[...]
ERRO[27-07-2023 10:44:44] error while performing request: dial tcp [::1]:8080: connect: connection refused; 1 retries left
INFO[27-07-2023 10:44:44] retrying in 0 seconds (attempt 5 of 5)
ERRO[27-07-2023 10:44:44] error while performing request: dial tcp [::1]:8080: connect: connection refused; 0 retries left
FATA[27-07-2023 10:44:44] Unable to list decisions : performing request: Get "http://localhost:8080/v1/alerts?has_active_decision=true&include_capi=false&limit=100": could not get jwt token: Post "http://localhost:8080/v1/watchers/login": dial tcp [::1]:8080: connect: connection refused

After:

$ CROWDSEC_FEATURE_DISABLE_HTTP_RETRY_BACKOFF=true ./test/local/bin/cscli decisions list
FATA[11-08-2023 16:49:58] unable to retrieve decisions: performing request: Get "http://127.0.0.1:8080/v1/alerts?has_active_decision=true&include_capi=false&limit=100": could not get jwt token: Post "http://127.0.0.1:8080/v1/watchers/login": dial tcp 127.0.0.1:8080: connect: connection refused
mmetc 1 year ago
parent
commit
6a6501691a
1 changed files with 15 additions and 4 deletions
  1. 15 4
      pkg/apiclient/auth.go

+ 15 - 4
pkg/apiclient/auth.go

@@ -96,10 +96,16 @@ func (r retryRoundTripper) ShouldRetry(statusCode int) bool {
 func (r retryRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
 func (r retryRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
 	var resp *http.Response
 	var resp *http.Response
 	var err error
 	var err error
+
 	backoff := 0
 	backoff := 0
-	for i := 0; i < r.maxAttempts; i++ {
+	maxAttempts := r.maxAttempts
+	if fflag.DisableHttpRetryBackoff.IsEnabled() {
+		maxAttempts = 1
+	}
+
+	for i := 0; i < maxAttempts; i++ {
 		if i > 0 {
 		if i > 0 {
-			if r.withBackOff && !fflag.DisableHttpRetryBackoff.IsEnabled() {
+			if r.withBackOff {
 				backoff += 10 + rand.Intn(20)
 				backoff += 10 + rand.Intn(20)
 			}
 			}
 			log.Infof("retrying in %d seconds (attempt %d of %d)", backoff, i+1, r.maxAttempts)
 			log.Infof("retrying in %d seconds (attempt %d of %d)", backoff, i+1, r.maxAttempts)
@@ -115,7 +121,10 @@ func (r retryRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)
 		clonedReq := cloneRequest(req)
 		clonedReq := cloneRequest(req)
 		resp, err = r.next.RoundTrip(clonedReq)
 		resp, err = r.next.RoundTrip(clonedReq)
 		if err != nil {
 		if err != nil {
-			log.Errorf("error while performing request: %s; %d retries left", err, r.maxAttempts-i-1)
+			left := maxAttempts - i - 1
+			if left > 0 {
+				log.Errorf("error while performing request: %s; %d retries left", err, left)
+			}
 			continue
 			continue
 		}
 		}
 		if !r.ShouldRetry(resp.StatusCode) {
 		if !r.ShouldRetry(resp.StatusCode) {
@@ -264,7 +273,9 @@ func (t *JWTTransport) RoundTrip(req *http.Request) (*http.Response, error) {
 		return resp, fmt.Errorf("performing jwt auth: %w", err)
 		return resp, fmt.Errorf("performing jwt auth: %w", err)
 	}
 	}
 
 
-	log.Debugf("resp-jwt: %d", resp.StatusCode)
+	if resp != nil {
+		log.Debugf("resp-jwt: %d", resp.StatusCode)
+	}
 
 
 	return resp, nil
 	return resp, nil
 }
 }