Skip to content

Commit dfa4551

Browse files
committed
Save PID permanently
1 parent b2154a7 commit dfa4551

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

Plugin/Cron/Model/SchedulePlugin.php

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace EthanYehuda\CronjobManager\Plugin\Cron\Model;
5+
6+
use Magento\Cron\Model\Schedule;
7+
8+
class SchedulePlugin
9+
{
10+
public function afterTryLockJob(Schedule $subject, bool $result)
11+
{
12+
if ($result) {
13+
$subject->setData('pid', \getmypid());
14+
}
15+
return $result;
16+
}
17+
}

Test/Integration/ProcessIdTest.php

+22-4
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,37 @@ public function testProcessIdSavedOnStart()
2929
$this->whenTryLockJob($schedule);
3030
$this->thenScheduleIsSavedWithPid($schedule, $pid);
3131
}
32+
public function testProcessIdMaintainedAfterSuccesfulRun()
33+
{
34+
$this->givenPid($pid);
35+
$this->givenPendingSchedule($schedule);
36+
$this->whenTryLockJob($schedule);
37+
$this->andScheduleSavedWithSuccess($schedule);
38+
$this->thenScheduleIsSavedWithPid($schedule, $pid);
39+
}
3240

3341
private function givenPendingSchedule(&$schedule)
3442
{
43+
/** @var Schedule $newSchedule */
44+
$newSchedule = $this->objectManager->create(Schedule::class);
45+
$newSchedule->setStatus(Schedule::STATUS_PENDING);
46+
$newSchedule->setJobCode('test_job_code');
47+
$newSchedule->save();
3548
/** @var Schedule $schedule */
3649
$schedule = $this->objectManager->create(Schedule::class);
37-
$schedule->setStatus(Schedule::STATUS_PENDING);
38-
$schedule->setJobCode('test_job_code');
39-
$schedule->save();
50+
$schedule->load($newSchedule->getId());
4051
}
4152

4253
private function whenTryLockJob(Schedule $schedule)
4354
{
44-
$schedule->tryLockJob();
55+
$lock = $schedule->tryLockJob();
56+
$this->assertTrue($lock, 'Precondition: tryLockJob() should be successful');
57+
}
58+
59+
private function andScheduleSavedWithSuccess(Schedule $schedule)
60+
{
61+
$schedule->setStatus(Schedule::STATUS_SUCCESS);
62+
$schedule->save();
4563
}
4664

4765
private function thenScheduleIsSavedWithPid(Schedule $schedule, $pid)

etc/crontab/di.xml

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<type name="Magento\Cron\Observer\ProcessCronQueueObserver">
44
<plugin name="ethanyehuda_cronjobmanager" type="EthanYehuda\CronjobManager\Plugin\Cron\Observer\ProcessCronQueueObserverPlugin" />
55
</type>
6+
<type name="Magento\Cron\Model\Schedule">
7+
<plugin name="ethanyehuda_cronjobmanager" type="EthanYehuda\CronjobManager\Plugin\Cron\Model\SchedulePlugin" />
8+
</type>
69
<type name="Magento\Cron\Model\ResourceModel\Schedule">
710
<plugin name="ethanyehuda_cronjobmanager" type="EthanYehuda\CronjobManager\Plugin\Cron\Model\ScheduleResourcePlugin" />
811
</type>

0 commit comments

Comments
 (0)