allow configuring objectstore as home and root storage
This commit is contained in:
parent
a921ad8925
commit
3c66a8c8ed
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue