]> git.mxchange.org Git - friendica.git/commitdiff
The frontend worker is removed
authorMichael <heluecht@pirati.ca>
Fri, 1 Jan 2021 23:05:26 +0000 (23:05 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 1 Jan 2021 23:05:26 +0000 (23:05 +0000)
doc/Settings.md
doc/de/Settings.md
src/App.php
src/Core/Installer.php
src/Core/Worker.php
src/Module/Admin/Site.php
src/Module/Worker.php [deleted file]
static/defaults.config.php
view/templates/admin/site.tpl
view/theme/frio/templates/admin/site.tpl

index 67a5af832ec1496749b5f3e556bd7d4d61e0f127..16b7ec38a4c76726039836d7e2b8160239e52f36 100644 (file)
@@ -240,15 +240,9 @@ This section allows you to configure the background process that is triggered by
 The process does check the available system resources before creating a new worker for a task.
 Because of this, it may happen that the maximum number of worker processes you allow will not be reached.
 
-If your server setup does not allow you to use the `proc_open` function of PHP, please disable it in this section.
-
 The tasks for the background process have priorities.
 To guarantee that important tasks are executed even though the system has a lot of work to do, it is useful to enable the *fastlane*.
 
-Should you not be able to run a cron job on your server, you can also activate the *frontend* worker.
-If you have done so, you can call `example.com/worker` (replace example.com with your actual domain name) on a regular basis from an external service.
-This will then trigger the execution of the background process.
-
 ### Relocate
 
 ## Users
index 33023fd7126903d9b05a061033c50f66c55f04fd..34b349e88520aa4dfb2af308ef3409135050e23d 100644 (file)
@@ -227,15 +227,9 @@ In diesem Abschnitt kann der Hintergrund-Prozess konfiguriert werden.
 Bevor ein neuer *Worker* Prozess gestartet wird, überprüft das System, dass die vorhandenen Resourchen ausrechend sind,
 Aus diesem Grund kann es sein, dass die maximale Zahl der Hintergrungprozesse nicht erreicht wird.
 
-Sollte die PHP Funktion `proc_open` auf dem Server nicht verfügbar sein, kann die Verwendung durch Friendica hier unterbunden werden.
-
 Die Aufgaben die im Hintergrund erledigt werden, haben Prioritäten zugeteilt.
 Um garantieren zu können, das wichtige Prozesse schnellst möglich abgearbeitet werden können, selbst wenn das System gerade stark belastet ist, sollte die *fastlane* aktiviert sein.
 
-Wenn es auf deinem Server nicht möglich ist, einen cron Job zu starten, kannst du den *frontend* Worker einschalten.
-Nachdem dies geschehen ist, kannst du `example.com/worker` (tausche example.com mit dem echten Domainnamen aus) aufrufen werden.
-Dadurch werden dann die Aufgaben aktiviert, die der cron Job sonst aktivieren würde.
-
 ### Umsiedeln
 
 ## Nutzer
index de8311848969c079ad530122c5c81c776fbad87d..4a9552aafb2b2e5b7ea326fed2d788eb7a9247ff 100644 (file)
@@ -445,11 +445,6 @@ class App
                                Core\Hook::callAll('init_1');
                        }
 
-                       // Exclude the backend processes from the session management
-                       if ($this->mode->isBackend()) {
-                               Core\Worker::executeIfIdle();
-                       }
-
                        if ($this->mode->isNormal() && !$this->mode->isBackend()) {
                                $requester = HTTPSignature::getSigner('', $_SERVER);
                                if (!empty($requester)) {
index 4f2f2d99f3c9e0615781a6dff73b0ca4f8c9c676..70ee4bba4064caa0361b6824ab2bcd3dfaaca7b5 100644 (file)
@@ -463,6 +463,13 @@ class Installer
                );
                $returnVal = $returnVal ? $status : false;
 
+               $status = $this->checkFunction('proc_open',
+                       DI::l10n()->t('Program execution functions'),
+                       DI::l10n()->t('Error: Program execution functions required but not enabled.'),
+                       true
+               );
+               $returnVal = $returnVal ? $status : false;
+
                $status = $this->checkFunction('json_encode',
                        DI::l10n()->t('JSON PHP module'),
                        DI::l10n()->t('Error: JSON PHP module required but not installed.'),
index e90747e41a1a9bd04bb2b98f5648ccc962565605..a0e444642f29021d5f33a06ec5ae995572814054 100644 (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(),
index 47c9e0ae5529bd449650191b65e2a90f2c39ecca..0e0753a401c263697f0fca2453d1e085b9988398 100644 (file)
@@ -205,9 +205,7 @@ class Site extends BaseAdmin
                $check_new_version_url  = (!empty($_POST['check_new_version_url'])  ? Strings::escapeTags(trim($_POST['check_new_version_url'])) : 'none');
 
                $worker_queues    = (!empty($_POST['worker_queues'])                ? intval($_POST['worker_queues'])                 : 10);
-               $worker_dont_fork = !empty($_POST['worker_dont_fork']);
                $worker_fastlane  = !empty($_POST['worker_fastlane']);
-               $worker_frontend  = !empty($_POST['worker_frontend']);
 
                $relay_directly    = !empty($_POST['relay_directly']);
                $relay_server      = (!empty($_POST['relay_server'])      ? Strings::escapeTags(trim($_POST['relay_server']))       : '');
@@ -417,13 +415,7 @@ class Site extends BaseAdmin
                DI::config()->set('system', 'only_tag_search'  , $only_tag_search);
 
                DI::config()->set('system', 'worker_queues'    , $worker_queues);
-
-               if (function_exists('proc_open')) {
-                       DI::config()->set('system', 'worker_dont_fork', $worker_dont_fork);
-               }
-
                DI::config()->set('system', 'worker_fastlane'  , $worker_fastlane);
-               DI::config()->set('system', 'frontend_worker'  , $worker_frontend);
 
                DI::config()->set('system', 'relay_directly'   , $relay_directly);
                DI::config()->set('system', 'relay_server'     , $relay_server);
@@ -582,14 +574,6 @@ class Site extends BaseAdmin
                        }
                }
 
-               if (function_exists('proc_open')) {
-                       $worker_dont_fork = DI::config()->get('system', 'worker_dont_fork');
-                       $worker_dont_fork_disabled = '';
-               } else {
-                       $worker_dont_fork = true;
-                       $worker_dont_fork_disabled = 'disabled';
-               }
-
                $t = Renderer::getMarkupTemplate('admin/site.tpl');
                return Renderer::replaceMacros($t, [
                        '$title'             => DI::l10n()->t('Administration'),
@@ -702,9 +686,7 @@ class Site extends BaseAdmin
                        '$rino'                   => ['rino', DI::l10n()->t('RINO Encryption'), intval(DI::config()->get('system', 'rino_encrypt')), DI::l10n()->t('Encryption layer between nodes.'), [0 => DI::l10n()->t('Disabled'), 1 => DI::l10n()->t('Enabled')]],
 
                        '$worker_queues'          => ['worker_queues', DI::l10n()->t('Maximum number of parallel workers'), DI::config()->get('system', 'worker_queues'), DI::l10n()->t('On shared hosters set this to %d. On larger systems, values of %d are great. Default value is %d.', 5, 20, 10)],
-                       '$worker_dont_fork'       => ['worker_dont_fork', DI::l10n()->t('Don\'t use "proc_open" with the worker'), $worker_dont_fork, DI::l10n()->t('Enable this if your system doesn\'t allow the use of "proc_open". This can happen on shared hosters. If this is enabled you should increase the frequency of worker calls in your crontab.'), $worker_dont_fork_disabled],
                        '$worker_fastlane'        => ['worker_fastlane', DI::l10n()->t('Enable fastlane'), DI::config()->get('system', 'worker_fastlane'), DI::l10n()->t('When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.')],
-                       '$worker_frontend'        => ['worker_frontend', DI::l10n()->t('Enable frontend worker'), DI::config()->get('system', 'frontend_worker'), DI::l10n()->t('When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server.', DI::baseUrl()->get())],
 
                        '$relay_subscribe'        => ['relay_subscribe', DI::l10n()->t('Use relay servers'), DI::config()->get('system', 'relay_subscribe'), DI::l10n()->t('Enables the receiving of public posts from relay servers. They will be included in the search, subscribed tags and on the global community page.')],
                        '$relay_server'           => ['relay_server', DI::l10n()->t('"Social Relay" server'), DI::config()->get('system', 'relay_server'), DI::l10n()->t('Address of the "Social Relay" server where public posts should be send to. For example %s. ActivityRelay servers are administrated via the "console relay" command line command.', 'https://social-relay.isurf.ca')],
diff --git a/src/Module/Worker.php b/src/Module/Worker.php
deleted file mode 100644 (file)
index d73ed1d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-/**
- * @copyright Copyright (C) 2020, Friendica
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-namespace Friendica\Module;
-
-use Friendica\BaseModule;
-use Friendica\Core\Process;
-use Friendica\Core\System;
-use Friendica\Core\Worker as WorkerCore;
-use Friendica\Database\DBA;
-use Friendica\DI;
-use Friendica\Util\DateTimeFormat;
-
-/**
- * Module for starting the backend worker through a frontend call
- */
-class Worker extends BaseModule
-{
-       public static function rawContent(array $parameters = [])
-       {
-               if (!DI::config()->get("system", "frontend_worker")) {
-                       return;
-               }
-
-               // Ensure that all "strtotime" operations do run timezone independent
-               date_default_timezone_set('UTC');
-
-               // We don't need the following lines if we can execute background jobs.
-               // So we just wake up the worker if it sleeps.
-               if (function_exists("proc_open")) {
-                       WorkerCore::executeIfIdle();
-                       return;
-               }
-
-               WorkerCore::clearProcesses();
-
-               $workers = DBA::count('process', ['command' => 'worker.php']);
-
-               if ($workers > DI::config()->get("system", "worker_queues", 4)) {
-                       return;
-               }
-
-               DI::process()->start();
-
-               DI::logger()->notice('Front end worker started.', ['pid' => getmypid()]);
-
-               WorkerCore::callWorker();
-
-               if ($r = WorkerCore::workerProcess()) {
-                       // On most configurations this parameter wouldn't have any effect.
-                       // But since it doesn't destroy anything, we just try to get more execution time in any way.
-                       set_time_limit(0);
-
-                       $fields = ['executed' => DateTimeFormat::utcNow(), 'pid' => getmypid(), 'done' => false];
-                       $condition =  ['id' => $r[0]["id"], 'pid' => 0];
-                       if (DBA::update('workerqueue', $fields, $condition)) {
-                               WorkerCore::execute($r[0]);
-                       }
-               }
-
-               WorkerCore::callWorker();
-
-               WorkerCore::unclaimProcess();
-
-               DI::process()->end();
-
-               System::httpExit(200, 'Frontend worker stopped.');
-       }
-}
index 310d1ea08e77da527e609c0f13992b2ea7f7aa03..c3102e3887c6c568980169ce3d982733b445799f 100644 (file)
@@ -243,10 +243,6 @@ return [
                // Number of "free" searches when system => permit_crawling is enabled.
                'free_crawls' => 10,
 
-               // frontend_worker_timeout (Integer)
-               // Value in minutes after we think that a frontend task was killed by the webserver.
-               'frontend_worker_timeout' => 10,
-
                // groupedit_image_limit (Integer)
                // Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names.
                // This can alternatively be set on a per account basis in the pconfig table.
index 2d820b9becf6a83c3d8cf26b622c153f38b3ab41..c44553d6df363f7b8f6aa770710202eabba9113e 100644 (file)
                {{include file="field_input.tpl" field=$maxloadavg}}
                {{include file="field_input.tpl" field=$min_memory}}
                {{include file="field_input.tpl" field=$worker_queues}}
-               {{include file="field_checkbox.tpl" field=$worker_dont_fork}}
                {{include file="field_checkbox.tpl" field=$worker_fastlane}}
-               {{include file="field_checkbox.tpl" field=$worker_frontend}}
 
                <div class="submit"><input type="submit" name="page_site" value="{{$submit}}"/></div>
 
index 289988dd0a1453f3e3ad0f678137499fa8171bda..57f43cefbbf0afd276ac7b2bdfbebc0963a1ea63 100644 (file)
                                                {{include file="field_input.tpl" field=$maxloadavg}}
                                                {{include file="field_input.tpl" field=$min_memory}}
                                                {{include file="field_input.tpl" field=$worker_queues}}
-                                               {{include file="field_checkbox.tpl" field=$worker_dont_fork}}
                                                {{include file="field_checkbox.tpl" field=$worker_fastlane}}
-                                               {{include file="field_checkbox.tpl" field=$worker_frontend}}
                                        </div>
                                        <div class="panel-footer">
                                                <input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}"/>