]> git.mxchange.org Git - friendica.git/commitdiff
Cache the AP delivery process
authorMichael <heluecht@pirati.ca>
Fri, 5 Oct 2018 21:00:40 +0000 (21:00 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 5 Oct 2018 21:00:40 +0000 (21:00 +0000)
src/Protocol/ActivityPub/Transmitter.php
src/Worker/APDelivery.php
src/Worker/Notifier.php

index bfbd9f9b4e05d28be5eb0de2564f0d08592f235a..77688233a8fd84412e3a2cb5da36beee8a01edaf 100644 (file)
@@ -22,6 +22,7 @@ use Friendica\Model\Profile;
 use Friendica\Core\Config;
 use Friendica\Object\Image;
 use Friendica\Protocol\ActivityPub;
+use Friendica\Core\Cache;
 
 /**
  * @brief ActivityPub Transmitter Protocol class
@@ -480,6 +481,27 @@ class Transmitter
                return $type;
        }
 
+       /**
+        * @brief Creates the activity or fetches it from the cache
+        *
+        * @param integer $item_id
+        *
+        * @return array with the activity
+        */
+       public static function createCachedActivityFromItem($item_id)
+       {
+               $cachekey = "APDelivery:createActivity:".$item_id;
+               $data = Cache::get($cachekey);
+               if (!is_null($data)) {
+                       return $data;
+               }
+
+               $data = ActivityPub\Transmitter::createActivityFromItem($item_id);
+
+               Cache::set($cachekey, $data, CACHE_QUARTER_HOUR);
+               return $data;
+       }
+
        /**
         * @brief Creates an activity array for a given item id
         *
index 3c2eba8d8f6bd8cf2072ceccbf29f26c51254cf0..039cdfbb3b6acec830bd6270a378b5825115eb88 100644 (file)
@@ -11,6 +11,14 @@ use Friendica\Util\HTTPSignature;
 
 class APDelivery extends BaseObject
 {
+       /**
+        * @brief Delivers ActivityPub messages
+        *
+        * @param string $cmd
+        * @param integer $item_id
+        * @param string $inbox
+        * @param integer $uid
+        */
        public static function execute($cmd, $item_id, $inbox, $uid)
        {
                logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG);
@@ -23,12 +31,10 @@ class APDelivery extends BaseObject
                } elseif ($cmd == Delivery::PROFILEUPDATE) {
                        ActivityPub\Transmitter::sendProfileUpdate($uid, $inbox);
                } else {
-                       $data = ActivityPub\Transmitter::createActivityFromItem($item_id);
+                       $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
                        if (!empty($data)) {
                                HTTPSignature::transmit($data, $inbox, $uid);
                        }
                }
-
-               return;
        }
 }
index 8945a958fe284704f9bbefda22346800bba0cbdc..186422b6cc226e1f515d0ede607ea9255d1fcca3 100644 (file)
@@ -433,6 +433,9 @@ class Notifier
                        $inboxes = array_merge($inboxes, $parent_inboxes);
                }
 
+               // Fill the item cache
+               ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
+
                foreach ($inboxes as $inbox) {
                        logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);