summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@controlyourself.ca>2009-05-28 18:19:22 -0400
committerEvan Prodromou <evan@controlyourself.ca>2009-05-28 18:19:22 -0400
commit3532cd0490a70b54a92108549de6042459fd8469 (patch)
tree13e0aa7b5fd7da79867d304850a27753df212424
parent047038959c068364f2efa030ba63571a492b9cda (diff)
Only enqueue inbox-dependent transports after inboxes have been filled
-rw-r--r--classes/Notice.php2
-rw-r--r--lib/util.php54
-rwxr-xr-xscripts/inboxqueuehandler.php10
3 files changed, 46 insertions, 20 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index 771a4e715..8dd14b3b7 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -195,12 +195,12 @@ class Notice extends Memcached_DataObject
$notice->saveReplies();
$notice->saveTags();
- $notice->saveGroups();
if (common_config('queue', 'enabled')) {
$notice->addToAuthorInbox();
} else {
$notice->addToInboxes();
+ $notice->saveGroups();
}
$notice->query('COMMIT');
diff --git a/lib/util.php b/lib/util.php
index f862d7fcc..214c33279 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -879,7 +879,27 @@ function common_broadcast_notice($notice, $remote=false)
function common_enqueue_notice($notice)
{
- $transports = array('omb', 'sms', 'twitter', 'facebook', 'ping');
+ $transports = array('twitter', 'facebook', 'ping');
+
+ // If inboxes are enabled, wait till inboxes are filled
+ // before doing inbox-dependent broadcasts
+
+ if (common_config('inboxes', 'enabled') === true ||
+ common_config('inboxes', 'enabled') === 'transitional') {
+ $transports[] = 'inbox';
+ } else {
+ $transports = array_merge($transports, common_post_inbox_transports());
+ }
+
+ foreach ($transports as $transport) {
+ common_enqueue_notice_transport($notice, $transport);
+ }
+ return $result;
+}
+
+function common_post_inbox_transports()
+{
+ $transports = array('omb', 'sms');
if (common_config('xmpp', 'enabled')) {
$transports = array_merge($transports, array('jabber', 'public'));
@@ -890,25 +910,23 @@ function common_enqueue_notice($notice)
$transports[] = 'memcache';
}
- if (common_config('inboxes', 'enabled') === true ||
- common_config('inboxes', 'enabled') === 'transitional') {
- $transports[] = 'inbox';
- }
+ return $transports;
+}
- foreach ($transports as $transport) {
- $qi = new Queue_item();
- $qi->notice_id = $notice->id;
- $qi->transport = $transport;
- $qi->created = $notice->created;
- $result = $qi->insert();
- if (!$result) {
- $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
- common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message);
- return false;
- }
- common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport);
+function common_enqueue_notice_transport($notice, $transport)
+{
+ $qi = new Queue_item();
+ $qi->notice_id = $notice->id;
+ $qi->transport = $transport;
+ $qi->created = $notice->created;
+ $result = $qi->insert();
+ if (!$result) {
+ $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
+ common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message);
+ throw new ServerException('DB error inserting queue item: ' . $last_error->message);
}
- return $result;
+ common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport);
+ return true;
}
function common_real_broadcast($notice, $remote=false)
diff --git a/scripts/inboxqueuehandler.php b/scripts/inboxqueuehandler.php
index 73d31e854..c7aab4fe1 100755
--- a/scripts/inboxqueuehandler.php
+++ b/scripts/inboxqueuehandler.php
@@ -41,7 +41,7 @@ class InboxQueueHandler extends QueueHandler
}
function start() {
- $this->log(LOG_INFO, "INITIALIZE");
+ $this->log(LOG_INFO, "Initialize inbox queue handler");
return true;
}
@@ -49,11 +49,19 @@ class InboxQueueHandler extends QueueHandler
{
$this->log(LOG_INFO, "Distributing notice to inboxes for $notice->id");
$notice->addToInboxes();
+ $notice->saveGroups();
$notice->blowSubsCache();
+ $transports = common_post_inbox_transports();
+
+ foreach ($transports as $transport) {
+ common_enqueue_notice_transport($notice, $transport);
+ }
+
return true;
}
function finish() {
+ $this->log(LOG_INFO, "Terminating inbox queue handler");
}
}