From 86085f96abdece46dd5559fd7d71189dd961f9c4 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 24 Nov 2019 16:54:57 +0100 Subject: [PATCH 1/8] [ticket/16223] Remove no longer supported memcache driver PHPBB3-16223 --- phpBB/docs/coding-guidelines.html | 6 +- phpBB/phpbb/cache/driver/memcache.php | 122 -------------------------- 2 files changed, 3 insertions(+), 125 deletions(-) delete mode 100644 phpBB/phpbb/cache/driver/memcache.php diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 6cf647c55f..ffa2112771 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -234,9 +234,9 @@ PHPBB_USE_BOARD_URL_PATH (use generate_board_url() for image paths instead of PHPBB_DISABLE_ACP_EDITOR (disable ACP style editor for templates) PHPBB_DISABLE_CONFIG_CHECK (disable ACP config.php writeable check) -PHPBB_ACM_MEMCACHE_PORT (overwrite memcached port, default is 11211) -PHPBB_ACM_MEMCACHE_COMPRESS (overwrite memcached compress setting, default is disabled) -PHPBB_ACM_MEMCACHE_HOST (overwrite memcached host name, default is localhost) +PHPBB_ACM_MEMCACHED_PORT (overwrite memcached port, default is 11211) +PHPBB_ACM_MEMCACHED_COMPRESS (overwrite memcached compress setting, default is disabled) +PHPBB_ACM_MEMCACHED_HOST (overwrite memcached host name, default is localhost) PHPBB_ACM_REDIS_HOST (overwrite redis host name, default is localhost) PHPBB_ACM_REDIS_PORT (overwrite redis port, default is 6379) diff --git a/phpBB/phpbb/cache/driver/memcache.php b/phpBB/phpbb/cache/driver/memcache.php deleted file mode 100644 index 57f138f574..0000000000 --- a/phpBB/phpbb/cache/driver/memcache.php +++ /dev/null @@ -1,122 +0,0 @@ - -* @license GNU General Public License, version 2 (GPL-2.0) -* -* For full copyright and license information, please see -* the docs/CREDITS.txt file. -* -*/ - -namespace phpbb\cache\driver; - -if (!defined('PHPBB_ACM_MEMCACHE_PORT')) -{ - define('PHPBB_ACM_MEMCACHE_PORT', 11211); -} - -if (!defined('PHPBB_ACM_MEMCACHE_COMPRESS')) -{ - define('PHPBB_ACM_MEMCACHE_COMPRESS', false); -} - -if (!defined('PHPBB_ACM_MEMCACHE_HOST')) -{ - define('PHPBB_ACM_MEMCACHE_HOST', 'localhost'); -} - -if (!defined('PHPBB_ACM_MEMCACHE')) -{ - //can define multiple servers with host1/port1,host2/port2 format - define('PHPBB_ACM_MEMCACHE', PHPBB_ACM_MEMCACHE_HOST . '/' . PHPBB_ACM_MEMCACHE_PORT); -} - -/** -* ACM for Memcached -*/ -class memcache extends \phpbb\cache\driver\memory -{ - var $extension = 'memcache'; - - var $memcache; - var $flags = 0; - - function __construct() - { - // Call the parent constructor - parent::__construct(); - - $this->memcache = new \Memcache; - foreach (explode(',', PHPBB_ACM_MEMCACHE) as $u) - { - preg_match('#(.*)/(\d+)#', $u, $parts); - $this->memcache->addServer(trim($parts[1]), (int) trim($parts[2])); - } - $this->flags = (PHPBB_ACM_MEMCACHE_COMPRESS) ? MEMCACHE_COMPRESSED : 0; - } - - /** - * {@inheritDoc} - */ - function unload() - { - parent::unload(); - - $this->memcache->close(); - } - - /** - * {@inheritDoc} - */ - function purge() - { - $this->memcache->flush(); - - parent::purge(); - } - - /** - * Fetch an item from the cache - * - * @access protected - * @param string $var Cache key - * @return mixed Cached data - */ - function _read($var) - { - return $this->memcache->get($this->key_prefix . $var); - } - - /** - * Store data in the cache - * - * @access protected - * @param string $var Cache key - * @param mixed $data Data to store - * @param int $ttl Time-to-live of cached data - * @return bool True if the operation succeeded - */ - function _write($var, $data, $ttl = 2592000) - { - if (!$this->memcache->replace($this->key_prefix . $var, $data, $this->flags, $ttl)) - { - return $this->memcache->set($this->key_prefix . $var, $data, $this->flags, $ttl); - } - return true; - } - - /** - * Remove an item from the cache - * - * @access protected - * @param string $var Cache key - * @return bool True if the operation succeeded - */ - function _delete($var) - { - return $this->memcache->delete($this->key_prefix . $var); - } -} From fd7524858c9c178603cc3bb7440bcbad58c9096a Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 20:10:12 +0100 Subject: [PATCH 2/8] [ticket/16223] Add test for memcached driver PHPBB3-16223 --- tests/cache/memcached_test.php | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/cache/memcached_test.php diff --git a/tests/cache/memcached_test.php b/tests/cache/memcached_test.php new file mode 100644 index 0000000000..2c63ed6bcb --- /dev/null +++ b/tests/cache/memcached_test.php @@ -0,0 +1,46 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +require_once dirname(__FILE__) . '/common_test_case.php'; + +class phpbb_cache_memcached_driver_test extends \phpbb_cache_common_test_case +{ + protected static $config; + + public function getDataSet() + { + return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/config.xml'); + } + + static public function setUpBeforeClass() + { + if (!extension_loaded('memcached')) + { + self::markTestSkipped('memcached extension is not loaded'); + } + + parent::setUpBeforeClass(); + } + + protected function setUp(): void + { + global $phpbb_root_path, $phpbb_container; + + parent::setUp(); + + $phpbb_container = new phpbb_mock_container_builder(); + $phpbb_container->setParameter('core.cache_dir', $phpbb_root_path . 'cache/' . PHPBB_ENVIRONMENT . '/'); + $this->driver = new \phpbb\cache\driver\memcached(); + $this->driver->purge(); + } +} From c7d47e34e82128399e1b20b9f80a85f46c4cfd75 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 21:27:43 +0100 Subject: [PATCH 3/8] [ticket/16223] Ensure memcached tests are only run when available PHPBB3-16223 --- phpBB/phpbb/cache/driver/memcached.php | 25 ++++++++++++++++--- tests/RUNNING_TESTS.md | 15 +++++++++++ tests/cache/memcached_test.php | 21 +++++++++++++++- .../phpbb_test_case_helpers.php | 20 +++++++++++++++ 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/phpBB/phpbb/cache/driver/memcached.php b/phpBB/phpbb/cache/driver/memcached.php index 7d66759ec2..bb725adefd 100644 --- a/phpBB/phpbb/cache/driver/memcached.php +++ b/phpBB/phpbb/cache/driver/memcached.php @@ -56,6 +56,15 @@ class memcached extends \phpbb\cache\driver\memory // Call the parent constructor parent::__construct(); + $memcached_servers = PHPBB_ACM_MEMCACHED; + + // Allow overwriting PHPBB_ACM_MEMCACHED via constructor arguments + $args = func_get_args(); + if (count($args) >= 2) + { + $memcached_servers = $args[0] . '/' . $args[1]; + } + $this->memcached = new \Memcached(); $this->memcached->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); // Memcached defaults to using compression, disable if we don't want @@ -65,10 +74,20 @@ class memcached extends \phpbb\cache\driver\memory $this->memcached->setOption(\Memcached::OPT_COMPRESSION, false); } - foreach (explode(',', PHPBB_ACM_MEMCACHED) as $u) + $server_list = []; + foreach (explode(',', $memcached_servers) as $u) { - preg_match('#(.*)/(\d+)#', $u, $parts); - $this->memcached->addServer(trim($parts[1]), (int) trim($parts[2])); + if (preg_match('#(.*)/(\d+)#', $u, $parts)) + { + $server_list[] = [trim($parts[1]), (int) trim($parts[2])]; + } + } + + $this->memcached->addServers($server_list); + + if (empty($server_list) || empty($this->memcached->getStats())) + { + trigger_error('Could not connect to memcached server(s).'); } } diff --git a/tests/RUNNING_TESTS.md b/tests/RUNNING_TESTS.md index 516541151c..54db823b4a 100644 --- a/tests/RUNNING_TESTS.md +++ b/tests/RUNNING_TESTS.md @@ -109,6 +109,21 @@ Or via environment variables as follows: $ PHPBB_TEST_REDIS_HOST=localhost PHPBB_TEST_REDIS_PORT=6379 phpunit +Memcached +--------- + +In order to run tests for the memcached cache driver, at least one of memcached +host or port must be specified in the test configuration. This can be done via +test_config.php as follows: + + $host, 'port' => $port); + } + else + { + self::markTestSkipped('Test memcached host/port is not specified'); + } + + $memcached = new \Memcached(); + $memcached->addServer(self::$config['host'], self::$config['port']); + if (empty($memcached->getStats())) + { + self::markTestSkipped('Test memcached server is not available'); + } + parent::setUpBeforeClass(); } @@ -40,7 +59,7 @@ class phpbb_cache_memcached_driver_test extends \phpbb_cache_common_test_case $phpbb_container = new phpbb_mock_container_builder(); $phpbb_container->setParameter('core.cache_dir', $phpbb_root_path . 'cache/' . PHPBB_ENVIRONMENT . '/'); - $this->driver = new \phpbb\cache\driver\memcached(); + $this->driver = new \phpbb\cache\driver\memcached(self::$config['host'], self::$config['port']); $this->driver->purge(); } } diff --git a/tests/test_framework/phpbb_test_case_helpers.php b/tests/test_framework/phpbb_test_case_helpers.php index 807a64d810..9a2ea275d0 100644 --- a/tests/test_framework/phpbb_test_case_helpers.php +++ b/tests/test_framework/phpbb_test_case_helpers.php @@ -173,6 +173,16 @@ class phpbb_test_case_helpers { $config['fulltext_sphinx_id'] = $fulltext_sphinx_id; } + + if (isset($phpbb_memcached_host)) + { + $config['memcached_host'] = $phpbb_memcached_host; + } + + if (isset($phpbb_memcached_port)) + { + $config['memcached_port'] = $phpbb_memcached_port; + } } if (isset($_SERVER['PHPBB_TEST_DBMS'])) @@ -205,6 +215,16 @@ class phpbb_test_case_helpers $config['redis_port'] = $_SERVER['PHPBB_TEST_REDIS_PORT']; } + if (isset($_SERVER['PHPBB_TEST_MEMCACHED_HOST'])) + { + $config['memcached_host'] = $_SERVER['PHPBB_TEST_MEMCACHED_HOST']; + } + + if (isset($_SERVER['PHPBB_TEST_MEMCACHED_PORT'])) + { + $config['memcached_port'] = $_SERVER['PHPBB_TEST_MEMCACHED_PORT']; + } + return $config; } From c37e696c1cd13452a802d605f649852b055493ae Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 21:33:42 +0100 Subject: [PATCH 4/8] [ticket/16223] Add memcached config and PHP extension PHPBB3-16223 --- .travis.yml | 1 + travis/phpunit-mysqli-travis.xml | 1 + travis/phpunit-postgres-travis.xml | 1 + travis/phpunit-sqlite3-travis.xml | 1 + travis/setup-php-extensions.sh | 3 +++ 5 files changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index d6fc46c585..82ddd01158 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,6 +31,7 @@ services: - redis-server - postgresql - mysql + - memcached install: - travis/setup-phpbb.sh $DB $TRAVIS_PHP_VERSION $NOTESTS diff --git a/travis/phpunit-mysqli-travis.xml b/travis/phpunit-mysqli-travis.xml index d2284086b9..0f064ab996 100644 --- a/travis/phpunit-mysqli-travis.xml +++ b/travis/phpunit-mysqli-travis.xml @@ -38,6 +38,7 @@ + diff --git a/travis/phpunit-postgres-travis.xml b/travis/phpunit-postgres-travis.xml index 6faab4d61a..f9b8a6f595 100644 --- a/travis/phpunit-postgres-travis.xml +++ b/travis/phpunit-postgres-travis.xml @@ -38,6 +38,7 @@ + diff --git a/travis/phpunit-sqlite3-travis.xml b/travis/phpunit-sqlite3-travis.xml index 633963c9fb..1b1fa24e7d 100644 --- a/travis/phpunit-sqlite3-travis.xml +++ b/travis/phpunit-sqlite3-travis.xml @@ -38,6 +38,7 @@ + diff --git a/travis/setup-php-extensions.sh b/travis/setup-php-extensions.sh index 851704213e..e122be0597 100755 --- a/travis/setup-php-extensions.sh +++ b/travis/setup-php-extensions.sh @@ -57,6 +57,9 @@ fi # Disable xdebug on travis phpenv config-rm xdebug.ini || true +# memcached +echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini + # redis # Disabled redis for now as it causes travis to fail # git clone git://github.com/nicolasff/phpredis.git redis From bc045fd19bc859e124db0046a5d0cfdbd764f43d Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 22:04:24 +0100 Subject: [PATCH 5/8] [ticket/16223] Use install_php_extensions for installing memcached PHPBB3-16223 --- travis/setup-php-extensions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/setup-php-extensions.sh b/travis/setup-php-extensions.sh index e122be0597..2b0bbb5baf 100755 --- a/travis/setup-php-extensions.sh +++ b/travis/setup-php-extensions.sh @@ -58,7 +58,7 @@ fi phpenv config-rm xdebug.ini || true # memcached -echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini +install_php_extension 'memcached' "$php_ini_file" # redis # Disabled redis for now as it causes travis to fail From 380b7d0a98f81d241208034bb76b1468485ea996 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 22:16:41 +0100 Subject: [PATCH 6/8] [ticket/16223] Use constructor arguments instead of func_get_args() PHPBB3-16223 --- phpBB/phpbb/cache/driver/memcached.php | 13 ++++--------- tests/cache/memcached_test.php | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/phpBB/phpbb/cache/driver/memcached.php b/phpBB/phpbb/cache/driver/memcached.php index bb725adefd..fbb587a369 100644 --- a/phpBB/phpbb/cache/driver/memcached.php +++ b/phpBB/phpbb/cache/driver/memcached.php @@ -50,20 +50,15 @@ class memcached extends \phpbb\cache\driver\memory /** * Memcached constructor + * + * @param string $memcached_servers Memcached servers string (optional) */ - public function __construct() + public function __construct($memcached_servers = '') { // Call the parent constructor parent::__construct(); - $memcached_servers = PHPBB_ACM_MEMCACHED; - - // Allow overwriting PHPBB_ACM_MEMCACHED via constructor arguments - $args = func_get_args(); - if (count($args) >= 2) - { - $memcached_servers = $args[0] . '/' . $args[1]; - } + $memcached_servers = $memcached_servers ?: PHPBB_ACM_MEMCACHED; $this->memcached = new \Memcached(); $this->memcached->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); diff --git a/tests/cache/memcached_test.php b/tests/cache/memcached_test.php index a29f0040cf..650b72ea18 100644 --- a/tests/cache/memcached_test.php +++ b/tests/cache/memcached_test.php @@ -59,7 +59,7 @@ class phpbb_cache_memcached_driver_test extends \phpbb_cache_common_test_case $phpbb_container = new phpbb_mock_container_builder(); $phpbb_container->setParameter('core.cache_dir', $phpbb_root_path . 'cache/' . PHPBB_ENVIRONMENT . '/'); - $this->driver = new \phpbb\cache\driver\memcached(self::$config['host'], self::$config['port']); + $this->driver = new \phpbb\cache\driver\memcached(self::$config['host'] . '/' . self::$config['port']); $this->driver->purge(); } } From dac910d27ab7c8a95841f3bb28a3dfa6391fda84 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Mon, 25 Nov 2019 22:19:03 +0100 Subject: [PATCH 7/8] [ticket/16223] Do not use install_php_extension for memcached PHPBB3-16223 --- travis/setup-php-extensions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/setup-php-extensions.sh b/travis/setup-php-extensions.sh index 2b0bbb5baf..142d3cc242 100755 --- a/travis/setup-php-extensions.sh +++ b/travis/setup-php-extensions.sh @@ -58,7 +58,7 @@ fi phpenv config-rm xdebug.ini || true # memcached -install_php_extension 'memcached' "$php_ini_file" +echo "extension = memcached.so" >> "$php_ini_file" # redis # Disabled redis for now as it causes travis to fail From 5ed02c21493ccbde7d5072cd74c0b118153f508c Mon Sep 17 00:00:00 2001 From: rubencm Date: Tue, 26 Nov 2019 08:36:32 +0100 Subject: [PATCH 8/8] [ticket/16223] Use register_php_extension instead of echo PHPBB3-16223 --- travis/setup-php-extensions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/setup-php-extensions.sh b/travis/setup-php-extensions.sh index 142d3cc242..0fcddb044f 100755 --- a/travis/setup-php-extensions.sh +++ b/travis/setup-php-extensions.sh @@ -58,7 +58,7 @@ fi phpenv config-rm xdebug.ini || true # memcached -echo "extension = memcached.so" >> "$php_ini_file" +register_php_extension memcached "$php_ini_file" # redis # Disabled redis for now as it causes travis to fail