Skip to content

Commit c9138ea

Browse files
committed
Add cache.adapter.redis_tag_aware to use RedisCacheAwareAdapter
1 parent f3962d4 commit c9138ea

File tree

7 files changed

+116
-13
lines changed

7 files changed

+116
-13
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ CHANGELOG
99
* Deprecated the public `form.factory`, `form.type.file`, `translator`, `security.csrf.token_manager`, `serializer`,
1010
`cache_clearer`, `filesystem` and `validator` services to private.
1111
* Added `TemplateAwareDataCollectorInterface` and `AbstractDataCollector` to simplify custom data collector creation and leverage autoconfiguration
12+
* Wired `RedisTagAwareAdapter` for pools usings tags and Redis adapter
1213

1314
5.1.0
1415
-----

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1861,8 +1861,11 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18611861
foreach ($config['pools'] as $name => $pool) {
18621862
$pool['adapters'] = $pool['adapters'] ?: ['cache.app'];
18631863

1864+
$isRedisTagAware = ['cache.adapter.redis_tag_aware'] === $pool['adapters'];
18641865
foreach ($pool['adapters'] as $provider => $adapter) {
1865-
if ($config['pools'][$adapter]['tags'] ?? false) {
1866+
if (($config['pools'][$adapter]['adapters'] ?? null) === ['cache.adapter.redis_tag_aware']) {
1867+
$isRedisTagAware = true;
1868+
} elseif ($config['pools'][$adapter]['tags'] ?? false) {
18661869
$pool['adapters'][$provider] = $adapter = '.'.$adapter.'.inner';
18671870
}
18681871
}
@@ -1877,7 +1880,10 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18771880
$pool['reset'] = 'reset';
18781881
}
18791882

1880-
if ($pool['tags']) {
1883+
if ($isRedisTagAware) {
1884+
$tagAwareId = $name;
1885+
$container->setAlias('.'.$name.'.inner', $name);
1886+
} elseif ($pool['tags']) {
18811887
if (true !== $pool['tags'] && ($config['pools'][$pool['tags']]['tags'] ?? false)) {
18821888
$pool['tags'] = '.'.$pool['tags'].'.inner';
18831889
}
@@ -1887,22 +1893,20 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
18871893
->setPublic($pool['public'])
18881894
;
18891895

1890-
$pool['name'] = $name;
1896+
$pool['name'] = $tagAwareId = $name;
18911897
$pool['public'] = false;
18921898
$name = '.'.$name.'.inner';
1893-
1894-
if (!\in_array($pool['name'], ['cache.app', 'cache.system'], true)) {
1895-
$container->registerAliasForArgument($pool['name'], TagAwareCacheInterface::class);
1896-
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name']);
1897-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name']);
1898-
}
18991899
} elseif (!\in_array($name, ['cache.app', 'cache.system'], true)) {
1900-
$container->register('.'.$name.'.taggable', TagAwareAdapter::class)
1900+
$tagAwareId = '.'.$name.'.taggable';
1901+
$container->register($tagAwareId, TagAwareAdapter::class)
19011902
->addArgument(new Reference($name))
19021903
;
1903-
$container->registerAliasForArgument('.'.$name.'.taggable', TagAwareCacheInterface::class, $name);
1904-
$container->registerAliasForArgument($name, CacheInterface::class);
1905-
$container->registerAliasForArgument($name, CacheItemPoolInterface::class);
1904+
}
1905+
1906+
if (!\in_array($name, ['cache.app', 'cache.system'], true)) {
1907+
$container->registerAliasForArgument($tagAwareId, TagAwareCacheInterface::class, $pool['name'] ?? $name);
1908+
$container->registerAliasForArgument($name, CacheInterface::class, $pool['name'] ?? $name);
1909+
$container->registerAliasForArgument($name, CacheItemPoolInterface::class, $pool['name'] ?? $name);
19061910
}
19071911

19081912
$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+
'', // 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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,27 @@
3232
'redis://foo' => 'cache.adapter.redis',
3333
],
3434
],
35+
'cache.redis_tag_aware.foo' => [
36+
'adapter' => 'cache.adapter.redis_tag_aware',
37+
],
38+
'cache.redis_tag_aware.foo2' => [
39+
'tags' => true,
40+
'adapter' => 'cache.adapter.redis_tag_aware',
41+
],
42+
'cache.redis_tag_aware.bar' => [
43+
'adapter' => 'cache.redis_tag_aware.foo',
44+
],
45+
'cache.redis_tag_aware.bar2' => [
46+
'tags' => true,
47+
'adapter' => 'cache.redis_tag_aware.foo',
48+
],
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',
55+
],
3556
],
3657
],
3758
]);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +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.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" />
2026
</framework:cache>
2127
</framework:config>
2228
</container>

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,18 @@ framework:
2323
- cache.adapter.array
2424
- cache.adapter.filesystem
2525
- {name: cache.adapter.redis, provider: 'redis://foo'}
26+
cache.redis_tag_aware.foo:
27+
adapter: cache.adapter.redis_tag_aware
28+
cache.redis_tag_aware.foo2:
29+
tags: true
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:
39+
tags: true
40+
adapter: cache.redis_tag_aware.foo2

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

Lines changed: 39 additions & 0 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\Bridge\PhpUnit\ExpectDeprecationTrait;
1718
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass;
@@ -27,6 +28,7 @@
2728
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
2829
use Symfony\Component\Cache\Adapter\ProxyAdapter;
2930
use Symfony\Component\Cache\Adapter\RedisAdapter;
31+
use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter;
3032
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
3133
use Symfony\Component\DependencyInjection\ChildDefinition;
3234
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
@@ -56,6 +58,8 @@
5658
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
5759
use Symfony\Component\Workflow;
5860
use Symfony\Component\Workflow\WorkflowEvents;
61+
use Symfony\Contracts\Cache\CacheInterface;
62+
use Symfony\Contracts\Cache\TagAwareCacheInterface;
5963

6064
abstract class FrameworkExtensionTest extends TestCase
6165
{
@@ -1316,6 +1320,41 @@ public function testCachePoolServices()
13161320
$this->assertEquals($expected, $chain->getArguments());
13171321
}
13181322

1323+
public function testRedisTagAwareAdapter(): void
1324+
{
1325+
$container = $this->createContainerFromFile('cache', [], true);
1326+
1327+
$aliasesForArguments = [];
1328+
$argNames = [
1329+
'cacheRedisTagAwareFoo',
1330+
'cacheRedisTagAwareFoo2',
1331+
'cacheRedisTagAwareBar',
1332+
'cacheRedisTagAwareBar2',
1333+
'cacheRedisTagAwareBaz',
1334+
'cacheRedisTagAwareBaz2',
1335+
];
1336+
foreach ($argNames as $argumentName) {
1337+
$aliasesForArguments[] = sprintf('%s $%s', TagAwareCacheInterface::class, $argumentName);
1338+
$aliasesForArguments[] = sprintf('%s $%s', CacheInterface::class, $argumentName);
1339+
$aliasesForArguments[] = sprintf('%s $%s', CacheItemPoolInterface::class, $argumentName);
1340+
}
1341+
1342+
foreach ($aliasesForArguments as $aliasForArgumentStr) {
1343+
$aliasForArgument = $container->getAlias($aliasForArgumentStr);
1344+
$this->assertNotNull($aliasForArgument, sprintf("No alias found for '%s'", $aliasForArgumentStr));
1345+
1346+
$def = $container->getDefinition((string) $aliasForArgument);
1347+
$this->assertInstanceOf(ChildDefinition::class, $def, sprintf("No definition found for '%s'", $aliasForArgumentStr));
1348+
1349+
$defParent = $container->getDefinition($def->getParent());
1350+
if ($defParent instanceof ChildDefinition) {
1351+
$defParent = $container->getDefinition($defParent->getParent());
1352+
}
1353+
1354+
$this->assertSame(RedisTagAwareAdapter::class, $defParent->getClass(), sprintf("'%s' is not %s", $aliasForArgumentStr, RedisTagAwareAdapter::class));
1355+
}
1356+
}
1357+
13191358
public function testRemovesResourceCheckerConfigCacheFactoryArgumentOnlyIfNoDebug()
13201359
{
13211360
$container = $this->createContainer(['kernel.debug' => true]);

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