From 66f08be301df4201f2c9cc97d707784777d37b2c Mon Sep 17 00:00:00 2001 From: Giovanni Lenoci Date: Thu, 13 Jan 2022 10:23:21 +0100 Subject: [PATCH 1/4] [Messenger] Adds option to force indexes creation in Mysql platform for Doctrine transport --- .../Tests/Transport/Doctrine/ConnectionTest.php | 10 ++++++++-- .../Messenger/Transport/Doctrine/Connection.php | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php index 5bc7dddcd2934..cfa458cf96db7 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php @@ -414,7 +414,7 @@ public function providePlatformSql(): iterable /** * @dataProvider setupIndicesProvider */ - public function testSetupIndices(string $platformClass, array $expectedIndices) + public function testSetupIndices(string $platformClass, array $expectedIndices, array $options = []) { $driverConnection = $this->createMock(DBALConnection::class); $driverConnection->method('getConfiguration')->willReturn(new Configuration()); @@ -448,7 +448,7 @@ public function testSetupIndices(string $platformClass, array $expectedIndices) ->willReturn([]); $driverConnection->method('getDatabasePlatform')->willReturn($platformMock); - $connection = new Connection([], $driverConnection); + $connection = new Connection($options, $driverConnection); $connection->setup(); } @@ -459,6 +459,12 @@ public function setupIndicesProvider(): iterable [['delivered_at']], ]; + yield 'MySQL with forced index' => [ + MySQL57Platform::class, + [['queue_name'], ['available_at'], ['delivered_at']], + ['force_indexes_creation' => true] + ]; + yield 'Other platforms' => [ AbstractPlatform::class, [['queue_name'], ['available_at'], ['delivered_at']], diff --git a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php index 48d00c4be5ede..d18ccd03cacdc 100644 --- a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php @@ -41,6 +41,7 @@ class Connection 'queue_name' => 'default', 'redeliver_timeout' => 3600, 'auto_setup' => true, + 'force_indexes_creation' => false, ]; /** @@ -53,6 +54,7 @@ class Connection * * queue_name: name of the queue * * redeliver_timeout: Timeout before redeliver messages still in handling state (i.e: delivered_at is not null and message is still in table). Default 3600 * * auto_setup: Whether the table should be created automatically during send / get. Default : true + * * force_indexes_creation: Wheter mysql indexes should be created also on mysql */ private $configuration = []; private $driverConnection; @@ -397,7 +399,7 @@ private function getSchema(): Schema ->setNotnull(false); $table->setPrimaryKey(['id']); // No indices on queue_name and available_at on MySQL to prevent deadlock issues when running multiple consumers. - if (!$this->driverConnection->getDatabasePlatform() instanceof MySqlPlatform) { + if ($this->configuration['force_indexes_creation'] || !$this->driverConnection->getDatabasePlatform() instanceof MySqlPlatform) { $table->addIndex(['queue_name']); $table->addIndex(['available_at']); } From ce6eedfae78a784075040323c59ee9b419863731 Mon Sep 17 00:00:00 2001 From: Giovanni Lenoci Date: Thu, 13 Jan 2022 10:45:42 +0100 Subject: [PATCH 2/4] [Messenger] Adds entry in CHANGELOG.md --- src/Symfony/Component/Messenger/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 7ae4a2b63c7c7..0b08734526bbc 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -3,7 +3,7 @@ CHANGELOG 4.4.0 ----- - + * Added option for forcing mysql indexes creation for doctrine transport * Added support for auto trimming of Redis streams. * `InMemoryTransport` handle acknowledged and rejected messages. * Made all dispatched worker event classes final. From 09f6fd349af2a5098405ae4cb3e1ee706a669780 Mon Sep 17 00:00:00 2001 From: Giovanni Lenoci Date: Thu, 13 Jan 2022 10:53:44 +0100 Subject: [PATCH 3/4] [Messenger] Code style --- .../Component/Messenger/Transport/Doctrine/Connection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php index d18ccd03cacdc..efe2ff59dc1d2 100644 --- a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php @@ -54,7 +54,7 @@ class Connection * * queue_name: name of the queue * * redeliver_timeout: Timeout before redeliver messages still in handling state (i.e: delivered_at is not null and message is still in table). Default 3600 * * auto_setup: Whether the table should be created automatically during send / get. Default : true - * * force_indexes_creation: Wheter mysql indexes should be created also on mysql + * * force_indexes_creation: Whether indexes should be created also on mysql */ private $configuration = []; private $driverConnection; From 17ec023b82cd3c8c79bbdfb59120504e65ae7e24 Mon Sep 17 00:00:00 2001 From: Giovanni Lenoci Date: Thu, 13 Jan 2022 10:55:41 +0100 Subject: [PATCH 4/4] [Messenger] Code style on ConnectionTest.php --- .../Messenger/Tests/Transport/Doctrine/ConnectionTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php index cfa458cf96db7..69e8f71588012 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/ConnectionTest.php @@ -462,7 +462,7 @@ public function setupIndicesProvider(): iterable yield 'MySQL with forced index' => [ MySQL57Platform::class, [['queue_name'], ['available_at'], ['delivered_at']], - ['force_indexes_creation' => true] + ['force_indexes_creation' => true], ]; yield 'Other platforms' => [