allow configuring objectstore as home and root storage

This commit is contained in:
Jörn Friedrich Dreyer 2014-04-25 14:34:47 +02:00
parent a921ad8925
commit 3c66a8c8ed
2 changed files with 55 additions and 11 deletions

View File

@ -325,13 +325,22 @@ class Filesystem {
$userObject = \OC_User::getManager()->get($user); $userObject = \OC_User::getManager()->get($user);
if (!is_null($userObject)) { 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) // check for legacy home id (<= 5.0.12)
if (\OC\Files\Cache\Storage::exists('local::' . $root . '/')) { if (\OC\Files\Cache\Storage::exists('local::' . $root . '/')) {
self::mount('\OC\Files\Storage\Home', array('user' => $userObject, 'legacy' => true), $user); $homeStorage['arguments']['legacy'] = true;
}
else {
self::mount('\OC\Files\Storage\Home', array('user' => $userObject), $user);
} }
self::mount($homeStorage['class'], $homeStorage['arguments'], $user);
} }
else { else {
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user); self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);

View File

@ -12,6 +12,39 @@ class OC_Util {
private static $rootMounted=false; private static $rootMounted=false;
private static $fsSetup=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 * Can be set up
* @param string $user * @param string $user
@ -39,12 +72,12 @@ class OC_Util {
self::$fsSetup=true; self::$fsSetup=true;
} }
$configDataDirectory = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //check if we are using an object storage
//first set up the local "root" storage $object_storage = OC_Config::getValue( 'object_storage' );
\OC\Files\Filesystem::initMounts(); if ( isset( $object_storage ) ) {
if(!self::$rootMounted) { self::initObjectStorageRootFS($object_storage);
\OC\Files\Filesystem::mount('\OC\Files\Storage\Local', array('datadir'=>$configDataDirectory), '/'); } else {
self::$rootMounted = true; self::initLocalStorageRootFS();
} }
if ($user != '' && !OCP\User::userExists($user)) { if ($user != '' && !OCP\User::userExists($user)) {
@ -60,7 +93,9 @@ class OC_Util {
/** /**
* @var \OC\Files\Storage\Storage $storage * @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(); $user = $storage->getUser()->getUID();
$quota = OC_Util::getUserQuota($user); $quota = OC_Util::getUserQuota($user);
if ($quota !== \OC\Files\SPACE_UNLIMITED) { if ($quota !== \OC\Files\SPACE_UNLIMITED) {