diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php index b9c91a83aab36..342800c6db944 100644 --- a/lib/private/legacy/OC_Util.php +++ b/lib/private/legacy/OC_Util.php @@ -21,7 +21,7 @@ use OCP\IConfig; use OCP\IGroupManager; use OCP\IRequest; -use OCP\ISession; +use OCP\ICacheFactory; use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; @@ -261,6 +261,7 @@ public static function addHeader($tag, $attributes, $text = null, $prepend = fal */ public static function checkServer(SystemConfig $config) { $l = \OC::$server->getL10N('lib'); + $localCache = Server::get(ICacheFactory::class)->createLocal('system'); $errors = []; $CONFIG_DATADIRECTORY = $config->getValue('datadirectory', OC::$SERVERROOT . '/data'); @@ -269,8 +270,8 @@ public static function checkServer(SystemConfig $config) { $errors = self::checkDataDirectoryValidity($CONFIG_DATADIRECTORY); } - // Assume that if checkServer() succeeded before in this session, then all is fine. - if (Server::get(ISession::class)->exists('checkServer_succeeded') && Server::get(ISession::class)->get('checkServer_succeeded')) { + // Skip re-evaluation if everything is fine + if ($localCache->get('checkServer_succeeded') === true) { return $errors; } @@ -439,8 +440,8 @@ public static function checkServer(SystemConfig $config) { } } - // Cache the result of this function - Server::get(ISession::class)->set('checkServer_succeeded', count($errors) == 0); + // Cache the result of this function for an hour + $localCache->set('checkServer_succeeded', $errors === [], 3600); return $errors; } diff --git a/tests/lib/UtilCheckServerTest.php b/tests/lib/UtilCheckServerTest.php index fade2f6d341f5..9be88f3db51ee 100644 --- a/tests/lib/UtilCheckServerTest.php +++ b/tests/lib/UtilCheckServerTest.php @@ -9,6 +9,7 @@ namespace Test; use OC\SystemConfig; +use OCP\ICacheFactory; use OCP\ISession; use OCP\ITempManager; use OCP\Server; @@ -47,7 +48,7 @@ protected function setUp(): void { $this->datadir = Server::get(ITempManager::class)->getTemporaryFolder(); file_put_contents($this->datadir . '/.ncdata', '# Nextcloud data directory'); - Server::get(ISession::class)->set('checkServer_succeeded', false); + Server::get(ICacheFactory::class)->createLocal('system')->set('checkServer_succeeded', false, 10); } #[\Override]