]> git.mxchange.org Git - friendica.git/commitdiff
The function to check for maxload and the lockfile is centralized
authorMichael Vogel <icarus@dabo.de>
Tue, 8 Mar 2016 19:28:09 +0000 (20:28 +0100)
committerMichael Vogel <icarus@dabo.de>
Tue, 8 Mar 2016 19:28:09 +0000 (20:28 +0100)
boot.php
include/cron.php
include/cronhooks.php
include/delivery.php
include/discover_poco.php
include/onepoll.php
include/poller.php
include/pubsubpublish.php
include/queue.php
include/update_gcontact.php

index 5cc34993112498274b9c540ada69fe3ed3906b26..fe4e5a275701d54126aeb447c71981999aee9dee 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -30,7 +30,7 @@ require_once('include/cache.php');
 require_once('library/Mobile_Detect/Mobile_Detect.php');
 require_once('include/features.php');
 require_once('include/identity.php');
-
+require_once('include/pidfile.php');
 require_once('update.php');
 require_once('include/dbstructure.php');
 
@@ -1098,6 +1098,41 @@ class App {
                return($this->is_friendica_app);
        }
 
+       function maxload_reached() {
+
+               $maxsysload = intval(get_config('system', 'maxloadavg'));
+               if ($maxsysload < 1)
+                       $maxsysload = 50;
+
+               $load = current_load();
+               if ($load) {
+                       if (intval($load) > $maxsysload) {
+                               logger('system: load '.$load.' too high.');
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       function is_already_running($task, $taskname, $timeout = 540) {
+
+               $lockpath = get_lockpath();
+               if ($lockpath != '') {
+                       $pidfile = new pidfile($lockpath, $taskname);
+                       if ($pidfile->is_already_running()) {
+                               logger("Already running");
+                               if ($pidfile->running_time() > $timeout) {
+                                       $pidfile->kill();
+                                       logger("killed stale process");
+                                       // Calling a new instance
+                                       if ($task != "")
+                                               proc_run('php', $task);
+                               }
+                               return true;
+                       }
+               }
+               return false;
+       }
 }
 
 /**
index 6143281710feed8e33a175a385caa56f53c63440..1c3297c9322e87280ef114c552fbe9134a8fcc63 100644 (file)
@@ -34,7 +34,6 @@ function cron_run(&$argv, &$argc){
        require_once('include/Contact.php');
        require_once('include/email.php');
        require_once('include/socgraph.php');
-       require_once('include/pidfile.php');
        require_once('mod/nodeinfo.php');
 
        load_config('config');
@@ -42,32 +41,10 @@ function cron_run(&$argv, &$argc){
 
        // Don't check this stuff if the function is called by the poller
        if (App::callstack() != "poller_run") {
-               $maxsysload = intval(get_config('system','maxloadavg'));
-               if($maxsysload < 1)
-                       $maxsysload = 50;
-
-               $load = current_load();
-               if($load) {
-                       if(intval($load) > $maxsysload) {
-                               logger('system: load '.$load.' too high. cron deferred to next scheduled run.');
-                               return;
-                       }
-               }
-
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'cron');
-                       if($pidfile->is_already_running()) {
-                               logger("cron: Already running");
-                               if ($pidfile->running_time() > 9*60) {
-                                       $pidfile->kill();
-                                       logger("cron: killed stale process");
-                                       // Calling a new instance
-                                       proc_run('php','include/cron.php');
-                               }
-                               exit;
-                       }
-               }
+               if (App::maxload_reached())
+                       return;
+               if (App::is_already_running('include/cron.php', 'cron', 540))
+                       return;
        }
 
        $last = get_config('system','last_cron');
index 71cb0fb7b2f44a72caad66ecde5eb29f84cbc6c2..22812fb8643beed7dbc1c7b246f15e99d185de07 100644 (file)
@@ -19,39 +19,16 @@ function cronhooks_run(&$argv, &$argc){
 
        require_once('include/session.php');
        require_once('include/datetime.php');
-       require_once('include/pidfile.php');
 
        load_config('config');
        load_config('system');
 
        // Don't check this stuff if the function is called by the poller
        if (App::callstack() != "poller_run") {
-               $maxsysload = intval(get_config('system','maxloadavg'));
-               if($maxsysload < 1)
-                       $maxsysload = 50;
-
-               $load = current_load();
-               if($load) {
-                       if(intval($load) > $maxsysload) {
-                               logger('system: load ' . $load . ' too high. Cronhooks deferred to next scheduled run.');
-                               return;
-                       }
-               }
-
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'cronhooks');
-                       if($pidfile->is_already_running()) {
-                               logger("cronhooks: Already running");
-                               if ($pidfile->running_time() > 19*60) {
-                                       $pidfile->kill();
-                                       logger("cronhooks: killed stale process");
-                                       // Calling a new instance
-                                       proc_run('php','include/cronhooks.php');
-                               }
-                               exit;
-                       }
-               }
+               if (App::maxload_reached())
+                       return;
+               if (App::is_already_running('include/cronhooks.php', 'cronhooks', 1140))
+                       return;
        }
 
        $last = get_config('system','last_cronhook');
index 021ceb9968a8496e738685021af242f60102aaa4..e5ca0946b34db2de8533024a398daf2d60e5117e 100644 (file)
@@ -57,17 +57,8 @@ function delivery_run(&$argv, &$argc){
                        continue;
                }
 
-               $maxsysload = intval(get_config('system','maxloadavg'));
-               if($maxsysload < 1)
-                       $maxsysload = 50;
-
-               $load = current_load();
-               if($load) {
-                       if(intval($load) > $maxsysload) {
-                               logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
-                               return;
-                       }
-               }
+               if (App::maxload_reached())
+                       return;
 
                // It's ours to deliver. Remove it from the queue.
 
index 550c9897be9fb3daee861cdc9561ad70997486f0..8ba2bb2365afcfaf71350f6ade1217ab256944a6 100644 (file)
@@ -20,25 +20,14 @@ function discover_poco_run(&$argv, &$argc){
 
        require_once('include/session.php');
        require_once('include/datetime.php');
-       require_once('include/pidfile.php');
 
        load_config('config');
        load_config('system');
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $maxsysload = intval(get_config('system','maxloadavg'));
-               if($maxsysload < 1)
-                       $maxsysload = 50;
-
-               $load = current_load();
-               if($load) {
-                       if(intval($load) > $maxsysload) {
-                               logger('system: load '.$load.' too high. discover_poco deferred to next scheduled run.');
-                               return;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::maxload_reached())
+                       return;
 
        if(($argc > 2) && ($argv[1] == "dirsearch")) {
                $search = urldecode($argv[2]);
@@ -54,23 +43,9 @@ function discover_poco_run(&$argv, &$argc){
                die("Unknown or missing parameter ".$argv[1]."\n");
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'discover_poco'.$mode.urlencode($search));
-                       if($pidfile->is_already_running()) {
-                               logger("discover_poco: Already running");
-                               if ($pidfile->running_time() > 19*60) {
-                                       $pidfile->kill();
-                                       logger("discover_poco: killed stale process");
-                                       // Calling a new instance
-                                       if ($mode == 0)
-                                               proc_run('php','include/discover_poco.php');
-                               }
-                               exit;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::is_already_running('include/discover_poco.php', 'discover_poco'.$mode.urlencode($search), 1140))
+                       return;
 
        $a->set_baseurl(get_config('system','url'));
 
index 8b91070dcce453137d752c92c695a0acdcc7dfbc..4d270f6135a03553801109d118989c9b13140f02 100644 (file)
@@ -31,7 +31,6 @@ function onepoll_run(&$argv, &$argc){
        require_once('include/Contact.php');
        require_once('include/email.php');
        require_once('include/socgraph.php');
-       require_once('include/pidfile.php');
        require_once('include/queue_fn.php');
 
        load_config('config');
@@ -61,20 +60,9 @@ function onepoll_run(&$argv, &$argc){
        }
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'onepoll'.$contact_id);
-                       if ($pidfile->is_already_running()) {
-                               logger("onepoll: Already running for contact ".$contact_id);
-                               if ($pidfile->running_time() > 9*60) {
-                                       $pidfile->kill();
-                                       logger("killed stale process");
-                               }
-                               exit;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::is_already_running('', 'onepoll'.$contact_id, 540))
+                       return;
 
        $d = datetime_convert();
 
index 755862eb6bf32d51247967890910d951aed4d26a..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)) {
index e7a55f5f09f37b682af45b5c11e3129c8011d452..b438b36e6b959f3ed8d49d8a6ac31234b7d6617f 100644 (file)
@@ -74,28 +74,14 @@ function pubsubpublish_run(&$argv, &$argc){
        };
 
        require_once('include/items.php');
-       require_once('include/pidfile.php');
 
        load_config('config');
        load_config('system');
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'pubsubpublish');
-                       if($pidfile->is_already_running()) {
-                               logger("Already running");
-                               if ($pidfile->running_time() > 9*60) {
-                                       $pidfile->kill();
-                                       logger("killed stale process");
-                                       // Calling a new instance
-                                       proc_run('php',"include/pubsubpublish.php");
-                               }
-                               return;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::is_already_running("include/pubsubpublish.php", 'pubsubpublish', 540))
+                       return;
 
        $a->set_baseurl(get_config('system','url'));
 
index 157fc88d944a350b747a731ef0756f1117d432cb..1222199c70960c03f00abf8f3bdfde1d0bf83dcd 100644 (file)
@@ -22,29 +22,15 @@ function queue_run(&$argv, &$argc){
        require_once("include/datetime.php");
        require_once('include/items.php');
        require_once('include/bbcode.php');
-       require_once('include/pidfile.php');
        require_once('include/socgraph.php');
 
        load_config('config');
        load_config('system');
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'queue');
-                       if($pidfile->is_already_running()) {
-                               logger("queue: Already running");
-                               if ($pidfile->running_time() > 9*60) {
-                                       $pidfile->kill();
-                                       logger("queue: killed stale process");
-                                       // Calling a new instance
-                                       proc_run('php',"include/queue.php");
-                               }
-                               return;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::is_already_running('include/queue.php', 'queue', 540))
+                       return;
 
        $a->set_baseurl(get_config('system','url'));
 
index b7bf25aa242ae16bdf08bb63a66bcff0e26c7ba0..25c11806a22a243fd59ec7f8b66a37060cc0bba0 100644 (file)
@@ -16,7 +16,6 @@ function update_gcontact_run(&$argv, &$argc){
                unset($db_host, $db_user, $db_pass, $db_data);
        };
 
-       require_once('include/pidfile.php');
        require_once('include/Scrape.php');
        require_once("include/socgraph.php");
 
@@ -38,20 +37,9 @@ function update_gcontact_run(&$argv, &$argc){
        }
 
        // Don't check this stuff if the function is called by the poller
-       if (App::callstack() != "poller_run") {
-               $lockpath = get_lockpath();
-               if ($lockpath != '') {
-                       $pidfile = new pidfile($lockpath, 'update_gcontact'.$contact_id);
-                       if ($pidfile->is_already_running()) {
-                               logger("update_gcontact: Already running for contact ".$contact_id);
-                               if ($pidfile->running_time() > 9*60) {
-                                       $pidfile->kill();
-                                       logger("killed stale process");
-                               }
-                               exit;
-                       }
-               }
-       }
+       if (App::callstack() != "poller_run")
+               if (App::is_already_running('', 'update_gcontact'.$contact_id, 540))
+                       return;
 
        $r = q("SELECT * FROM `gcontact` WHERE `id` = %d", intval($contact_id));