+
+ DBA::close($deliveries);
+
+ // Optimizing this table only last seconds
+ if (DI::config()->get('system', 'optimize_tables')) {
+ Logger::info('Optimize start');
+ DBA::e("OPTIMIZE TABLE `post-delivery`");
+ Logger::info('Optimize end');
+ }
+ }
+
+ /**
+ * Directly deliver messages or requeue them.
+ */
+ private static function deliverPosts()
+ {
+ $deliveries = DBA::p("SELECT `gsid`, MAX(`failed`) AS `failed` FROM `delivery-queue` GROUP BY `gsid` ORDER BY RAND()");
+ while ($delivery = DBA::fetch($deliveries)) {
+ if ($delivery['failed'] > 0) {
+ Logger::info('Removing failed deliveries', ['gsid' => $delivery['gsid'], 'failed' => $delivery['failed']]);
+ Delivery::removeFailedQueue($delivery['gsid']);
+ }
+
+ if (($delivery['failed'] < 3) || GServer::isReachableById($delivery['gsid'])) {
+ $priority = Worker::PRIORITY_HIGH;
+ } elseif ($delivery['failed'] < 6) {
+ $priority = Worker::PRIORITY_MEDIUM;
+ } elseif ($delivery['failed'] < 8) {
+ $priority = Worker::PRIORITY_LOW;
+ } else {
+ $priority = Worker::PRIORITY_NEGLIGIBLE;
+ }
+
+ if (Worker::add(['priority' => $priority, 'force_priority' => true], 'BulkDelivery', $delivery['gsid'])) {
+ Logger::info('Priority for BulkDelivery worker adjusted', ['gsid' => $delivery['gsid'], 'failed' => $delivery['failed'], 'priority' => $priority]);
+ }
+ }
+
+ // Optimizing this table only last seconds
+ if (DI::config()->get('system', 'optimize_tables')) {
+ Logger::info('Optimize start');
+ DBA::e("OPTIMIZE TABLE `delivery-queue`");
+ Logger::info('Optimize end');
+ }