Merge pull request #11789 from annando/fetchactivity

Caching for fetched activities
This commit is contained in:
Philipp 2022-07-28 22:13:04 +02:00 committed by GitHub
commit d693bc1b2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 22 deletions

View File

@ -1201,6 +1201,33 @@ class Processor
Logger::info('Fetched featured posts', ['new' => $new, 'old' => $old, 'contact' => $url]); 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 * Fetches missing posts
* *
@ -1220,25 +1247,11 @@ class Processor
$uid = 0; $uid = 0;
} }
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $url; $object = self::fetchCachedActivity($url, $uid);
$object = DI::cache()->get($cachekey);
if (is_null($object)) {
$object = ActivityPub::fetchContent($url, $uid);
if (empty($object)) { if (empty($object)) {
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
return ''; 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]);
}
$signer = []; $signer = [];
if (!empty($object['attributedTo'])) { if (!empty($object['attributedTo'])) {

View File

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

View File

@ -797,6 +797,7 @@ class OStatus
} }
if ($xml != '') { if ($xml != '') {
$hub = '';
self::process($xml, $importer, $contact, $hub, $stored, false, Conversation::PULL); self::process($xml, $importer, $contact, $hub, $stored, false, Conversation::PULL);
} else { } else {
Logger::info('XML could not be fetched for URI: ' . $related_uri . ' - href: ' . $related); Logger::info('XML could not be fetched for URI: ' . $related_uri . ' - href: ' . $related);

View File

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