Skip to content

Commit

Permalink
Merge pull request #45921 from nextcloud/backport/45582/stable27
Browse files Browse the repository at this point in the history
  • Loading branch information
skjnldsv authored Jul 27, 2024
2 parents 82da77a + b724b11 commit 6cdfe62
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 6 deletions.
2 changes: 1 addition & 1 deletion lib/private/BackgroundJob/JobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,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)));
Expand Down
8 changes: 8 additions & 0 deletions lib/public/BackgroundJob/IJobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ public function add($job, $argument = null): void;
*/
public function remove($job, $argument = null): void;

/**
* Remove a job from the list by id
*
* @param int $id
* @since 27.1.12
*/
public function removeById(int $id): void;

/**
* check if a job is in the list
*
Expand Down
6 changes: 5 additions & 1 deletion lib/public/BackgroundJob/QueuedJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,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);
}
}
22 changes: 18 additions & 4 deletions tests/lib/BackgroundJob/DummyJobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList {
private array $reserved = [];

private int $last = 0;
private int $lastId = 0;

public function __construct() {
}
Expand All @@ -41,6 +42,8 @@ public function add($job, $argument = null): void {
$job = \OCP\Server::get($job);
}
$job->setArgument($argument);
$job->setId($this->lastId);
$this->lastId++;
if (!$this->has($job, null)) {
$this->jobs[] = $job;
}
Expand All @@ -51,9 +54,20 @@ public function add($job, $argument = null): void {
* @param mixed $argument
*/
public function remove($job, $argument = null): void {
$index = array_search($job, $this->jobs);
if ($index !== false) {
unset($this->jobs[$index]);
foreach ($this->jobs as $index => $listJob) {
if (get_class($job) === get_class($listJob) && $job->getArgument() == $listJob->getArgument()) {
unset($this->jobs[$index]);
return;
}
}
}

public function removeById(int $id): void {
foreach ($this->jobs as $index => $listJob) {
if ($listJob->getId() === $id) {
unset($this->jobs[$index]);
return;
}
}
}

Expand Down Expand Up @@ -123,7 +137,7 @@ public function setLastJob(IJob $job): void {
}
}

public function getById(int $id): IJob {
public function getById(int $id): ?IJob {
foreach ($this->jobs as $job) {
if ($job->getId() === $id) {
return $job;
Expand Down

0 comments on commit 6cdfe62

Please sign in to comment.