diff --git a/database.sql b/database.sql index 02481bc007..2d5a1dbaa0 100644 --- a/database.sql +++ b/database.sql @@ -583,11 +583,11 @@ CREATE TABLE IF NOT EXISTS `delayed-post` ( -- TABLE delivery-queue -- CREATE TABLE IF NOT EXISTS `delivery-queue` ( - `gsid` int unsigned NOT NULL COMMENT 'Global Server ID', - `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri', + `gsid` int unsigned NOT NULL COMMENT 'Target server', + `uri-id` int unsigned NOT NULL COMMENT 'Delivered post', `created` datetime 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', `failed` tinyint DEFAULT 0 COMMENT 'Number of times the delivery has failed', PRIMARY KEY(`uri-id`,`gsid`), diff --git a/doc/database/db_delivery-queue.md b/doc/database/db_delivery-queue.md index a46f7ac3a5..46623a54e0 100644 --- a/doc/database/db_delivery-queue.md +++ b/doc/database/db_delivery-queue.md @@ -6,15 +6,15 @@ Delivery data for posts for the batch processing Fields ------ -| Field | Description | Type | Null | Key | Default | Extra | -| ------- | --------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- | -| gsid | Global Server ID | int unsigned | NO | PRI | NULL | | -| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | | -| created | | datetime | YES | | NULL | | -| command | | varbinary(32) | YES | | NULL | | -| cid | contact_id (ID of the contact in contact table) | int unsigned | YES | | NULL | | -| uid | Delivering user | mediumint unsigned | YES | | NULL | | -| failed | Number of times the delivery has failed | tinyint | YES | | 0 | | +| Field | Description | Type | Null | Key | Default | Extra | +| ------- | --------------------------------------- | ------------------ | ---- | --- | ------- | ----- | +| gsid | Target server | int unsigned | NO | PRI | NULL | | +| uri-id | Delivered post | int unsigned | NO | PRI | NULL | | +| created | | datetime | YES | | NULL | | +| command | | varbinary(32) | YES | | NULL | | +| cid | Target contact | int unsigned | YES | | NULL | | +| uid | Delivering user | mediumint unsigned | YES | | NULL | | +| failed | Number of times the delivery has failed | tinyint | YES | | 0 | | Indexes ------------ diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 3c5d38c09f..92725240ea 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -1264,7 +1264,7 @@ class Worker $command = array_shift($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; if (!is_int($priority) || !in_array($priority, self::PRIORITIES)) { diff --git a/src/Core/Worker/Cron.php b/src/Core/Worker/Cron.php index 5fdda1396c..8e354344b8 100644 --- a/src/Core/Worker/Cron.php +++ b/src/Core/Worker/Cron.php @@ -210,7 +210,7 @@ class Cron Delivery::removeFailedQueue($delivery['gsid']); } - if (($delivery['failed'] < 3) || GServer::reachableById($delivery['gsid'])) { + if (($delivery['failed'] < 3) || GServer::isReachableById($delivery['gsid'])) { $priority = Worker::PRIORITY_HIGH; } elseif ($delivery['failed'] < 6) { $priority = Worker::PRIORITY_MEDIUM; diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 8adabf847e..477b1f3232 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -170,7 +170,7 @@ class GServer * @param integer $gsid * @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)) && ($gserver['last_contact'] >= $gserver['created']) && @@ -184,7 +184,7 @@ class GServer * @param integer $gsid * @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]); if (empty($gserver)) { @@ -193,7 +193,7 @@ class GServer if (strtotime($gserver['next_contact']) < time()) { 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 * @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]); if (empty($gserver)) { @@ -398,7 +398,7 @@ class GServer * * @param string $url */ - public static function setFailure(string $url) + public static function setFailureByUrl(string $url) { $gserver = DBA::selectFirst('gserver', [], ['nurl' => Strings::normaliseLink($url)]); if (DBA::isResult($gserver)) { @@ -407,7 +407,7 @@ class GServer 'next_contact' => $next_update, 'network' => Protocol::PHANTOM, 'detection-method' => null], ['nurl' => Strings::normaliseLink($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']]); } return; @@ -462,7 +462,7 @@ class GServer // If the URL missmatches, then we mark the old entry as failure if (!Strings::compareLink($url, $original_url)) { - self::setFailure($original_url); + self::setFailureByUrl($original_url); if (!self::getID($url, true)) { self::detect($url, $network, $only_nodeinfo); } @@ -471,7 +471,7 @@ class GServer $valid_url = Network::isUrlValid($url); if (!$valid_url) { - self::setFailure($url); + self::setFailureByUrl($url); return false; } else { $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))) || (((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]); - self::setFailure($url); + self::setFailureByUrl($url); if (!self::getID($valid_url, true)) { self::detect($valid_url, $network, $only_nodeinfo); } @@ -497,7 +497,7 @@ class GServer unset($parts['path']); $valid_url = (string)Uri::fromParts($parts); - self::setFailure($url); + self::setFailureByUrl($url); if (!self::getID($valid_url, true)) { 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 $curlResult = DI::httpClient()->get($url . '/.well-known/x-nodeinfo2', HttpClientAccept::JSON); if ($curlResult->isTimeout()) { - self::setFailure($url); + self::setFailureByUrl($url); return false; } @@ -529,7 +529,7 @@ class GServer if ($only_nodeinfo && empty($serverdata)) { Logger::info('Invalid nodeinfo in nodeinfo-mode, server is marked as failure', ['url' => $url]); - self::setFailure($url); + self::setFailureByUrl($url); return false; } elseif (empty($serverdata)) { $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())) { - self::setFailure($url); + self::setFailureByUrl($url); return false; } @@ -637,7 +637,7 @@ class GServer // 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])) { - self::setFailure($url); + self::setFailureByUrl($url); return false; } @@ -654,7 +654,7 @@ class GServer } if (($serverdata['network'] == Protocol::PHANTOM) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL, self::DETECT_BODY])) { - self::setFailure($url); + self::setFailureByUrl($url); return false; } diff --git a/src/Worker/BulkDelivery.php b/src/Worker/BulkDelivery.php index bcb341de38..0799b9ba73 100644 --- a/src/Worker/BulkDelivery.php +++ b/src/Worker/BulkDelivery.php @@ -43,7 +43,7 @@ class BulkDelivery $delivery_failure = true; if (!$server_failure) { - $server_failure = !GServer::reachableById($gsid); + $server_failure = !GServer::isReachableById($gsid); } Logger::debug('Delivery failed', ['server_failure' => $server_failure, 'post' => $post]); } diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index b9b9441003..c6a6ae4f17 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -568,9 +568,9 @@ class Notifier if (empty($contact['gsid'])) { $reachable = !GServer::reachable($contact); } elseif (!DI::config()->get('system', 'bulk_delivery')) { - $reachable = !GServer::reachableById($contact['gsid']); + $reachable = !GServer::isReachableById($contact['gsid']); } else { - $reachable = !GServer::defunct($contact['gsid']); + $reachable = !GServer::isDefunctById($contact['gsid']); } if (!$reachable) { diff --git a/src/Worker/UpdateGServer.php b/src/Worker/UpdateGServer.php index d180f34c45..4142a08b78 100644 --- a/src/Worker/UpdateGServer.php +++ b/src/Worker/UpdateGServer.php @@ -43,18 +43,18 @@ class UpdateGServer $filtered = filter_var($server_url, FILTER_SANITIZE_URL); if (substr(Strings::normaliseLink($filtered), 0, 7) != 'http://') { - GServer::setFailure($server_url); + GServer::setFailureByUrl($server_url); return; } if (($filtered != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { - GServer::setFailure($server_url); + GServer::setFailureByUrl($server_url); return; } $cleaned = GServer::cleanURL($server_url); if (($cleaned != $server_url) && DBA::exists('gserver', ['nurl' => Strings::normaliseLink($server_url)])) { - GServer::setFailure($server_url); + GServer::setFailureByUrl($server_url); return; } diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index c45daede80..cf6131c2e1 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -641,11 +641,11 @@ return [ "delivery-queue" => [ "comment" => "Delivery data for posts for the batch processing", "fields" => [ - "gsid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["gserver" => "id", "on delete" => "restrict"], "comment" => "Global Server ID"], - "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"], + "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" => "Delivered post"], "created" => ["type" => "datetime", "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"], "failed" => ["type" => "tinyint", "default" => 0, "comment" => "Number of times the delivery has failed"], ],