Skip to content

Commit 79e949b

Browse files
committed
Add cache.adapter.redis_tag_aware to use RedisCacheAwareAdapter
1 parent fb1eba1 commit 79e949b

File tree

7 files changed

+99
-77
lines changed

7 files changed

+99
-77
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ CHANGELOG
1818
* Made `BrowserKitAssertionsTrait` report the original error message in case of a failure
1919
* Added ability for `config:dump-reference` and `debug:config` to dump and debug kernel container extension configuration.
2020
* Deprecated `session.attribute_bag` service and `session.flash_bag` service.
21-
* Wire `RedisTagAwareAdapter` for pools usings tags and Redis adapter
21+
* Add `cache.adapter.redis_tag_aware` in order to use `RedisCacheAwareAdapter`
2222

2323
5.0.0
2424
-----

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
use Symfony\Component\Cache\Adapter\AdapterInterface;
3131
use Symfony\Component\Cache\Adapter\ArrayAdapter;
3232
use Symfony\Component\Cache\Adapter\ChainAdapter;
33-
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
3433
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
3534
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
3635
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
@@ -1834,8 +1833,11 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18341833
foreach ($config['pools'] as $name => $pool) {
18351834
$pool['adapters'] = $pool['adapters'] ?: ['cache.app'];
18361835

1836+
$isRedisTagAware = ['cache.adapter.redis_tag_aware'] === $pool['adapters'];
18371837
foreach ($pool['adapters'] as $provider => $adapter) {
1838-
if ($config['pools'][$adapter]['tags'] ?? false) {
1838+
if (($config['pools'][$adapter]['adapters'] ?? null) === ['cache.adapter.redis_tag_aware']) {
1839+
$isRedisTagAware = true;
1840+
} elseif ($config['pools'][$adapter]['tags'] ?? false) {
18391841
$pool['adapters'][$provider] = $adapter = '.'.$adapter.'.inner';
18401842
}
18411843
}
@@ -1850,43 +1852,33 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18501852
$pool['reset'] = 'reset';
18511853
}
18521854

1853-
if ($pool['tags']) {
1855+
if ($isRedisTagAware) {
1856+
$tagAwareId = $name;
1857+
$container->setAlias('.'.$name.'.inner', $name);
1858+
} elseif ($pool['tags']) {
18541859
if (true !== $pool['tags'] && ($config['pools'][$pool['tags']]['tags'] ?? false)) {
18551860
$pool['tags'] = '.'.$pool['tags'].'.inner';
18561861
}
1862+
$container->register($name, TagAwareAdapter::class)
1863+
->addArgument(new Reference('.'.$name.'.inner'))
1864+
->addArgument(true !== $pool['tags'] ? new Reference($pool['tags']) : null)
1865+
->setPublic($pool['public'])
1866+
;
18571867

1858-
$isRedis = $definition instanceof ChildDefinition && 'cache.adapter.redis' === $definition->getParent();
1859-
if (true === $pool['tags'] && $isRedis) {
1860-
$definition = new Definition(RedisTagAwareAdapter::class, [null, null, 0, null]);
1861-
if (!isset($pool['provider']) || !$pool['provider']) {
1862-
$pool['provider'] = 'cache.default_redis_provider';
1863-
}
1864-
$underlyingAdapterName = $name;
1865-
} else {
1866-
$container->register($name, TagAwareAdapter::class)
1867-
->addArgument(new Reference('.'.$name.'.inner'))
1868-
->addArgument(true !== $pool['tags'] ? new Reference($pool['tags']) : null)
1869-
->setPublic($pool['public'])
1870-
;
1871-
$underlyingAdapterName = '.'.$name.'.inner';
1872-
}
1873-
1874-
$pool['name'] = $name;
1868+
$pool['name'] = $tagAwareId = $name;
18751869
$pool['public'] = false;
1876-
$name = $underlyingAdapterName;
1877-
1878-
if (!\in_array($pool['name'], ['cache.app', 'cache.system'], true)) {
1879-
$container->registerAliasForArgument($pool['name'], TagAwareCacheInterface::class);
1880-
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name']);
1881-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name']);
1882-
}
1870+
$name = '.'.$name.'.inner';
18831871
} elseif (!\in_array($name, ['cache.app', 'cache.system'], true)) {
18841872
$container->register('.'.$name.'.taggable', TagAwareAdapter::class)
18851873
->addArgument(new Reference($name))
18861874
;
1887-
$container->registerAliasForArgument('.'.$name.'.taggable', TagAwareCacheInterface::class, $name);
1888-
$container->registerAliasForArgument($name, CacheInterface::class);
1889-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class);
1875+
$tagAwareId = '.'.$name.'.taggable';
1876+
}
1877+
1878+
if (!\in_array($name, ['cache.app', 'cache.system'], true)) {
1879+
$container->registerAliasForArgument($tagAwareId, TagAwareCacheInterface::class, $pool['name'] ?? $name);
1880+
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name'] ?? $name);
1881+
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name'] ?? $name);
18901882
}
18911883

18921884
$definition->setPublic($pool['public']);

src/Symfony/Bundle/FrameworkBundle/Resources/config/cache.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,18 @@
103103
</call>
104104
</service>
105105

106+
<service id="cache.adapter.redis_tag_aware" class="Symfony\Component\Cache\Adapter\RedisTagAwareAdapter" abstract="true">
107+
<tag name="cache.pool" provider="cache.default_redis_provider" clearer="cache.default_clearer" reset="reset" />
108+
<tag name="monolog.logger" channel="cache" />
109+
<argument type="abstract">Redis connection service</argument>
110+
<argument type="abstract">namespace</argument>
111+
<argument>0</argument> <!-- default lifetime -->
112+
<argument type="service" id="cache.default_marshaller" on-invalid="ignore" />
113+
<call method="setLogger">
114+
<argument type="service" id="logger" on-invalid="ignore" />
115+
</call>
116+
</service>
117+
106118
<service id="cache.adapter.memcached" class="Symfony\Component\Cache\Adapter\MemcachedAdapter" abstract="true">
107119
<tag name="cache.pool" provider="cache.default_memcached_provider" clearer="cache.default_clearer" reset="reset" />
108120
<tag name="monolog.logger" channel="cache" />

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/cache.php

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,26 @@
3232
'redis://foo' => 'cache.adapter.redis',
3333
],
3434
],
35-
'cache.tag' => [
35+
'cache.redis_tag_aware.foo' => [
36+
'adapter' => 'cache.adapter.redis_tag_aware',
37+
],
38+
'cache.redis_tag_aware.foo2' => [
3639
'tags' => true,
37-
'adapter' => 'cache.adapter.apcu',
40+
'adapter' => 'cache.adapter.redis_tag_aware',
3841
],
39-
'cache.redis.foo' => [
40-
'adapter' => 'cache.adapter.redis',
42+
'cache.redis_tag_aware.bar' => [
43+
'adapter' => 'cache.redis_tag_aware.foo',
4144
],
42-
'cache.redis.bar' => [
45+
'cache.redis_tag_aware.bar2' => [
4346
'tags' => true,
44-
'adapter' => 'cache.adapter.redis',
47+
'adapter' => 'cache.redis_tag_aware.foo',
4548
],
46-
'cache.redis.baz' => [
47-
'tags' => 'cache.adapter.redis',
48-
'adapter' => 'cache.adapter.redis',
49+
'cache.redis_tag_aware.baz' => [
50+
'adapter' => 'cache.redis_tag_aware.foo2',
51+
],
52+
'cache.redis_tag_aware.baz2' => [
53+
'tags' => true,
54+
'adapter' => 'cache.redis_tag_aware.foo2',
4955
],
5056
],
5157
],

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/cache.xml

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,12 @@
1717
<framework:adapter name="cache.adapter.filesystem" />
1818
<framework:adapter name="cache.adapter.redis" provider="redis://foo" />
1919
</framework:pool>
20-
<framework:pool name="cache.tag" tags="true">
21-
<framework:adapter name="cache.adapter.apcu" />
22-
</framework:pool>
23-
<framework:pool name="cache.redis.foo">
24-
<framework:adapter name="cache.adapter.redis" />
25-
</framework:pool>
26-
<framework:pool name="cache.redis.bar" tags="true">
27-
<framework:adapter name="cache.adapter.redis" />
28-
</framework:pool>
29-
<framework:pool name="cache.redis.baz" tags="cache.adapter.redis">
30-
<framework:adapter name="cache.adapter.redis" />
31-
</framework:pool>
20+
<framework:pool name="cache.redis_tag_aware.foo" adapter="cache.adapter.redis_tag_aware" />
21+
<framework:pool name="cache.redis_tag_aware.foo2" tags="true" adapter="cache.adapter.redis_tag_aware" />
22+
<framework:pool name="cache.redis_tag_aware.bar" adapter="cache.redis_tag_aware.foo" />
23+
<framework:pool name="cache.redis_tag_aware.bar2" tags="true" adapter="cache.redis_tag_aware.foo" />
24+
<framework:pool name="cache.redis_tag_aware.baz" adapter="cache.redis_tag_aware.foo2" />
25+
<framework:pool name="cache.redis_tag_aware.baz2" tags="true" adapter="cache.redis_tag_aware.foo2" />
3226
</framework:cache>
3327
</framework:config>
3428
</container>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/cache.yml

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,18 @@ framework:
2323
- cache.adapter.array
2424
- cache.adapter.filesystem
2525
- {name: cache.adapter.redis, provider: 'redis://foo'}
26-
cache.tag:
26+
cache.redis_tag_aware.foo:
27+
adapter: cache.adapter.redis_tag_aware
28+
cache.redis_tag_aware.foo2:
2729
tags: true
28-
adapter: cache.adapter.apcu
29-
cache.redis.foo:
30-
adapter: cache.adapter.redis
31-
cache.redis.bar:
30+
adapter: cache.adapter.redis_tag_aware
31+
cache.redis_tag_aware.bar:
32+
adapter: cache.redis_tag_aware.foo
33+
cache.redis_tag_aware.bar2:
34+
tags: true
35+
adapter: cache.redis_tag_aware.foo
36+
cache.redis_tag_aware.baz:
37+
adapter: cache.redis_tag_aware.foo2
38+
cache.redis_tag_aware.baz2:
3239
tags: true
33-
adapter: cache.adapter.redis
34-
cache.redis.baz:
35-
tags: cache.adapter.redis
36-
adapter: cache.adapter.redis
40+
adapter: cache.redis_tag_aware.foo2

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection;
1313

1414
use Doctrine\Common\Annotations\Annotation;
15+
use Psr\Cache\CacheItemPoolInterface;
1516
use Psr\Log\LoggerAwareInterface;
1617
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass;
1718
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
@@ -27,7 +28,6 @@
2728
use Symfony\Component\Cache\Adapter\ProxyAdapter;
2829
use Symfony\Component\Cache\Adapter\RedisAdapter;
2930
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
30-
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
3131
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
3232
use Symfony\Component\DependencyInjection\ChildDefinition;
3333
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
@@ -56,6 +56,7 @@
5656
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
5757
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
5858
use Symfony\Component\Workflow;
59+
use Symfony\Contracts\Cache\CacheInterface;
5960
use Symfony\Contracts\Cache\TagAwareCacheInterface;
6061

6162
abstract class FrameworkExtensionTest extends TestCase
@@ -1285,25 +1286,38 @@ public function testCachePoolServices()
12851286
$this->assertEquals($expected, $chain->getArguments());
12861287
}
12871288

1288-
public function testCacheTagAwareAdapters(): void
1289+
public function testRedisTagAwareAdapter(): void
12891290
{
12901291
$container = $this->createContainerFromFile('cache', [], true);
12911292

1292-
$data = [
1293-
'cacheFoo' => TagAwareAdapter::class,
1294-
'cacheTag' => TagAwareAdapter::class,
1295-
'cacheChain' => TagAwareAdapter::class,
1296-
'cacheRedisFoo' => TagAwareAdapter::class,
1297-
'cacheRedisBar' => RedisTagAwareAdapter::class,
1298-
'cacheRedisBaz' => TagAwareAdapter::class,
1299-
];
1293+
$aliasesForArguments = [];
1294+
foreach ([
1295+
'cacheRedisTagAwareFoo',
1296+
'cacheRedisTagAwareFoo2',
1297+
'cacheRedisTagAwareBar',
1298+
'cacheRedisTagAwareBar2',
1299+
'cacheRedisTagAwareBaz',
1300+
'cacheRedisTagAwareBaz2',
1301+
] as $argumentName) {
1302+
$aliasesForArguments[] = sprintf('%s $%s', TagAwareCacheInterface::class, $argumentName);
1303+
$aliasesForArguments[] = sprintf('%s $%s', CacheInterface::class, $argumentName);
1304+
$aliasesForArguments[] = sprintf('%s $%s', CacheItemPoolInterface::class, $argumentName);
1305+
}
13001306

1301-
foreach ($data as $varName => $expectedAdapter) {
1302-
$aliasForArgument = $container->getAlias(sprintf('%s $%s', TagAwareCacheInterface::class, $varName));
1303-
$this->assertNotNull($aliasForArgument);
1304-
$taggableDef = $container->getDefinition((string) $aliasForArgument);
1305-
$this->assertNotNull($taggableDef);
1306-
$this->assertSame($expectedAdapter, $taggableDef->getClass());
1307+
foreach ($aliasesForArguments as $aliasForArgumentStr) {
1308+
$aliasForArgument = $container->getAlias($aliasForArgumentStr);
1309+
$this->assertNotNull($aliasForArgument, sprintf("No alias found for '%s'", $aliasForArgumentStr));
1310+
$def = $container->getDefinition((string) $aliasForArgument);
1311+
$this->assertInstanceOf(ChildDefinition::class, $def, sprintf("No definition found for '%s'", $aliasForArgumentStr));
1312+
$defParent = $container->getDefinition($def->getParent());
1313+
if ($defParent instanceof ChildDefinition) {
1314+
$defParent = $container->getDefinition($defParent->getParent());
1315+
}
1316+
$this->assertSame(
1317+
RedisTagAwareAdapter::class,
1318+
$defParent->getClass(),
1319+
sprintf("'%s' is not %s", $aliasForArgumentStr, RedisTagAwareAdapter::class)
1320+
);
13071321
}
13081322
}
13091323

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy