diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-15 14:10:23 +0300 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-15 14:10:23 +0300 |
commit | 4159187a6e78c2285d4aebdfd7a1504d74e52a71 (patch) | |
tree | d8bcd75cff59564070c11dda8d62a1880fd7791c | |
parent | 6f64c99653d86dc2fdc6624818d1bd0d4934ec54 (diff) | |
parent | 9190885b4e0bdcec4c7f3fafd3f0eb2dd727c716 (diff) |
Merge pull request #23229 from owncloud/backport-23218-memcached-exceptions-on-success
[9.0] Fix errors in memcached implementation
-rw-r--r-- | lib/private/memcache/memcached.php | 21 | ||||
-rw-r--r-- | tests/lib/memcache/cache.php | 9 |
2 files changed, 25 insertions, 5 deletions
diff --git a/lib/private/memcache/memcached.php b/lib/private/memcache/memcached.php index c13be68b47f..a30f9da7ed7 100644 --- a/lib/private/memcache/memcached.php +++ b/lib/private/memcache/memcached.php @@ -88,7 +88,9 @@ class Memcached extends Cache implements IMemcache { public function remove($key) { $result= self::$cache->delete($this->getNamespace() . $key); - $this->verifyReturnCode(); + if (self::$cache->getResultCode() !== \Memcached::RES_NOTFOUND) { + $this->verifyReturnCode(); + } return $result; } @@ -124,10 +126,13 @@ class Memcached extends Cache implements IMemcache { * @param mixed $value * @param int $ttl Time To Live in seconds. Defaults to 60*60*24 * @return bool + * @throws \Exception */ public function add($key, $value, $ttl = 0) { $result = self::$cache->add($this->getPrefix() . $key, $value, $ttl); - $this->verifyReturnCode(); + if (self::$cache->getResultCode() !== \Memcached::RES_NOTSTORED) { + $this->verifyReturnCode(); + } return $result; } @@ -141,7 +146,11 @@ class Memcached extends Cache implements IMemcache { public function inc($key, $step = 1) { $this->add($key, 0); $result = self::$cache->increment($this->getPrefix() . $key, $step); - $this->verifyReturnCode(); + + if (self::$cache->getResultCode() !== \Memcached::RES_SUCCESS) { + return false; + } + return $result; } @@ -154,7 +163,11 @@ class Memcached extends Cache implements IMemcache { */ public function dec($key, $step = 1) { $result = self::$cache->decrement($this->getPrefix() . $key, $step); - $this->verifyReturnCode(); + + if (self::$cache->getResultCode() !== \Memcached::RES_SUCCESS) { + return false; + } + return $result; } diff --git a/tests/lib/memcache/cache.php b/tests/lib/memcache/cache.php index 3ff72ee931c..725b0fbbf57 100644 --- a/tests/lib/memcache/cache.php +++ b/tests/lib/memcache/cache.php @@ -39,6 +39,11 @@ abstract class Cache extends \Test_Cache { $this->assertFalse($this->instance->hasKey('foo')); } + public function testRemoveNonExisting() { + $this->instance->remove('foo'); + $this->assertFalse($this->instance->hasKey('foo')); + } + public function testArrayAccessSet() { $this->instance['foo'] = 'bar'; $this->assertEquals('bar', $this->instance->get('foo')); @@ -72,7 +77,9 @@ abstract class Cache extends \Test_Cache { $this->assertEquals(1, $this->instance->inc('foo')); $this->assertEquals(1, $this->instance->get('foo')); $this->assertEquals(2, $this->instance->inc('foo')); + $this->assertEquals(2, $this->instance->get('foo')); $this->assertEquals(12, $this->instance->inc('foo', 10)); + $this->assertEquals(12, $this->instance->get('foo')); $this->instance->set('foo', 'bar'); $this->assertFalse($this->instance->inc('foo')); @@ -80,7 +87,7 @@ abstract class Cache extends \Test_Cache { } public function testDec() { - $this->assertEquals(false, $this->instance->dec('foo')); + $this->assertFalse($this->instance->dec('foo')); $this->instance->set('foo', 20); $this->assertEquals(19, $this->instance->dec('foo')); $this->assertEquals(19, $this->instance->get('foo')); |