]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Worker.php
Merge pull request #10033 from friendica/bug/10032-event-query
[friendica.git] / src / Core / Worker.php
index 619cb5bfa32957d73ed9ec780c4cdeb9599c0ddc..56c62451b9bfb8d17df722013ea7b00c2d865b05 100644 (file)
@@ -1085,95 +1085,6 @@ class Worker
                self::$db_duration_write += (microtime(true) - $stamp);
        }
 
-       /**
-        * Call the front end worker
-        *
-        * @return void
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function callWorker()
-       {
-               if (!DI::config()->get("system", "frontend_worker")) {
-                       return;
-               }
-
-               $url = DI::baseUrl() . '/worker';
-               DI::httpRequest()->fetch($url, 1);
-       }
-
-       /**
-        * Call the front end worker if there aren't any active
-        *
-        * @return void
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function executeIfIdle()
-       {
-               self::checkDaemonState();
-
-               if (!DI::config()->get("system", "frontend_worker")) {
-                       return;
-               }
-
-               // Do we have "proc_open"? Then we can fork the worker
-               if (function_exists("proc_open")) {
-                       // When was the last time that we called the worker?
-                       // Less than one minute? Then we quit
-                       if ((time() - DI::config()->get("system", "worker_started")) < 60) {
-                               return;
-                       }
-
-                       DI::config()->set("system", "worker_started", time());
-
-                       // Do we have enough running workers? Then we quit here.
-                       if (self::tooMuchWorkers()) {
-                               // Cleaning dead processes
-                               self::killStaleWorkers();
-                               DI::modelProcess()->deleteInactive();
-
-                               return;
-                       }
-
-                       self::runCron();
-
-                       Logger::info('Call worker');
-                       self::spawnWorker();
-                       return;
-               }
-
-               // We cannot execute background processes.
-               // We now run the processes from the frontend.
-               // This won't work with long running processes.
-               self::runCron();
-
-               self::clearProcesses();
-
-               $workers = self::activeWorkers();
-
-               if ($workers == 0) {
-                       self::callWorker();
-               }
-       }
-
-       /**
-        * Removes long running worker processes
-        *
-        * @return void
-        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        */
-       public static function clearProcesses()
-       {
-               $timeout = DI::config()->get("system", "frontend_worker_timeout", 10);
-
-               /// @todo We should clean up the corresponding workerqueue entries as well
-               $stamp = (float)microtime(true);
-               $condition = ["`created` < ? AND `command` = 'worker.php'",
-                               DateTimeFormat::utc("now - ".$timeout." minutes")];
-               DBA::delete('process', $condition);
-               self::$db_duration = (microtime(true) - $stamp);
-               self::$db_duration_write += (microtime(true) - $stamp);
-       }
-
        /**
         * Runs the cron processes
         *
@@ -1232,19 +1143,26 @@ class Worker
                }
 
                // We now are in the new worker
+               $pid = getmypid();
+
                DBA::connect();
                /// @todo Reinitialize the logger to set a new process_id and uid
-               
-               self::IPCSetJobState(true, getmypid());
-               Logger::info('Worker spawned', ['pid' => getmypid()]);
+               DI::process()->setPid($pid);
+
+               $cycles = 0;
+               while (!self::IPCJobsExists($pid) && (++$cycles < 100)) {
+                       usleep(10000);
+               }
+
+               Logger::info('Worker spawned', ['pid' => $pid, 'wait_cycles' => $cycles]);
 
                self::processQueue($do_cron);
 
                self::unclaimProcess();
 
-               self::IPCSetJobState(false, getmypid());
+               self::IPCSetJobState(false, $pid);
                DI::process()->end();
-               Logger::info('Worker ended', ['pid' => getmypid()]);
+               Logger::info('Worker ended', ['pid' => $pid]);
                exit();
        }