diff options
Diffstat (limited to 'lib/public/BackgroundJob/Job.php')
-rw-r--r-- | lib/public/BackgroundJob/Job.php | 92 |
1 files changed, 47 insertions, 45 deletions
diff --git a/lib/public/BackgroundJob/Job.php b/lib/public/BackgroundJob/Job.php index 5b20ac82684..2483387a9c9 100644 --- a/lib/public/BackgroundJob/Job.php +++ b/lib/public/BackgroundJob/Job.php @@ -1,33 +1,15 @@ <?php declare(strict_types=1); - /** - * @copyright Copyright (c) 2018, Roeland Jago Douma <roeland@famdouma.nl> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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 <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCP\BackgroundJob; use OCP\AppFramework\Utility\ITimeFactory; use OCP\ILogger; +use Psr\Log\LoggerInterface; /** * Base class for background jobs @@ -37,19 +19,12 @@ use OCP\ILogger; * * @since 15.0.0 */ -abstract class Job implements IJob { - - /** @var int $id */ - protected $id; - - /** @var int $lastRun */ - protected $lastRun; - - /** @var mixed $argument */ +abstract class Job implements IJob, IParallelAwareJob { + protected int $id = 0; + protected int $lastRun = 0; protected $argument; - - /** @var ITimeFactory */ - protected $time; + protected ITimeFactory $time; + protected bool $allowParallelRuns = true; /** * @since 15.0.0 @@ -61,31 +36,38 @@ abstract class Job implements IJob { /** * The function to prepare the execution of the job. * - * - * @param IJobList $jobList - * @param ILogger|null $logger + * @return void * * @since 15.0.0 + * @deprecated 25.0.0 Use start() instead. This method will be removed + * with the ILogger interface + */ + public function execute(IJobList $jobList, ?ILogger $logger = null) { + $this->start($jobList); + } + + /** + * @inheritdoc + * @since 25.0.0 */ - public function execute(IJobList $jobList, ILogger $logger = null) { + public function start(IJobList $jobList): void { $jobList->setLastRun($this); - if ($logger === null) { - $logger = \OC::$server->getLogger(); - } + $logger = \OCP\Server::get(LoggerInterface::class); try { + $jobDetails = get_class($this) . ' (id: ' . $this->getId() . ', arguments: ' . json_encode($this->getArgument()) . ')'; $jobStartTime = $this->time->getTime(); - $logger->debug('Run ' . get_class($this) . ' job with ID ' . $this->getId(), ['app' => 'cron']); + $logger->debug('Starting job ' . $jobDetails, ['app' => 'cron']); $this->run($this->argument); $timeTaken = $this->time->getTime() - $jobStartTime; - $logger->debug('Finished ' . get_class($this) . ' job with ID ' . $this->getId() . ' in ' . $timeTaken . ' seconds', ['app' => 'cron']); + $logger->debug('Finished job ' . $jobDetails . ' in ' . $timeTaken . ' seconds', ['app' => 'cron']); $jobList->setExecutionTime($this, $timeTaken); - } catch (\Exception $e) { + } catch (\Throwable $e) { if ($logger) { - $logger->logException($e, [ + $logger->error('Error while running background job ' . $jobDetails, [ 'app' => 'core', - 'message' => 'Error while running background job (class: ' . get_class($this) . ', arguments: ' . print_r($this->argument, true) . ')' + 'exception' => $e, ]); } } @@ -134,9 +116,29 @@ abstract class Job implements IJob { } /** + * Set this to false to prevent two Jobs from this class from running in parallel + * + * @param bool $allow + * @return void + * @since 27.0.0 + */ + public function setAllowParallelRuns(bool $allow): void { + $this->allowParallelRuns = $allow; + } + + /** + * @return bool + * @since 27.0.0 + */ + public function getAllowParallelRuns(): bool { + return $this->allowParallelRuns; + } + + /** * The actual function that is called to run the job * * @param $argument + * @return void * * @since 15.0.0 */ |