diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index bad865a798..e5921206a3 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -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(); } } diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index a975da3927..73c0e2249c 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -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; } diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php index 514cb6ea3a..b9b18c644f 100644 --- a/tests/lib/TestCase.php +++ b/tests/lib/TestCase.php @@ -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;