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

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+
1E79 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< 93C6 /td>+
'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)
0