mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
[ticket/15726] Implement selective purge in APCu cache driver
The current APCu cache driver implements a global clearing of the APCu when the phpBB cache is purged. This is inappropriate if there are other phpBB boards, or other php applications sharing the APCu cache. This patch changes the behviour so that only cache entries matching the key_prefix of this board are cleared by a phpBB cache purge. The APCu unit test script has been updated to test this behaviour. It has also been updated so that the test case can be run individually previously it relied on initialisations made in other test scripts. PHPBB3-15726
This commit is contained in:
parent
04899d1efd
commit
02234783c6
2 changed files with 22 additions and 1 deletions
6
phpBB/phpbb/cache/driver/apcu.php
vendored
Normal file → Executable file
6
phpBB/phpbb/cache/driver/apcu.php
vendored
Normal file → Executable file
|
@ -25,7 +25,11 @@ class apcu extends \phpbb\cache\driver\memory
|
||||||
*/
|
*/
|
||||||
function purge()
|
function purge()
|
||||||
{
|
{
|
||||||
apcu_clear_cache();
|
/* use an iterator to selectively clear our cache entries without
|
||||||
|
disturbing any other cache users
|
||||||
|
(e.g. other phpBB boards hosted on this server) */
|
||||||
|
apcu_delete(new \APCUIterator('#^' . $this->key_prefix . '#'));
|
||||||
|
|
||||||
|
|
||||||
parent::purge();
|
parent::purge();
|
||||||
}
|
}
|
||||||
|
|
17
tests/cache/apcu_driver_test.php
vendored
Normal file → Executable file
17
tests/cache/apcu_driver_test.php
vendored
Normal file → Executable file
|
@ -49,10 +49,27 @@ class phpbb_cache_apcu_driver_test extends phpbb_cache_common_test_case
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
|
global $phpbb_container, $phpbb_root_path;
|
||||||
|
|
||||||
parent::setUp();
|
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\apcu;
|
$this->driver = new \phpbb\cache\driver\apcu;
|
||||||
|
|
||||||
$this->driver->purge();
|
$this->driver->purge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_purge()
|
||||||
|
{
|
||||||
|
/* add a cache entry which does not match our key */
|
||||||
|
$foreign_key = 'test_' . $this->driver->key_prefix . 'test';
|
||||||
|
$this->assertSame(true, apcu_store($foreign_key, 0, 600));
|
||||||
|
$this->assertSame(true, apcu_exists($foreign_key));
|
||||||
|
|
||||||
|
parent::test_purge();
|
||||||
|
|
||||||
|
$this->assertSame(true, apcu_exists($foreign_key));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue