]> git.mxchange.org Git - friendica.git/commitdiff
Ensure that the daemon is called faster and more reliably
authorMichael <heluecht@pirati.ca>
Wed, 18 Nov 2020 13:29:10 +0000 (13:29 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 18 Nov 2020 13:29:10 +0000 (13:29 +0000)
bin/daemon.php
src/Core/Worker.php

index 3fe803d6fc772eaaf5f105a128630b36dc3e6047..d08aa37d15906fab61ceaf63a67707f26b0d0c24 100755 (executable)
@@ -33,6 +33,7 @@ use Friendica\Core\Logger;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Util\DateTimeFormat;
 use Psr\Log\LoggerInterface;
 
 // Get options
@@ -193,8 +194,8 @@ while (true) {
        if ($do_cron || (!DI::process()->isMaxLoadReached() && Worker::entriesExists() && Worker::isReady())) {
                Worker::spawnWorker($do_cron);
        } else {
-               Logger::info('Cool down', ['pid' => $pid]);
-               sleep(10);
+               Logger::info('Cool down for 5 seconds', ['pid' => $pid]);
+               sleep(5);
        }
 
        if ($do_cron) {
@@ -205,8 +206,9 @@ while (true) {
                $last_cron = time();
        }
 
-       Logger::info("Sleeping", ["pid" => $pid]);
        $start = time();
+       Logger::info("Sleeping", ["pid" => $pid, 'until' => gmdate(DateTimeFormat::MYSQL, $start + $wait_interval)]);
+
        do {
                $seconds = (time() - $start);
 
@@ -214,7 +216,7 @@ while (true) {
                // Background: After jobs had been started, they often fork many workers.
                // To not waste too much time, the sleep period increases.
                $arg = (($seconds + 1) / ($wait_interval / 9)) + 1;
-               $sleep = round(log10($arg) * 1000000, 0);
+               $sleep = min(1000000, round(log10($arg) * 1000000, 0));
                usleep($sleep);
 
                $timeout = ($seconds >= $wait_interval);
index c2fd16f24553fac6a50c96c6907e181519b297bc..04e4819cb265b926267c58ec31985eb4f5e79874 100644 (file)
@@ -1254,6 +1254,11 @@ class Worker
                        DBA::update('workerqueue', ['priority' => $priority], ['parameter' => $parameters, 'done' => false, 'pid' => 0]);
                }
 
+               // Set the IPC flag to ensure an immediate process execution via daemon
+               if (DI::config()->get('system', 'worker_daemon_mode', false)) {
+                       self::IPCSetJobState(true);
+               }
+
                // Should we quit and wait for the worker to be called as a cronjob?
                if ($dont_fork) {
                        return $added;
@@ -1272,9 +1277,8 @@ class Worker
                        return $added;
                }
 
-               // We tell the daemon that a new job entry exists
+               // Quit on daemon mode
                if (DI::config()->get('system', 'worker_daemon_mode', false)) {
-                       // We don't have to set the IPC flag - this is done in "tooMuchWorkers"
                        return $added;
                }