]> git.mxchange.org Git - friendica.git/commitdiff
Catch worker argument type errors
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 26 Nov 2022 20:21:46 +0000 (15:21 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 26 Nov 2022 20:21:46 +0000 (15:21 -0500)
- This marks the invalid worker queue item as completed instead of endlessly retrying it
- Address https://github.com/friendica/friendica/issues/11992#issuecomment-1327029331

src/Core/Worker.php

index 96f3e7ae042e30fae459cff6ca272d6f1bdba261..47da04b35cfe9b8d2a39775e4022ecf130deb340 100644 (file)
@@ -568,7 +568,15 @@ class Worker
 
                // Set the workerLogger as new default logger
                if ($method_call) {
-                       call_user_func_array(sprintf('Friendica\Worker\%s::execute', $funcname), $argv);
+                       try {
+                               call_user_func_array(sprintf('Friendica\Worker\%s::execute', $funcname), $argv);
+                       } catch (\TypeError $e) {
+                               // 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()]);
+                               Worker::defer();
+                       }
                } else {
                        $funcname($argv, count($argv));
                }