From 1a9f7d5348c74b81733983570864b943afd06994 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 30 May 2024 15:07:26 +0200 Subject: [PATCH] fix: delete background jobs by id when cleaning up Signed-off-by: Robin Appelman --- lib/private/BackgroundJob/JobList.php | 2 +- lib/public/BackgroundJob/IJobList.php | 8 ++++++++ lib/public/BackgroundJob/QueuedJob.php | 6 +++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/private/BackgroundJob/JobList.php b/lib/private/BackgroundJob/JobList.php index 3df9be7558cf8..61c48b0eab218 100644 --- a/lib/private/BackgroundJob/JobList.php +++ b/lib/private/BackgroundJob/JobList.php @@ -113,7 +113,7 @@ public function remove($job, $argument = null): void { } } - protected function removeById(int $id): void { + public function removeById(int $id): void { $query = $this->connection->getQueryBuilder(); $query->delete('jobs') ->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT))); diff --git a/lib/public/BackgroundJob/IJobList.php b/lib/public/BackgroundJob/IJobList.php index dbe154ff5f8f2..c082ef22f2f04 100644 --- a/lib/public/BackgroundJob/IJobList.php +++ b/lib/public/BackgroundJob/IJobList.php @@ -60,6 +60,14 @@ public function scheduleAfter(string $job, int $runAfter, $argument = null): voi */ public function remove($job, $argument = null): void; + /** + * Remove a job from the list by id + * + * @param int $id + * @since 30.0.0 + */ + public function removeById(int $id): void; + /** * check if a job is in the list * diff --git a/lib/public/BackgroundJob/QueuedJob.php b/lib/public/BackgroundJob/QueuedJob.php index c75948d1a1190..caacff42b1a7e 100644 --- a/lib/public/BackgroundJob/QueuedJob.php +++ b/lib/public/BackgroundJob/QueuedJob.php @@ -35,7 +35,11 @@ final public function execute($jobList, ?ILogger $logger = null) { * @since 25.0.0 */ final public function start(IJobList $jobList): void { - $jobList->remove($this, $this->argument); + if ($this->id) { + $jobList->removeById($this->id); + } else { + $jobList->remove($this, $this->argument); + } parent::start($jobList); } }