Handle timeout more gracefully in background pings

Added a 2-second default timeout for XMLRPC/extended pings, configurable as [ping,timeout].
No longer repeating the entire ping section if we had an HTTP error during a submission.
For now, dropping the bad item and continuing on with others. (Todo: individual retry and cleaner discards of blacklisted broken-for-now sites.)
This commit is contained in:
Brion Vibber 2010-05-04 18:43:32 -07:00
parent 5f5d9518bd
commit bb94b78e89
2 changed files with 11 additions and 2 deletions

View File

@ -188,7 +188,8 @@ $default =
'cache' => 'cache' =>
array('base' => null), array('base' => null),
'ping' => 'ping' =>
array('notify' => array()), array('notify' => array(),
'timeout' => 2),
'inboxes' => 'inboxes' =>
array('enabled' => true), # ignored after 0.9.x array('enabled' => true), # ignored after 0.9.x
'newuser' => 'newuser' =>

View File

@ -45,7 +45,15 @@ function ping_broadcast_notice($notice) {
$tags)); $tags));
$request = HTTPClient::start(); $request = HTTPClient::start();
$httpResponse = $request->post($notify_url, array('Content-Type: text/xml'), $req); $request->setConfig('connect_timeout', common_config('ping', 'timeout'));
$request->setConfig('timeout', common_config('ping', 'timeout'));
try {
$httpResponse = $request->post($notify_url, array('Content-Type: text/xml'), $req);
} catch (Exception $e) {
common_log(LOG_ERR,
"Exception pinging $notify_url: " . $e->getMessage());
continue;
}
if (!$httpResponse || mb_strlen($httpResponse->getBody()) == 0) { if (!$httpResponse || mb_strlen($httpResponse->getBody()) == 0) {
common_log(LOG_WARNING, common_log(LOG_WARNING,