Skip to content

Commit

Permalink
Merge #270 [fix 29]allow calling cron background jobs by class
Browse files Browse the repository at this point in the history
  • Loading branch information
sgyuris committed Dec 2, 2024
2 parents 3f07032 + adbc6a1 commit ecaded7
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
3 changes: 2 additions & 1 deletion cron.php
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@
$endTime = time() + 14 * 60;

$executedJobs = [];
while ($job = $jobList->getNext($onlyTimeSensitive)) {
$jobClass = isset($argv[1]) ? $argv[1] : null;
while ($job = $jobList->getNext($onlyTimeSensitive, $jobClass)) {
if (isset($executedJobs[$job->getId()])) {
$jobList->unlockJob($job);
break;
Expand Down
10 changes: 7 additions & 3 deletions lib/private/BackgroundJob/JobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public function getJobsIterator($job, ?int $limit, int $offset): iterable {
* Get the next job in the list
* @return ?IJob the next job to run. Beware that this object may be a singleton and may be modified by the next call to buildJob.
*/
public function getNext(bool $onlyTimeSensitive = false): ?IJob {
public function getNext(bool $onlyTimeSensitive = false, string $jobClass = null): ?IJob {
$query = $this->connection->getQueryBuilder();
$query->select('*')
->from('jobs')
Expand All @@ -205,6 +205,10 @@ public function getNext(bool $onlyTimeSensitive = false): ?IJob {
$query->andWhere($query->expr()->eq('time_sensitive', $query->createNamedParameter(IJob::TIME_SENSITIVE, IQueryBuilder::PARAM_INT)));
}

if ($jobClass) {
$query->andWhere($query->expr()->eq('class', $query->createNamedParameter($jobClass)));
}

$result = $query->executeQuery();
$row = $result->fetch();
$result->closeCursor();
Expand Down Expand Up @@ -239,7 +243,7 @@ public function getNext(bool $onlyTimeSensitive = false): ?IJob {

if ($count === 0) {
// Background job already executed elsewhere, try again.
return $this->getNext($onlyTimeSensitive);
return $this->getNext($onlyTimeSensitive, $jobClass);
}

if ($job === null) {
Expand All @@ -252,7 +256,7 @@ public function getNext(bool $onlyTimeSensitive = false): ?IJob {
$reset->executeStatement();

// Background job from disabled app, try again.
return $this->getNext($onlyTimeSensitive);
return $this->getNext($onlyTimeSensitive, $jobClass);
}

return $job;
Expand Down
2 changes: 1 addition & 1 deletion tests/lib/BackgroundJob/DummyJobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public function getJobsIterator($job, ?int $limit, int $offset): array {
/**
* get the next job in the list
*/
public function getNext(bool $onlyTimeSensitive = false): ?IJob {
public function getNext(bool $onlyTimeSensitive = false, string $jobClass = null): ?IJob {
if (count($this->jobs) > 0) {
if ($this->last < (count($this->jobs) - 1)) {
$i = $this->last + 1;
Expand Down

0 comments on commit ecaded7

Please sign in to comment.