X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FLock%2FCacheLockDriver.php;h=69db1c27f83c7e5fcc679fc661ce2f2d34196ad4;hb=86bf2ee45a7c7409dbc470b5b1706b19e7e40507;hp=57627acecf22a4206866b1868b3d9194857c0fa4;hpb=906bb25972bf3f23e6cc3b98a50c0f3fa0990964;p=friendica.git diff --git a/src/Core/Lock/CacheLockDriver.php b/src/Core/Lock/CacheLockDriver.php index 57627acecf..69db1c27f8 100644 --- a/src/Core/Lock/CacheLockDriver.php +++ b/src/Core/Lock/CacheLockDriver.php @@ -2,21 +2,22 @@ namespace Friendica\Core\Lock; -use Friendica\Core\Cache\IMemoryCacheDriver; +use Friendica\Core\Cache; +use Friendica\Core\Cache\IMemoryCache; -class CacheLockDriver extends AbstractLockDriver +class CacheLockDriver extends AbstractLock { /** - * @var \Friendica\Core\Cache\ICacheDriver; + * @var \Friendica\Core\Cache\ICache; */ private $cache; /** * CacheLockDriver constructor. * - * @param IMemoryCacheDriver $cache The CacheDriver for this type of lock + * @param IMemoryCache $cache The CacheDriver for this type of lock */ - public function __construct(IMemoryCacheDriver $cache) + public function __construct(IMemoryCache $cache) { $this->cache = $cache; } @@ -24,12 +25,12 @@ class CacheLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function acquire($key, $timeout = 120) + public function acquireLock($key, $timeout = 120, $ttl = Cache::FIVE_MINUTES) { $got_lock = false; - $start = time(); + $start = time(); - $cachekey = self::getCacheKey($key); + $cachekey = self::getLockKey($key); do { $lock = $this->cache->get($cachekey); @@ -43,7 +44,7 @@ class CacheLockDriver extends AbstractLockDriver // At first initialize it with "0" $this->cache->add($cachekey, 0); // Now the value has to be "0" because otherwise the key was used by another process meanwhile - if ($this->cache->compareSet($cachekey, 0, getmypid(), 300)) { + if ($this->cache->compareSet($cachekey, 0, getmypid(), $ttl)) { $got_lock = true; $this->markAcquire($key); } @@ -60,12 +61,18 @@ class CacheLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function release($key) + public function releaseLock($key, $override = false) { - $cachekey = self::getCacheKey($key); + $cachekey = self::getLockKey($key); - $this->cache->compareDelete($cachekey, getmypid()); + if ($override) { + $return = $this->cache->delete($cachekey); + } else { + $return = $this->cache->compareDelete($cachekey, getmypid()); + } $this->markRelease($key); + + return $return; } /** @@ -73,16 +80,18 @@ class CacheLockDriver extends AbstractLockDriver */ public function isLocked($key) { - $cachekey = self::getCacheKey($key); - $lock = $this->cache->get($cachekey); + $cachekey = self::getLockKey($key); + $lock = $this->cache->get($cachekey); return isset($lock) && ($lock !== false); } /** - * @param string $key The original key - * @return string The cache key used for the cache + * @param string $key The original key + * + * @return string The cache key used for the cache */ - private static function getCacheKey($key) { - return self::getApp()->get_hostname() . ";lock:" . $key; + private static function getLockKey($key) + { + return "lock:" . $key; } }