Merge pull request #11790 from annando/fetchactivity
Negative caching / config for receiver / fix fatals
This commit is contained in:
commit
5ec407699b
5 changed files with 21 additions and 7 deletions
|
@ -352,11 +352,11 @@ class Photo extends BaseModule
|
||||||
}
|
}
|
||||||
if (empty($mimetext)) {
|
if (empty($mimetext)) {
|
||||||
if ($customsize <= Proxy::PIXEL_MICRO) {
|
if ($customsize <= Proxy::PIXEL_MICRO) {
|
||||||
$url = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO);
|
$url = Contact::getDefaultAvatar($contact ?: [], Proxy::SIZE_MICRO);
|
||||||
} elseif ($customsize <= Proxy::PIXEL_THUMB) {
|
} elseif ($customsize <= Proxy::PIXEL_THUMB) {
|
||||||
$url = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB);
|
$url = Contact::getDefaultAvatar($contact ?: [], Proxy::SIZE_THUMB);
|
||||||
} else {
|
} else {
|
||||||
$url = Contact::getDefaultAvatar($contact, Proxy::SIZE_SMALL);
|
$url = Contact::getDefaultAvatar($contact ?: [], Proxy::SIZE_SMALL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MPhoto::createPhotoForExternalResource($url, 0, $mimetext);
|
return MPhoto::createPhotoForExternalResource($url, 0, $mimetext);
|
||||||
|
|
|
@ -303,7 +303,7 @@ class Processor
|
||||||
if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Post::exists(['uri' => $activity['reply-to-id']])) {
|
if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Post::exists(['uri' => $activity['reply-to-id']])) {
|
||||||
$recursion_depth = $activity['recursion-depth'] ?? 0;
|
$recursion_depth = $activity['recursion-depth'] ?? 0;
|
||||||
Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
|
Logger::notice('Parent not found. Try to refetch it.', ['parent' => $activity['reply-to-id'], 'recursion-depth' => $recursion_depth]);
|
||||||
if ($recursion_depth < 10) {
|
if ($recursion_depth < DI::config()->get('system', 'max_recursion_depth')) {
|
||||||
$result = self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
|
$result = self::fetchMissingActivity($activity['reply-to-id'], $activity, '', Receiver::COMPLETION_AUTO);
|
||||||
if (empty($result) && self::isActivityGone($activity['reply-to-id'])) {
|
if (empty($result) && self::isActivityGone($activity['reply-to-id'])) {
|
||||||
// Recursively delete this and all depending entries
|
// Recursively delete this and all depending entries
|
||||||
|
@ -1207,13 +1207,19 @@ class Processor
|
||||||
$object = DI::cache()->get($cachekey);
|
$object = DI::cache()->get($cachekey);
|
||||||
|
|
||||||
if (!is_null($object)) {
|
if (!is_null($object)) {
|
||||||
|
if (!empty($object)) {
|
||||||
Logger::debug('Fetch from cache', ['url' => $url, 'uid' => $uid]);
|
Logger::debug('Fetch from cache', ['url' => $url, 'uid' => $uid]);
|
||||||
|
} else {
|
||||||
|
Logger::debug('Fetch from negative cache', ['url' => $url, 'uid' => $uid]);
|
||||||
|
}
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
$object = ActivityPub::fetchContent($url, $uid);
|
$object = ActivityPub::fetchContent($url, $uid);
|
||||||
if (empty($object)) {
|
if (empty($object)) {
|
||||||
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
|
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
|
||||||
|
// We perform negative caching.
|
||||||
|
DI::cache()->set($cachekey, [], Duration::FIVE_MINUTES);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -592,7 +592,7 @@ class Receiver
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($object_data['entry-id']) && ($push || ($activity['completion-mode'] == self::COMPLETION_RELAY))) {
|
if (!empty($object_data['entry-id']) && DI::config()->get('system', 'decoupled_receiver') && ($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']]);
|
Logger::debug('Initiate processing', ['id' => $object_data['entry-id'], 'uri' => $object_data['object_id']]);
|
||||||
|
|
|
@ -3114,7 +3114,7 @@ class Diaspora
|
||||||
Logger::notice('Empty addr', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]);
|
Logger::notice('Empty addr', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$envelope = self::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $pubkey, $public_batch);
|
$envelope = self::buildMessage($msg, $owner, $contact, $owner['uprvkey'], $pubkey ?? '', $public_batch);
|
||||||
|
|
||||||
$return_code = self::transmit($owner, $contact, $envelope, $public_batch, $guid);
|
$return_code = self::transmit($owner, $contact, $envelope, $public_batch, $guid);
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,10 @@ return [
|
||||||
// Whether to use Memcache, Memcached, Redis or APCu to store temporary cache.
|
// Whether to use Memcache, Memcached, Redis or APCu to store temporary cache.
|
||||||
'cache_driver' => 'database',
|
'cache_driver' => 'database',
|
||||||
|
|
||||||
|
// decoupled_receiver (Boolean)
|
||||||
|
// Decouple incoming AP posts by doing the processing in the background.
|
||||||
|
'decoupled_receiver' => true,
|
||||||
|
|
||||||
// distributed_cache_driver (database|memcache|memcached|redis)
|
// distributed_cache_driver (database|memcache|memcached|redis)
|
||||||
// Whether to use database, Memcache, Memcached or Redis as a distributed cache.
|
// Whether to use database, Memcache, Memcached or Redis as a distributed cache.
|
||||||
'distributed_cache_driver' => 'database',
|
'distributed_cache_driver' => 'database',
|
||||||
|
@ -416,6 +420,10 @@ return [
|
||||||
// Maximum number of concurrent database processes for foreground tasks.
|
// Maximum number of concurrent database processes for foreground tasks.
|
||||||
'max_processes_frontend' => 20,
|
'max_processes_frontend' => 20,
|
||||||
|
|
||||||
|
// max_recursion_depth (Integer)
|
||||||
|
// Maximum recursion depth when fetching posts until the job is delegated to a worker task.
|
||||||
|
'max_recursion_depth' => 10,
|
||||||
|
|
||||||
// maximagesize (Integer)
|
// maximagesize (Integer)
|
||||||
// Maximum size in bytes of an uploaded photo.
|
// Maximum size in bytes of an uploaded photo.
|
||||||
'maximagesize' => 800000,
|
'maximagesize' => 800000,
|
||||||
|
|
Loading…
Reference in a new issue