Caching for fetched activities

This commit is contained in:
Michael 2022-07-28 19:05:04 +00:00
parent f29d9be574
commit d12c9a8f58
3 changed files with 35 additions and 22 deletions

View File

@ -1201,6 +1201,33 @@ class Processor
Logger::info('Fetched featured posts', ['new' => $new, 'old' => $old, 'contact' => $url]);
}
public static function fetchCachedActivity(string $url, int $uid): array
{
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $uid . ':' . $url;
$object = DI::cache()->get($cachekey);
if (!is_null($object)) {
Logger::debug('Fetch from cache', ['url' => $url, 'uid' => $uid]);
return $object;
}
$object = ActivityPub::fetchContent($url, $uid);
if (empty($object)) {
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
return [];
}
if (empty($object['id'])) {
Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]);
return [];
}
DI::cache()->set($cachekey, $object, Duration::FIVE_MINUTES);
Logger::debug('Activity was fetched successfully', ['url' => $url, 'uid' => $uid]);
return $object;
}
/**
* Fetches missing posts
*
@ -1220,23 +1247,9 @@ class Processor
$uid = 0;
}
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $url;
$object = DI::cache()->get($cachekey);
if (is_null($object)) {
$object = ActivityPub::fetchContent($url, $uid);
if (empty($object)) {
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
return '';
}
if (empty($object['id'])) {
Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]);
return '';
}
DI::cache()->set($cachekey, $object, Duration::FIVE_MINUTES);
} else {
Logger::debug('Fetch from cache', ['url' => $url]);
$object = self::fetchCachedActivity($url, $uid);
if (empty($object)) {
return '';
}
$signer = [];

View File

@ -241,7 +241,7 @@ class Receiver
return 'as:' . $profile['type'];
}
$data = ActivityPub::fetchContent($object_id, $uid);
$data = Processor::fetchCachedActivity($object_id, $uid);
if (!empty($data)) {
$object = JsonLD::compact($data);
$type = JsonLD::fetchElement($object, '@type');
@ -284,7 +284,7 @@ class Receiver
if (!empty($id) && !$trust_source) {
$fetch_uid = $uid ?: self::getBestUserForActivity($activity);
$fetched_activity = ActivityPub::fetchContent($fetch_id, $fetch_uid);
$fetched_activity = Processor::fetchCachedActivity($fetch_id, $fetch_uid);
if (!empty($fetched_activity)) {
$object = JsonLD::compact($fetched_activity);
@ -358,7 +358,7 @@ class Receiver
// Fetch the activity on Lemmy "Announce" messages (announces of activities)
if (($type == 'as:Announce') && in_array($object_type, array_merge(self::ACTIVITY_TYPES, ['as:Delete', 'as:Undo', 'as:Update']))) {
$data = ActivityPub::fetchContent($object_id, $fetch_uid);
$data = Processor::fetchCachedActivity($object_id, $fetch_uid);
if (!empty($data)) {
$type = $object_type;
$activity = JsonLD::compact($data);
@ -1273,7 +1273,7 @@ class Receiver
$type = JsonLD::fetchElement($object, '@type');
if (!$trust_source || empty($type)) {
$data = ActivityPub::fetchContent($object_id, $uid);
$data = Processor::fetchCachedActivity($object_id, $uid);
if (!empty($data)) {
$object = JsonLD::compact($data);
Logger::info('Fetched content for ' . $object_id);

View File

@ -508,7 +508,7 @@ class HTTPSignature
return false;
}
$actor = JsonLD::fetchElement($object, 'actor', 'id');
$actor = JsonLD::fetchElement($object, 'actor', 'id') ?? '';
} else {
$actor = '';
}