The frontend worker is removed

This commit is contained in:
Michael 2021-01-01 23:05:26 +00:00
parent 9a6141dcbe
commit a81ac835a1
10 changed files with 8 additions and 220 deletions

View file

@ -1072,95 +1072,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
*
@ -1230,7 +1141,7 @@ class Worker
{
// Worker and daemon are started from the command line.
// This means that this is executed by a PHP interpreter without runtime limitations
if (in_array(DI::mode()->getExecutor(), [Mode::DAEMON, Mode::WORKER])) {
if (function_exists('pcntl_fork') && in_array(DI::mode()->getExecutor(), [Mode::DAEMON, Mode::WORKER])) {
self::forkProcess($do_cron);
} else {
$process = new Core\Process(DI::logger(), DI::mode(), DI::config(),