]> source.dussan.org Git - nextcloud-server.git/commitdiff
allow configuring objectstore as home and root storage
authorJörn Friedrich Dreyer <jfd@butonic.de>
Fri, 25 Apr 2014 12:34:47 +0000 (14:34 +0200)
committerJörn Friedrich Dreyer <jfd@butonic.de>
Wed, 18 Jun 2014 10:53:19 +0000 (12:53 +0200)
lib/private/files/filesystem.php
lib/private/util.php

index 2cc4a2130ebb94d56fe4b1318f04d94fc2b87d88..f1f076a297bc87b9a64e84f2a670635c3220046b 100644 (file)
@@ -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);
index dfdddd0e3ab443fbd2f981d5999884b970116793..5e019bf90b6b92142bc1df230adc4f7033912104 100755 (executable)
@@ -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) {