From 07658be7b4bb13cacd3aa17b9245d2a59d2cfd3d Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Thu, 12 Dec 2013 10:51:33 +1300 Subject: [PATCH] MDL-43349 cache: init now checks store requirements are met --- cache/classes/factory.php | 10 ++++++++-- cache/classes/helper.php | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cache/classes/factory.php b/cache/classes/factory.php index f850e690dd9..954267ea660 100644 --- a/cache/classes/factory.php +++ b/cache/classes/factory.php @@ -236,6 +236,11 @@ class cache_factory { public function create_cache(cache_definition $definition) { $class = $definition->get_cache_class(); $stores = cache_helper::get_stores_suitable_for_definition($definition); + foreach ($stores as $key => $store) { + if (!$store::are_requirements_met()) { + unset($stores[$key]); + } + } if (count($stores) === 0) { // Hmm still no stores, better provide a dummy store to mimic functionality. The dev will be none the wiser. $stores[] = $this->create_dummy_store($definition); @@ -253,7 +258,7 @@ class cache_factory { /** * Creates a store instance given its name and configuration. * - * If the store has already been instantiated then the original objetc will be returned. (reused) + * If the store has already been instantiated then the original object will be returned. (reused) * * @param string $name The name of the store (must be unique remember) * @param array $details @@ -267,8 +272,9 @@ class cache_factory { $store = new $class($details['name'], $details['configuration']); $this->stores[$name] = $store; } + /* @var cache_store $store */ $store = $this->stores[$name]; - if (!$store->is_ready() || !$store->is_supported_mode($definition->get_mode())) { + if (!$store::are_requirements_met() || !$store->is_ready() || !$store->is_supported_mode($definition->get_mode())) { return false; } // We always create a clone of the original store. diff --git a/cache/classes/helper.php b/cache/classes/helper.php index 90076aadbb9..96bedb2bb59 100644 --- a/cache/classes/helper.php +++ b/cache/classes/helper.php @@ -468,8 +468,9 @@ class cache_helper { $class = $store['class']; // Found the store: is it ready? + /* @var cache_store $instance */ $instance = new $class($store['name'], $store['configuration']); - if (!$instance->is_ready()) { + if (!$instance::are_requirements_met() || !$instance->is_ready()) { unset($instance); return false; }