diff options
author | Evan Prodromou <evan@status.net> | 2010-01-28 18:40:38 -0500 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-01-28 16:53:37 -0800 |
commit | d13d73c5630244963f0c3bd9db68dd6c6451821a (patch) | |
tree | 98885b4e2c3ebecba47ab0d5ebdd84378dd0c726 /classes | |
parent | 155a5d446f96651abf3eb62f9b5748e4bdfa0a76 (diff) |
Last-chance distribution if enqueueing fails
Diffstat (limited to 'classes')
-rw-r--r-- | classes/Notice.php | 35 |
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); + } + } } |