summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-01-28 18:40:38 -0500
committerBrion Vibber <brion@pobox.com>2010-01-28 16:53:37 -0800
commitd13d73c5630244963f0c3bd9db68dd6c6451821a (patch)
tree98885b4e2c3ebecba47ab0d5ebdd84378dd0c726 /classes
parent155a5d446f96651abf3eb62f9b5748e4bdfa0a76 (diff)
Last-chance distribution if enqueueing fails
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);
+ }
+ }
}