aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2016-04-14 15:41:04 +0200
committerRobin Appelman <icewind@owncloud.com>2016-05-03 16:02:17 +0200
commite2f6aa3a57c641c4fe4bebea9497f3801d7d74bc (patch)
treed127f0dc2be132a7c89a3ce398d7af1a91a5e2e2 /lib
parent4b2544925f7f51d7e5cb1329166451f4fbd9e6bf (diff)
downloadnextcloud-server-e2f6aa3a57c641c4fe4bebea9497f3801d7d74bc.tar.gz
nextcloud-server-e2f6aa3a57c641c4fe4bebea9497f3801d7d74bc.zip
factor out redis configuration into it's own factory
Diffstat (limited to 'lib')
-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 bbe6b88876f..f8e7ecfbe14 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -312,6 +312,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(),
@@ -906,6 +910,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