diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-10-09 14:18:54 +0300 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2015-10-09 14:18:54 +0300 |
commit | cdcb6c3dc706ef870f6bc1bf8609ed9f4ac9e704 (patch) | |
tree | b97ca6987503963a35e2ca7bee7a5a94853ad2c7 | |
parent | 89b0a6796d36448822d3c2369b91560e26c08d36 (diff) | |
parent | 3bc4c92d7654b3f7a7e6fa7cdc9738a92c956d2d (diff) |
Merge pull request #18858 from owncloud/memcached-fix-stable7
[stable7] 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 cd8e2e8d0b6..aaa9f580252 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 fdab32693ff..6f6acc416d4 100644 --- a/tests/lib/memcache/memcached.php +++ b/tests/lib/memcache/memcached.php @@ -23,4 +23,27 @@ class Memcached extends Cache { public function setUp() { $this->instance = new \OC\Memcache\Memcached(uniqid()); } + + 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')); + } } |