]> git.mxchange.org Git - friendica.git/commitdiff
Locking seems to work great now
authorMichael <heluecht@pirati.ca>
Sun, 4 Jun 2017 18:59:50 +0000 (18:59 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 4 Jun 2017 18:59:50 +0000 (18:59 +0000)
include/poller.php
src/Util/Lock.php

index 60937fb7e0107ffe36af055bf9b7af859359f725..0d07605882b2f06e5aa49d63593b01080dd93a33 100644 (file)
@@ -45,33 +45,32 @@ function poller_run($argv, $argc){
        $a->start_process();
 
        if ($a->min_memory_reached()) {
+               logger('Pre check: Memory limit reached, quitting.', LOGGER_DEBUG);
                return;
        }
 
        if (poller_max_connections_reached()) {
+               logger('Pre check: maximum connections reached, quitting.', LOGGER_DEBUG);
                return;
        }
 
        if ($a->maxload_reached()) {
+               logger('Pre check: maximum load reached, quitting.', LOGGER_DEBUG);
                return;
        }
 
        if ($a->max_processes_reached()) {
-               return;
-       }
-
-       if (!Lock::set('poller_worker')) {
+               logger('Pre check: maximum processes reached, quitting.', LOGGER_DEBUG);
                return;
        }
 
        // Checking the number of workers
        if (poller_too_much_workers()) {
                poller_kill_stale_workers();
+               logger('Pre check: Active worker limit reached, quitting.', LOGGER_DEBUG);
                return;
        }
 
-       Lock::remove('poller_worker');
-
        $starttime = time();
 
        while ($r = poller_worker_process()) {
@@ -87,7 +86,9 @@ function poller_run($argv, $argc){
                }
 
                if (!Lock::set('poller_worker')) {
-                       return;
+                       logger('Cannot get a lock, retrying.', LOGGER_DEBUG);
+                       poller_unclaim_process();
+                       continue;
                }
 
                // Count active workers and compare them with a maximum value that depends on the load
@@ -104,7 +105,7 @@ function poller_run($argv, $argc){
                }
 
                // Quit the poller once every hour
-               if (time() > ($starttime + 3600)) {
+               if (time() > ($starttime + 360)) {
                        logger('Process lifetime reachted, quitting.', LOGGER_DEBUG);
                        return;
                }
@@ -733,7 +734,7 @@ function poller_run_cron() {
 if (array_search(__file__,get_included_files())===0){
        poller_run($_SERVER["argv"],$_SERVER["argc"]);
 
-       Lock::removeAll();
+       Lock::remove('poller_worker');
 
        poller_unclaim_process();
 
index 175ad34e36617c668ddb885dd1cfa1e45093a59f..e8011bf59f13956dcea8214f4bf5dddf4ff2f73f 100644 (file)
@@ -48,20 +48,16 @@ class Lock {
         *
         * @param string $fn_name Name of the lock
         * @param integer $timeout Seconds until we give up
-        * @param integer $wait_sec Time between to lock attempts
         *
         * @return boolean Was the lock successful?
         */
-       public static function set($fn_name, $timeout = 30, $wait_sec = 2) {
-               if ($wait_sec == 0) {
-                       $wait_sec = 2;
-               }
-
+       public static function set($fn_name, $timeout = 120) {
                $got_lock = false;
                $start = time();
 
                $memcache = self::memcache();
                if (is_object($memcache)) {
+                       $wait_sec = 1;
                        $cachekey = get_app()->get_hostname().";lock:".$fn_name;
 
                        do {
@@ -87,6 +83,9 @@ class Lock {
 
                        return $got_lock;
                }
+
+               $wait_sec = 2;
+
                do {
                        dba::lock('locks');
                        $lock = dba::select('locks', array('locked', 'pid'), array('name' => $fn_name), array('limit' => 1));