]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Worker.php
Refactor IManageConfigValues interface
[friendica.git] / src / Core / Worker.php
index cbe6645294fe16b6eb289e5c10d16145aadbc6a3..2db9256d13804c372a5e0e98b44c77f67f1eb215 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -331,7 +331,7 @@ class Worker
                $mypid = getmypid();
 
                // Quit when in maintenance
-               if (DI::config()->get('system', 'maintenance', false, true)) {
+               if (DI::config()->get('system', 'maintenance', false)) {
                        Logger::notice('Maintenance mode - quit process', ['pid' => $mypid]);
                        return false;
                }
@@ -574,7 +574,7 @@ class Worker
                                // No need to defer a worker queue entry if the arguments are invalid
                                Logger::notice('Wrong worker arguments', ['class' => $funcname, 'argv' => $argv, 'queue' => $queue, 'message' => $e->getMessage()]);
                        } catch (\Throwable $e) {
-                               Logger::error('Uncaught exception in worker execution', ['class' => get_class($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine(), 'trace' => $e->getTraceAsString()]);
+                               Logger::error('Uncaught exception in worker execution', ['class' => get_class($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine(), 'trace' => $e->getTraceAsString(), 'previous' => $e->getPrevious()]);
                                Worker::defer();
                        }
                } else {
@@ -1264,7 +1264,7 @@ class Worker
 
                $command = array_shift($args);
                $parameters = json_encode($args);
-               $found = DBA::exists('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)) {
@@ -1277,14 +1277,17 @@ class Worker
                        return 0;
                }
 
-               if (!$found) {
+               if (empty($queue)) {
                        if (!DBA::insert('workerqueue', ['command' => $command, 'parameter' => $parameters, 'created' => $created,
                                'priority' => $priority, 'next_try' => $delayed])) {
                                return 0;
                        }
                        $added = DBA::lastInsertId();
                } elseif ($force_priority) {
-                       DBA::update('workerqueue', ['priority' => $priority], ['command' => $command, 'parameter' => $parameters, 'done' => false, 'pid' => 0]);
+                       $ret = DBA::update('workerqueue', ['priority' => $priority], ['command' => $command, 'parameter' => $parameters, 'done' => false, 'pid' => 0]);
+                       if ($ret && ($priority != $queue['priority'])) {
+                               $added = $queue['id'];
+                       }
                }
 
                // Set the IPC flag to ensure an immediate process execution via daemon