From 57c95c93e12d2f4ae29016d600908b96029fd71f Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 30 Nov 2016 19:24:58 +0000 Subject: [PATCH] The frontend worker is now working as a full replacement for the crontab. --- include/poller.php | 70 +++++++++++++++++++++++----------------------- mod/worker.php | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/include/poller.php b/include/poller.php index 3aa9cf4b64..b3a66fc389 100644 --- a/include/poller.php +++ b/include/poller.php @@ -35,14 +35,21 @@ function poller_run($argv, $argc){ $a->start_process(); - if ($a->max_processes_reached()) + if (poller_max_connections_reached()) { return; + } - if (poller_max_connections_reached()) + if (App::maxload_reached()) { return; + } + + if(($argc <= 1) OR ($argv[1] != "no_cron")) { + poller_run_cron(); + } - if (App::maxload_reached()) + if ($a->max_processes_reached()) { return; + } // Checking the number of workers if (poller_too_much_workers()) { @@ -50,16 +57,6 @@ function poller_run($argv, $argc){ return; } - if(($argc <= 1) OR ($argv[1] != "no_cron")) { - poller_run_cron(); - } else - // Sleep four seconds before checking for running processes again to avoid having too many workers - sleep(4); - - // Checking number of workers - if (poller_too_much_workers()) - return; - $starttime = time(); while ($r = poller_worker_process()) { @@ -193,9 +190,7 @@ function poller_max_connections_reached() { $max = get_config("system", "max_connections"); // Fetch the percentage level where the poller will get active - $maxlevel = get_config("system", "max_connections_level"); - if ($maxlevel == 0) - $maxlevel = 75; + $maxlevel = Config::get("system", "max_connections_level", 75); if ($max == 0) { // the maximum number of possible user connections can be a system variable @@ -317,12 +312,7 @@ function poller_kill_stale_workers() { * @return bool Are there too much workers running? */ function poller_too_much_workers() { - - - $queues = get_config("system", "worker_queues"); - - if ($queues == 0) - $queues = 4; + $queues = Config::get("system", "worker_queues", 4); $maxqueues = $queues; @@ -331,9 +321,7 @@ function poller_too_much_workers() { // Decrease the number of workers at higher load $load = current_load(); if($load) { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) - $maxsysload = 50; + $maxsysload = intval(Config::get("system", "maxloadavg", 50)); $maxworkers = $queues; @@ -492,7 +480,7 @@ function poller_worker_process() { * @brief Call the front end worker */ function call_worker() { - if (!get_config("system", "frontend_worker")) { + if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { return; } @@ -504,27 +492,37 @@ function call_worker() { * @brief Call the front end worker if there aren't any active */ function call_worker_if_idle() { - if (!get_config("system", "frontend_worker")) { + if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { return; } // Do we have "proc_open"? Then we can fork the poller if (function_exists("proc_open")) { - // When was the last time that we called the poller? - // Less than 5 minutes? Then we quit - if ((time() - get_config("system", "proc_run_started")) < 300) { + // When was the last time that we called the worker? + // Less than one minute? Then we quit + if ((time() - get_config("system", "worker_started")) < 60) { return; } - // Remove long running and crashed process entries - poller_kill_stale_workers(); + set_config("system", "worker_started", time()); + + // Do we have enough running workers? Then we quit here. + if (poller_too_much_workers()) { + // Cleaning dead processes + poller_kill_stale_workers(); + get_app()->remove_inactive_processes(); - // Do we have an already running worker? Then we quit here. - if (poller_active_workers() > 0) { return; } - get_app()->proc_run(array('php', 'include/poller.php')); + poller_run_cron(); + + logger('Call poller', LOGGER_DEBUG); + + $args = array("php", "include/poller.php", "no_cron"); + $a = get_app(); + $a->proc_run($args); + return; } // We cannot execute background processes. @@ -556,6 +554,8 @@ function clear_worker_processes() { * @brief Runs the cron processes */ function poller_run_cron() { + logger('Add cron entries', LOGGER_DEBUG); + // Run the cron job that calls all other jobs proc_run(PRIORITY_MEDIUM, "include/cron.php"); diff --git a/mod/worker.php b/mod/worker.php index 9d0902bf36..aebffed744 100644 --- a/mod/worker.php +++ b/mod/worker.php @@ -10,7 +10,7 @@ use \Friendica\Core\PConfig; function worker_init($a){ - if (!Config::get("system", "frontend_worker")) { + if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { return; } -- 2.39.5