diff options
Diffstat (limited to 'it_url.class')
-rw-r--r-- | it_url.class | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/it_url.class b/it_url.class index a778aed..c2d7faf 100644 --- a/it_url.class +++ b/it_url.class @@ -41,7 +41,7 @@ class it_url var $errstr; /* request error string */ var $curlinfo; - static $retryable = "^(5..)$"; + static $forceretry = "^(5..)$"; /** * Constructor: canonicalize an URL @@ -143,8 +143,7 @@ function _get($p = []) $result = $this->request($p + ['followlocation' => true]); $result = self::_postprocess($result, $p); - # FIXME 2024-07 UM some failures never send errs in request() because retries > 0 - if ($p['retries'] > 0 && ((!$result && !it::match('^(204|4..)$', $this->result)) || it::match(self::$retryable, $this->result))) + if ($p['retries'] > 0 && self::retry_warranted($result, $this->result)) { usleep($p['retrysleep']*1000000); $result = $this->_get(array('retries' => $p['retries'] - 1) + $p); @@ -163,6 +162,11 @@ function _get($p = []) return $result; } +function retry_warranted($result, $status) +{ + return $result ? it::match(self::$forceretry, $status) : !it::match('^(204|4..)$', $status); +} + function parse_http_header($header) { foreach (explode("\n", trim($header)) as $line) @@ -377,7 +381,7 @@ function request($p=array()) fclose($stderr); } - if ($body === false && $p['retries'] <= 0) + if ($body === false && $p['retries'] <= 0 && self::retry_warranted($result, $this->result)) { it::error((array)$p['it_error'] + [ 'title' => "problem " . ($p['method'] ?: "gett") . "ing $url->url: " . $this->errstr, @@ -482,7 +486,7 @@ static function get_multi($p=null) if (!$p['noresults']) $results_unordered[$key] = $content; - if (it::match(self::$retryable, curl_getinfo($handles[$key], CURLINFO_RESPONSE_CODE)) && $retries[$key]++ < $p['retries']) + if (it::match(self::$forceretry, curl_getinfo($handles[$key], CURLINFO_RESPONSE_CODE)) && $retries[$key]++ < $p['retries']) { $sleepuntils[$key] = microtime(true) + $p['retrysleep']; } |