Merge pull request #20438 from owncloud/memcache-key-length-fix

Handle errors on memcached level
This commit is contained in:
Thomas Müller 2015-11-18 14:20:57 +01:00
commit 8d74e28af6
1 changed files with 30 additions and 8 deletions

View File

@ -41,9 +41,9 @@ class Memcached extends Cache implements IMemcache {
parent::__construct($prefix); parent::__construct($prefix);
if (is_null(self::$cache)) { if (is_null(self::$cache)) {
self::$cache = new \Memcached(); self::$cache = new \Memcached();
$servers = \OC_Config::getValue('memcached_servers'); $servers = \OC::$server->getSystemConfig()->getValue('memcached_servers');
if (!$servers) { if (!$servers) {
$server = \OC_Config::getValue('memcached_server'); $server = \OC::$server->getSystemConfig()->getValue('memcached_server');
if ($server) { if ($server) {
$servers = array($server); $servers = array($server);
} else { } else {
@ -72,10 +72,12 @@ class Memcached extends Cache implements IMemcache {
public function set($key, $value, $ttl = 0) { public function set($key, $value, $ttl = 0) {
if ($ttl > 0) { if ($ttl > 0) {
return self::$cache->set($this->getNamespace() . $key, $value, $ttl); $result = self::$cache->set($this->getNamespace() . $key, $value, $ttl);
} else { } else {
return self::$cache->set($this->getNamespace() . $key, $value); $result = self::$cache->set($this->getNamespace() . $key, $value);
} }
$this->verifyReturnCode();
return $result;
} }
public function hasKey($key) { public function hasKey($key) {
@ -84,7 +86,9 @@ class Memcached extends Cache implements IMemcache {
} }
public function remove($key) { public function remove($key) {
return self::$cache->delete($this->getNamespace() . $key); $result= self::$cache->delete($this->getNamespace() . $key);
$this->verifyReturnCode();
return $result;
} }
public function clear($prefix = '') { public function clear($prefix = '') {
@ -121,7 +125,9 @@ class Memcached extends Cache implements IMemcache {
* @return bool * @return bool
*/ */
public function add($key, $value, $ttl = 0) { public function add($key, $value, $ttl = 0) {
return self::$cache->add($this->getPrefix() . $key, $value, $ttl); $result = self::$cache->add($this->getPrefix() . $key, $value, $ttl);
$this->verifyReturnCode();
return $result;
} }
/** /**
@ -133,7 +139,9 @@ class Memcached extends Cache implements IMemcache {
*/ */
public function inc($key, $step = 1) { public function inc($key, $step = 1) {
$this->add($key, 0); $this->add($key, 0);
return self::$cache->increment($this->getPrefix() . $key, $step); $result = self::$cache->increment($this->getPrefix() . $key, $step);
$this->verifyReturnCode();
return $result;
} }
/** /**
@ -144,10 +152,24 @@ class Memcached extends Cache implements IMemcache {
* @return int | bool * @return int | bool
*/ */
public function dec($key, $step = 1) { public function dec($key, $step = 1) {
return self::$cache->decrement($this->getPrefix() . $key, $step); $result = self::$cache->decrement($this->getPrefix() . $key, $step);
$this->verifyReturnCode();
return $result;
} }
static public function isAvailable() { static public function isAvailable() {
return extension_loaded('memcached'); return extension_loaded('memcached');
} }
/**
* @throws \Exception
*/
private function verifyReturnCode() {
$code = self::$cache->getResultCode();
if ($code === \Memcached::RES_SUCCESS) {
return;
}
$message = self::$cache->getResultMessage();
throw new \Exception("Error $code interacting with memcached : $message");
}
} }