Skip enqueueing to outgoing bridges on incoming remote messages. Twitter, Facebook, RSSCloud, and OStatus checks were enqueued on these when they'd never do anything but churn the queue servers.

Notice::isLocal() can replace a number of manual checks for $notice->is_local being LOCAL_PUBLIC or LOCAL_NONPUBLIC.
This commit is contained in:
Brion Vibber 2010-06-03 16:58:45 -07:00
parent 791b98046d
commit 5f4c6ec626
6 changed files with 23 additions and 22 deletions

View File

@ -1861,4 +1861,16 @@ class Notice extends Memcached_DataObject
return $ns; return $ns;
} }
/**
* Determine whether the notice was locally created
*
* @return boolean locality
*/
public function isLocal()
{
return ($this->is_local == Notice::LOCAL_PUBLIC ||
$this->is_local == Notice::LOCAL_NONPUBLIC);
}
} }

View File

@ -1235,9 +1235,8 @@ function common_enqueue_notice($notice)
$transports[] = 'jabber'; $transports[] = 'jabber';
} }
// @fixme move these checks into QueueManager and/or individual handlers // We can skip these for gatewayed notices.
if ($notice->is_local == Notice::LOCAL_PUBLIC || if ($notice->isLocal()) {
$notice->is_local == Notice::LOCAL_NONPUBLIC) {
$transports = array_merge($transports, $localTransports); $transports = array_merge($transports, $localTransports);
if ($xmpp) { if ($xmpp) {
$transports[] = 'public'; $transports[] = 'public';

View File

@ -585,7 +585,7 @@ class FacebookPlugin extends Plugin
function onStartEnqueueNotice($notice, &$transports) function onStartEnqueueNotice($notice, &$transports)
{ {
if (self::hasKeys()) { if (self::hasKeys() && $notice->isLocal()) {
array_push($transports, 'facebook'); array_push($transports, 'facebook');
} }
return true; return true;

View File

@ -102,8 +102,10 @@ class OStatusPlugin extends Plugin
*/ */
function onStartEnqueueNotice($notice, &$transports) function onStartEnqueueNotice($notice, &$transports)
{ {
if ($notice->isLocal()) {
// put our transport first, in case there's any conflict (like OMB) // put our transport first, in case there's any conflict (like OMB)
array_unshift($transports, 'ostatus'); array_unshift($transports, 'ostatus');
}
return true; return true;
} }

View File

@ -192,22 +192,10 @@ class RSSCloudPlugin extends Plugin
function onStartEnqueueNotice($notice, &$transports) function onStartEnqueueNotice($notice, &$transports)
{ {
if ($notice->isLocal()) {
array_push($transports, 'rsscloud'); array_push($transports, 'rsscloud');
return true;
} }
return true;
/**
* Determine whether the notice was locally created
*
* @param Notice $notice the notice in question
*
* @return boolean locality
*/
function _isLocal($notice)
{
return ($notice->is_local == Notice::LOCAL_PUBLIC ||
$notice->is_local == Notice::LOCAL_NONPUBLIC);
} }
/** /**

View File

@ -221,7 +221,7 @@ class TwitterBridgePlugin extends Plugin
*/ */
function onStartEnqueueNotice($notice, &$transports) function onStartEnqueueNotice($notice, &$transports)
{ {
if (self::hasKeys()) { if (self::hasKeys() && $notice->isLocal()) {
// Avoid a possible loop // Avoid a possible loop
if ($notice->source != 'twitter') { if ($notice->source != 'twitter') {
array_push($transports, 'twitter'); array_push($transports, 'twitter');