summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-01-28 16:55:37 -0800
committerBrion Vibber <brion@pobox.com>2010-01-28 16:55:37 -0800
commitda34de74fece355785710bc4ff0bab03389a2877 (patch)
treec6830f8edcae1cc508fd7cf32a1f6e6ff59ba580 /classes
parent63a0e84a8b94d84b106431b648ec76e2537ab9c6 (diff)
parentd13d73c5630244963f0c3bd9db68dd6c6451821a (diff)
Merge branch 'testing'
Diffstat (limited to 'classes')
-rw-r--r--classes/Notice.php35
1 files changed, 28 insertions, 7 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index 90e3e76ef..a60dd5bcd 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -326,13 +326,7 @@ class Notice extends Memcached_DataObject
# XXX: someone clever could prepend instead of clearing the cache
$notice->blowOnInsert();
- if (common_config('queue', 'inboxes')) {
- $qm = QueueManager::get();
- $qm->enqueue($notice, 'distrib');
- } else {
- $handler = new DistribQueueHandler();
- $handler->handle($notice);
- }
+ $notice->distribute();
return $notice;
}
@@ -1447,4 +1441,31 @@ class Notice extends Memcached_DataObject
$gi->free();
}
+
+ function distribute()
+ {
+ if (common_config('queue', 'inboxes')) {
+ // If there's a failure, we want to _force_
+ // distribution at this point.
+ try {
+ $qm = QueueManager::get();
+ $qm->enqueue($this, 'distrib');
+ } catch (Exception $e) {
+ // If the exception isn't transient, this
+ // may throw more exceptions as DQH does
+ // its own enqueueing. So, we ignore them!
+ try {
+ $handler = new DistribQueueHandler();
+ $handler->handle($this);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "emergency redistribution resulted in " . $e->getMessage());
+ }
+ // Re-throw so somebody smarter can handle it.
+ throw $e;
+ }
+ } else {
+ $handler = new DistribQueueHandler();
+ $handler->handle($this);
+ }
+ }
}