]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Last-chance distribution if enqueueing fails
authorEvan Prodromou <evan@status.net>
Thu, 28 Jan 2010 23:40:38 +0000 (18:40 -0500)
committerBrion Vibber <brion@pobox.com>
Fri, 29 Jan 2010 00:53:37 +0000 (16:53 -0800)
classes/Notice.php

index 90e3e76ef33c471fd999a5cff5b54ae819bf8cd8..a60dd5bcd787d614933c554d1f1edeb71f7ba8dd 100644 (file)
@@ -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);
+        }
+    }
 }