-- 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`),
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
------------
$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)) {
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;
* @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']) &&
* @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)) {
if (strtotime($gserver['next_contact']) < time()) {
Worker::add(Worker::PRIORITY_LOW, 'UpdateGServer', $gserver['url'], false);
}
- return self::defunctByArray($gserver);
+ return self::isDefunct($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)) {
*
* @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)) {
'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;
// 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);
}
$valid_url = Network::isUrlValid($url);
if (!$valid_url) {
- self::setFailure($url);
+ self::setFailureByUrl($url);
return false;
} else {
$valid_url = rtrim($valid_url, '/');
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);
}
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);
}
// 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;
}
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' => ''];
}
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
- self::setFailure($url);
+ self::setFailureByUrl($url);
return false;
}
// 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;
}
}
if (($serverdata['network'] == Protocol::PHANTOM) && in_array($serverdata['detection-method'], [self::DETECT_MANUAL, self::DETECT_BODY])) {
- self::setFailure($url);
+ self::setFailureByUrl($url);
return false;
}
$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]);
}
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) {
$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;
}
"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"],
],