Merge pull request #18851 from owncloud/memcached-getallkeys-fallback
Fallback to complete Memcached flush if getAllKeys fails
This commit is contained in:
commit
620173c792
|
@ -89,6 +89,11 @@ class Memcached extends Cache implements IMemcache {
|
||||||
public function clear($prefix = '') {
|
public function clear($prefix = '') {
|
||||||
$prefix = $this->getNamespace() . $prefix;
|
$prefix = $this->getNamespace() . $prefix;
|
||||||
$allKeys = self::$cache->getAllKeys();
|
$allKeys = self::$cache->getAllKeys();
|
||||||
|
if ($allKeys === false) {
|
||||||
|
// newer Memcached doesn't like getAllKeys(), flush everything
|
||||||
|
self::$cache->flush();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
$keys = array();
|
$keys = array();
|
||||||
$prefixLength = strlen($prefix);
|
$prefixLength = strlen($prefix);
|
||||||
foreach ($allKeys as $key) {
|
foreach ($allKeys as $key) {
|
||||||
|
|
|
@ -26,4 +26,27 @@ class Memcached extends Cache {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->instance = new \OC\Memcache\Memcached($this->getUniqueID());
|
$this->instance = new \OC\Memcache\Memcached($this->getUniqueID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testClear() {
|
||||||
|
// Memcached is sometimes broken with clear(), so we don't test it thoroughly
|
||||||
|
$value='ipsum lorum';
|
||||||
|
$this->instance->set('1_value1', $value);
|
||||||
|
$this->instance->set('1_value2', $value);
|
||||||
|
$this->instance->set('2_value1', $value);
|
||||||
|
$this->instance->set('3_value1', $value);
|
||||||
|
|
||||||
|
$this->assertTrue($this->instance->clear('1_'));
|
||||||
|
|
||||||
|
$this->assertFalse($this->instance->hasKey('1_value1'));
|
||||||
|
$this->assertFalse($this->instance->hasKey('1_value2'));
|
||||||
|
//$this->assertTrue($this->instance->hasKey('2_value1'));
|
||||||
|
//$this->assertTrue($this->instance->hasKey('3_value1'));
|
||||||
|
|
||||||
|
$this->assertTrue($this->instance->clear());
|
||||||
|
|
||||||
|
$this->assertFalse($this->instance->hasKey('1_value1'));
|
||||||
|
$this->assertFalse($this->instance->hasKey('1_value2'));
|
||||||
|
$this->assertFalse($this->instance->hasKey('2_value1'));
|
||||||
|
$this->assertFalse($this->instance->hasKey('3_value1'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue