Signed-off-by: Joas Schilling <coding@schilljs.com>tags/v23.0.0beta1
@@ -27,8 +27,6 @@ namespace OC\Core\Command\Background; | |||
use OCP\BackgroundJob\IJob; | |||
use OCP\BackgroundJob\IJobList; | |||
use OCP\DB\QueryBuilder\IQueryBuilder; | |||
use OCP\IDBConnection; | |||
use OCP\ILogger; | |||
use Symfony\Component\Console\Command\Command; | |||
use Symfony\Component\Console\Input\InputArgument; | |||
@@ -39,17 +37,13 @@ use Symfony\Component\Console\Output\OutputInterface; | |||
class Job extends Command { | |||
/** @var IJobList */ | |||
protected $jobList; | |||
/** @var IDBConnection */ | |||
protected $connection; | |||
/** @var ILogger */ | |||
protected $logger; | |||
public function __construct(IJobList $jobList, | |||
IDBConnection $connection, | |||
ILogger $logger) { | |||
parent::__construct(); | |||
$this->jobList = $jobList; | |||
$this->connection = $connection; | |||
$this->logger = $logger; | |||
} | |||
@@ -86,14 +80,7 @@ class Job extends Command { | |||
$output->writeln(''); | |||
$output->writeln('<comment>Forcing execution of the job</comment>'); | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->update('jobs') | |||
->set('last_run', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)) | |||
->set('reserved_at', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)) | |||
->where($query->expr()->eq('id', $query->createNamedParameter($jobId), IQueryBuilder::PARAM_INT)); | |||
$query->executeUpdate(); | |||
$this->jobList->resetBackgroundJob($job); | |||
$job = $this->jobList->getById($jobId); | |||
$job->execute($this->jobList, $this->logger); | |||
$this->jobList->setLastJob($job); | |||
@@ -110,15 +97,7 @@ class Job extends Command { | |||
} | |||
protected function printJobInfo(int $jobId, IJob $job, OutputInterface$output): void { | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->select('*') | |||
->from('jobs') | |||
->where($query->expr()->eq('id', $query->createNamedParameter($jobId), IQueryBuilder::PARAM_INT)); | |||
$result = $query->executeQuery(); | |||
$row = $result->fetch(); | |||
$result->closeCursor(); | |||
$row = $this->jobList->getDetailsById($jobId); | |||
$lastRun = new \DateTime(); | |||
$lastRun->setTimestamp((int) $row['last_run']); |
@@ -90,7 +90,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { | |||
$application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig())); | |||
$application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig())); | |||
$application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig())); | |||
$application->add(new OC\Core\Command\Background\Job(\OC::$server->getJobList(), \OC::$server->getDatabaseConnection(), \OC::$server->getLogger())); | |||
$application->add(new OC\Core\Command\Background\Job(\OC::$server->getJobList(), \OC::$server->getLogger())); | |||
$application->add(\OC::$server->query(\OC\Core\Command\Broadcast\Test::class)); | |||
@@ -236,19 +236,29 @@ class JobList implements IJobList { | |||
* @return IJob|null | |||
*/ | |||
public function getById($id) { | |||
$row = $this->getDetailsById($id); | |||
if ($row) { | |||
return $this->buildJob($row); | |||
} | |||
return null; | |||
} | |||
public function getDetailsById(int $id): ?array { | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->select('*') | |||
->from('jobs') | |||
->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT))); | |||
$result = $query->execute(); | |||
$result = $query->executeQuery(); | |||
$row = $result->fetch(); | |||
$result->closeCursor(); | |||
if ($row) { | |||
return $this->buildJob($row); | |||
} else { | |||
return null; | |||
return $row; | |||
} | |||
return null; | |||
} | |||
/** | |||
@@ -330,4 +340,19 @@ class JobList implements IJobList { | |||
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); | |||
$query->execute(); | |||
} | |||
/** | |||
* Reset the $job so it executes on the next trigger | |||
* | |||
* @param IJob $job | |||
* @since 22.0.0 | |||
*/ | |||
public function resetBackgroundJob(IJob $job): void { | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->update('jobs') | |||
->set('last_run', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)) | |||
->set('reserved_at', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)) | |||
->where($query->expr()->eq('id', $query->createNamedParameter($job->getId()), IQueryBuilder::PARAM_INT)); | |||
$query->executeStatement(); | |||
} | |||
} |
@@ -97,6 +97,13 @@ interface IJobList { | |||
*/ | |||
public function getById($id); | |||
/** | |||
* @param int $id | |||
* @return array|null | |||
* @since 22.0.0 | |||
*/ | |||
public function getDetailsById(int $id): ?array; | |||
/** | |||
* set the job that was last ran to the current time | |||
* | |||
@@ -129,4 +136,12 @@ interface IJobList { | |||
* @since 12.0.0 | |||
*/ | |||
public function setExecutionTime(IJob $job, $timeTaken); | |||
/** | |||
* Reset the $job so it executes on the next trigger | |||
* | |||
* @param IJob $job | |||
* @since 22.0.0 | |||
*/ | |||
public function resetBackgroundJob(IJob $job): void; | |||
} |
@@ -117,6 +117,10 @@ class DummyJobList extends \OC\BackgroundJob\JobList { | |||
return null; | |||
} | |||
public function getDetailsById(int $id): ?array { | |||
return null; | |||
} | |||
/** | |||
* set the lastRun of $job to now | |||
* | |||
@@ -128,4 +132,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { | |||
public function setExecutionTime(IJob $job, $timeTaken) { | |||
} | |||
public function resetBackgroundJob(IJob $job): void { | |||
} | |||
} |