]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
quattro fix for #2385 - respect acl on event edit
[friendica.git] / include / poller.php
index d68e8081cac7f39d13eca0674118b3aa0f46a24c..7ffd47aa68e653635f5460dbaa6ff454dfbdeb9f 100644 (file)
@@ -29,17 +29,8 @@ function poller_run(&$argv, &$argc){
        if (poller_max_connections_reached())
                return;
 
-       $load = current_load();
-       if($load) {
-               $maxsysload = intval(get_config('system','maxloadavg'));
-               if($maxsysload < 1)
-                       $maxsysload = 50;
-
-               if(intval($load) > $maxsysload) {
-                       logger('system: load ' . $load . ' too high. poller deferred to next scheduled run.');
-                       return;
-               }
-       }
+       if (App::maxload_reached())
+               return;
 
        // Checking the number of workers
        if (poller_too_much_workers(1)) {
@@ -161,35 +152,42 @@ function poller_max_connections_reached() {
                $used = count($r);
 
                logger("Connection usage (user values): ".$used."/".$max, LOGGER_DEBUG);
-       } else {
-               // Since there are no user specific limitations we will now check for the system values
-               $r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
-               if (!$r)
-                       return false;
 
-               $max = intval($r[0]["Value"]);
-               if ($max == 0)
-                       return false;
+               $level = $used / $max;
 
-               $r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
-               if (!$r)
-                       return false;
+               if ($level >= (3/4)) {
+                       logger("Maximum level (3/4) of user connections reached: ".$used."/".$max);
+                       return true;
+               }
+       }
 
-               $used = intval($r[0]["Value"]);
-               if ($used == 0)
-                       return false;
+       // We will now check for the system values.
+       // This limit could be reached although the user limits are fine.
+       $r = q("SHOW VARIABLES WHERE `variable_name` = 'max_connections'");
+       if (!$r)
+               return false;
 
-               logger("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
-       }
+       $max = intval($r[0]["Value"]);
+       if ($max == 0)
+               return false;
+
+       $r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
+       if (!$r)
+               return false;
+
+       $used = intval($r[0]["Value"]);
+       if ($used == 0)
+               return false;
+
+       logger("Connection usage (system values): ".$used."/".$max, LOGGER_DEBUG);
 
        $level = $used / $max;
 
        if ($level < (3/4))
                return false;
 
-       logger("Maximum level (3/4) of connections reached: ".$used."/".$max);
+       logger("Maximum level (3/4) of system connections reached: ".$used."/".$max);
        return true;
-
 }
 
 /**
@@ -198,6 +196,12 @@ function poller_max_connections_reached() {
  */
 function poller_kill_stale_workers() {
        $r = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
+
+       if (!is_array($r) || count($r) == 0) {
+               // No processing here needed
+               return;
+       }
+
        foreach($r AS $pid)
                if (!posix_kill($pid["pid"], 0))
                        q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `pid` = 0 WHERE `pid` = %d",