Skip to content

Commit 3f3733b

Browse files
[Bridge/Doctrine] Use cache.prefix.seed parameter for generating cache namespace
1 parent 1df5e7f commit 3f3733b

File tree

5 files changed

+36
-15
lines changed

5 files changed

+36
-15
lines changed

src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,16 @@ protected function loadCacheDriver($cacheName, $objectManagerName, array $cacheD
384384

385385
if (!isset($cacheDriver['namespace'])) {
386386
// generate a unique namespace for the given application
387-
$env = $container->getParameter('kernel.root_dir').$container->getParameter('kernel.environment');
388-
$hash = hash('sha256', $env);
389-
$namespace = 'sf2'.$this->getMappingResourceExtension().'_'.$objectManagerName.'_'.$hash;
387+
if ($container->hasParameter('cache.prefix.seed')) {
388+
$seed = '.'.$container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed'));
389+
} elseif ($container->getParameter('kernel.debug')) {
390+
$seed = '_'.$container->getParameter('kernel.root_dir');
391+
} else {
392+
$seed = '_';
393+
}
394+
$seed .= '.'.$container->getParameter('kernel.name').'.'.$container->getParameter('kernel.environment');
395+
$hash = hash('sha256', $seed);
396+
$namespace = 'sf_'.$this->getMappingResourceExtension().'_'.$objectManagerName.'_'.$hash;
390397

391398
$cacheDriver['namespace'] = $namespace;
392399
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final class CachePoolClearerPass implements CompilerPassInterface
2525
*/
2626
public function process(ContainerBuilder $container)
2727
{
28+
$container->getParameterBag()->remove('cache.prefix.seed');
29+
2830
foreach ($container->findTaggedServiceIds('cache.pool') as $id => $attributes) {
2931
foreach (array_reverse($attributes) as $attr) {
3032
if (isset($attr['clearer'])) {

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolPass.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ class CachePoolPass implements CompilerPassInterface
2929
*/
3030
public function process(ContainerBuilder $container)
3131
{
32-
$namespaceSuffix = '';
33-
34-
foreach (array('kernel.name', 'kernel.environment', 'kernel.debug', 'cache.prefix.seed') as $key) {
35-
if ($container->hasParameter($key)) {
36-
$namespaceSuffix .= '.'.$container->getParameter($key);
37-
}
32+
if ($container->hasParameter('cache.prefix.seed')) {
33+
$seed = '.'.$container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed'));
34+
} elseif ($container->getParameter('kernel.debug')) {
35+
$seed = '_'.$container->getParameter('kernel.root_dir');
36+
} else {
37+
$seed = '_';
3838
}
39-
$container->getParameterBag()->remove('cache.prefix.seed');
39+
$seed .= '_'.$container->getParameter('kernel.name').'.'.$container->getParameter('kernel.environment');
4040

4141
$aliases = $container->getAliases();
4242
$attributes = array(
@@ -56,7 +56,7 @@ public function process(ContainerBuilder $container)
5656
}
5757
}
5858
if (!isset($tags[0]['namespace'])) {
59-
$tags[0]['namespace'] = $this->getNamespace($namespaceSuffix, $id);
59+
$tags[0]['namespace'] = $this->getNamespace($seed, $id);
6060
}
6161
if (isset($tags[0]['clearer'])) {
6262
$clearer = strtolower($tags[0]['clearer']);
@@ -88,9 +88,9 @@ public function process(ContainerBuilder $container)
8888
}
8989
}
9090

91-
private function getNamespace($namespaceSuffix, $id)
91+
private function getNamespace($seed, $id)
9292
{
93-
return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$namespaceSuffix, true))), 0, 10);
93+
return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$seed, true))), 0, 10);
9494
}
9595

9696
/**

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/CachePoolClearerPassTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class CachePoolClearerPassTest extends \PHPUnit_Framework_TestCase
2424
public function testPoolRefsAreWeak()
2525
{
2626
$container = new ContainerBuilder();
27+
$container->setParameter('kernel.debug', false);
28+
$container->setParameter('kernel.name', 'app');
29+
$container->setParameter('kernel.environment', 'prod');
2730

2831
$publicPool = new Definition();
2932
$publicPool->addArgument('namespace');

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/CachePoolPassTest.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ protected function setUp()
2929
public function testNamespaceArgumentIsReplaced()
3030
{
3131
$container = new ContainerBuilder();
32+
$container->setParameter('kernel.debug', false);
33+
$container->setParameter('kernel.name', 'app');
34+
$container->setParameter('kernel.environment', 'prod');
3235
$adapter = new Definition();
3336
$adapter->setAbstract(true);
3437
$adapter->addTag('cache.pool');
@@ -41,12 +44,15 @@ public function testNamespaceArgumentIsReplaced()
4144

4245
$this->cachePoolPass->process($container);
4346

44-
$this->assertSame('kRFqMp5odS', $cachePool->getArgument(0));
47+
$this->assertSame('W7MPTrP-Y3', $cachePool->getArgument(0));
4548
}
4649

4750
public function testArgsAreReplaced()
4851
{
4952
$container = new ContainerBuilder();
53+
$container->setParameter('kernel.debug', false);
54+
$container->setParameter('kernel.name', 'app');
55+
$container->setParameter('kernel.environment', 'prod');
5056
$cachePool = new Definition();
5157
$cachePool->addTag('cache.pool', array(
5258
'provider' => 'foobar',
@@ -61,7 +67,7 @@ public function testArgsAreReplaced()
6167

6268
$this->assertInstanceOf(Reference::class, $cachePool->getArgument(0));
6369
$this->assertSame('foobar', (string) $cachePool->getArgument(0));
64-
$this->assertSame('kRFqMp5odS', $cachePool->getArgument(1));
70+
$this->assertSame('W7MPTrP-Y3', $cachePool->getArgument(1));
6571
$this->assertSame(3, $cachePool->getArgument(2));
6672
}
6773

@@ -72,6 +78,9 @@ public function testArgsAreReplaced()
7278
public function testThrowsExceptionWhenCachePoolTagHasUnknownAttributes()
7379
{
7480
$container = new ContainerBuilder();
81+
$container->setParameter('kernel.debug', false);
82+
$container->setParameter('kernel.name', 'app');
83+
$container->setParameter('kernel.environment', 'prod');
7584
$adapter = new Definition();
7685
$adapter->setAbstract(true);
7786
$adapter->addTag('cache.pool');

0 commit comments

Comments
 (0)