private static function isRetryable()

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;
    }