]> git.mxchange.org Git - friendica.git/blobdiff - src/Core/Lock/CacheLock.php
Fix getAllKeys() method for memcache instances
[friendica.git] / src / Core / Lock / CacheLock.php
index b38c5ed9afe080e7332095299d9b38a1e8702b84..238beb705ce93e986773adef7ec898e41a3ab9b6 100644 (file)
@@ -5,8 +5,13 @@ namespace Friendica\Core\Lock;
 use Friendica\Core\Cache;
 use Friendica\Core\Cache\IMemoryCache;
 
-class CacheLock extends AbstractLock
+class CacheLock extends Lock
 {
+       /**
+        * @var string The static prefix of all locks inside the cache
+        */
+       const CACHE_PREFIX = 'lock:';
+
        /**
         * @var \Friendica\Core\Cache\ICache;
         */
@@ -25,7 +30,7 @@ class CacheLock extends AbstractLock
        /**
         * (@inheritdoc)
         */
-       public function acquireLock($key, $timeout = 120, $ttl = Cache::FIVE_MINUTES)
+       public function acquireLock($key, $timeout = 120, $ttl = Cache\Cache::FIVE_MINUTES)
        {
                $got_lock = false;
                $start    = time();
@@ -85,6 +90,46 @@ class CacheLock extends AbstractLock
                return isset($lock) && ($lock !== false);
        }
 
+       /**
+        * {@inheritDoc}
+        */
+       public function getName()
+       {
+               return $this->cache->getName();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public function getLocks(string $prefix = '')
+       {
+               $locks = $this->cache->getAllKeys(self::CACHE_PREFIX . $prefix);
+
+               array_walk($locks, function (&$lock, $key) {
+                       $lock = substr($lock, strlen(self::CACHE_PREFIX));
+               });
+
+               return $locks;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public function releaseAll($override = false)
+       {
+               $success = parent::releaseAll($override);
+
+               $locks = $this->getLocks();
+
+               foreach ($locks as $lock) {
+                       if (!$this->releaseLock($lock, $override)) {
+                               $success = false;
+                       }
+               }
+
+               return $success;
+       }
+
        /**
         * @param string $key The original key
         *
@@ -92,6 +137,6 @@ class CacheLock extends AbstractLock
         */
        private static function getLockKey($key)
        {
-               return "lock:" . $key;
+               return self::CACHE_PREFIX . $key;
        }
 }