Merge pull request #18426 from owncloud/joblist-next-non-existing

handle non existing job classes in $jobList->getNext
This commit is contained in:
Morris Jobke 2015-08-21 10:34:33 +02:00
commit ac086a11c1
2 changed files with 41 additions and 2 deletions

View File

@ -87,6 +87,11 @@ class JobList implements IJobList {
}
}
protected function removeById($id) {
$query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `id` = ?');
$query->execute([$id]);
}
/**
* check if a job is in the list
*
@ -134,17 +139,25 @@ class JobList implements IJobList {
$query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` > ? ORDER BY `id` ASC', 1);
$query->execute(array($lastId));
if ($row = $query->fetch()) {
return $this->buildJob($row);
$jobId = $row['id'];
$job = $this->buildJob($row);
} else {
//begin at the start of the queue
$query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` ORDER BY `id` ASC', 1);
$query->execute();
if ($row = $query->fetch()) {
return $this->buildJob($row);
$jobId = $row['id'];
$job = $this->buildJob($row);
} else {
return null; //empty job list
}
}
if (is_null($job)) {
$this->removeById($jobId);
return $this->getNext();
} else {
return $job;
}
}
/**

View File

@ -202,4 +202,30 @@ class JobList extends \Test\TestCase {
$this->instance->remove($job);
}
public function testGetNextNonExisting() {
$job = new TestJob();
$this->instance->add($job, 1);
$this->instance->add('\OC\Non\Existing\Class');
$this->instance->add($job, 2);
$jobs = $this->instance->getAll();
$savedJob1 = $jobs[count($jobs) - 2];
$savedJob2 = $jobs[count($jobs) - 1];
$this->config->expects($this->any())
->method('getAppValue')
->with('backgroundjob', 'lastjob', 0)
->will($this->returnValue($savedJob1->getId()));
$this->instance->getNext();
$nextJob = $this->instance->getNext();
$this->assertEquals($savedJob2, $nextJob);
$this->instance->remove($job, 1);
$this->instance->remove($job, 2);
}
}