shouldRetry function
RetryDecision
shouldRetry({
- required ApiError error,
- required RetryContext context,
- required RetryConfig config,
Determine whether an error should be retried.
Implementation
RetryDecision shouldRetry({
required ApiError error,
required RetryContext context,
required RetryConfig config,
}) {
// Never retry auth or content errors
if (!error.isRetryable) {
return RetryDecision.abort(error.message);
}
// Check 529 limit
if (error.type == ApiErrorType.overloaded) {
context.consecutive529s++;
if (context.consecutive529s > config.max529Retries && !config.persistent) {
return RetryDecision.abort(repeated529ErrorMessage);
}
} else {
context.consecutive529s = 0;
}
// Check max retries
if (context.attempt >= config.maxRetries && !config.persistent) {
return RetryDecision.abort(
'Max retries (${config.maxRetries}) exceeded: ${error.message}',
);
}
final delay = calculateRetryDelay(
attempt: context.attempt,
config: config,
retryAfterHeader: error.retryAfter,
);
return RetryDecision.retry(delay);
}