aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2018-09-16 16:10:25 +0200
committerMarc Alexander <admin@m-a-styles.de>2018-09-16 16:10:25 +0200
commitf08d18c99c1f01497877535a0c55d6289275e339 (patch)
treef9d51a0edb88371eb811ed5dae12e8bab64a6b85
parent3e851907988b5b8e542f0a838cebfa8185b55ac4 (diff)
parent5edb33036654fad4df63507f00934b0d078e2756 (diff)
downloadforums-f08d18c99c1f01497877535a0c55d6289275e339.tar
forums-f08d18c99c1f01497877535a0c55d6289275e339.tar.gz
forums-f08d18c99c1f01497877535a0c55d6289275e339.tar.bz2
forums-f08d18c99c1f01497877535a0c55d6289275e339.tar.xz
forums-f08d18c99c1f01497877535a0c55d6289275e339.zip
Merge pull request #5295 from v12mike/ticket/15726
Ticket/15726 Implement selective purge in APCu cache driver
-rw-r--r--phpBB/phpbb/cache/driver/apcu.php6
-rw-r--r--tests/cache/apcu_driver_test.php17
2 files changed, 22 insertions, 1 deletions
diff --git a/phpBB/phpbb/cache/driver/apcu.php b/phpBB/phpbb/cache/driver/apcu.php
index 40192e4026..c96cf0de57 100644
--- a/phpBB/phpbb/cache/driver/apcu.php
+++ b/phpBB/phpbb/cache/driver/apcu.php
@@ -25,7 +25,11 @@ class apcu extends \phpbb\cache\driver\memory
*/
function purge()
{
- apcu_clear_cache();
+ /*
+ * Use an iterator to selectively delete 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();
}
diff --git a/tests/cache/apcu_driver_test.php b/tests/cache/apcu_driver_test.php
index 9de1d82a15..57f640c313 100644
--- a/tests/cache/apcu_driver_test.php
+++ b/tests/cache/apcu_driver_test.php
@@ -49,10 +49,27 @@ class phpbb_cache_apcu_driver_test extends phpbb_cache_common_test_case
protected function setUp()
{
+ global $phpbb_container, $phpbb_root_path;
+
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->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));
+ }
}