[Pkg-owncloud-commits] [owncloud] 05/273: allow configuring objectstore as home and root storage

David Prévot taffit at moszumanska.debian.org
Fri Jul 4 03:12:51 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 3c66a8c8ed7113754a8e7f449a1a51bb08192b1a
Author: Jörn Friedrich Dreyer <jfd at butonic.de>
Date:   Fri Apr 25 14:34:47 2014 +0200

    allow configuring objectstore as home and root storage
---
 lib/private/files/filesystem.php | 17 ++++++++++----
 lib/private/util.php             | 49 ++++++++++++++++++++++++++++++++++------
 2 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php
index 2cc4a21..f1f076a 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 dfdddd0..5e019bf 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) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list