From 1b2c8d50303f3ce14a3e6f6fdf51c29ef78cbee0 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 3 Jul 2024 16:08:13 +0200 Subject: fix(TaskProcessing): Set task status to running when processing via ISynchronousProvider Signed-off-by: Marcel Klehr --- lib/private/TaskProcessing/Manager.php | 11 +++++++++++ lib/private/TaskProcessing/SynchronousBackgroundJob.php | 2 ++ 2 files changed, 13 insertions(+) (limited to 'lib/private/TaskProcessing') diff --git a/lib/private/TaskProcessing/Manager.php b/lib/private/TaskProcessing/Manager.php index 664805c57c8..74cc38d0949 100644 --- a/lib/private/TaskProcessing/Manager.php +++ b/lib/private/TaskProcessing/Manager.php @@ -15,6 +15,7 @@ use OC\TaskProcessing\Db\TaskMapper; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\BackgroundJob\IJobList; +use OCP\DB\Exception; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\AppData\IAppDataFactory; use OCP\Files\File; @@ -870,4 +871,14 @@ class Manager implements IManager { $task->setStatus(Task::STATUS_RUNNING); return true; } + + /** + * @throws \JsonException + * @throws Exception + */ + public function setTaskStatus(Task $task, int $status): void { + $task->setStatus($status); + $taskEntity = \OC\TaskProcessing\Db\Task::fromPublicTask($task); + $this->taskMapper->update($taskEntity); + } } diff --git a/lib/private/TaskProcessing/SynchronousBackgroundJob.php b/lib/private/TaskProcessing/SynchronousBackgroundJob.php index 6109dd3f962..7f1ab623190 100644 --- a/lib/private/TaskProcessing/SynchronousBackgroundJob.php +++ b/lib/private/TaskProcessing/SynchronousBackgroundJob.php @@ -18,6 +18,7 @@ use OCP\TaskProcessing\Exception\ProcessingException; use OCP\TaskProcessing\Exception\ValidationException; use OCP\TaskProcessing\IManager; use OCP\TaskProcessing\ISynchronousProvider; +use OCP\TaskProcessing\Task; use Psr\Log\LoggerInterface; class SynchronousBackgroundJob extends QueuedJob { @@ -61,6 +62,7 @@ class SynchronousBackgroundJob extends QueuedJob { return; } try { + $this->taskProcessingManager->setTaskStatus($task, Task::STATUS_RUNNING); $output = $provider->process($task->getUserId(), $input, fn (float $progress) => $this->taskProcessingManager->setTaskProgress($task->getId(), $progress)); } catch (ProcessingException $e) { $this->logger->warning('Failed to process a TaskProcessing task with synchronous provider ' . $provider->getId(), ['exception' => $e]); -- cgit v1.2.3