[Lock] Reset Key lifetime time before we acquire it
This commit is contained in:
parent
15498970e6
commit
55ad70225a
@ -67,6 +67,7 @@ final class Lock implements LockInterface, LoggerAwareInterface
|
|||||||
*/
|
*/
|
||||||
public function acquire($blocking = false): bool
|
public function acquire($blocking = false): bool
|
||||||
{
|
{
|
||||||
|
$this->key->resetLifetime();
|
||||||
try {
|
try {
|
||||||
if ($blocking) {
|
if ($blocking) {
|
||||||
if (!$this->store instanceof StoreInterface && !$this->store instanceof BlockingStoreInterface) {
|
if (!$this->store instanceof StoreInterface && !$this->store instanceof BlockingStoreInterface) {
|
||||||
|
@ -18,6 +18,7 @@ use Symfony\Component\Lock\Exception\LockConflictedException;
|
|||||||
use Symfony\Component\Lock\Key;
|
use Symfony\Component\Lock\Key;
|
||||||
use Symfony\Component\Lock\Lock;
|
use Symfony\Component\Lock\Lock;
|
||||||
use Symfony\Component\Lock\PersistingStoreInterface;
|
use Symfony\Component\Lock\PersistingStoreInterface;
|
||||||
|
use Symfony\Component\Lock\Store\ExpiringStoreTrait;
|
||||||
use Symfony\Component\Lock\StoreInterface;
|
use Symfony\Component\Lock\StoreInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -392,4 +393,50 @@ class LockTest extends TestCase
|
|||||||
yield [[0.1], false];
|
yield [[0.1], false];
|
||||||
yield [[-0.1, null], false];
|
yield [[-0.1, null], false];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
public function testAcquireTwiceWithExpiration()
|
||||||
|
{
|
||||||
|
$key = new Key(uniqid(__METHOD__, true));
|
||||||
|
$store = new class() implements PersistingStoreInterface {
|
||||||
|
use ExpiringStoreTrait;
|
||||||
|
private $keys = [];
|
||||||
|
private $initialTtl = 30;
|
||||||
|
|
||||||
|
public function save(Key $key)
|
||||||
|
{
|
||||||
|
$key->reduceLifetime($this->initialTtl);
|
||||||
|
$this->keys[spl_object_hash($key)] = $key;
|
||||||
|
$this->checkNotExpired($key);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(Key $key)
|
||||||
|
{
|
||||||
|
unset($this->keys[spl_object_hash($key)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function exists(Key $key)
|
||||||
|
{
|
||||||
|
return isset($this->keys[spl_object_hash($key)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function putOffExpiration(Key $key, $ttl)
|
||||||
|
{
|
||||||
|
$key->reduceLifetime($ttl);
|
||||||
|
$this->checkNotExpired($key);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$ttl = 1;
|
||||||
|
$lock = new Lock($key, $store, $ttl);
|
||||||
|
|
||||||
|
$this->assertTrue($lock->acquire());
|
||||||
|
$lock->release();
|
||||||
|
sleep($ttl + 1);
|
||||||
|
$this->assertTrue($lock->acquire());
|
||||||
|
$lock->release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user