Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/State/State.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 4c8ae668cc8c |
children |
line wrap: on
line diff
--- a/core/lib/Drupal/Core/State/State.php Tue Jul 10 15:07:59 2018 +0100 +++ b/core/lib/Drupal/Core/State/State.php Thu Feb 28 13:21:36 2019 +0000 @@ -2,15 +2,12 @@ namespace Drupal\Core\State; -use Drupal\Core\Cache\CacheBackendInterface; -use Drupal\Core\Cache\CacheCollector; use Drupal\Core\KeyValueStore\KeyValueFactoryInterface; -use Drupal\Core\Lock\LockBackendInterface; /** * Provides the state system using a key value store. */ -class State extends CacheCollector implements StateInterface { +class State implements StateInterface { /** * The key value store to use. @@ -20,17 +17,19 @@ protected $keyValueStore; /** + * Static state cache. + * + * @var array + */ + protected $cache = []; + + /** * Constructs a State object. * * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory * The key value store to use. - * @param \Drupal\Core\Cache\CacheBackendInterface $cache - * The cache backend. - * @param \Drupal\Core\Lock\LockBackendInterface $lock - * The lock backend. */ - public function __construct(KeyValueFactoryInterface $key_value_factory, CacheBackendInterface $cache, LockBackendInterface $lock) { - parent::__construct('state', $cache, $lock); + public function __construct(KeyValueFactoryInterface $key_value_factory) { $this->keyValueStore = $key_value_factory->get('state'); } @@ -38,18 +37,8 @@ * {@inheritdoc} */ public function get($key, $default = NULL) { - $value = parent::get($key); - return $value !== NULL ? $value : $default; - } - - /** - * {@inheritdoc} - */ - protected function resolveCacheMiss($key) { - $value = $this->keyValueStore->get($key); - $this->storage[$key] = $value; - $this->persist($key); - return $value; + $values = $this->getMultiple([$key]); + return isset($values[$key]) ? $values[$key] : $default; } /** @@ -57,9 +46,33 @@ */ public function getMultiple(array $keys) { $values = []; + $load = []; foreach ($keys as $key) { - $values[$key] = $this->get($key); + // Check if we have a value in the cache. + if (isset($this->cache[$key])) { + $values[$key] = $this->cache[$key]; + } + // Load the value if we don't have an explicit NULL value. + elseif (!array_key_exists($key, $this->cache)) { + $load[] = $key; + } } + + if ($load) { + $loaded_values = $this->keyValueStore->getMultiple($load); + foreach ($load as $key) { + // If we find a value, even one that is NULL, add it to the cache and + // return it. + if (isset($loaded_values[$key]) || array_key_exists($key, $loaded_values)) { + $values[$key] = $loaded_values[$key]; + $this->cache[$key] = $loaded_values[$key]; + } + else { + $this->cache[$key] = NULL; + } + } + } + return $values; } @@ -67,7 +80,7 @@ * {@inheritdoc} */ public function set($key, $value) { - parent::set($key, $value); + $this->cache[$key] = $value; $this->keyValueStore->set($key, $value); } @@ -76,7 +89,7 @@ */ public function setMultiple(array $data) { foreach ($data as $key => $value) { - parent::set($key, $value); + $this->cache[$key] = $value; } $this->keyValueStore->setMultiple($data); } @@ -85,8 +98,7 @@ * {@inheritdoc} */ public function delete($key) { - parent::delete($key); - $this->keyValueStore->delete($key); + $this->deleteMultiple([$key]); } /** @@ -94,7 +106,7 @@ */ public function deleteMultiple(array $keys) { foreach ($keys as $key) { - parent::delete($key); + unset($this->cache[$key]); } $this->keyValueStore->deleteMultiple($keys); } @@ -103,7 +115,7 @@ * {@inheritdoc} */ public function resetCache() { - $this->clear(); + $this->cache = []; } }