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

Skip to content

Commit a7a4fb0

Browse files
committed
Add cache.adapter.redis_tag_aware to use RedisCacheAwareAdapter
1 parent 3864521 commit a7a4fb0

File tree

7 files changed

+105
-78
lines changed

7 files changed

+105
-78
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: 23 additions & 31 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;
@@ -1838,8 +1837,11 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18381837
foreach ($config['pools'] as $name => $pool) {
18391838
$pool['adapters'] = $pool['adapters'] ?: ['cache.app'];
18401839

1840+
$isRedisTagAware = ['cache.adapter.redis_tag_aware'] === $pool['adapters'];
18411841
foreach ($pool['adapters'] as $provider => $adapter) {
1842-
if ($config['pools'][$adapter]['tags'] ?? false) {
1842+
if (($config['pools'][$adapter]['adapters'] ?? null) === ['cache.adapter.redis_tag_aware']) {
1843+
$isRedisTagAware = true;
1844+
} elseif ($config['pools'][$adapter]['tags'] ?? false) {
18431845
$pool['adapters'][$provider] = $adapter = '.'.$adapter.'.inner';
18441846
}
18451847
}
@@ -1854,43 +1856,33 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18541856
$pool['reset'] = 'reset';
18551857
}
18561858

1857-
if ($pool['tags']) {
1859+
if ($isRedisTagAware) {
1860+
$tagAwareId = $name;
1861+
$container->setAlias('.'.$name.'.inner', $name);
1862+
} elseif ($pool['tags']) {
18581863
if (true !== $pool['tags'] && ($config['pools'][$pool['tags']]['tags'] ?? false)) {
18591864
$pool['tags'] = '.'.$pool['tags'].'.inner';
18601865
}
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+
;
18611871

1862-
$isRedis = $definition instanceof ChildDefinition && 'cache.adapter.redis' === $definition->getParent();
1863-
if (true === $pool['tags'] && $isRedis) {
1864-
$definition = new Definition(RedisTagAwareAdapter::class, [null, null, 0, null]);
1865-
if (!isset($pool['provider']) || !$pool['provider']) {
1866-
$pool['provider'] = 'cache.default_redis_provider';
1867-
}
1868-
$underlyingAdapterName = $name;
1869-
} else {
1870-
$container->register($name, TagAwareAdapter::class)
1871-
->addArgument(new Reference('.'.$name.'.inner'))
1872-
->addArgument(true !== $pool['tags'] ? new Reference($pool['tags']) : null)
1873-
->setPublic($pool['public'])
1874-
;
1875-
$underlyingAdapterName = '.'.$name.'.inner';
1876-
}
1877-
1878-
$pool['name'] = $name;
1872+
$pool['name'] = $tagAwareId = $name;
18791873
$pool['public'] = false;
1880-
$name = $underlyingAdapterName;
1881-
1882-
if (!\in_array($pool['name'], ['cache.app', 'cache.system'], true)) {
1883-
$container->registerAliasForArgument($pool['name'], TagAwareCacheInterface::class);
1884-
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name']);
1885-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name']);
1886-
}
1874+
$name = '.'.$name.'.inner';
18871875
} elseif (!\in_array($name, ['cache.app', 'cache.system'], true)) {
1888-
$container->register('.'.$name.'.taggable', TagAwareAdapter::class)
1876+
$tagAwareId = '.'.$name.'.taggable';
1877+
$container->register($tagAwareId, TagAwareAdapter::class)
18891878
->addArgument(new Reference($name))
18901879
;
1891-
$container->registerAliasForArgument('.'.$name.'.taggable', TagAwareCacheInterface::class, $name);
1892-
$container->registerAliasForArgument($name, CacheInterface::class);
1893-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class);
1880+
}
1881+
1882+
if (!\in_array($name, ['cache.app', 'cache.system'], true)) {
1883+
$container->registerAliasForArgument($tagAwareId, TagAwareCacheInterface::class, $pool['name'] ?? $name);
1884+
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name'] ?? $name);
1885+
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name'] ?? $name);
18941886
}
18951887

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

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Symfony\Component\Cache\Adapter\PdoAdapter;
2323
use Symfony\Component\Cache\Adapter\ProxyAdapter;
2424
use Symfony\Component\Cache\Adapter\RedisAdapter;
25+
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
2526
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
2627
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
2728
use Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer;
@@ -148,6 +149,22 @@
148149
])
149150
->tag('monolog.logger', ['channel' => 'cache'])
150151

152+
->set('cache.adapter.redis_tag_aware', RedisTagAwareAdapter::class)
153+
->abstract()
154+
->args([
155+
abstract_arg('Redis connection service'),
156+
abstract_arg('Namespace'),
157+
0, // default lifetime
158+
service('cache.default_marshaller')->ignoreOnInvalid(),
159+
])
160+
->call('setLogger', [service('logger')->ignoreOnInvalid()])
161+
->tag('cache.pool', [
162+
'provider' => 'cache.default_redis_provider',
163+
'clearer' => 'cache.default_clearer',
164+
'reset' => 'reset'
165+
])
166+
->tag('monolog.logger', ['channel' => 'cache'])
167+
151168
->set('cache.adapter.memcached', MemcachedAdapter::class)
152169
->abstract()
153170
->args([

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
@@ -1284,25 +1285,38 @@ public function testCachePoolServices()
12841285
$this->assertEquals($expected, $chain->getArguments());
12851286
}
12861287

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

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

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

0 commit comments

Comments
 (0)
0