feature #24383 [FrameworkBundle] Don't clear app pools on cache:clear (nicolas-grekas)

This PR was merged into the 3.4 branch.

Discussion
----------

[FrameworkBundle] Don't clear app pools on cache:clear

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no, but behavior change
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #23685
| License       | MIT
| Doc PR        | -

The cache:clear command currently clears all cache pools by default.
This is not expected and is a bad default behavior (as explained in linked issue).
If we don't want to have that behavior forever, I see no other option than just doing the change, as done here, targeting 3.4.

Commits
-------

b0c04f8354 [FrameworkBundle] Don't clear app pools on cache:clear
This commit is contained in:
Fabien Potencier 2017-10-01 09:49:04 -07:00
commit 4f89386b74
9 changed files with 19 additions and 6 deletions

View File

@ -113,6 +113,10 @@ Form
FrameworkBundle
---------------
* The `cache:clear` command doesn't clear "app" PSR-6 cache pools anymore,
but still clears "system" ones.
Use the `cache:pool:clear` command to clear "app" pools instead.
* The `doctrine/cache` dependency has been removed; require it via `composer
require doctrine/cache` if you are using Doctrine cache in your project.

View File

@ -4,6 +4,8 @@ CHANGELOG
3.4.0
-----
* Made the `cache:clear` command to *not* clear "app" PSR-6 cache pools anymore,
but to still clear "system" ones; use the `cache:pool:clear` command to clear "app" pools instead
* Always register a minimalist logger that writes in `stderr`
* Deprecated `profiler.matcher` option
* Added support for `EventSubscriberInterface` on `MicroKernelTrait`

View File

@ -106,7 +106,7 @@ class CachePoolPass implements CompilerPassInterface
foreach ($clearers as $id => $pools) {
$clearer = $container->getDefinition($id);
if ($clearer instanceof ChilDefinition) {
if ($clearer instanceof ChildDefinition) {
$clearer->replaceArgument(0, $pools);
} else {
$clearer->setArgument(0, $pools);

View File

@ -1802,7 +1802,7 @@ class FrameworkExtension extends Extension
if (!$container->getParameter('kernel.debug')) {
$propertyAccessDefinition->setFactory(array(PropertyAccessor::class, 'createCache'));
$propertyAccessDefinition->setArguments(array(null, null, $version, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
$propertyAccessDefinition->addTag('cache.pool', array('clearer' => 'cache.default_clearer'));
$propertyAccessDefinition->addTag('cache.pool', array('clearer' => 'cache.system_clearer'));
$propertyAccessDefinition->addTag('monolog.logger', array('channel' => 'cache'));
} else {
$propertyAccessDefinition->setClass(ArrayAdapter::class);

View File

@ -29,7 +29,7 @@
<service id="cache.adapter.system" class="Symfony\Component\Cache\Adapter\AdapterInterface" abstract="true">
<factory class="Symfony\Component\Cache\Adapter\AbstractAdapter" method="createSystemCache" />
<tag name="cache.pool" clearer="cache.default_clearer" />
<tag name="cache.pool" clearer="cache.system_clearer" />
<tag name="monolog.logger" channel="cache" />
<argument /> <!-- namespace -->
<argument>0</argument> <!-- default lifetime -->
@ -101,6 +101,10 @@
</service>
<service id="cache.default_clearer" class="Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer">
<argument type="collection" />
</service>
<service id="cache.system_clearer" parent="cache.default_clearer" public="true">
<tag name="kernel.cache_clearer" />
</service>

View File

@ -11,7 +11,7 @@
namespace Symfony\Bundle\FrameworkBundle\Tests\Functional;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Symfony\Component\Cache\Adapter\RedisAdapter;
use Symfony\Component\Cache\Exception\InvalidArgumentException;
@ -19,7 +19,7 @@ class CachePoolsTest extends WebTestCase
{
public function testCachePools()
{
$this->doTestCachePools(array(), FilesystemAdapter::class);
$this->doTestCachePools(array(), AdapterInterface::class);
}
/**
@ -67,7 +67,7 @@ class CachePoolsTest extends WebTestCase
}
}
public function doTestCachePools($options, $adapterClass)
private function doTestCachePools($options, $adapterClass)
{
static::bootKernel($options);
$container = static::$kernel->getContainer();

View File

@ -6,6 +6,7 @@ framework:
pools:
cache.pool1:
public: true
adapter: cache.system
cache.pool2:
public: true
adapter: cache.pool3

View File

@ -11,6 +11,7 @@ framework:
pools:
cache.pool1:
public: true
clearer: cache.system_clearer
cache.pool2:
public: true
clearer: ~

View File

@ -22,6 +22,7 @@ framework:
pools:
cache.pool1:
public: true
clearer: cache.system_clearer
cache.pool2:
public: true
clearer: ~