From 1ec5c6b2840cedbe21e089f4ef4404d22a65031e Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Sun, 7 Oct 2018 10:35:37 +0200 Subject: [PATCH] friendica-5847 Console Cache List command doesn't work - filterPrefix => filterArrayKeysByPrefix() - Logging failed Executions of getAllKeys and get from Memcached --- src/Core/Cache/AbstractCacheDriver.php | 15 ++++++++------- src/Core/Cache/ArrayCache.php | 2 +- src/Core/Cache/MemcacheCacheDriver.php | 10 +++++----- src/Core/Cache/MemcachedCacheDriver.php | 22 +++++++++++----------- src/Core/Console/Cache.php | 5 +---- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/Core/Cache/AbstractCacheDriver.php b/src/Core/Cache/AbstractCacheDriver.php index e694b9c314..1cdecf6ceb 100644 --- a/src/Core/Cache/AbstractCacheDriver.php +++ b/src/Core/Cache/AbstractCacheDriver.php @@ -44,21 +44,22 @@ abstract class AbstractCacheDriver extends BaseObject } /** - * Filters a list for a given prefix + * Filters the keys of an array with a given prefix + * Returns the filtered keys as an new array * - * @param array $list the list - * @param string|null $prefix the prefix + * @param array $array The array, which should get filtered + * @param string|null $prefix The prefix (if null, all keys will get returned) * - * @return array the filtered list + * @return array The filtered array with just the keys */ - protected function filterPrefix($list, $prefix = null) + protected function filterArrayKeysByPrefix($array, $prefix = null) { if (empty($prefix)) { - return array_keys($list); + return array_keys($array); } else { $result = []; - foreach (array_keys($list) as $key) { + foreach (array_keys($array) as $key) { if (strpos($key, $prefix) === 0) { array_push($result, $key); } diff --git a/src/Core/Cache/ArrayCache.php b/src/Core/Cache/ArrayCache.php index 0d314fadb7..a99b05788f 100644 --- a/src/Core/Cache/ArrayCache.php +++ b/src/Core/Cache/ArrayCache.php @@ -24,7 +24,7 @@ class ArrayCache extends AbstractCacheDriver implements IMemoryCacheDriver */ public function getAllKeys($prefix = null) { - return $this->filterPrefix($this->cachedData, $prefix); + return $this->filterArrayKeysByPrefix($this->cachedData, $prefix); } /** diff --git a/src/Core/Cache/MemcacheCacheDriver.php b/src/Core/Cache/MemcacheCacheDriver.php index f31e21d14e..fd928c6fcc 100644 --- a/src/Core/Cache/MemcacheCacheDriver.php +++ b/src/Core/Cache/MemcacheCacheDriver.php @@ -45,23 +45,23 @@ class MemcacheCacheDriver extends AbstractCacheDriver implements IMemoryCacheDri */ public function getAllKeys($prefix = null) { - $list = []; + $keys = []; $allSlabs = $this->memcache->getExtendedStats('slabs'); foreach ($allSlabs as $slabs) { foreach (array_keys($slabs) as $slabId) { $cachedump = $this->memcache->getExtendedStats('cachedump', (int)$slabId); - foreach ($cachedump as $keys => $arrVal) { + foreach ($cachedump as $key => $arrVal) { if (!is_array($arrVal)) { continue; } - $list = array_merge($list, array_keys($arrVal)); + $keys = array_merge($keys, array_keys($arrVal)); } } } - $list = $this->getOriginalKeys($list); + $keys = $this->getOriginalKeys($keys); - return $this->filterPrefix($list, $prefix); + return $this->filterArrayKeysByPrefix($keys, $prefix); } /** diff --git a/src/Core/Cache/MemcachedCacheDriver.php b/src/Core/Cache/MemcachedCacheDriver.php index 82df98f13b..a6e1bad950 100644 --- a/src/Core/Cache/MemcachedCacheDriver.php +++ b/src/Core/Cache/MemcachedCacheDriver.php @@ -62,13 +62,14 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr */ public function getAllKeys($prefix = null) { - // Doesn't work because of https://github.com/php-memcached-dev/php-memcached/issues/367 - // returns everytime an empty array - throw new InternalServerErrorException('getAllKeys for Memcached not supported yet'); + $keys = $this->getOriginalKeys($this->memcached->getAllKeys()); - $list = $this->getOriginalKeys($this->memcached->getAllKeys()); - - return $this->filterPrefix($list, $prefix); + if ($this->memcached->getResultCode() == Memcached::RES_SUCCESS) { + return $this->filterArrayKeysByPrefix($keys, $prefix); + } else { + logger('Memcached \'getAllKeys\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL); + return []; + } } /** @@ -76,17 +77,17 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr */ public function get($key) { - $return = null; $cachekey = $this->getCacheKey($key); // We fetch with the hostname as key to avoid problems with other applications $value = $this->memcached->get($cachekey); if ($this->memcached->getResultCode() === Memcached::RES_SUCCESS) { - $return = $value; + return $value; + } else { + logger('Memcached \'get\' failed with ' . $this->memcached->getResultMessage(), LOGGER_ALL); + return []; } - - return $return; } /** @@ -109,7 +110,6 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr $value ); } - } /** diff --git a/src/Core/Console/Cache.php b/src/Core/Console/Cache.php index 0dfef43f35..459a27e20b 100644 --- a/src/Core/Console/Cache.php +++ b/src/Core/Console/Cache.php @@ -115,10 +115,7 @@ HELP; $count = 0; foreach ($keys as $key) { - if (empty($prefix) || strpos($key, $prefix) === 0) { - $this->out($key); - $count++; - } + $this->out($key); } $this->out($count . ' keys found');