8000 Add cache.adapter.redis_tag_aware to use RedisCacheAwareAdapter · symfony/symfony@f5a7c15 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit f5a7c15

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

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 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' F438 ;
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)
0