summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2016-05-12 13:15:12 +0200
committerMorris Jobke <hey@morrisjobke.de>2016-05-12 13:15:12 +0200
commit9b3eefbf95a70e5b7bc3c9d5b2439bd381d9a979 (patch)
tree85e0a351d4faf92f3b3722f02a3282638eebfccd /lib/private
parent8b6bb0a4269fee94c0e0842e6a001d70d4af25be (diff)
parente2f6aa3a57c641c4fe4bebea9497f3801d7d74bc (diff)
downloadnextcloud-server-9b3eefbf95a70e5b7bc3c9d5b2439bd381d9a979.tar.gz
nextcloud-server-9b3eefbf95a70e5b7bc3c9d5b2439bd381d9a979.zip
Merge pull request #24563 from owncloud/redis-factory
factor out redis configuration into it's own factory
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/Memcache/Redis.php31
-rw-r--r--lib/private/RedisFactory.php85
-rw-r--r--lib/private/Server.php14
3 files changed, 101 insertions, 29 deletions
diff --git a/lib/private/Memcache/Redis.php b/lib/private/Memcache/Redis.php
index b3444a2b4e9..5b6955823c4 100644
--- a/lib/private/Memcache/Redis.php
+++ b/lib/private/Memcache/Redis.php
@@ -37,33 +37,7 @@ class Redis extends Cache implements IMemcacheTTL {
public function __construct($prefix = '') {
parent::__construct($prefix);
if (is_null(self::$cache)) {
- // TODO allow configuring a RedisArray, see https://github.com/nicolasff/phpredis/blob/master/arrays.markdown#redis-arrays
- self::$cache = new \Redis();
- $config = \OC::$server->getSystemConfig()->getValue('redis', array());
- if (isset($config['host'])) {
- $host = $config['host'];
- } else {
- $host = '127.0.0.1';
- }
- if (isset($config['port'])) {
- $port = $config['port'];
- } else {
- $port = 6379;
- }
- if (isset($config['timeout'])) {
- $timeout = $config['timeout'];
- } else {
- $timeout = 0.0; // unlimited
- }
-
- self::$cache->connect($host, $port, $timeout);
- if(isset($config['password']) && $config['password'] !== '') {
- self::$cache->auth($config['password']);
- }
-
- if (isset($config['dbindex'])) {
- self::$cache->select($config['dbindex']);
- }
+ self::$cache = \OC::$server->getGetRedisFactory()->getInstance();
}
}
@@ -201,8 +175,7 @@ class Redis extends Cache implements IMemcacheTTL {
}
static public function isAvailable() {
- return extension_loaded('redis')
- && version_compare(phpversion('redis'), '2.2.5', '>=');
+ return \OC::$server->getGetRedisFactory()->isAvailable();
}
}
diff --git a/lib/private/RedisFactory.php b/lib/private/RedisFactory.php
new file mode 100644
index 00000000000..d286c0167b2
--- /dev/null
+++ b/lib/private/RedisFactory.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC;
+
+class RedisFactory {
+ /** @var \Redis */
+ private $instance;
+
+ /** @var SystemConfig */
+ private $config;
+
+ /**
+ * RedisFactory constructor.
+ *
+ * @param SystemConfig $config
+ */
+ public function __construct(SystemConfig $config) {
+ $this->config = $config;
+ }
+
+ private function create() {
+ $this->instance = new \Redis();
+ // TODO allow configuring a RedisArray, see https://github.com/nicolasff/phpredis/blob/master/arrays.markdown#redis-arrays
+ $config = $this->config->getValue('redis', array());
+ if (isset($config['host'])) {
+ $host = $config['host'];
+ } else {
+ $host = '127.0.0.1';
+ }
+ if (isset($config['port'])) {
+ $port = $config['port'];
+ } else {
+ $port = 6379;
+ }
+ if (isset($config['timeout'])) {
+ $timeout = $config['timeout'];
+ } else {
+ $timeout = 0.0; // unlimited
+ }
+
+ $this->instance->connect($host, $port, $timeout);
+ if (isset($config['password']) && $config['password'] !== '') {
+ $this->instance->auth($config['password']);
+ }
+
+ if (isset($config['dbindex'])) {
+ $this->instance->select($config['dbindex']);
+ }
+ }
+
+ public function getInstance() {
+ if (!$this->isAvailable()) {
+ throw new \Exception('Redis support is not available');
+ }
+ if (!$this->instance instanceof \Redis) {
+ $this->create();
+ }
+
+ return $this->instance;
+ }
+
+ public function isAvailable() {
+ return extension_loaded('redis')
+ && version_compare(phpversion('redis'), '2.2.5', '>=');
+ }
+}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index cbab1f09ebd..a6f1425d545 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -336,6 +336,10 @@ class Server extends ServerContainer implements IServerContainer {
'\\OC\\Memcache\\ArrayCache'
);
});
+ $this->registerService('RedisFactory', function (Server $c) {
+ $systemConfig = $c->getSystemConfig();
+ return new RedisFactory($systemConfig);
+ });
$this->registerService('ActivityManager', function (Server $c) {
return new \OC\Activity\Manager(
$c->getRequest(),
@@ -930,6 +934,16 @@ class Server extends ServerContainer implements IServerContainer {
}
/**
+ * Returns an \OC\RedisFactory instance
+ *
+ * @return \OC\RedisFactory
+ */
+ public function getGetRedisFactory() {
+ return $this->query('RedisFactory');
+ }
+
+
+ /**
* Returns the current session
*
* @return \OCP\IDBConnection