From f222e9d278c9d483a48b5dd10196ef78f205d0b3 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 4 Aug 2022 21:52:10 +0000 Subject: [PATCH 1/3] Avoid to provess the same activity --- src/Protocol/ActivityPub/Processor.php | 24 ++++++++++++++++++++++++ src/Protocol/ActivityPub/Queue.php | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 7270f7fc4b..92aa3b7833 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -59,6 +59,23 @@ class Processor { const CACHEKEY_FETCH_ACTIVITY = 'processor:fetchMissingActivity:'; const CACHEKEY_JUST_FETCHED = 'processor:isJustFetched:'; + + static $processed = []; + + public static function addActivityId(string $id) + { + self::$processed[] = $id; + if (count(self::$processed) > 100) { + self::$processed = array_slice(self::$processed, 1); + } + print_r(self::$processed); + } + + public static function isProcessed(string $id): bool + { + return in_array($id, self::$processed); + } + /** * Extracts the tag character (#, @, !) from mention links * @@ -275,6 +292,13 @@ class Processor */ public static function createItem(array $activity, bool $fetch_parents = true): array { + if (self::isProcessed($activity['id'])) { + Logger::info('Id is already processed', ['id' => $activity['id']]); + return []; + } + + self::addActivityId($activity['id']); + $item = []; $item['verb'] = Activity::POST; $item['thr-parent'] = $activity['reply-to-id']; diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php index 2fa95897c6..df4236b5bd 100644 --- a/src/Protocol/ActivityPub/Queue.php +++ b/src/Protocol/ActivityPub/Queue.php @@ -22,6 +22,7 @@ namespace Friendica\Protocol\ActivityPub; use Friendica\Core\Logger; +use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; @@ -199,7 +200,7 @@ class Queue } } - Logger::debug('Processing queue entry', ['id' => $entry['id'], 'type' => $entry['type'], 'object-type' => $entry['object-type'], 'uri' => $entry['object-id'], 'in-reply-to' => $entry['in-reply-to-id']]); + Logger::debug('Processing queue entry', ['id' => $entry['id'], 'type' => $entry['type'], 'object-type' => $entry['object-type'], 'uri' => $entry['object-id'], 'in-reply-to' => $entry['in-reply-to-id'], 'callstack' => System::callstack(20)]); $activity = json_decode($entry['activity'], true); $type = $entry['type']; From 8227367522e77c133789c7faa2b46eaaa47b04ec Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 5 Aug 2022 04:45:31 +0000 Subject: [PATCH 2/3] Remove test code, add documentation --- src/Protocol/ActivityPub/Processor.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 92aa3b7833..57204bf3fe 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -62,15 +62,28 @@ class Processor static $processed = []; + /** + * Add an activity id to the list of processed ids + * + * @param string $id + * + * @return void + */ public static function addActivityId(string $id) { self::$processed[] = $id; if (count(self::$processed) > 100) { self::$processed = array_slice(self::$processed, 1); } - print_r(self::$processed); } + /** + * Checks if the given has just been processed + * + * @param string $id + * + * @return boolean + */ public static function isProcessed(string $id): bool { return in_array($id, self::$processed); @@ -332,7 +345,7 @@ class Processor return []; } - if (!DI::config()->get('system', 'fetch_parents')) { + if (!in_array(0, $activity['receiver']) && !DI::config()->get('system', 'fetch_parents')) { $fetch_parents = false; } From 8b698b183d16c4bfb5cd22381db308ff5a5b0a05 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 5 Aug 2022 05:48:20 +0000 Subject: [PATCH 3/3] Abort when public item cannot be inserted --- src/Protocol/ActivityPub/Processor.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 57204bf3fe..d345ba78cf 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -1082,6 +1082,10 @@ class Processor $success = true; } else { Logger::notice('Item insertion aborted', ['uri' => $item['uri'], 'uid' => $item['uid']]); + if (($item['uid'] == 0) && (count($activity['receiver']) > 1)) { + Logger::info('Public item was aborted. We skip for all users.', ['uri' => $item['uri']]); + break; + } } if ($item['uid'] == 0) {