From c7758331173ec318d5755e943c9abf9eb76a7bcf Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 21 Jul 2022 06:23:55 +0000 Subject: [PATCH] Use deferred tasks --- src/Protocol/ActivityPub/Processor.php | 11 +++++++++-- src/Protocol/ActivityPub/Queue.php | 10 +++++++++- src/Worker/Cron.php | 4 ++-- src/Worker/FetchMissingActivity.php | 10 +++++++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 60793f8026..fe7a4c5967 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -284,9 +284,16 @@ class Processor $recursion_depth = $activity['recursion-depth'] ?? 0; Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]); if ($recursion_depth < 10) { - self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO); + $result = self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO); + $fetch_by_worker = empty($result); } else { - Logger::notice('Recursion level is too high, fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]); + Logger::notice('Recursion level is too high.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]); + $activity['recursion-depth'] = 0; + $fetch_by_worker = true; + } + + if ($fetch_by_worker) { + Logger::notice('Fetching is done by worker.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]); Worker::add(PRIORITY_HIGH, 'FetchMissingActivity', $activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO); return []; } diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php index c3605ebb64..c5cfd522ae 100644 --- a/src/Protocol/ActivityPub/Queue.php +++ b/src/Protocol/ActivityPub/Queue.php @@ -126,8 +126,16 @@ class Queue while ($entry = DBA::fetch($entries)) { self::process($entry['id']); } + } - DBA::delete('inbox-entry', ["`received` < ?", DateTimeFormat::utc('now - 1 days')]); + /** + * Process all activities + * + * @return void + */ + public static function clear() + { + DBA::delete('inbox-entry', ["`received` < ?", DateTimeFormat::utc('now - 2 days')]); } /** diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index ee3fafe4bb..68ad218014 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -89,8 +89,8 @@ class Cron Tag::setLocalTrendingHashtags(24, 20); Tag::setGlobalTrendingHashtags(24, 20); - // Process pending posts in the queue - Queue::processAll(); + // Remove old pending posts from the queue + Queue::clear(); // Search for new contacts in the directory if (DI::config()->get('system', 'synchronize_directory')) { diff --git a/src/Worker/FetchMissingActivity.php b/src/Worker/FetchMissingActivity.php index 5aabe89ced..ceab8b7338 100644 --- a/src/Worker/FetchMissingActivity.php +++ b/src/Worker/FetchMissingActivity.php @@ -22,6 +22,7 @@ namespace Friendica\Worker; use Friendica\Core\Logger; +use Friendica\Core\Worker; use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub\Receiver; @@ -35,6 +36,13 @@ class FetchMissingActivity { Logger::info('Start fetching missing activity', ['url' => $url]); $result = ActivityPub\Processor::fetchMissingActivity($url, $child, $relay_actor, $completion); - Logger::info('Finished fetching missing activity', ['url' => $url, 'result' => $result]); + if ($result) { + Logger::info('Successfully fetched missing activity', ['url' => $url]); + } elseif (!Worker::defer()) { + Logger::info('Activity could not be fetched', ['url' => $url]); + // Possibly we should recursively remove child activities at this point. + } else { + Logger::info('Fetching deferred', ['url' => $url]); + } } }