Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 09ce967

Browse filesBrowse files
bug #59735 [FrameworkBundle] the DeduplicateMiddleware requires the lock feature to be enabled (xabbuh)
This PR was merged into the 7.3 branch. Discussion ---------- [FrameworkBundle] the DeduplicateMiddleware requires the lock feature to be enabled | Q | A | ------------- | --- | Branch? | 7.3 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | | License | MIT If the `lock` feature is not enabled, no `lock.factory` service will be registered. Commits ------- f432bc8 the DeduplicateMiddleware requires the lock feature to be enabled
2 parents 9ad4353 + f432bc8 commit 09ce967
Copy full SHA for 09ce967

10 files changed

+138
-50
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ public function load(array $configs, ContainerBuilder $container): void
538538

539539
// messenger depends on validation being registered
540540
if ($messengerEnabled) {
541-
$this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']));
541+
$this->registerMessengerConfiguration($config['messenger'], $container, $loader, $this->readConfigEnabled('validation', $container, $config['validation']), $this->readConfigEnabled('lock', $container, $config['lock']));
542542
} else {
543543
$container->removeDefinition('console.command.messenger_consume_messages');
544544
$container->removeDefinition('console.command.messenger_stats');
@@ -2228,7 +2228,7 @@ private function registerSchedulerConfiguration(ContainerBuilder $container, Php
22282228
}
22292229
}
22302230

2231-
private function registerMessengerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader, bool $validationEnabled): void
2231+
private function registerMessengerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader, bool $validationEnabled, bool $lockEnabled): void
22322232
{
22332233
if (!interface_exists(MessageBusInterface::class)) {
22342234
throw new LogicException('Messenger support cannot be enabled as the Messenger component is not installed. Try running "composer require symfony/messenger".');
@@ -2284,7 +2284,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22842284
],
22852285
];
22862286

2287-
if (class_exists(DeduplicateMiddleware::class) && class_exists(LockFactory::class)) {
2287+
if ($lockEnabled && class_exists(DeduplicateMiddleware::class) && class_exists(LockFactory::class)) {
22882288
$defaultMiddleware['before'][] = ['id' => 'deduplicate_middleware'];
22892289
} else {
22902290
$container->removeDefinition('messenger.middleware.deduplicate_middleware');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', [
4+
'annotations' => false,
5+
'http_method_override' => false,
6+
'handle_all_throwables' => true,
7+
'php_errors' => ['log' => true],
8+
'lock' => null,
9+
'messenger' => [
10+
'default_bus' => 'messenger.bus.commands',
11+
'buses' => [
12+
'messenger.bus.commands' => null,
13+
'messenger.bus.events' => [
14+
'middleware' => [
15+
['with_factory' => ['foo', true, ['bar' => 'baz']]],
16+
],
17+
],
18+
'messenger.bus.queries' => [
19+
'default_middleware' => false,
20+
'middleware' => [
21+
'send_message',
22+
'handle_message',
23+
],
24+
],
25+
],
26+
],
27+
]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<container xmlns="http://symfony.com/schema/dic/services"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:framework="http://symfony.com/schema/dic/symfony"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
6+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
7+
8+
<framework:config http-method-override="false" handle-all-throwables="true">
9+
<framework:annotations enabled="false" />
10+
<framework:php-errors log="true" />
11+
<framework:lock />
12+
<framework:messenger default-bus="messenger.bus.commands">
13+
<framework:bus name="messenger.bus.commands" />
14+
<framework:bus name="messenger.bus.events">
15+
<framework:middleware id="with_factory">
16+
<framework:argument>foo</framework:argument>
17+
<framework:argument>true</framework:argument>
18+
<framework:argument>
19+
<framework:bar>baz</framework:bar>
20+
</framework:argument>
21+
</framework:middleware>
22+
</framework:bus>
23+
<framework:bus name="messenger.bus.queries" default-middleware="false">
24+
<framework:middleware id="send_message" />
25+
<framework:middleware id="handle_message" />
26+
</framework:bus>
27+
</framework:messenger>
28+
</framework:config>
29+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
framework:
2+
annotations: false
3+
http_method_override: false
4+
handle_all_throwables: true
5+
php_errors:
6+
log: true
7+
lock: ~
8+
messenger:
9+
default_bus: messenger.bus.commands
10+
buses:
11+
messenger.bus.commands: ~
12+
messenger.bus.events:
13+
middleware:
14+
- with_factory: [foo, true, { bar: baz }]
15+
messenger.bus.queries:
16+
default_middleware: false
17+
middleware:
18+
- "send_message"
19+
- "handle_message"

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTestCase.php
+58-45Lines changed: 58 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,60 +1056,73 @@ public function testMessengerTransportConfiguration()
10561056
$this->assertSame(['enable_max_depth' => true], $serializerTransportDefinition->getArgument(2));
10571057
}
10581058

1059-
public function testMessengerWithMultipleBuses()
1059+
public function testMessengerWithMultipleBusesWithoutDeduplicateMiddleware()
10601060
{
1061-
$container = $this->createContainerFromFile('messenger_multiple_buses');
1061+
$container = $this->createContainerFromFile('messenger_multiple_buses_without_deduplicate_middleware');
10621062

10631063
$this->assertTrue($container->has('messenger.bus.commands'));
10641064
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
1065-
1066-
if (class_exists(DeduplicateMiddleware::class)) {
1067-
$this->assertEquals([
1068-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1069-
['id' => 'reject_redelivered_message_middleware'],
1070-
['id' => 'dispatch_after_current_bus'],
1071-
['id' => 'failed_message_processing_middleware'],
1072-
['id' => 'deduplicate_middleware'],
1073-
['id' => 'send_message', 'arguments' => [true]],
1074-
['id' => 'handle_message', 'arguments' => [false]],
1075-
], $container->getParameter('messenger.bus.commands.middleware'));
1076-
} else {
1077-
$this->assertEquals([
1078-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1079-
['id' => 'reject_redelivered_message_middleware'],
1080-
['id' => 'dispatch_after_current_bus'],
1081-
['id' => 'failed_message_processing_middleware'],
1082-
['id' => 'send_message', 'arguments' => [true]],
1083-
['id' => 'handle_message', 'arguments' => [false]],
1084-
], $container->getParameter('messenger.bus.commands.middleware'));
1085-
}
1086-
1065+
$this->assertEquals([
1066+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1067+
['id' => 'reject_redelivered_message_middleware'],
1068+
['id' => 'dispatch_after_current_bus'],
1069+
['id' => 'failed_message_processing_middleware'],
1070+
['id' => 'send_message', 'arguments' => [true]],
1071+
['id' => 'handle_message', 'arguments' => [false]],
1072+
], $container->getParameter('messenger.bus.commands.middleware'));
10871073
$this->assertTrue($container->has('messenger.bus.events'));
10881074
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
1075+
$this->assertEquals([
1076+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1077+
['id' => 'reject_redelivered_message_middleware'],
1078+
['id' => 'dispatch_after_current_bus'],
1079+
['id' => 'failed_message_processing_middleware'],
1080+
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1081+
['id' => 'send_message', 'arguments' => [true]],
1082+
['id' => 'handle_message', 'arguments' => [false]],
1083+
], $container->getParameter('messenger.bus.events.middleware'));
1084+
$this->assertTrue($container->has('messenger.bus.queries'));
1085+
$this->assertSame([], $container->getDefinition('messenger.bus.queries')->getArgument(0));
1086+
$this->assertEquals([
1087+
['id' => 'send_message', 'arguments' => []],
1088+
['id' => 'handle_message', 'arguments' => []],
1089+
], $container->getParameter('messenger.bus.queries.middleware'));
10891090

1090-
if (class_exists(DeduplicateMiddleware::class)) {
1091-
$this->assertEquals([
1092-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1093-
['id' => 'reject_redelivered_message_middleware'],
1094-
['id' => 'dispatch_after_current_bus'],
1095-
['id' => 'failed_message_processing_middleware'],
1096-
['id' => 'deduplicate_middleware'],
1097-
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1098-
['id' => 'send_message', 'arguments' => [true]],
1099-
['id' => 'handle_message', 'arguments' => [false]],
1100-
], $container->getParameter('messenger.bus.events.middleware'));
1101-
} else {
1102-
$this->assertEquals([
1103-
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1104-
['id' => 'reject_redelivered_message_middleware'],
1105-
['id' => 'dispatch_after_current_bus'],
1106-
['id' => 'failed_message_processing_middleware'],
1107-
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1108-
['id' => 'send_message', 'arguments' => [true]],
1109-
['id' => 'handle_message', 'arguments' => [false]],
1110-
], $container->getParameter('messenger.bus.events.middleware'));
1091+
$this->assertTrue($container->hasAlias('messenger.default_bus'));
1092+
$this->assertSame('messenger.bus.commands', (string) $container->getAlias('messenger.default_bus'));
1093+
}
1094+
1095+
public function testMessengerWithMultipleBusesWithDeduplicateMiddleware()
1096+
{
1097+
if (!class_exists(DeduplicateMiddleware::class)) {
1098+
$this->markTestSkipped('DeduplicateMiddleware not available.');
11111099
}
11121100

1101+
$container = $this->createContainerFromFile('messenger_multiple_buses_with_deduplicate_middleware');
1102+
1103+
$this->assertTrue($container->has('messenger.bus.commands'));
1104+
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
1105+
$this->assertEquals([
1106+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.commands']],
1107+
['id' => 'reject_redelivered_message_middleware'],
1108+
['id' => 'dispatch_after_current_bus'],
1109+
['id' => 'failed_message_processing_middleware'],
1110+
['id' => 'deduplicate_middleware'],
1111+
['id' => 'send_message', 'arguments' => [true]],
1112+
['id' => 'handle_message', 'arguments' => [false]],
1113+
], $container->getParameter('messenger.bus.commands.middleware'));
1114+
$this->assertTrue($container->has('messenger.bus.events'));
1115+
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
1116+
$this->assertEquals([
1117+
['id' => 'add_bus_name_stamp_middleware', 'arguments' => ['messenger.bus.events']],
1118+
['id' => 'reject_redelivered_message_middleware'],
1119+
['id' => 'dispatch_after_current_bus'],
1120+
['id' => 'failed_message_processing_middleware'],
1121+
['id' => 'deduplicate_middleware'],
1122+
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
1123+
['id' => 'send_message', 'arguments' => [true]],
1124+
['id' => 'handle_message', 'arguments' => [false]],
1125+
], $container->getParameter('messenger.bus.events.middleware'));
11131126
$this->assertTrue($container->has('messenger.bus.queries'));
11141127
$this->assertSame([], $container->getDefinition('messenger.bus.queries')->getArgument(0));
11151128
$this->assertEquals([

‎src/Symfony/Component/Messenger/Middleware/DeduplicateMiddleware.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Middleware/DeduplicateMiddleware.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
2929
}
3030

3131
if (!$envelope->last(ReceivedStamp::class)) {
32-
$lock = $this->lockFactory->createLockFromKey($stamp->getKey(), $stamp->getTtl(), autoRelease: false);
32+
$lock = $this->lockFactory->createLockFromKey($stamp->getKey(), $stamp->getTtl(), false);
3333

3434
if (!$lock->acquire()) {
3535
return $envelope;

‎src/Symfony/Component/Messenger/Tests/Middleware/DeduplicateMiddlewareTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Middleware/DeduplicateMiddlewareTest.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function testDeduplicateMiddlewareIgnoreIfMessageIsNotLockable()
2929
$envelope = new Envelope($message);
3030

3131
$lockFactory = $this->createMock(LockFactory::class);
32-
$lockFactory->expects($this->never())->method('createLock');
32+
$lockFactory->expects($this->never())->method('createLockFromKey');
3333

3434
$decorator = new DeduplicateMiddleware($lockFactory);
3535

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.