From d6b4d8465543b0587093b7de81bc0a0dad379a73 Mon Sep 17 00:00:00 2001 From: Pavel Barton Date: Wed, 27 Mar 2024 14:00:55 +0100 Subject: [PATCH 1/4] Revert "[DoctrineBridge] Ignore invalid stores in `LockStoreSchemaListener` raised by `StoreFactory`" This reverts commit 0acd4030272355c909e29430022e1d6399367997. --- .../SchemaListener/LockStoreSchemaListener.php | 17 ++++------------- .../LockStoreSchemaListenerTest.php | 17 ----------------- 2 files changed, 4 insertions(+), 30 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php index a85d159df837b..c4c3b0b7ffcad 100644 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php +++ b/src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php @@ -12,7 +12,6 @@ namespace Symfony\Bridge\Doctrine\SchemaListener; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; -use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\PersistingStoreInterface; use Symfony\Component\Lock\Store\DoctrineDbalStore; @@ -30,20 +29,12 @@ public function postGenerateSchema(GenerateSchemaEventArgs $event): void { $connection = $event->getEntityManager()->getConnection(); - $storesIterator = new \ArrayIterator($this->stores); - while ($storesIterator->valid()) { - try { - $store = $storesIterator->current(); - if (!$store instanceof DoctrineDbalStore) { - continue; - } - - $store->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection)); - } catch (InvalidArgumentException) { - // no-op + foreach ($this->stores as $store) { + if (!$store instanceof DoctrineDbalStore) { + continue; } - $storesIterator->next(); + $store->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection)); } } } diff --git a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php index 6f23d680feb9f..d8d06a5fe0524 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/SchemaListener/LockStoreSchemaListenerTest.php @@ -17,7 +17,6 @@ use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Doctrine\SchemaListener\LockStoreSchemaListener; -use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\Store\DoctrineDbalStore; class LockStoreSchemaListenerTest extends TestCase @@ -40,20 +39,4 @@ public function testPostGenerateSchemaLockPdo() $subscriber = new LockStoreSchemaListener([$lockStore]); $subscriber->postGenerateSchema($event); } - - public function testPostGenerateSchemaWithInvalidLockStore() - { - $entityManager = $this->createMock(EntityManagerInterface::class); - $entityManager->expects($this->once()) - ->method('getConnection') - ->willReturn($this->createMock(Connection::class)); - $event = new GenerateSchemaEventArgs($entityManager, new Schema()); - - $subscriber = new LockStoreSchemaListener((static function (): \Generator { - yield $this->createMock(DoctrineDbalStore::class); - - throw new InvalidArgumentException('Unsupported Connection'); - })()); - $subscriber->postGenerateSchema($event); - } } From adeae5ae948930f49eb87976e57a9ac836e7a0be Mon Sep 17 00:00:00 2001 From: Pavel Barton Date: Fri, 12 Apr 2024 11:22:06 +0200 Subject: [PATCH 2/4] [Lock] Add NullStore --- .../Component/Lock/Store/NullStore.php | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Symfony/Component/Lock/Store/NullStore.php diff --git a/src/Symfony/Component/Lock/Store/NullStore.php b/src/Symfony/Component/Lock/Store/NullStore.php new file mode 100644 index 0000000000000..cf0ca37b3fea7 --- /dev/null +++ b/src/Symfony/Component/Lock/Store/NullStore.php @@ -0,0 +1,39 @@ + + */ +class NullStore implements BlockingSharedLockStoreInterface +{ + public function save(Key $key): void + { + } + + public function saveRead(Key $key): void + { + } + + public function waitAndSaveRead(Key $key): void + { + } + + public function delete(Key $key): void + { + } + + public function exists(Key $key): bool + { + return false; + } + + public function putOffExpiration(Key $key, float $ttl): void + { + } +} From a2d215acba4ab20dde207d661eb4fc4db4000ed0 Mon Sep 17 00:00:00 2001 From: Pavel Barton Date: Fri, 12 Apr 2024 11:28:36 +0200 Subject: [PATCH 3/4] [Lock] Add a case for the new NullStore to StoreFactory --- src/Symfony/Component/Lock/Store/StoreFactory.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Symfony/Component/Lock/Store/StoreFactory.php b/src/Symfony/Component/Lock/Store/StoreFactory.php index 7e962ed55da18..68022da08b092 100644 --- a/src/Symfony/Component/Lock/Store/StoreFactory.php +++ b/src/Symfony/Component/Lock/Store/StoreFactory.php @@ -106,6 +106,9 @@ public static function createStore(#[\SensitiveParameter] object|string $connect case 'in-memory' === $connection: return new InMemoryStore(); + + case 'null' === $connection: + return new NullStore(); } throw new InvalidArgumentException(sprintf('Unsupported Connection: "%s".', $connection)); From e8c027979b53122796824f07fd023fa0933dfd71 Mon Sep 17 00:00:00 2001 From: Pavel Barton Date: Fri, 12 Apr 2024 13:00:36 +0200 Subject: [PATCH 4/4] [Lock] Add licence header to NullStore --- src/Symfony/Component/Lock/Store/NullStore.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Symfony/Component/Lock/Store/NullStore.php b/src/Symfony/Component/Lock/Store/NullStore.php index cf0ca37b3fea7..f80ddce7a97d5 100644 --- a/src/Symfony/Component/Lock/Store/NullStore.php +++ b/src/Symfony/Component/Lock/Store/NullStore.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Component\Lock\Store; use Symfony\Component\Lock\BlockingSharedLockStoreInterface;