Merge pull request #11785 from annando/processing

Decoupling of relay posts / endless loop removed
This commit is contained in:
Hypolite Petovan 2022-07-28 05:42:46 -04:00 committed by GitHub
commit f29d9be574
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 25 deletions

View file

@ -24,6 +24,7 @@ namespace Friendica\Protocol\ActivityPub;
use Friendica\Content\Text\BBCode; use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML; use Friendica\Content\Text\HTML;
use Friendica\Content\Text\Markdown; use Friendica\Content\Text\Markdown;
use Friendica\Core\Cache\Enum\Duration;
use Friendica\Core\Logger; use Friendica\Core\Logger;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\System; use Friendica\Core\System;
@ -56,6 +57,7 @@ use Friendica\Worker\Delivery;
*/ */
class Processor class Processor
{ {
const CACHEKEY_FETCH_ACTIVITY = 'processor:fetchMissingActivity:';
/** /**
* Extracts the tag character (#, @, !) from mention links * Extracts the tag character (#, @, !) from mention links
* *
@ -1218,15 +1220,23 @@ class Processor
$uid = 0; $uid = 0;
} }
$object = ActivityPub::fetchContent($url, $uid); $cachekey = self::CACHEKEY_FETCH_ACTIVITY . $url;
if (empty($object)) { $object = DI::cache()->get($cachekey);
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
return '';
}
if (empty($object['id'])) { if (is_null($object)) {
Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]); $object = ActivityPub::fetchContent($url, $uid);
return ''; 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]);
} }
$signer = []; $signer = [];

View file

@ -126,14 +126,6 @@ class Queue
return; return;
} }
$children = DBA::select('inbox-entry', ['id'], ['in-reply-to-id' => $entry['object-id']]);
while ($child = DBA::fetch($children)) {
if ($id == $child['id']) {
continue;
}
self::deleteById($child['id']);
}
DBA::close($children);
DBA::delete('inbox-entry', ['id' => $entry['id']]); DBA::delete('inbox-entry', ['id' => $entry['id']]);
} }

View file

@ -208,13 +208,6 @@ class Receiver
Logger::notice('Relayed message had not been fetched', ['id' => $object_id, 'actor' => $actor]); Logger::notice('Relayed message had not been fetched', ['id' => $object_id, 'actor' => $actor]);
return; return;
} }
$item_id = Item::searchByLink($object_id);
if ($item_id) {
Logger::info('Relayed message had been fetched and stored', ['id' => $object_id, 'item' => $item_id, 'actor' => $actor]);
} else {
Logger::notice('Relayed message had not been stored', ['id' => $object_id, 'actor' => $actor]);
}
} }
/** /**
@ -599,9 +592,10 @@ class Receiver
return; return;
} }
if ($push) { if (!empty($object_data['entry-id']) && ($push || ($activity['completion-mode'] == self::COMPLETION_RELAY))) {
// We delay by 5 seconds to allow to accumulate all receivers // We delay by 5 seconds to allow to accumulate all receivers
$delayed = date(DateTimeFormat::MYSQL, time() + 5); $delayed = date(DateTimeFormat::MYSQL, time() + 5);
Logger::debug('Initiate processing', ['id' => $object_data['entry-id'], 'uri' => $object_data['object_id']]);
Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']); Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']);
return; return;
} }

View file

@ -31,7 +31,6 @@ use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\APContact; use Friendica\Model\APContact;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Conversation;
use Friendica\Model\GServer; use Friendica\Model\GServer;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Photo; use Friendica\Model\Photo;