Merge pull request #4798 from nextcloud/multibucket-root-fs
Setup root FS for multibucket object storage
This commit is contained in:
commit
1c2ccd2206
|
@ -884,7 +884,7 @@ class Server extends ServerContainer implements IServerContainer {
|
|||
$c->getConfig(),
|
||||
$c->getThemingDefaults(),
|
||||
\OC::$SERVERROOT,
|
||||
$cacheFactory->createLocal('SCSS')
|
||||
$cacheFactory->create('SCSS')
|
||||
);
|
||||
});
|
||||
$this->registerService(EventDispatcher::class, function () {
|
||||
|
|
|
@ -119,6 +119,46 @@ class OC_Util {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mounting an object storage as the root fs will in essence remove the
|
||||
* necessity of a data folder being present.
|
||||
*
|
||||
* @param array $config containing 'class' and optional 'arguments'
|
||||
*/
|
||||
private static function initObjectStoreMultibucketRootFS($config) {
|
||||
// check misconfiguration
|
||||
if (empty($config['class'])) {
|
||||
\OCP\Util::writeLog('files', 'No class given for objectstore', \OCP\Util::ERROR);
|
||||
}
|
||||
if (!isset($config['arguments'])) {
|
||||
$config['arguments'] = array();
|
||||
}
|
||||
|
||||
// instantiate object store implementation
|
||||
$name = $config['class'];
|
||||
if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) {
|
||||
$segments = explode('\\', $name);
|
||||
OC_App::loadApp(strtolower($segments[1]));
|
||||
}
|
||||
|
||||
if (!isset($config['arguments']['bucket'])) {
|
||||
$config['arguments']['bucket'] = '';
|
||||
}
|
||||
// put the root FS always in first bucket for multibucket configuration
|
||||
$config['arguments']['bucket'] .= '0';
|
||||
|
||||
$config['arguments']['objectstore'] = new $config['class']($config['arguments']);
|
||||
// mount with plain / root object store implementation
|
||||
$config['class'] = '\OC\Files\ObjectStore\ObjectStoreStorage';
|
||||
|
||||
// mount object storage as root
|
||||
\OC\Files\Filesystem::initMountManager();
|
||||
if (!self::$rootMounted) {
|
||||
\OC\Files\Filesystem::mount($config['class'], $config['arguments'], '/');
|
||||
self::$rootMounted = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be set up
|
||||
*
|
||||
|
@ -215,7 +255,12 @@ class OC_Util {
|
|||
|
||||
//check if we are using an object storage
|
||||
$objectStore = \OC::$server->getSystemConfig()->getValue('objectstore', null);
|
||||
if (isset($objectStore)) {
|
||||
$objectStoreMultibucket = \OC::$server->getSystemConfig()->getValue('objectstore_multibucket', null);
|
||||
|
||||
// use the same order as in ObjectHomeMountProvider
|
||||
if (isset($objectStoreMultibucket)) {
|
||||
self::initObjectStoreMultibucketRootFS($objectStoreMultibucket);
|
||||
} elseif (isset($objectStore)) {
|
||||
self::initObjectStoreRootFS($objectStore);
|
||||
} else {
|
||||
self::initLocalStorageRootFS();
|
||||
|
|
Loading…
Reference in New Issue