summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2016-08-25 15:49:36 +0200
committerRobin Appelman <robin@icewind.nl>2016-08-25 17:22:25 +0200
commit2693ae870eff6a6aec769c035c200f0b5caf4e6f (patch)
treec332331085cadc93889ffb8aa733cf6bc6738078 /lib
parentb2d365734a692c6e09a07d0190fdabf64f3a295a (diff)
downloadnextcloud-server-2693ae870eff6a6aec769c035c200f0b5caf4e6f.tar.gz
nextcloud-server-2693ae870eff6a6aec769c035c200f0b5caf4e6f.zip
cache user folders
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/Node/Root.php42
-rw-r--r--lib/private/legacy/util.php1
2 files changed, 27 insertions, 16 deletions
diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php
index bad865a7987..e5921206a39 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;
-
- try {
- $folder = $this->get($dir);
- } catch (NotFoundException $e) {
- $folder = $this->newFolder($dir);
- }
+ 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);
+ }
- $dir = '/files';
- try {
- $folder = $folder->get($dir);
- } catch (NotFoundException $e) {
- $folder = $folder->newFolder($dir);
- \OC_Util::copySkeleton($userId, $folder);
+ $dir = '/files';
+ try {
+ $folder = $folder->get($dir);
+ } catch (NotFoundException $e) {
+ $folder = $folder->newFolder($dir);
+ \OC_Util::copySkeleton($userId, $folder);
+ }
+ $this->userFolderCache->set($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 a975da39271..73c0e2249cb 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;
}