Skip to content

Commit 8218bb8

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

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)
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