Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 23 |
ChainedFastBackendFactory | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
90 | |
0.00% |
0 / 23 |
__construct | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 12 |
|||
get | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 11 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Cache\ChainedFastBackendFactory. | |
*/ | |
namespace Drupal\Core\Cache; | |
use Drupal\Core\Site\Settings; | |
use Symfony\Component\DependencyInjection\ContainerAwareTrait; | |
/** | |
* Defines the chained fast cache backend factory. | |
*/ | |
class ChainedFastBackendFactory implements CacheFactoryInterface { | |
use ContainerAwareTrait; | |
/** | |
* The service name of the consistent backend factory. | |
* | |
* @var string | |
*/ | |
protected $consistentServiceName; | |
/** | |
* The service name of the fast backend factory. | |
* | |
* @var string | |
*/ | |
protected $fastServiceName; | |
/** | |
* Constructs ChainedFastBackendFactory object. | |
* | |
* @param \Drupal\Core\Site\Settings|NULL $settings | |
* (optional) The settings object. | |
* @param string|NULL $consistent_service_name | |
* (optional) The service name of the consistent backend factory. Defaults | |
* to: | |
* - $settings->get('cache')['default'] (if specified) | |
* - 'cache.backend.database' (if the above isn't specified) | |
* @param string|NULL $fast_service_name | |
* (optional) The service name of the fast backend factory. Defaults to: | |
* - 'cache.backend.apcu' (if the PHP process has APCu enabled) | |
* - NULL (if the PHP process doesn't have APCu enabled) | |
*/ | |
public function __construct(Settings $settings = NULL, $consistent_service_name = NULL, $fast_service_name = NULL) { | |
// Default the consistent backend to the site's default backend. | |
if (!isset($consistent_service_name)) { | |
$cache_settings = isset($settings) ? $settings->get('cache') : array(); | |
$consistent_service_name = isset($cache_settings['default']) ? $cache_settings['default'] : 'cache.backend.database'; | |
} | |
// Default the fast backend to APCu if it's available. | |
if (!isset($fast_service_name) && function_exists('apcu_fetch')) { | |
$fast_service_name = 'cache.backend.apcu'; | |
} | |
$this->consistentServiceName = $consistent_service_name; | |
// Do not use the fast chained backend during installation. In those cases, | |
// we expect many cache invalidations and writes, the fast chained cache | |
// backend performs badly in such a scenario. | |
if (!drupal_installation_attempted()) { | |
$this->fastServiceName = $fast_service_name; | |
} | |
} | |
/** | |
* Instantiates a chained, fast cache backend class for a given cache bin. | |
* | |
* @param string $bin | |
* The cache bin for which a cache backend object should be returned. | |
* | |
* @return \Drupal\Core\Cache\CacheBackendInterface | |
* The cache backend object associated with the specified bin. | |
*/ | |
public function get($bin) { | |
// Use the chained backend only if there is a fast backend available; | |
// otherwise, just return the consistent backend directly. | |
if (isset($this->fastServiceName)) { | |
return new ChainedFastBackend( | |
$this->container->get($this->consistentServiceName)->get($bin), | |
$this->container->get($this->fastServiceName)->get($bin), | |
$bin | |
); | |
} | |
else { | |
return $this->container->get($this->consistentServiceName)->get($bin); | |
} | |
} | |
} |