From d1ed1d2996c821d12235b747b7cb4938bc83c269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Mon, 17 Jun 2019 20:41:36 +0200 Subject: [PATCH] Fix Expiring lock in PDO and ZooKeeper --- src/Symfony/Component/Lock/Store/PdoStore.php | 17 ++++++----------- .../Component/Lock/Store/ZookeeperStore.php | 4 ++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Lock/Store/PdoStore.php b/src/Symfony/Component/Lock/Store/PdoStore.php index 8066501166227..a78b72622ae6b 100644 --- a/src/Symfony/Component/Lock/Store/PdoStore.php +++ b/src/Symfony/Component/Lock/Store/PdoStore.php @@ -16,7 +16,6 @@ use Doctrine\DBAL\Schema\Schema; use Symfony\Component\Lock\Exception\InvalidArgumentException; use Symfony\Component\Lock\Exception\LockConflictedException; -use Symfony\Component\Lock\Exception\LockExpiredException; use Symfony\Component\Lock\Exception\NotSupportedException; use Symfony\Component\Lock\Key; use Symfony\Component\Lock\StoreInterface; @@ -36,6 +35,8 @@ */ class PdoStore implements StoreInterface { + use ExpiringStoreTrait; + private $conn; private $dsn; private $driver; @@ -123,9 +124,7 @@ public function save(Key $key) try { $stmt->execute(); - if ($key->isExpired()) { - throw new LockExpiredException(sprintf('Failed to put off the expiration of the "%s" lock within the specified time.', $key)); - } + $this->checkNotExpired($key); return; } catch (DBALException $e) { @@ -136,13 +135,11 @@ public function save(Key $key) $this->putOffExpiration($key, $this->initialTtl); } - if ($key->isExpired()) { - throw new LockExpiredException(sprintf('Failed to store the "%s" lock.', $key)); - } - if ($this->gcProbability > 0 && (1.0 === $this->gcProbability || (random_int(0, PHP_INT_MAX) / PHP_INT_MAX) <= $this->gcProbability)) { $this->prune(); } + + $this->checkNotExpired($key); } /** @@ -178,9 +175,7 @@ public function putOffExpiration(Key $key, $ttl) throw new LockConflictedException(); } - if ($key->isExpired()) { - throw new LockExpiredException(sprintf('Failed to put off the expiration of the "%s" lock within the specified time.', $key)); - } + $this->checkNotExpired($key); } /** diff --git a/src/Symfony/Component/Lock/Store/ZookeeperStore.php b/src/Symfony/Component/Lock/Store/ZookeeperStore.php index 4f8b4ee374e86..ce3cb4bab7049 100644 --- a/src/Symfony/Component/Lock/Store/ZookeeperStore.php +++ b/src/Symfony/Component/Lock/Store/ZookeeperStore.php @@ -25,6 +25,8 @@ */ class ZookeeperStore implements StoreInterface { + use ExpiringStoreTrait; + private $zookeeper; public function __construct(\Zookeeper $zookeeper) @@ -45,6 +47,8 @@ public function save(Key $key) $token = $this->getUniqueToken($key); $this->createNewLock($resource, $token); + + $this->checkNotExpired($key); } /**