diff options
author | Joas Schilling <213943+nickvergessen@users.noreply.github.com> | 2023-08-17 22:53:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-17 22:53:55 +0200 |
commit | a98748e519ef4df1546ef1242953f0a367b40132 (patch) | |
tree | ef0b69ac9f436c391d35dc1b9e8212cfe65b6d88 | |
parent | a8fc62f0b1828b4073e3c5321fe70be6ada3aa2e (diff) | |
parent | 93f0399a92962470be6a8d29ee1bebe5de594ee4 (diff) | |
download | nextcloud-server-a98748e519ef4df1546ef1242953f0a367b40132.tar.gz nextcloud-server-a98748e519ef4df1546ef1242953f0a367b40132.zip |
Merge pull request #39910 from nextcloud/bugfix/noid/fix-memcache-class-handling
fix(memcache): Fix comparison of Memcache configs to classes
-rw-r--r-- | apps/settings/lib/Controller/CheckSetupController.php | 3 | ||||
-rw-r--r-- | lib/private/Memcache/Factory.php | 16 |
2 files changed, 11 insertions, 8 deletions
diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php index 4a1913cedfe..0353862bab0 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -370,7 +370,8 @@ class CheckSetupController extends Controller { * @return bool */ private function isCorrectMemcachedPHPModuleInstalled() { - if ($this->config->getSystemValue('memcache.distributed', null) !== '\OC\Memcache\Memcached') { + $memcacheDistributedClass = $this->config->getSystemValue('memcache.distributed', null); + if ($memcacheDistributedClass === null || ltrim($memcacheDistributedClass, '\\') !== \OC\Memcache\Memcached::class) { return true; } diff --git a/lib/private/Memcache/Factory.php b/lib/private/Memcache/Factory.php index 604f764c03c..788a7c2e8c9 100644 --- a/lib/private/Memcache/Factory.php +++ b/lib/private/Memcache/Factory.php @@ -73,16 +73,17 @@ class Factory implements ICacheFactory { */ public function __construct(string $globalPrefix, LoggerInterface $logger, IProfiler $profiler, ?string $localCacheClass = null, ?string $distributedCacheClass = null, ?string $lockingCacheClass = null, string $logFile = '') { - $this->logger = $logger; $this->logFile = $logFile; $this->globalPrefix = $globalPrefix; if (!$localCacheClass) { $localCacheClass = self::NULL_CACHE; } + $localCacheClass = ltrim($localCacheClass, '\\'); if (!$distributedCacheClass) { $distributedCacheClass = $localCacheClass; } + $distributedCacheClass = ltrim($distributedCacheClass, '\\'); $missingCacheMessage = 'Memcache {class} not available for {use} cache'; $missingCacheHint = 'Is the matching PHP module installed and enabled?'; @@ -97,9 +98,10 @@ class Factory implements ICacheFactory { ]), $missingCacheHint); } if (!($lockingCacheClass && class_exists($lockingCacheClass) && $lockingCacheClass::isAvailable())) { - // don't fallback since the fallback might not be suitable for storing lock + // don't fall back since the fallback might not be suitable for storing lock $lockingCacheClass = self::NULL_CACHE; } + $lockingCacheClass = ltrim($lockingCacheClass, '\\'); $this->localCacheClass = $localCacheClass; $this->distributedCacheClass = $distributedCacheClass; @@ -116,7 +118,7 @@ class Factory implements ICacheFactory { public function createLocking(string $prefix = ''): IMemcache { assert($this->lockingCacheClass !== null); $cache = new $this->lockingCacheClass($this->globalPrefix . '/' . $prefix); - if ($this->profiler->isEnabled() && $this->lockingCacheClass === '\OC\Memcache\Redis') { + if ($this->lockingCacheClass === Redis::class && $this->profiler->isEnabled()) { // We only support the profiler with Redis $cache = new ProfilerWrapperCache($cache, 'Locking'); $this->profiler->add($cache); @@ -138,7 +140,7 @@ class Factory implements ICacheFactory { public function createDistributed(string $prefix = ''): ICache { assert($this->distributedCacheClass !== null); $cache = new $this->distributedCacheClass($this->globalPrefix . '/' . $prefix); - if ($this->profiler->isEnabled() && $this->distributedCacheClass === '\OC\Memcache\Redis') { + if ($this->distributedCacheClass === Redis::class && $this->profiler->isEnabled()) { // We only support the profiler with Redis $cache = new ProfilerWrapperCache($cache, 'Distributed'); $this->profiler->add($cache); @@ -160,7 +162,7 @@ class Factory implements ICacheFactory { public function createLocal(string $prefix = ''): ICache { assert($this->localCacheClass !== null); $cache = new $this->localCacheClass($this->globalPrefix . '/' . $prefix); - if ($this->profiler->isEnabled() && $this->localCacheClass === '\OC\Memcache\Redis') { + if ($this->localCacheClass === Redis::class && $this->profiler->isEnabled()) { // We only support the profiler with Redis $cache = new ProfilerWrapperCache($cache, 'Local'); $this->profiler->add($cache); @@ -179,7 +181,7 @@ class Factory implements ICacheFactory { * @return bool */ public function isAvailable(): bool { - return ($this->distributedCacheClass !== self::NULL_CACHE); + return $this->distributedCacheClass !== self::NULL_CACHE; } /** @@ -197,6 +199,6 @@ class Factory implements ICacheFactory { * @return bool */ public function isLocalCacheAvailable(): bool { - return ($this->localCacheClass !== self::NULL_CACHE); + return $this->localCacheClass !== self::NULL_CACHE; } } |