From a05326ed514076a7cf05f6a85d818a8f29d3dc15 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Mon, 5 Aug 2024 12:23:16 +0000 Subject: [PATCH] fixes #4284, fixes #4286 Closes #4284 and #4286 Merge request studip/studip!3105 --- lib/classes/cache/MemcachedCache.php | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/classes/cache/MemcachedCache.php b/lib/classes/cache/MemcachedCache.php index 1c4b685b0c2..a540959653a 100644 --- a/lib/classes/cache/MemcachedCache.php +++ b/lib/classes/cache/MemcachedCache.php @@ -34,15 +34,27 @@ class MemcachedCache extends Cache } $prefix = \Config::get()->STUDIP_INSTALLATION_ID; - $this->memcache = new Memcached('studip' . ($prefix ? '-' . $prefix : '')); + $this->memcache = new Memcached(md5(json_encode($servers))); if (count($this->memcache->getServerList()) === 0) { - foreach ($servers as $server) { - $status = $this->memcache->addServer($server['hostname'], (int) $server['port']); - - if (!$status) { - throw new \Exception("Could not add server: {$server['hostname']} @ port {$server['port']}"); - } + // Set options (see https://www.php.net/manual/en/memcached.addservers.php#118940) + $this->memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); + $this->memcache->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 2); + $this->memcache->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true); + $this->memcache->setOption(Memcached::OPT_RETRY_TIMEOUT, 1); + $this->memcache->setOption(Memcached::OPT_PREFIX_KEY, $prefix); + + $status = $this->memcache->addServers( + array_map( + function ($server) { + return [$server['hostname'], (int) $server['port']]; + }, + $servers + ) + ); + + if (!$status) { + throw new \Exception('Could not add memcached servers'); } } } -- GitLab