]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Notice.php
- Fix cache handling in TwitterStatusFetcher
[quix0rs-gnu-social.git] / classes / Notice.php
index 6b364fb5ced82c1acd438489f0bd038d25f75a63..42878d94f1aed2fc7da3c7355d41e9e64ac11268 100644 (file)
@@ -140,7 +140,7 @@ class Notice extends Memcached_DataObject
         foreach(array_unique($hashtags) as $hashtag) {
             /* elide characters we don't want in the tag */
             $this->saveTag($hashtag);
-            self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, $tag->tag);
+            self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, $hashtag);
         }
         return true;
     }
@@ -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;
     }
@@ -1378,8 +1372,6 @@ class Notice extends Memcached_DataObject
         }
 
         $reply->free();
-
-        return $ids;
     }
 
     function clearRepeats()
@@ -1449,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);
+        }
+    }
 }