diff options
Diffstat (limited to 'lib/private/Migration/BackgroundRepair.php')
-rw-r--r-- | lib/private/Migration/BackgroundRepair.php | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/private/Migration/BackgroundRepair.php b/lib/private/Migration/BackgroundRepair.php new file mode 100644 index 00000000000..d542b82d5e1 --- /dev/null +++ b/lib/private/Migration/BackgroundRepair.php @@ -0,0 +1,69 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OC\Migration; + +use OC\Repair; +use OCP\App\IAppManager; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; +use OCP\BackgroundJob\TimedJob; +use Psr\Log\LoggerInterface; + +/** + * Class BackgroundRepair + * + * @package OC\Migration + */ +class BackgroundRepair extends TimedJob { + public function __construct( + private Repair $repair, + ITimeFactory $time, + private LoggerInterface $logger, + private IJobList $jobList, + private IAppManager $appManager, + ) { + parent::__construct($time); + $this->setInterval(15 * 60); + } + + /** + * @param array $argument + * @throws \Exception + */ + protected function run($argument): void { + if (!isset($argument['app']) || !isset($argument['step'])) { + // remove the job - we can never execute it + $this->jobList->remove($this, $this->argument); + return; + } + $app = $argument['app']; + + $this->appManager->loadApp($app); + + $step = $argument['step']; + $this->repair->setRepairSteps([]); + try { + $this->repair->addStep($step); + } catch (\Exception $ex) { + $this->logger->error($ex->getMessage(), [ + 'app' => 'migration', + 'exception' => $ex, + ]); + + // remove the job - we can never execute it + $this->jobList->remove($this, $this->argument); + return; + } + + // execute the repair step + $this->repair->run(); + + // remove the job once executed successfully + $this->jobList->remove($this, $this->argument); + } +} |