crowdsecurity/crowdsec · error
retryable status: %d
Error message
retryable status: %d
What it means
The retry transport converts a retryable HTTP status (429, 500, 503, 504) into this error and retries with backoff; it surfaces when all attempts returned such statuses. The status code is in the message.
Source
Thrown at pkg/apiclient/auth_retry.go:69
attemptLeft := maxAttempts
operation := func() (*http.Response, error) {
clonedReq := cloneRequest(req)
attemptLeft--
resp, err := r.next.RoundTrip(clonedReq)
if err != nil {
if attemptLeft > 0 {
log.Errorf("while performing request: %s; %d retries left", err, attemptLeft)
}
return nil, fmt.Errorf("retryable error: %w", err)
}
if r.shouldRetry(resp.StatusCode) {
log.Errorf("request returned status %d: %s; %d retries left", resp.StatusCode, resp.Status, attemptLeft)
return nil, fmt.Errorf("retryable status: %d", resp.StatusCode)
}
return resp, nil
}
resp, err := backoff.Retry(req.Context(), operation,
backoff.WithBackOff(bo),
backoff.WithMaxTries(maxAttempts),
)
if err != nil {
return nil, err
}
return resp, nil
}
View on GitHub (pinned to 909b515798)
Solutions
- Check LAPI health/logs for the failing status (often 429 rate-limiting or 503 overload)
- Reduce request rate or increase backoff
- Retry after the server recovers
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at pkg/apiclient/auth_retry.go:69 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of crowdsecurity/crowdsec@909b515798 (2026-09-06).
Data as JSON: /api/errors/f7c908f3ab08b61f.
Report an issue: GitHub.