in src/RetryMiddleware.php [119:193]
private static function isRetryable(
$result,
$error,
$retryCurlErrors,
$extraConfig = []
) {
$errorCodes = self::$retryCodes;
if (!empty($extraConfig['error_codes'])
&& is_array($extraConfig['error_codes'])
) {
foreach($extraConfig['error_codes'] as $code) {
$errorCodes[$code] = true;
}
}
$statusCodes = self::$retryStatusCodes;
if (!empty($extraConfig['status_codes'])
&& is_array($extraConfig['status_codes'])
) {
foreach($extraConfig['status_codes'] as $code) {
$statusCodes[$code] = true;
}
}
if (!empty($extraConfig['curl_errors'])
&& is_array($extraConfig['curl_errors'])
) {
foreach($extraConfig['curl_errors'] as $code) {
$retryCurlErrors[$code] = true;
}
}
if (!$error) {
if (!isset($result['@metadata']['statusCode'])) {
return false;
}
return isset($statusCodes[$result['@metadata']['statusCode']]);
}
if (!($error instanceof AwsException)) {
return false;
}
if ($error->isConnectionError()) {
return true;
}
if (isset($errorCodes[$error->getAwsErrorCode()])) {
return true;
}
if (isset($statusCodes[$error->getStatusCode()])) {
return true;
}
if (count($retryCurlErrors)
&& ($previous = $error->getPrevious())
&& $previous instanceof RequestException
) {
if (method_exists($previous, 'getHandlerContext')) {
$context = $previous->getHandlerContext();
return !empty($context['errno'])
&& isset($retryCurlErrors[$context['errno']]);
}
$message = $previous->getMessage();
foreach (array_keys($retryCurlErrors) as $curlError) {
if (strpos($message, 'cURL error ' . $curlError . ':') === 0) {
return true;
}
}
}
return false;
}