critical notifier fix to make diaspora delivery work reliably again. If everything breaks revert or debug.

This commit is contained in:
friendica 2014-12-17 01:50:43 -08:00
parent f113984d69
commit eebb6f23fb
2 changed files with 12 additions and 19 deletions

View File

@ -493,40 +493,33 @@ function notifier_run($argv, $argc){
$r = q("select hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host from hubloc $r = q("select hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host from hubloc
where hubloc_hash in (" . implode(',',$recipients) . ") group by hubloc_sitekey order by hubloc_connected desc limit 1"); where hubloc_hash in (" . implode(',',$recipients) . ") order by hubloc_connected desc limit 1");
} }
else { else {
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
$r = q("select distinct on (hubloc_sitekey) hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host from hubloc
where hubloc_hash in (" . implode(',',$recipients) . ") and not (hubloc_flags & %d)>0 and not (hubloc_status & %d)>0",
intval(HUBLOC_FLAGS_DELETED),
intval(HUBLOC_OFFLINE)
);
} else {
$r = q("select hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host from hubloc $r = q("select hubloc_guid, hubloc_url, hubloc_sitekey, hubloc_network, hubloc_flags, hubloc_callback, hubloc_host from hubloc
where hubloc_hash in (" . implode(',',$recipients) . ") and not (hubloc_flags & %d)>0 and not (hubloc_status & %d)>0 group by hubloc_sitekey", where hubloc_hash in (" . implode(',',$recipients) . ") and not (hubloc_flags & %d) > 0 and not (hubloc_status & %d) > 0",
intval(HUBLOC_FLAGS_DELETED), intval(HUBLOC_FLAGS_DELETED),
intval(HUBLOC_OFFLINE) intval(HUBLOC_OFFLINE)
); );
}
} }
if(! $r) { if(! $r) {
logger('notifier: no hubs'); logger('notifier: no hubs');
return; return;
} }
$hubs = $r; $hubs = $r;
$hublist = array(); $hublist = array();
$dhubs = array();
$keys = array(); $keys = array();
foreach($hubs as $hub) { foreach($hubs as $hub) {
// don't try to deliver to deleted hublocs - and inexplicably SQL "distinct" and "group by" if((! $hub['hubloc_sitekey']) || (! in_array($hub['hubloc_sitekey'],$keys))) {
// both return records with duplicate keys in rare circumstances
// FIXME this is probably redundant now.
if((! ($hub['hubloc_flags'] & HUBLOC_FLAGS_DELETED)) && (! in_array($hub['hubloc_sitekey'],$keys))) {
$hublist[] = $hub['hubloc_host']; $hublist[] = $hub['hubloc_host'];
$keys[] = $hub['hubloc_sitekey']; $dhubs[] = $hub;
if($hub['hubloc_sitekey'])
$keys[] = $hub['hubloc_sitekey'];
} }
} }
@ -542,7 +535,7 @@ function notifier_run($argv, $argc){
$deliver = array(); $deliver = array();
foreach($hubs as $hub) { foreach($dhubs as $hub) {
if(defined('DIASPORA_RELIABILITY_EMULATION')) { if(defined('DIASPORA_RELIABILITY_EMULATION')) {
$cointoss = mt_rand(0,2); $cointoss = mt_rand(0,2);

View File

@ -1 +1 @@
2014-12-16.891 2014-12-17.892