]> source.dussan.org Git - nextcloud-server.git/commitdiff
better caching in storage stats calculations
authorRobin Appelman <robin@icewind.nl>
Tue, 15 Aug 2023 16:31:10 +0000 (18:31 +0200)
committerRobin Appelman <robin@icewind.nl>
Fri, 18 Aug 2023 09:14:52 +0000 (11:14 +0200)
Signed-off-by: Robin Appelman <robin@icewind.nl>
lib/private/legacy/OC_Helper.php

index d96cb7bb4e9850e88e244888e49ad78cf9e11eea..cf39d045ae900a02fb5d85d3d7e5be81020e18cc 100644 (file)
@@ -69,6 +69,8 @@ use Psr\Log\LoggerInterface;
  */
 class OC_Helper {
        private static $templateManager;
+       private static ?ICacheFactory $cacheFactory = null;
+       private static ?bool $quotaIncludeExternalStorage = null;
 
        /**
         * Make a human file size
@@ -475,12 +477,15 @@ class OC_Helper {
         * @throws \OCP\Files\NotFoundException
         */
        public static function getStorageInfo($path, $rootInfo = null, $includeMountPoints = true, $useCache = true) {
-               /** @var ICacheFactory $cacheFactory */
-               $cacheFactory = \OC::$server->get(ICacheFactory::class);
-               $memcache = $cacheFactory->createLocal('storage_info');
+               if (!self::$cacheFactory) {
+                       self::$cacheFactory = \OC::$server->get(ICacheFactory::class);
+               }
+               $memcache = self::$cacheFactory->createLocal('storage_info');
 
                // return storage info without adding mount points
-               $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
+               if (self::$quotaIncludeExternalStorage === null) {
+                       self::$quotaIncludeExternalStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
+               }
 
                $view = Filesystem::getView();
                if (!$view) {
@@ -497,7 +502,7 @@ class OC_Helper {
                }
 
                if (!$rootInfo) {
-                       $rootInfo = \OC\Files\Filesystem::getFileInfo($path, $includeExtStorage ? 'ext' : false);
+                       $rootInfo = \OC\Files\Filesystem::getFileInfo($path, self::$quotaIncludeExternalStorage ? 'ext' : false);
                }
                if (!$rootInfo instanceof \OCP\Files\FileInfo) {
                        throw new \OCP\Files\NotFoundException('The root directory of the user\'s files is missing');
@@ -512,9 +517,9 @@ class OC_Helper {
                $storage = $mount->getStorage();
                $sourceStorage = $storage;
                if ($storage->instanceOfStorage('\OCA\Files_Sharing\SharedStorage')) {
-                       $includeExtStorage = false;
+                       self::$quotaIncludeExternalStorage = false;
                }
-               if ($includeExtStorage) {
+               if (self::$quotaIncludeExternalStorage) {
                        if ($storage->instanceOfStorage('\OC\Files\Storage\Home')
                                || $storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')
                        ) {