summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2014-04-25 14:34:47 +0200
committerJörn Friedrich Dreyer <jfd@butonic.de>2014-06-18 12:53:19 +0200
commit3c66a8c8ed7113754a8e7f449a1a51bb08192b1a (patch)
treed8a335439ec70653e28eae45cb51ceab3c37a804 /lib
parenta921ad89259f1d580292d649a58160fab7a2a2d7 (diff)
downloadnextcloud-server-3c66a8c8ed7113754a8e7f449a1a51bb08192b1a.tar.gz
nextcloud-server-3c66a8c8ed7113754a8e7f449a1a51bb08192b1a.zip
allow configuring objectstore as home and root storage
Diffstat (limited to 'lib')
-rw-r--r--lib/private/files/filesystem.php17
-rwxr-xr-xlib/private/util.php49
2 files changed, 55 insertions, 11 deletions
diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index 2cc4a2130eb..f1f076a297b 100644
--- a/lib/private/files/filesystem.php
+++ b/lib/private/files/filesystem.php
@@ -325,13 +325,22 @@ class Filesystem {
$userObject = \OC_User::getManager()->get($user);
if (!is_null($userObject)) {
+ $homeStorage = \OC_Config::getValue( 'home_storage', array(
+ 'class' => '\OC\Files\Storage\Home',
+ 'arguments' => array()
+ ));
+ if (empty($config['class'])) {
+ //FIXME log error? or fallback to '\OC\Files\Storage\Home'?
+ }
+ if (!isset($config['arguments'])) {
+ $config['arguments'] = array();
+ }
+ $homeStorage['arguments']['user'] = $userObject;
// check for legacy home id (<= 5.0.12)
if (\OC\Files\Cache\Storage::exists('local::' . $root . '/')) {
- self::mount('\OC\Files\Storage\Home', array('user' => $userObject, 'legacy' => true), $user);
- }
- else {
- self::mount('\OC\Files\Storage\Home', array('user' => $userObject), $user);
+ $homeStorage['arguments']['legacy'] = true;
}
+ self::mount($homeStorage['class'], $homeStorage['arguments'], $user);
}
else {
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
diff --git a/lib/private/util.php b/lib/private/util.php
index dfdddd0e3ab..5e019bf90b6 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -12,6 +12,39 @@ class OC_Util {
private static $rootMounted=false;
private static $fsSetup=false;
+ private static function initLocalStorageRootFS() {
+ // mount local file backend as root
+ $configDataDirectory = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
+ //first set up the local "root" storage
+ \OC\Files\Filesystem::initMounts();
+ if(!self::$rootMounted) {
+ \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$configDataDirectory), '/');
+ self::$rootMounted = true;
+ }
+ }
+
+ /**
+ * mounting an object storage as the root fs will in essence remove the
+ * necessity of a data folder being present.
+ * TODO make home storage aware of this and use the object storage instead of local disk access
+ * @param array $config containing 'class' and optional 'arguments'
+ */
+ private static function initObjectStorageRootFS($config) {
+ // check misconfiguration
+ if (empty($config['class'])) {
+ //FIXME log error?
+ }
+ if (!isset($config['arguments'])) {
+ $config['arguments'] = array();
+ }
+ // mount object storage as root
+ \OC\Files\Filesystem::initMounts();
+ if(!self::$rootMounted) {
+ \OC\Files\Filesystem::mount($config['class'], $config['arguments'], '/');
+ self::$rootMounted = true;
+ }
+ }
+
/**
* Can be set up
* @param string $user
@@ -39,12 +72,12 @@ class OC_Util {
self::$fsSetup=true;
}
- $configDataDirectory = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- //first set up the local "root" storage
- \OC\Files\Filesystem::initMounts();
- if(!self::$rootMounted) {
- \OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$configDataDirectory), '/');
- self::$rootMounted = true;
+ //check if we are using an object storage
+ $object_storage = OC_Config::getValue( 'object_storage' );
+ if ( isset( $object_storage ) ) {
+ self::initObjectStorageRootFS($object_storage);
+ } else {
+ self::initLocalStorageRootFS();
}
if ($user != '' && !OCP\User::userExists($user)) {
@@ -60,7 +93,9 @@ class OC_Util {
/**
* @var \OC\Files\Storage\Storage $storage
*/
- if ($storage->instanceOfStorage('\OC\Files\Storage\Home')) {
+ if ($storage->instanceOfStorage('\OC\Files\Storage\Home')
+ || $storage->instanceOfStorage('\OCA\ObjectStore\AbstractObjectStore') // FIXME introduce interface \OC\Files\Storage\HomeStorage? or add method?
+ ) {
$user = $storage->getUser()->getUID();
$quota = OC_Util::getUserQuota($user);
if ($quota !== \OC\Files\SPACE_UNLIMITED) {