diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-10-09 13:19:26 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2015-10-09 13:19:26 +0200 |
commit | 28de9c7357aad29fb3f84ef307c24dbd25ead675 (patch) | |
tree | fc54603902f54163d58f072ce3d3caae23af9327 | |
parent | 109a206ae3f9ce431e3fa24151b75c9bc03065e8 (diff) | |
parent | 519e980f934a5522674ca6fee68f7e3b5398f4ec (diff) | |
download | nextcloud-server-28de9c7357aad29fb3f84ef307c24dbd25ead675.tar.gz nextcloud-server-28de9c7357aad29fb3f84ef307c24dbd25ead675.zip |
Merge pull request #18857 from owncloud/memcached-fix-stable8
[stable8] Fallback to complete Memcached flush if getAllKeys fails
-rw-r--r-- | lib/private/memcache/memcached.php | 5 | ||||
-rw-r--r-- | tests/lib/memcache/memcached.php | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/private/memcache/memcached.php b/lib/private/memcache/memcached.php index 042fead3347..c14470ae5ae 100644 --- a/lib/private/memcache/memcached.php +++ b/lib/private/memcache/memcached.php @@ -67,6 +67,11 @@ class Memcached extends Cache { 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 = array(); $prefixLength = strlen($prefix); foreach ($allKeys as $key) { diff --git a/tests/lib/memcache/memcached.php b/tests/lib/memcache/memcached.php index 51a78996dd4..3ea9216029a 100644 --- a/tests/lib/memcache/memcached.php +++ b/tests/lib/memcache/memcached.php @@ -26,4 +26,27 @@ class Memcached extends Cache { parent::setUp(); $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')); + } } |