mount custom cache folder using mount providers

This commit is contained in:
Robin Appelman 2016-04-21 14:48:08 +02:00 committed by Thomas Müller
parent f79a81258e
commit e51467689d
No known key found for this signature in database
GPG Key ID: A943788A3BBEC44C
3 changed files with 78 additions and 20 deletions

View File

@ -423,8 +423,6 @@ class Filesystem {
$home = \OC\Files\Filesystem::getStorage($user); $home = \OC\Files\Filesystem::getStorage($user);
self::mountCacheDir($user);
// Chance to mount for other storages // Chance to mount for other storages
/** @var \OC\Files\Config\MountProviderCollection $mountConfigManager */ /** @var \OC\Files\Config\MountProviderCollection $mountConfigManager */
$mountConfigManager = \OC::$server->getMountProviderCollection(); $mountConfigManager = \OC::$server->getMountProviderCollection();
@ -460,23 +458,6 @@ class Filesystem {
} }
} }
/**
* Mounts the cache directory
*
* @param string $user user name
*/
private static function mountCacheDir($user) {
$cacheBaseDir = \OC::$server->getConfig()->getSystemValue('cache_path', '');
if ($cacheBaseDir !== '') {
$cacheDir = rtrim($cacheBaseDir, '/') . '/' . $user;
if (!file_exists($cacheDir)) {
mkdir($cacheDir, 0770, true);
}
// mount external cache dir to "/$user/cache" mount point
self::mount('\OC\Files\Storage\Local', array('datadir' => $cacheDir), '/' . $user . '/cache');
}
}
/** /**
* get the default filesystem view * get the default filesystem view
* *

View File

@ -47,6 +47,7 @@ use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\QueryLogger; use OC\Diagnostics\QueryLogger;
use OC\Files\Config\UserMountCache; use OC\Files\Config\UserMountCache;
use OC\Files\Config\UserMountCacheListener; use OC\Files\Config\UserMountCacheListener;
use OC\Files\Mount\CacheMountProvider;
use OC\Files\Node\HookConnector; use OC\Files\Node\HookConnector;
use OC\Files\Node\LazyRoot; use OC\Files\Node\LazyRoot;
use OC\Files\Node\Root; use OC\Files\Node\Root;
@ -444,7 +445,14 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService('MountConfigManager', function (Server $c) { $this->registerService('MountConfigManager', function (Server $c) {
$loader = \OC\Files\Filesystem::getLoader(); $loader = \OC\Files\Filesystem::getLoader();
$mountCache = $c->query('UserMountCache'); $mountCache = $c->query('UserMountCache');
return new \OC\Files\Config\MountProviderCollection($loader, $mountCache); $manager = new \OC\Files\Config\MountProviderCollection($loader, $mountCache);
// builtin providers
$config = $c->getConfig();
$manager->registerProvider(new CacheMountProvider($config));
return $manager;
}); });
$this->registerService('IniWrapper', function ($c) { $this->registerService('IniWrapper', function ($c) {
return new IniGetWrapper(); return new IniGetWrapper();

View File

@ -0,0 +1,69 @@
<?php
/**
* @author Robin Appelman <icewind@owncloud.com>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OC\Files\Mount;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Storage\IStorageFactory;
use OCP\IConfig;
use OCP\IUser;
/**
* Mount provider for custom cache storages
*/
class CacheMountProvider implements IMountProvider {
/**
* @var IConfig
*/
private $config;
/**
* ObjectStoreHomeMountProvider constructor.
*
* @param IConfig $config
*/
public function __construct(IConfig $config) {
$this->config = $config;
}
/**
* Get the cache mount for a user
*
* @param IUser $user
* @param IStorageFactory $loader
* @return \OCP\Files\Mount\IMountPoint[]
*/
public function getMountsForUser(IUser $user, IStorageFactory $loader) {
$cacheBaseDir = $this->config->getSystemValue('cache_path', '');
if ($cacheBaseDir !== '') {
$cacheDir = rtrim($cacheBaseDir, '/') . '/' . $user->getUID();
if (!file_exists($cacheDir)) {
mkdir($cacheDir, 0770, true);
}
return [
new MountPoint('\OC\Files\Storage\Local', '/' . $user->getUID() . '/cache', ['datadir' => $cacheDir, $loader])
];
} else {
return [];
}
}
}