Cache the AP delivery process

This commit is contained in:
Michael 2018-10-05 21:00:40 +00:00
parent be7bd10678
commit 51dbffd396
3 changed files with 34 additions and 3 deletions

View file

@ -22,6 +22,7 @@ use Friendica\Model\Profile;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Object\Image; use Friendica\Object\Image;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Core\Cache;
/** /**
* @brief ActivityPub Transmitter Protocol class * @brief ActivityPub Transmitter Protocol class
@ -480,6 +481,27 @@ class Transmitter
return $type; 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 * @brief Creates an activity array for a given item id
* *

View file

@ -11,6 +11,14 @@ use Friendica\Util\HTTPSignature;
class APDelivery extends BaseObject 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) public static function execute($cmd, $item_id, $inbox, $uid)
{ {
logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG); logger('Invoked: ' . $cmd . ': ' . $item_id . ' to ' . $inbox, LOGGER_DEBUG);
@ -23,12 +31,10 @@ class APDelivery extends BaseObject
} elseif ($cmd == Delivery::PROFILEUPDATE) { } elseif ($cmd == Delivery::PROFILEUPDATE) {
ActivityPub\Transmitter::sendProfileUpdate($uid, $inbox); ActivityPub\Transmitter::sendProfileUpdate($uid, $inbox);
} else { } else {
$data = ActivityPub\Transmitter::createActivityFromItem($item_id); $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
if (!empty($data)) { if (!empty($data)) {
HTTPSignature::transmit($data, $inbox, $uid); HTTPSignature::transmit($data, $inbox, $uid);
} }
} }
return;
} }
} }

View file

@ -433,6 +433,9 @@ class Notifier
$inboxes = array_merge($inboxes, $parent_inboxes); $inboxes = array_merge($inboxes, $parent_inboxes);
} }
// Fill the item cache
ActivityPub\Transmitter::createCachedActivityFromItem($item_id);
foreach ($inboxes as $inbox) { foreach ($inboxes as $inbox) {
logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG); logger('Deliver ' . $item_id .' to ' . $inbox .' via ActivityPub', LOGGER_DEBUG);