Merge pull request #5829 from annando/develop

Cache the AP delivery process
This commit is contained in:
Hypolite Petovan 2018-10-06 00:06:47 -04:00 committed by GitHub
commit 13c5bc807b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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\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
*

View 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;
}
}

View 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);