]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
regenerated master messages.po for new strings in the admin panel
[friendica.git] / include / poller.php
index ec6653b4882b83f3abaf5664793b7918c927b15f..dfc3b90cf08c4249df88095cfc65b67663e2ca4f 100644 (file)
@@ -46,10 +46,10 @@ function poller_run(&$argv, &$argc){
 
        if(($argc <= 1) OR ($argv[1] != "no_cron")) {
                // Run the cron job that calls all other jobs
-               proc_run("php","include/cron.php");
+               proc_run(PRIORITY_MEDIUM, "include/cron.php");
 
                // Run the cronhooks job separately from cron for being able to use a different timing
-               proc_run("php","include/cronhooks.php");
+               proc_run(PRIORITY_MEDIUM, "include/cronhooks.php");
 
                // Cleaning dead processes
                poller_kill_stale_workers();
@@ -273,8 +273,30 @@ function poller_too_much_workers() {
                $s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00'");
                $entries = $s[0]["total"];
 
+               if (Config::get("system", "worker_fastlane", false) AND ($queues > 0) AND ($entries > 0) AND ($active >= $queues)) {
+                       $s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00' ORDER BY `priority` LIMIT 1");
+                       $top_priority = $s[0]["priority"];
+
+                       $s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `priority` <= %d AND `executed` != '0000-00-00 00:00:00'",
+                               intval($top_priority));
+                       $high_running = $s[0]["total"];
+
+                       /// @todo define maximum number of fastlanes
+                       if (($high_running == 0) AND ($top_priority >= PRIORITY_HIGH) AND ($top_priority < PRIORITY_LOW)) {
+                               logger("There are jobs with priority ".$top_priority." waiting but none is executed. Open a fastlane.", LOGGER_DEBUG);
+                               $queues = $active + 1;
+                       }
+               }
+
                logger("Current load: ".$load." - maximum: ".$maxsysload." - current queues: ".$active."/".$entries." - maximum: ".$queues."/".$maxqueues, LOGGER_DEBUG);
 
+               // Are there fewer workers running as possible? Then fork a new one.
+               if (!get_config("system", "worker_dont_fork") AND ($queues > ($active + 1)) AND ($entries > 1)) {
+                       logger("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG);
+                       $args = array("php", "include/poller.php", "no_cron");
+                       $a = get_app();
+                       $a->proc_run($args);
+               }
        }
 
        return($active >= $queues);