summaryrefslogtreecommitdiff
path: root/it_url.class
diff options
context:
space:
mode:
Diffstat (limited to 'it_url.class')
-rw-r--r--it_url.class14
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'];
}