Merge pull request #30769 from nextcloud/fix/memcached_clear

Always call flush() as getAllKeys() is broken
This commit is contained in:
Côme Chilliet 2022-01-20 16:30:26 +01:00 committed by GitHub
commit ff809410f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -134,27 +134,8 @@ class Memcached extends Cache implements IMemcache {
}
public function clear($prefix = '') {
$prefix = $this->getNameSpace() . $prefix;
$allKeys = self::$cache->getAllKeys();
if ($allKeys === false) {
// newer Memcached doesn't like getAllKeys(), flush everything
self::$cache->flush();
return true;
}
$keys = [];
$prefixLength = strlen($prefix);
foreach ($allKeys as $key) {
if (substr($key, 0, $prefixLength) === $prefix) {
$keys[] = $key;
}
}
if (method_exists(self::$cache, 'deleteMulti')) {
self::$cache->deleteMulti($keys);
} else {
foreach ($keys as $key) {
self::$cache->delete($key);
}
}
// Newer Memcached doesn't like getAllKeys(), flush everything
self::$cache->flush();
return true;
}