cache user folders

This commit is contained in:
Robin Appelman 2016-08-25 15:49:36 +02:00
parent b2d365734a
commit 2693ae870e
3 changed files with 28 additions and 16 deletions

View File

@ -28,6 +28,7 @@
namespace OC\Files\Node;
use OC\Cache\CappedMemoryCache;
use OC\Files\Mount\Manager;
use OC\Files\Mount\MountPoint;
use OCP\Files\NotFoundException;
@ -71,6 +72,8 @@ class Root extends Folder implements IRootFolder {
*/
private $user;
private $userFolderCache;
/**
* @param \OC\Files\Mount\Manager $manager
* @param \OC\Files\View $view
@ -81,6 +84,7 @@ class Root extends Folder implements IRootFolder {
$this->mountManager = $manager;
$this->user = $user;
$this->emitter = new PublicEmitter();
$this->userFolderCache = new CappedMemoryCache();
}
/**
@ -335,25 +339,31 @@ class Root extends Folder implements IRootFolder {
* @return \OCP\Files\Folder
*/
public function getUserFolder($userId) {
\OC\Files\Filesystem::initMountPoints($userId);
$dir = '/' . $userId;
$folder = null;
if (!$this->userFolderCache->hasKey($userId)) {
\OC\Files\Filesystem::initMountPoints($userId);
$dir = '/' . $userId;
$folder = null;
try {
$folder = $this->get($dir);
} catch (NotFoundException $e) {
$folder = $this->newFolder($dir);
try {
$folder = $this->get($dir);
} catch (NotFoundException $e) {
$folder = $this->newFolder($dir);
}
$dir = '/files';
try {
$folder = $folder->get($dir);
} catch (NotFoundException $e) {
$folder = $folder->newFolder($dir);
\OC_Util::copySkeleton($userId, $folder);
}
$this->userFolderCache->set($userId, $folder);
}
$dir = '/files';
try {
$folder = $folder->get($dir);
} catch (NotFoundException $e) {
$folder = $folder->newFolder($dir);
\OC_Util::copySkeleton($userId, $folder);
}
return $folder;
return $this->userFolderCache->get($userId);
}
public function clearCache() {
$this->userFolderCache = new CappedMemoryCache();
}
}

View File

@ -356,6 +356,7 @@ class OC_Util {
*/
public static function tearDownFS() {
\OC\Files\Filesystem::tearDown();
\OC::$server->getRootFolder()->clearCache();
self::$fsSetup = false;
self::$rootMounted = false;
}

View File

@ -24,6 +24,7 @@ namespace Test;
use DOMDocument;
use DOMNode;
use OC\Cache\CappedMemoryCache;
use OC\Command\QueueBus;
use OC\Files\Filesystem;
use OC\Template\Base;