From 603a659a37cdbb63627766362736127978a92ade Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Fri, 8 Sep 2023 16:40:48 +0200 Subject: [PATCH] fix(autoloader): no apcu no side effects apcu lead to side effects especially with app management and (soft) inter-dependencies, and lead also to 500 server errors. While we could add management to clear apcu cache in many cases (may stil leave edge cases) the performance benefit is marginally as also class maps are already cached in opcache. Hence, the simple and effective way to go is to not use apcu for autoloading. Signed-off-by: Arthur Schiwon --- lib/base.php | 7 ++----- lib/private/legacy/OC_Util.php | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/base.php b/lib/base.php index d96f91ddcd4dd..26e88979a483b 100644 --- a/lib/base.php +++ b/lib/base.php @@ -114,8 +114,6 @@ class OC { public static string $configDir; - public static int $VERSION_MTIME = 0; - /** * requested app */ @@ -610,10 +608,9 @@ public static function init(): void { self::$CLI = (php_sapi_name() == 'cli'); - // Add default composer PSR-4 autoloader + // Add default composer PSR-4 autoloader, ensure apcu to be disabled self::$composerAutoloader = require_once OC::$SERVERROOT . '/lib/composer/autoload.php'; - OC::$VERSION_MTIME = filemtime(OC::$SERVERROOT . '/version.php'); - self::$composerAutoloader->setApcuPrefix('composer_autoload_' . md5(OC::$SERVERROOT . '_' . OC::$VERSION_MTIME)); + self::$composerAutoloader->setApcuPrefix(null); try { self::initPaths(); diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php index 9d62c46137e61..f82ddcc78ee03 100644 --- a/lib/private/legacy/OC_Util.php +++ b/lib/private/legacy/OC_Util.php @@ -325,9 +325,10 @@ private static function loadVersion() { return; } + $timestamp = filemtime(OC::$SERVERROOT . '/version.php'); require OC::$SERVERROOT . '/version.php'; /** @var int $timestamp */ - self::$versionCache['OC_Version_Timestamp'] = \OC::$VERSION_MTIME; + self::$versionCache['OC_Version_Timestamp'] = $timestamp; /** @var string $OC_Version */ self::$versionCache['OC_Version'] = $OC_Version; /** @var string $OC_VersionString */