Merge pull request #19241 from nextcloud/bug/noid/job-catch-throwable
Make sure to catch php errors during job execution
This commit is contained in:
commit
1b33116e8f
|
@ -63,7 +63,7 @@ abstract class Job implements IJob {
|
|||
|
||||
$logger->debug('Finished ' . get_class($this) . ' job with ID ' . $this->getId() . ' in ' . $timeTaken . ' seconds', ['app' => 'cron']);
|
||||
$jobList->setExecutionTime($this, $timeTaken);
|
||||
} catch (\Exception $e) {
|
||||
} catch (\Throwable $e) {
|
||||
if ($logger) {
|
||||
$logger->logException($e, [
|
||||
'app' => 'core',
|
||||
|
|
|
@ -39,6 +39,27 @@ class JobTest extends \Test\TestCase {
|
|||
$this->assertCount(1, $jobList->getAll());
|
||||
}
|
||||
|
||||
public function testRemoveAfterError() {
|
||||
$jobList = new DummyJobList();
|
||||
$job = new TestJob($this, function () {
|
||||
$test = null;
|
||||
$test->someMethod();
|
||||
});
|
||||
$jobList->add($job);
|
||||
|
||||
$logger = $this->getMockBuilder(ILogger::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$logger->expects($this->once())
|
||||
->method('logException')
|
||||
->with($this->isInstanceOf(\Throwable::class));
|
||||
|
||||
$this->assertCount(1, $jobList->getAll());
|
||||
$job->execute($jobList, $logger);
|
||||
$this->assertTrue($this->run);
|
||||
$this->assertCount(1, $jobList->getAll());
|
||||
}
|
||||
|
||||
public function markRun() {
|
||||
$this->run = true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue