Merge pull request #10506 from creative-commoners/pulls/5/symfony-cache-fix

FIX Pass PSR6 caches to ChainAdapter
This commit is contained in:
Guy Sartorelli 2022-09-13 17:28:39 +12:00 committed by GitHub
commit 5da5555ce3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -72,17 +72,26 @@ class DefaultCacheFactory implements CacheFactory
} }
// Create filesystem cache // Create filesystem cache
$fs = $this->createCache(FilesystemAdapter::class, [$namespace, $defaultLifetime, $directory], $useInjector);
if (!$apcuSupported) { if (!$apcuSupported) {
return $fs; return $this->createCache(
FilesystemAdapter::class,
[$namespace, $defaultLifetime, $directory],
$useInjector
);
} }
// Chain this cache with ApcuCache // Create PSR6 filesystem + apcu cache's wrapped in a PSR6 chain adapter, then wrap in a PSR16 class
$fs = $this->instantiateCache(
FilesystemAdapter::class,
[$namespace, $defaultLifetime, $directory],
$useInjector
);
// Note that the cache lifetime will be shorter there by default, to ensure there's enough // Note that the cache lifetime will be shorter there by default, to ensure there's enough
// resources for "hot cache" items in APCu as a resource constrained in memory cache. // resources for "hot cache" items in APCu as a resource constrained in memory cache.
$apcuNamespace = $namespace . ($namespace ? '_' : '') . md5(BASE_PATH); $apcuNamespace = $namespace . ($namespace ? '_' : '') . md5(BASE_PATH);
$lifetime = (int) $defaultLifetime / 5; $lifetime = (int) $defaultLifetime / 5;
$apcu = $this->createCache(ApcuAdapter::class, [$apcuNamespace, $lifetime, $version], $useInjector); $apcu = $this->instantiateCache(ApcuAdapter::class, [$apcuNamespace, $lifetime, $version], $useInjector);
return $this->createCache(ChainAdapter::class, [[$apcu, $fs]], $useInjector); return $this->createCache(ChainAdapter::class, [[$apcu, $fs]], $useInjector);
} }
@ -129,8 +138,11 @@ class DefaultCacheFactory implements CacheFactory
* - https://symfony.com/doc/current/components/cache/psr6_psr16_adapters.html#using-a-psr-6-cache-object-as-a-psr-16-cache * - https://symfony.com/doc/current/components/cache/psr6_psr16_adapters.html#using-a-psr-6-cache-object-as-a-psr-16-cache
* - https://github.com/php-fig/simple-cache * - https://github.com/php-fig/simple-cache
*/ */
protected function createCache(string $class, array $args, bool $useInjector = true): CacheInterface protected function createCache(
{ string $class,
array $args,
bool $useInjector = true
): CacheInterface {
$loggerAdded = false; $loggerAdded = false;
$classIsPsr6 = is_a($class, CacheItemPoolInterface::class, true); $classIsPsr6 = is_a($class, CacheItemPoolInterface::class, true);
$classIsPsr16 = is_a($class, CacheInterface::class, true); $classIsPsr16 = is_a($class, CacheInterface::class, true);