From dc0f0e266b6e707c6fa2ebd38bffb778f6846242 Mon Sep 17 00:00:00 2001 From: Kevin Bond Date: Tue, 25 Apr 2023 18:41:00 -0400 Subject: [PATCH] [Scheduler] add schedule name to `MessageContext` --- .../Component/Scheduler/Generator/MessageContext.php | 3 ++- .../Component/Scheduler/Generator/MessageGenerator.php | 10 ++++------ .../Scheduler/Messenger/SchedulerTransportFactory.php | 4 +--- .../Tests/Messenger/SchedulerTransportTest.php | 7 ++++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/Symfony/Component/Scheduler/Generator/MessageContext.php b/src/Symfony/Component/Scheduler/Generator/MessageContext.php index 51caf94e9e042..849074c6162ad 100644 --- a/src/Symfony/Component/Scheduler/Generator/MessageContext.php +++ b/src/Symfony/Component/Scheduler/Generator/MessageContext.php @@ -21,9 +21,10 @@ final class MessageContext { public function __construct( + public readonly string $name, public readonly TriggerInterface $trigger, public readonly \DateTimeImmutable $triggeredAt, - public readonly \DateTimeImmutable|null $nextTriggerAt = null, + public readonly ?\DateTimeImmutable $nextTriggerAt = null, ) { } } diff --git a/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php b/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php index ffa5618332624..7b4e6b33684b3 100644 --- a/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php +++ b/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php @@ -27,14 +27,12 @@ final class MessageGenerator implements MessageGeneratorInterface public function __construct( private readonly Schedule $schedule, - string|CheckpointInterface $checkpoint, + private readonly string $name, private readonly ClockInterface $clock = new Clock(), + CheckpointInterface $checkpoint = null, ) { $this->waitUntil = new \DateTimeImmutable('@0'); - if (\is_string($checkpoint)) { - $checkpoint = new Checkpoint('scheduler_checkpoint_'.$checkpoint, $this->schedule->getLock(), $this->schedule->getState()); - } - $this->checkpoint = $checkpoint; + $this->checkpoint = $checkpoint ?? new Checkpoint('scheduler_checkpoint_'.$this->name, $this->schedule->getLock(), $this->schedule->getState()); } public function getMessages(): \Generator @@ -70,7 +68,7 @@ public function getMessages(): \Generator } if ($yield) { - yield (new MessageContext($trigger, $time, $nextTime)) => $message; + yield (new MessageContext($this->name, $trigger, $time, $nextTime)) => $message; $this->checkpoint->save($time, $index); } } diff --git a/src/Symfony/Component/Scheduler/Messenger/SchedulerTransportFactory.php b/src/Symfony/Component/Scheduler/Messenger/SchedulerTransportFactory.php index 9fac1115ae596..3b7fc9b94503f 100644 --- a/src/Symfony/Component/Scheduler/Messenger/SchedulerTransportFactory.php +++ b/src/Symfony/Component/Scheduler/Messenger/SchedulerTransportFactory.php @@ -17,7 +17,6 @@ use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; use Symfony\Component\Messenger\Transport\TransportFactoryInterface; use Symfony\Component\Scheduler\Exception\InvalidArgumentException; -use Symfony\Component\Scheduler\Generator\Checkpoint; use Symfony\Component\Scheduler\Generator\MessageGenerator; use Symfony\Component\Scheduler\Schedule; @@ -46,9 +45,8 @@ public function createTransport(string $dsn, array $options, SerializerInterface /** @var Schedule $schedule */ $schedule = $this->scheduleProviders->get($scheduleName)->getSchedule(); - $checkpoint = new Checkpoint('scheduler_checkpoint_'.$scheduleName, $schedule->getLock(), $schedule->getState()); - return new SchedulerTransport(new MessageGenerator($schedule, $checkpoint, $this->clock)); + return new SchedulerTransport(new MessageGenerator($schedule, $scheduleName, $this->clock)); } public function supports(string $dsn, array $options): bool diff --git a/src/Symfony/Component/Scheduler/Tests/Messenger/SchedulerTransportTest.php b/src/Symfony/Component/Scheduler/Tests/Messenger/SchedulerTransportTest.php index 315048e9fbe0e..3c106626d1336 100644 --- a/src/Symfony/Component/Scheduler/Tests/Messenger/SchedulerTransportTest.php +++ b/src/Symfony/Component/Scheduler/Tests/Messenger/SchedulerTransportTest.php @@ -34,15 +34,16 @@ public function testGetFromIterator() $generator->method('getMessages')->willReturnCallback(function () use ($messages): \Generator { $trigger = $this->createMock(TriggerInterface::class); $triggerAt = new \DateTimeImmutable('2020-02-20T02:00:00', new \DateTimeZone('UTC')); - yield (new MessageContext($trigger, $triggerAt)) => $messages[0]; - yield (new MessageContext($trigger, $triggerAt)) => $messages[1]; + yield (new MessageContext('default', $trigger, $triggerAt)) => $messages[0]; + yield (new MessageContext('default', $trigger, $triggerAt)) => $messages[1]; }); $transport = new SchedulerTransport($generator); foreach ($transport->get() as $envelope) { $this->assertInstanceOf(Envelope::class, $envelope); - $this->assertNotNull($envelope->last(ScheduledStamp::class)); + $this->assertNotNull($stamp = $envelope->last(ScheduledStamp::class)); $this->assertSame(array_shift($messages), $envelope->getMessage()); + $this->assertSame('default', $stamp->messageContext->name); } $this->assertEmpty($messages);