From d45cd932783d14b7a24bdf2f4753126723ae7906 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 12 Jan 2025 19:43:34 +0000 Subject: [PATCH 1/3] Improved performance on relation discovery --- src/Model/Contact/Relation.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Model/Contact/Relation.php b/src/Model/Contact/Relation.php index 5172d87c70..736c4361dd 100644 --- a/src/Model/Contact/Relation.php +++ b/src/Model/Contact/Relation.php @@ -10,6 +10,7 @@ namespace Friendica\Model\Contact; use Exception; use Friendica\Content\Widget; use Friendica\Core\Protocol; +use Friendica\Core\Worker; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; @@ -21,6 +22,7 @@ use Friendica\Model\Verb; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; use Friendica\Util\Strings; /** @@ -162,20 +164,22 @@ class Relation $following_counter = 0; DI::logger()->info('Discover contacts', ['id' => $target, 'url' => $url, 'contacts' => count($contacts)]); - foreach ($contacts as $contact) { - $actor = Contact::getIdForURL($contact); - if (!empty($actor)) { - if (in_array($contact, $followers)) { - $fields = ['cid' => $target, 'relation-cid' => $actor, 'follows' => true, 'follow-updated' => DateTimeFormat::utcNow()]; + foreach ($contacts as $contact_url) { + $contact = Contact::getByURL($contact_url, false, ['id']); + if (!empty($contact['id'])) { + if (in_array($contact_url, $followers)) { + $fields = ['cid' => $target, 'relation-cid' => $contact['id'], 'follows' => true, 'follow-updated' => DateTimeFormat::utcNow()]; DBA::insert('contact-relation', $fields, Database::INSERT_UPDATE); $follower_counter++; } - if (in_array($contact, $followings)) { - $fields = ['cid' => $actor, 'relation-cid' => $target, 'follows' => true, 'follow-updated' => DateTimeFormat::utcNow()]; + if (in_array($contact_url, $followings)) { + $fields = ['cid' => $contact['id'], 'relation-cid' => $target, 'follows' => true, 'follow-updated' => DateTimeFormat::utcNow()]; DBA::insert('contact-relation', $fields, Database::INSERT_UPDATE); $following_counter++; } + } elseif (!Network::isUrlBlocked($contact_url)) { + Worker::add(Worker::PRIORITY_LOW, 'AddContact', 0, $contact_url); } } From e5bf1b976ae07ce2a5bf26e86de96f56222db3ff Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 23 Jan 2025 21:42:11 +0000 Subject: [PATCH 2/3] New function "add" --- src/Model/Contact/Relation.php | 3 ++- src/Worker/AddContact.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Model/Contact/Relation.php b/src/Model/Contact/Relation.php index 736c4361dd..b5c6680f3e 100644 --- a/src/Model/Contact/Relation.php +++ b/src/Model/Contact/Relation.php @@ -24,6 +24,7 @@ use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; use Friendica\Util\Strings; +use Friendica\Worker\AddContact; /** * This class provides relationship information based on the `contact-relation` table. @@ -179,7 +180,7 @@ class Relation $following_counter++; } } elseif (!Network::isUrlBlocked($contact_url)) { - Worker::add(Worker::PRIORITY_LOW, 'AddContact', 0, $contact_url); + AddContact::add(Worker::PRIORITY_LOW, 0, $contact_url); } } diff --git a/src/Worker/AddContact.php b/src/Worker/AddContact.php index 3b27c7e78d..658a1ebcd1 100644 --- a/src/Worker/AddContact.php +++ b/src/Worker/AddContact.php @@ -7,10 +7,12 @@ namespace Friendica\Worker; +use Friendica\Core\Worker; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Network\HTTPException\NotFoundException; +use Friendica\Util\Network; class AddContact { @@ -39,4 +41,20 @@ class AddContact DI::logger()->notice('Imagick not found.', ['exception' => $e, 'uid' => $uid, 'url' => $url]); } } + + /** + * @param array|int $run_parameters Priority constant or array of options described in Worker::add + * @param int $uid User ID + * @param string $url Contact link + * @return int + */ + public static function add($run_parameters, int $uid, string $url): int + { + if (Network::isUrlBlocked($url)) { + return 0; + } + + DI::logger()->debug('Add contact', ['uid' => $uid, 'url' => $url]); + return Worker::add($run_parameters, 'AddContact', 0, $url); + } } From 80fe8f837e14b9d3fc5eb2ebe594ff86cb08a85b Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 24 Jan 2025 06:53:48 +0000 Subject: [PATCH 3/3] Unneeded check removed --- src/Model/Contact/Relation.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Model/Contact/Relation.php b/src/Model/Contact/Relation.php index b5c6680f3e..b32f8e964c 100644 --- a/src/Model/Contact/Relation.php +++ b/src/Model/Contact/Relation.php @@ -22,7 +22,6 @@ use Friendica\Model\Verb; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; -use Friendica\Util\Network; use Friendica\Util\Strings; use Friendica\Worker\AddContact; @@ -179,7 +178,7 @@ class Relation DBA::insert('contact-relation', $fields, Database::INSERT_UPDATE); $following_counter++; } - } elseif (!Network::isUrlBlocked($contact_url)) { + } else { AddContact::add(Worker::PRIORITY_LOW, 0, $contact_url); } }