From 6a44e42ab6e845d62f1e42e21b7dca16340dc353 Mon Sep 17 00:00:00 2001 From: Christopher Parotat Date: Mon, 29 Sep 2025 13:52:01 +0200 Subject: [PATCH] Restrict purging of recurring jobs to bundle-managed schedule --- src/EventListener/JobRecurringScheduleListener.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/EventListener/JobRecurringScheduleListener.php b/src/EventListener/JobRecurringScheduleListener.php index 476f8ed..1047508 100644 --- a/src/EventListener/JobRecurringScheduleListener.php +++ b/src/EventListener/JobRecurringScheduleListener.php @@ -10,13 +10,13 @@ use Symfony\Component\Scheduler\RecurringMessage; use TomAtom\JobQueueBundle\Entity\JobRecurring; use TomAtom\JobQueueBundle\Message\JobRecurringMessage; +use TomAtom\JobQueueBundle\Scheduler\JobRecurringSchedule; class JobRecurringScheduleListener implements EventSubscriberInterface { public function __construct( private readonly EntityManagerInterface $entityManager, private readonly LockFactory $lockFactory, - ) { } @@ -38,8 +38,17 @@ public function onPreRunEvent(PreRunEvent $event): void return; } - // Access the running schedule $currentSchedule = $event->getSchedule(); + if (!$currentSchedule instanceof JobRecurringSchedule) { + // Not our schedule, ignore + return; + } + + $currentMessage = $event->getMessage(); + if (!$currentMessage instanceof JobRecurringMessage || $currentMessage->getCommandName() !== JobRecurring::HEARTBEAT_MESSAGE) { + // Not the heartbeat message, ignore + return; + } // Clear existing recurring messages foreach ($currentSchedule->getSchedule()->getRecurringMessages() as $key => $recurringMessage) {