X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FWorker.php;h=d7eaeb15ebcada0c2c8cd31bc2328661be03e609;hb=5ae03319936f70d12eaf4a09dfcda020de429380;hp=00885f69200a04f59c8a601020031ebc7a5d8a0c;hpb=d2429b109601ab875f0ed0802b349edee07fba06;p=friendica.git diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 00885f6920..d7eaeb15eb 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -601,7 +601,7 @@ class Worker $rest = round(max(0, $up_duration - (self::$db_duration + self::$lock_duration)), 2); $exec = round($duration, 2); - Logger::info('Performance:', ['state' => self::$state, 'count' => $dbcount, 'stat' => $dbstat, 'write' => $dbwrite, 'lock' => $dblock, 'total' => $dbtotal, 'rest' => $rest, 'exec' => $exec]); + Logger::info('Performance:', ['function' => $funcname, 'state' => self::$state, 'count' => $dbcount, 'stat' => $dbstat, 'write' => $dbwrite, 'lock' => $dblock, 'total' => $dbtotal, 'rest' => $rest, 'exec' => $exec]); self::coolDown(); @@ -622,7 +622,7 @@ class Worker Logger::info('Longer than 2 minutes.', ['priority' => $queue['priority'], 'id' => $queue['id'], 'duration' => round($duration/60, 3)]); } - Logger::info('Process done.', ['priority' => $queue['priority'], 'id' => $queue['id'], 'duration' => round($duration, 3)]); + Logger::info('Process done.', ['function' => $funcname, 'priority' => $queue['priority'], 'retrial' => $queue['retrial'], 'id' => $queue['id'], 'duration' => round($duration, 3)]); DI::profiler()->saveLog(DI::logger(), 'ID ' . $queue['id'] . ': ' . $funcname); } @@ -1276,7 +1276,7 @@ class Worker $added = 0; if (!is_int($priority) || !in_array($priority, self::PRIORITIES)) { - Logger::warning('Invalid priority', ['priority' => $priority, 'command' => $command, 'callstack' => System::callstack(20)]); + Logger::warning('Invalid priority', ['priority' => $priority, 'command' => $command]); $priority = self::PRIORITY_MEDIUM; } @@ -1365,13 +1365,25 @@ class Worker return $new_retrial; } + /** + * Get the number of retrials for the current worker task + * + * @return integer + */ + public static function getRetrial(): int + { + $queue = DI::app()->getQueue(); + return $queue['retrial'] ?? 0; + } + /** * Defers the current worker entry * + * @param int $worker_defer_limit Maximum defer limit * @return boolean had the entry been deferred? * @throws \Exception */ - public static function defer(): bool + public static function defer(int $worker_defer_limit = 0): bool { $queue = DI::app()->getQueue(); @@ -1384,6 +1396,10 @@ class Worker $max_level = DI::config()->get('system', 'worker_defer_limit'); + if ($worker_defer_limit) { + $max_level = min($worker_defer_limit, $max_level); + } + $new_retrial = self::getNextRetrial($queue, $max_level); if ($new_retrial > $max_level) {