diff --git a/core/lib/Drupal/Core/Cache/DatabaseTag.php b/core/lib/Drupal/Core/Cache/DatabaseTag.php index 2f3fef3..a7aa41b 100644 --- a/core/lib/Drupal/Core/Cache/DatabaseTag.php +++ b/core/lib/Drupal/Core/Cache/DatabaseTag.php @@ -22,13 +22,6 @@ class DatabaseTag extends CacheTagBase { protected $connection; /** - * A static cache of tags. - * - * @var array - */ - protected $tagCache = array(); - - /** * Constructs a DatabaseTag object. * * @param \Drupal\Core\Database\Connection $connection @@ -61,8 +54,9 @@ public function invalidateTags(array $tags) { * {@inheritdoc} */ public function deleteTags(array $tags) { + $tagCache = &drupal_static('Drupal\Core\Cache\DatabaseTag::tagCache', array()); foreach ($this->flattenTags($tags) as $tag) { - unset($this->tagCache[$tag]); + unset($tagCache[$tag]); try { $this->connection->merge('cache_tags') ->insertFields(array('deletions' => 1)) @@ -88,23 +82,25 @@ public function deleteTags(array $tags) { * @see Drupal\Core\Cache\DatabaseBackend::flattenTags() */ public function checksumTags($flat_tags) { + $tagCache = &drupal_static('Drupal\Core\Cache\DatabaseTag::tagCache', array()); + $checksum = array( 'invalidations' => 0, 'deletions' => 0, ); - $query_tags = array_diff($flat_tags, array_keys($this->tagCache)); + $query_tags = array_diff($flat_tags, array_keys($tagCache)); if ($query_tags) { $db_tags = $this->connection->query('SELECT tag, invalidations, deletions FROM {cache_tags} WHERE tag IN (:tags)', array(':tags' => $query_tags))->fetchAllAssoc('tag', \PDO::FETCH_ASSOC); - $this->tagCache += $db_tags; + $tagCache += $db_tags; // Fill static cache with empty objects for tags not found in the database. - $this->tagCache += array_fill_keys(array_diff($query_tags, array_keys($db_tags)), $checksum); + $tagCache += array_fill_keys(array_diff($query_tags, array_keys($db_tags)), $checksum); } foreach ($flat_tags as $tag) { - $checksum['invalidations'] += $this->tagCache[$tag]['invalidations']; - $checksum['deletions'] += $this->tagCache[$tag]['deletions']; + $checksum['invalidations'] += $tagCache[$tag]['invalidations']; + $checksum['deletions'] += $tagCache[$tag]['deletions']; } return $checksum; diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php index 06b6ed4..f18602c 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php @@ -148,7 +148,7 @@ function testStringTranslation() { // Reset the tag cache on the tester side in order to pick up the call to // cache()->deleteTags() on the tested side. - drupal_static_reset('Drupal\Core\Cache\CacheBackendInterface::tagCache'); + drupal_static_reset('Drupal\Core\Cache\DatabaseTag::tagCache'); $this->assertTrue($name != $translation && t($name, array(), array('langcode' => $langcode)) == $translation, 't() works for non-English.'); // Refresh the locale() cache to get fresh data from t() below. We are in diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php index a4c7b27..37c4af4 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php @@ -1006,7 +1006,7 @@ protected function refreshVariables() { cache('bootstrap')->delete('variables'); $conf = variable_initialize(); // Clear the tag cache. - drupal_static_reset('Drupal\Core\Cache\CacheBackendInterface::tagCache'); + drupal_static_reset('Drupal\Core\Cache\DatabaseTag::tagCache'); \Drupal::service('config.factory')->reset(); }