Changes after review

This commit is contained in:
Michael 2022-12-31 16:20:18 +00:00
parent f022a49f9e
commit 8e397b5849
9 changed files with 38 additions and 38 deletions

View file

@ -583,11 +583,11 @@ CREATE TABLE IF NOT EXISTS `delayed-post` (
-- TABLE delivery-queue -- TABLE delivery-queue
-- --
CREATE TABLE IF NOT EXISTS `delivery-queue` ( CREATE TABLE IF NOT EXISTS `delivery-queue` (
`gsid` int unsigned NOT NULL COMMENT 'Global Server ID', `gsid` int unsigned NOT NULL COMMENT 'Target server',
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri', `uri-id` int unsigned NOT NULL COMMENT 'Delivered post',
`created` datetime COMMENT '', `created` datetime COMMENT '',
`command` varbinary(32) COMMENT '', `command` varbinary(32) COMMENT '',
`cid` int unsigned COMMENT 'contact_id (ID of the contact in contact table)', `cid` int unsigned COMMENT 'Target contact',
`uid` mediumint unsigned COMMENT 'Delivering user', `uid` mediumint unsigned COMMENT 'Delivering user',
`failed` tinyint DEFAULT 0 COMMENT 'Number of times the delivery has failed', `failed` tinyint DEFAULT 0 COMMENT 'Number of times the delivery has failed',
PRIMARY KEY(`uri-id`,`gsid`), PRIMARY KEY(`uri-id`,`gsid`),

View file

@ -6,15 +6,15 @@ Delivery data for posts for the batch processing
Fields Fields
------ ------
| Field | Description | Type | Null | Key | Default | Extra | | Field | Description | Type | Null | Key | Default | Extra |
| ------- | --------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- | | ------- | --------------------------------------- | ------------------ | ---- | --- | ------- | ----- |
| gsid | Global Server ID | int unsigned | NO | PRI | NULL | | | gsid | Target server | int unsigned | NO | PRI | NULL | |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | | | uri-id | Delivered post | int unsigned | NO | PRI | NULL | |
| created | | datetime | YES | | NULL | | | created | | datetime | YES | | NULL | |
| command | | varbinary(32) | YES | | NULL | | | command | | varbinary(32) | YES | | NULL | |
| cid | contact_id (ID of the contact in contact table) | int unsigned | YES | | NULL | | | cid | Target contact | int unsigned | YES | | NULL | |
| uid | Delivering user | mediumint unsigned | YES | | NULL | | | uid | Delivering user | mediumint unsigned | YES | | NULL | |
| failed | Number of times the delivery has failed | tinyint | YES | | 0 | | | failed | Number of times the delivery has failed | tinyint | YES | | 0 | |
Indexes Indexes
------------ ------------

View file

@ -1264,7 +1264,7 @@ class Worker
$command = array_shift($args); $command = array_shift($args);
$parameters = json_encode($args); $parameters = json_encode($args);
$queue = DBA::selectFirst('workerqueue', [], ['command' => $command, 'parameter' => $parameters, 'done' => false]); $queue = DBA::selectFirst('workerqueue', ['id', 'priority'], ['command' => $command, 'parameter' => $parameters, 'done' => false]);
$added = 0; $added = 0;
if (!is_int($priority) || !in_array($priority, self::PRIORITIES)) { if (!is_int($priority) || !in_array($priority, self::PRIORITIES)) {

View file

@ -210,7 +210,7 @@ class Cron
Delivery::removeFailedQueue($delivery['gsid']); Delivery::removeFailedQueue($delivery['gsid']);
} }
if (($delivery['failed'] < 3) || GServer::reachableById($delivery['gsid'])) { if (($delivery['failed'] < 3) || GServer::isReachableById($delivery['gsid'])) {
$priority = Worker::PRIORITY_HIGH; $priority = Worker::PRIORITY_HIGH;
} elseif ($delivery['failed'] < 6) { } elseif ($delivery['failed'] < 6) {
$priority = Worker::PRIORITY_MEDIUM; $priority = Worker::PRIORITY_MEDIUM;

View file

@ -170,7 +170,7 @@ class GServer
* @param integer $gsid * @param integer $gsid
* @return boolean * @return boolean
*/ */
private static function defunctByArray(array $gserver): bool private static function isDefunct(array $gserver): bool
{ {
return ($gserver['failed'] || in_array($gserver['network'], Protocol::FEDERATED)) && return ($gserver['failed'] || in_array($gserver['network'], Protocol::FEDERATED)) &&
($gserver['last_contact'] >= $gserver['created']) && ($gserver['last_contact'] >= $gserver['created']) &&
@ -184,7 +184,7 @@ class GServer
* @param integer $gsid * @param integer $gsid
* @return boolean * @return boolean
*/ */
public static function defunct(int $gsid): bool public static function isDefunctById(int $gsid): bool
{ {
$gserver = DBA::selectFirst('gserver', ['url', 'next_contact', 'last_contact', 'last_failure', 'created', 'failed', 'network'], ['id' => $gsid]); $gserver = DBA::selectFirst('gserver', ['url', 'next_contact', 'last_contact', 'last_failure', 'created', 'failed', 'network'], ['id' => $gsid]);
if (empty($gserver)) { if (empty($gserver)) {
@ -193,7 +193,7 @@ class GServer
if (strtotime($gserver['next_contact']) < time()) { if (strtotime($gserver['next_contact']) < time()) {
Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false); Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false);
} }
return self::defunctByArray($gserver); return self::isDefunct($gserver);
} }
} }
@ -203,7 +203,7 @@ class GServer
* @param integer $gsid * @param integer $gsid
* @return boolean * @return boolean
*/ */
public static function reachableById(int $gsid): bool public static function isReachableById(int $gsid): bool
{ {
$gserver = DBA::selectFirst('gserver', ['url', 'next_contact', 'failed', 'network'], ['id' => $gsid]); $gserver = DBA::selectFirst('gserver', ['url', 'next_contact', 'failed', 'network'], ['id' => $gsid]);
if (empty($gserver)) { if (empty($gserver)) {
@ -398,7 +398,7 @@ class GServer
* *
* @param string $url * @param string $url
*/ */
public static function setFailure(string $url) public static function setFailureByUrl(string $url)
{ {
$gserver = DBA::selectFirst('gserver', [], ['nurl' => Strings::normaliseLink($url)]); $gserver = DBA::selectFirst('gserver', [], ['nurl' => Strings::normaliseLink($url)]);
if (DBA::isResult($gserver)) { if (DBA::isResult($gserver)) {
@ -407,7 +407,7 @@ class GServer
'next_contact' => $next_update, 'network' => Protocol::PHANTOM, 'detection-method' => null], 'next_contact' => $next_update, 'network' => Protocol::PHANTOM, 'detection-method' => null],
['nurl' => Strings::normaliseLink($url)]); ['nurl' => Strings::normaliseLink($url)]);
Logger::info('Set failed status for existing server', ['url' => $url]); Logger::info('Set failed status for existing server', ['url' => $url]);
if (self::defunctByArray($gserver)) { if (self::isDefunct($gserver)) {
Contact::update(['archive' => true], ['gsid' => $gserver['id']]); Contact::update(['archive' => true], ['gsid' => $gserver['id']]);
} }
return; return;
@ -462,7 +462,7 @@ class GServer
// If the URL missmatches, then we mark the old entry as failure // If the URL missmatches, then we mark the old entry as failure
if (!Strings::compareLink($url, $original_url)) { if (!Strings::compareLink($url, $original_url)) {
self::setFailure($original_url); self::setFailureByUrl($original_url);
if (!self::getID($url, true)) { if (!self::getID($url, true)) {
self::detect($url, $network, $only_nodeinfo); self::detect($url, $network, $only_nodeinfo);
} }
@ -471,7 +471,7 @@ class GServer
$valid_url = Network::isUrlValid($url); $valid_url = Network::isUrlValid($url);
if (!$valid_url) { if (!$valid_url) {
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} else { } else {
$valid_url = rtrim($valid_url, '/'); $valid_url = rtrim($valid_url, '/');
@ -483,7 +483,7 @@ class GServer
if (((parse_url($url, PHP_URL_HOST) != parse_url($valid_url, PHP_URL_HOST)) && (parse_url($url, PHP_URL_PATH) == parse_url($valid_url, PHP_URL_PATH))) || if (((parse_url($url, PHP_URL_HOST) != parse_url($valid_url, PHP_URL_HOST)) && (parse_url($url, PHP_URL_PATH) == parse_url($valid_url, PHP_URL_PATH))) ||
(((parse_url($url, PHP_URL_HOST) != parse_url($valid_url, PHP_URL_HOST)) || (parse_url($url, PHP_URL_PATH) != parse_url($valid_url, PHP_URL_PATH))) && empty(parse_url($valid_url, PHP_URL_PATH)))) { (((parse_url($url, PHP_URL_HOST) != parse_url($valid_url, PHP_URL_HOST)) || (parse_url($url, PHP_URL_PATH) != parse_url($valid_url, PHP_URL_PATH))) && empty(parse_url($valid_url, PHP_URL_PATH)))) {
Logger::debug('Found redirect. Mark old entry as failure', ['old' => $url, 'new' => $valid_url]); Logger::debug('Found redirect. Mark old entry as failure', ['old' => $url, 'new' => $valid_url]);
self::setFailure($url); self::setFailureByUrl($url);
if (!self::getID($valid_url, true)) { if (!self::getID($valid_url, true)) {
self::detect($valid_url, $network, $only_nodeinfo); self::detect($valid_url, $network, $only_nodeinfo);
} }
@ -497,7 +497,7 @@ class GServer
unset($parts['path']); unset($parts['path']);
$valid_url = (string)Uri::fromParts($parts); $valid_url = (string)Uri::fromParts($parts);
self::setFailure($url); self::setFailureByUrl($url);
if (!self::getID($valid_url, true)) { if (!self::getID($valid_url, true)) {
self::detect($valid_url, $network, $only_nodeinfo); self::detect($valid_url, $network, $only_nodeinfo);
} }
@ -517,7 +517,7 @@ class GServer
// When a nodeinfo is present, we don't need to dig further // When a nodeinfo is present, we don't need to dig further
$curlResult = DI::httpClient()->get($url . '/.well-known/x-nodeinfo2', HttpClientAccept::JSON); $curlResult = DI::httpClient()->get($url . '/.well-known/x-nodeinfo2', HttpClientAccept::JSON);
if ($curlResult->isTimeout()) { if ($curlResult->isTimeout()) {
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} }
@ -529,7 +529,7 @@ class GServer
if ($only_nodeinfo && empty($serverdata)) { if ($only_nodeinfo && empty($serverdata)) {
Logger::info('Invalid nodeinfo in nodeinfo-mode, server is marked as failure', ['url' => $url]); Logger::info('Invalid nodeinfo in nodeinfo-mode, server is marked as failure', ['url' => $url]);
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} elseif (empty($serverdata)) { } elseif (empty($serverdata)) {
$serverdata = ['detection-method' => self::DETECT_MANUAL, 'network' => Protocol::PHANTOM, 'platform' => '', 'version' => '', 'site_name' => '', 'info' => '']; $serverdata = ['detection-method' => self::DETECT_MANUAL, 'network' => Protocol::PHANTOM, 'platform' => '', 'version' => '', 'site_name' => '', 'info' => ''];
@ -568,7 +568,7 @@ class GServer
} }
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} }
@ -637,7 +637,7 @@ class GServer
// Most servers aren't installed in a subdirectory, so we declare this entry as failed // Most servers aren't installed in a subdirectory, so we declare this entry as failed
if (($serverdata['network'] == Protocol::PHANTOM) && !empty(parse_url($url, PHP_URL_PATH)) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL])) { if (($serverdata['network'] == Protocol::PHANTOM) && !empty(parse_url($url, PHP_URL_PATH)) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL])) {
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} }
@ -654,7 +654,7 @@ class GServer
} }
if (($serverdata['network'] == Protocol::PHANTOM) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL, self::DETECT_BODY])) { if (($serverdata['network'] == Protocol::PHANTOM) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL, self::DETECT_BODY])) {
self::setFailure($url); self::setFailureByUrl($url);
return false; return false;
} }

View file

@ -43,7 +43,7 @@ class BulkDelivery
$delivery_failure = true; $delivery_failure = true;
if (!$server_failure) { if (!$server_failure) {
$server_failure = !GServer::reachableById($gsid); $server_failure = !GServer::isReachableById($gsid);
} }
Logger::debug('Delivery failed', ['server_failure' => $server_failure, 'post' => $post]); Logger::debug('Delivery failed', ['server_failure' => $server_failure, 'post' => $post]);
} }

View file

@ -568,9 +568,9 @@ class Notifier
if (empty($contact['gsid'])) { if (empty($contact['gsid'])) {
$reachable = !GServer::reachable($contact); $reachable = !GServer::reachable($contact);
} elseif (!DI::config()->get('system', 'bulk_delivery')) { } elseif (!DI::config()->get('system', 'bulk_delivery')) {
$reachable = !GServer::reachableById($contact['gsid']); $reachable = !GServer::isReachableById($contact['gsid']);
} else { } else {
$reachable = !GServer::defunct($contact['gsid']); $reachable = !GServer::isDefunctById($contact['gsid']);
} }
if (!$reachable) { if (!$reachable) {

View file

@ -43,18 +43,18 @@ class UpdateGServer
$filtered = filter_var($server_url, FILTER_SANITIZE_URL); $filtered = filter_var($server_url, FILTER_SANITIZE_URL);
if (substr(Strings::normaliseLink($filtered), 0, 7) != 'http://') { if (substr(Strings::normaliseLink($filtered), 0, 7) != 'http://') {
GServer::setFailure($server_url); GServer::setFailureByUrl($server_url);
return; return;
} }
if (($filtered != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { if (($filtered != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) {
GServer::setFailure($server_url); GServer::setFailureByUrl($server_url);
return; return;
} }
$cleaned = GServer::cleanURL($server_url); $cleaned = GServer::cleanURL($server_url);
if (($cleaned != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { if (($cleaned != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) {
GServer::setFailure($server_url); GServer::setFailureByUrl($server_url);
return; return;
} }

View file

@ -641,11 +641,11 @@ return [
"delivery-queue" => [ "delivery-queue" => [
"comment" => "Delivery data for posts for the batch processing", "comment" => "Delivery data for posts for the batch processing",
"fields" => [ "fields" => [
"gsid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["gserver" => "id", "on delete" => "restrict"], "comment" => "Global Server ID"], "gsid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["gserver" => "id", "on delete" => "restrict"], "comment" => "Target server"],
"uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"], "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Delivered post"],
"created" => ["type" => "datetime", "comment" => ""], "created" => ["type" => "datetime", "comment" => ""],
"command" => ["type" => "varbinary(32)", "comment" => ""], "command" => ["type" => "varbinary(32)", "comment" => ""],
"cid" => ["type" => "int unsigned", "foreign" => ["contact" => "id"], "comment" => "contact_id (ID of the contact in contact table)"], "cid" => ["type" => "int unsigned", "foreign" => ["contact" => "id"], "comment" => "Target contact"],
"uid" => ["type" => "mediumint unsigned", "foreign" => ["user" => "uid"], "comment" => "Delivering user"], "uid" => ["type" => "mediumint unsigned", "foreign" => ["user" => "uid"], "comment" => "Delivering user"],
"failed" => ["type" => "tinyint", "default" => 0, "comment" => "Number of times the delivery has failed"], "failed" => ["type" => "tinyint", "default" => 0, "comment" => "Number of times the delivery has failed"],
], ],