diff --git a/core/core.services.yml b/core/core.services.yml index 385ead7..6e8b6ea 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -208,31 +208,31 @@ services: tags: - { name: cache.bin } factory: cache_factory:get - arguments: [default, ['override_permanent_ttl', '%cache.configuration.override_permanent_ttl%']] + arguments: [default, ['override_permanent_ttl': '%cache.configuration.override_permanent_ttl%']] cache.entity: class: Drupal\Core\Cache\CacheBackendInterface tags: - { name: cache.bin } factory: cache_factory:get - arguments: [entity, ['override_permanent_ttl', '%cache.configuration.override_permanent_ttl%']] + arguments: [entity, ['override_permanent_ttl': '%cache.configuration.override_permanent_ttl%']] cache.menu: class: Drupal\Core\Cache\CacheBackendInterface tags: - { name: cache.bin } factory: cache_factory:get - arguments: [menu, ['override_permanent_ttl', '%cache.configuration.override_permanent_ttl%']] + arguments: [menu, ['override_permanent_ttl': '%cache.configuration.override_permanent_ttl%']] cache.render: class: Drupal\Core\Cache\CacheBackendInterface tags: - { name: cache.bin } factory: cache_factory:get - arguments: [render, ['override_permanent_ttl', '%cache.configuration.override_permanent_ttl%']] + arguments: [render, ['override_permanent_ttl': '%cache.configuration.override_permanent_ttl%']] cache.data: class: Drupal\Core\Cache\CacheBackendInterface tags: - { name: cache.bin } factory: cache_factory:get - arguments: [data, ['override_permanent_ttl', '%cache.configuration.override_permanent_ttl%']] + arguments: [data, ['override_permanent_ttl': '%cache.configuration.override_permanent_ttl%']] cache.discovery: class: Drupal\Core\Cache\CacheBackendInterface tags: diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php index 998172d..f6b3801 100644 --- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php +++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php @@ -24,6 +24,8 @@ class DatabaseBackend implements CacheBackendInterface, ConfigurablePermanentTtl /** * The 'jitter' multiplier, applied to the permanent TTL to avoid stampedes. * + * @see \Drupal\Core\Cache\ConfigurablePermanentTtlInterface + * * @var float */ const JITTER_MULTIPLIER = 1.5; @@ -50,6 +52,8 @@ class DatabaseBackend implements CacheBackendInterface, ConfigurablePermanentTtl /** * The permanent TTL. + * + * @var int */ protected $permanentTtl = CacheBackendInterface::CACHE_PERMANENT; @@ -266,6 +270,10 @@ protected function doSetMultiple(array $items) { */ protected function calculatePermanentExpire() { $minimum = $this->permanentTtl; + // Take the permanent TTL and apply jitter, so that items set immediately + // after a cache clear do not all expire at the same time. Use mt_rand() + // since rand() has limitations with large numbers on certain platforms such + // as Windows. return mt_rand($minimum, $minimum * self::JITTER_MULTIPLIER) + REQUEST_TIME; } diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php b/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php index a4f6138..d599634 100644 --- a/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php +++ b/core/lib/Drupal/Core/Cache/DatabaseBackendFactory.php @@ -44,7 +44,7 @@ function __construct(Connection $connection, CacheTagsChecksumInterface $checksu function get($bin, array $options = []) { $class = new DatabaseBackend($this->connection, $this->checksumProvider, $bin); if (isset($options['override_permanent_ttl'])) { - $class->setOverridePermanentTtl($options['override_permanent_ttl']); + $class->setPermanentTtl($options['override_permanent_ttl']); } return $class; }