aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2023-08-17 22:53:55 +0200
committerGitHub <noreply@github.com>2023-08-17 22:53:55 +0200
commita98748e519ef4df1546ef1242953f0a367b40132 (patch)
treeef0b69ac9f436c391d35dc1b9e8212cfe65b6d88
parenta8fc62f0b1828b4073e3c5321fe70be6ada3aa2e (diff)
parent93f0399a92962470be6a8d29ee1bebe5de594ee4 (diff)
downloadnextcloud-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.php3
-rw-r--r--lib/private/Memcache/Factory.php16
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;
}
}