8000 Fix adding autoconfigured scheduler tasks in predefined schedules · symfony/symfony@6341a0a · GitHub
[go: up one dir, main page]

Skip to content

Commit 6341a0a

Browse files
committed
Fix adding autoconfigured scheduler tasks in predefined schedules
1 parent 3f01b9c commit 6341a0a

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/Symfony/Component/Scheduler/DependencyInjection/AddScheduleMessengerPass.php

+20-7
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,17 @@ public function process(ContainerBuilder $container): void
3535
$receivers[$tags[0]['alias']] = true;
3636
}
3737

38-
$scheduleProviders = [];
38+
$scheduleProviderIds = [];
3939
foreach ($container->findTaggedServiceIds('scheduler.schedule_provider') as $serviceId => $tags) {
4040
$name = $tags[0]['name'];
41-
$scheduleProviders[$name] = $container->getDefinition($serviceId);
41+
$scheduleProviderIds[$name] = $serviceId;
4242
}
4343

44+
$tasksPerSchedule = [];
4445
foreach ($container->findTaggedServiceIds('scheduler.task') as $serviceId => $tags) {
4546
foreach ($tags as $tagAttributes) {
4647
$serviceDefinition = $container->getDefinition($serviceId);
4748
$scheduleName = $tagAttributes['schedule'] ?? 'default';
48-
$scheduleProviders[$scheduleName] ??= $container->setDefinition("scheduler.provider.$scheduleName", new Definition(Schedule::class))
49-
->addTag('scheduler.schedule_provider', ['name' => $scheduleName]);
5049

5150
if ($serviceDefinition->hasTag('console.command')) {
5251
$message = new Definition(RunCommandMessage::class, [$serviceDefinition->getClass()::getDefaultName().(empty($tagAttributes['arguments']) ? '' : " {$tagAttributes['arguments']}")]);
@@ -72,19 +71,33 @@ public function process(ContainerBuilder $container): void
7271
],
7372
}, fn ($value) => null !== $value);
7473

75-
$taskDefinition = (new Definition(RecurringMessage::class))
74+
$tasksPerSchedule[$scheduleName][] = $taskDefinition = (new Definition(RecurringMessage::class))
7675
->setFactory([RecurringMessage::class, $tagAttributes['trigger']])
7776
->setArguments($taskArguments);
7877

7978
if ($tagAttributes['jitter'] ?? false) {
8079
$taskDefinition->addMethodCall('withJitter', [$tagAttributes['jitter']], true);
8180
}
81+
}
82+
}
8283

83-
$scheduleProviders[$scheduleName]->addMethodCall('add', [$taskDefinition]);
84+
foreach ($tasksPerSchedule as $scheduleName => $tasks) {
85+
$id = "scheduler.provider.$scheduleName";
86+
$schedule = (new Definition(Schedule::class))->addMethodCall('add', $tasks);
87+
88+
if (isset($scheduleProviderIds[$scheduleName])) {
89+
$schedule
90+
->setFactory([new Reference('.inner'), 'getSchedule'])
91+
->setDecoratedService($scheduleProviderIds[$scheduleName]);
92+
} else {
93+
$schedule->addTag('scheduler.schedule_provider', ['name' => $scheduleName]);
94+
$scheduleProviderIds[$scheduleName] = $id;
8495
}
96+
97+
$container->setDefinition($id, $schedule);
8598
}
8699

87-
foreach (array_keys($scheduleProviders) as $name) {
100+
foreach (array_keys($scheduleProviderIds) as $name) {
88101
$transportName = 'scheduler_'.$name;
89102

90103
// allows to override the default transport registration

0 commit comments

Comments
 (0)
0