MDL-47832 cache: removed data source aggregate functionality
authorSam Hemelryk <sam@moodle.com>
Wed, 19 Nov 2014 22:02:52 +0000 (11:02 +1300)
committerSam Hemelryk <sam@moodle.com>
Wed, 19 Nov 2014 22:02:56 +0000 (11:02 +1300)
Cache data source aggregate functionality was found to be broken
and unused, because of this the decision was made to remove it
rather than fix it.
As it was broken we did not follow typical deprecation methods and
instead the code was removed outright with only structure
remaining and left deprecated.

cache/classes/definition.php
cache/classes/factory.php
cache/classes/helper.php
cache/classes/loaders.php
cache/disabledlib.php
cache/upgrade.txt

index 6b4f47b..a5fd64a 100644 (file)
@@ -242,7 +242,8 @@ class cache_definition {
     protected $datasourcefile = null;
 
     /**
-     * The data source class aggregate to use. This is a super advanced setting.
+     * Deprecated - this is completely unused.
+     * @deprecated since 2.9
      * @var string
      */
     protected $datasourceaggregate = null;
@@ -324,11 +325,11 @@ class cache_definition {
      *
      * @param string $id
      * @param array $definition
-     * @param string $datasourceaggregate
+     * @param string $unused Used to be datasourceaggregate but that was removed and this is now unused.
      * @return cache_definition
      * @throws coding_exception
      */
-    public static function load($id, array $definition, $datasourceaggregate = null) {
+    public static function load($id, array $definition, $unused = null) {
         global $CFG;
 
         if (!array_key_exists('mode', $definition)) {
@@ -520,7 +521,6 @@ class cache_definition {
         $cachedefinition->overrideclassfile = $overrideclassfile;
         $cachedefinition->datasource = $datasource;
         $cachedefinition->datasourcefile = $datasourcefile;
-        $cachedefinition->datasourceaggregate = $datasourceaggregate;
         $cachedefinition->staticacceleration = $staticacceleration;
         $cachedefinition->staticaccelerationsize = $staticaccelerationsize;
         $cachedefinition->ttl = $ttl;
index 6cf975f..b34f6df 100644 (file)
@@ -186,17 +186,17 @@ class cache_factory {
      * @param string $component
      * @param string $area
      * @param array $identifiers
-     * @param string $aggregate
+     * @param string $unused Used to be data source aggregate however that was removed and this is now unused.
      * @return cache_application|cache_session|cache_request
      */
-    public function create_cache_from_definition($component, $area, array $identifiers = array(), $aggregate = null) {
+    public function create_cache_from_definition($component, $area, array $identifiers = array(), $unused = null) {
         $definitionname = $component.'/'.$area;
         if (isset($this->cachesfromdefinitions[$definitionname])) {
             $cache = $this->cachesfromdefinitions[$definitionname];
             $cache->set_identifiers($identifiers);
             return $cache;
         }
-        $definition = $this->create_definition($component, $area, $aggregate);
+        $definition = $this->create_definition($component, $area);
         $definition->set_identifiers($identifiers);
         $cache = $this->create_cache($definition, $identifiers);
         // Loaders are always held onto to speed up subsequent requests.
@@ -392,14 +392,13 @@ class cache_factory {
      * Creates a definition instance or returns the existing one if it has already been created.
      * @param string $component
      * @param string $area
-     * @param string $aggregate
+     * @param string $unused This used to be data source aggregate - however that functionality has been removed and
+     *        this argument is now unused.
      * @return cache_definition
+     * @throws coding_exception If the definition cannot be found.
      */
-    public function create_definition($component, $area, $aggregate = null) {
+    public function create_definition($component, $area, $unused = null) {
         $id = $component.'/'.$area;
-        if ($aggregate) {
-            $id .= '::'.$aggregate;
-        }
         if (!isset($this->definitions[$id])) {
             // This is the first time this definition has been requested.
             if ($this->is_initialising()) {
@@ -421,13 +420,6 @@ class cache_factory {
                         // To serve this purpose and avoid errors we are going to make use of an ad-hoc cache rather than
                         // search for the definition which would possibly cause an infitite loop trying to initialise the cache.
                         $definition = cache_definition::load_adhoc(cache_store::MODE_REQUEST, $component, $area);
-                        if ($aggregate !== null) {
-                            // If you get here you deserve a warning. We have to use an ad-hoc cache here, so we can't find the definition and therefor
-                            // can't find any information about the datasource or any of its aggregated.
-                            // Best of luck.
-                            debugging('An unknown cache was requested during development with an aggregate that could not be loaded. Ad-hoc cache used instead.', DEBUG_DEVELOPER);
-                            $aggregate = null;
-                        }
                     } else {
                         // Either a typo of the developer has just created the definition and is using it for the first time.
                         $this->reset();
@@ -440,10 +432,10 @@ class cache_factory {
                             debugging('Cache definitions reparsed causing cache reset in order to locate definition.
                                 You should bump the version number to ensure definitions are reprocessed.', DEBUG_DEVELOPER);
                         }
-                        $definition = cache_definition::load($id, $definition, $aggregate);
+                        $definition = cache_definition::load($id, $definition);
                     }
                 } else {
-                    $definition = cache_definition::load($id, $definition, $aggregate);
+                    $definition = cache_definition::load($id, $definition);
                 }
             }
             $this->definitions[$id] = $definition;
index dd150b7..4f0586b 100644 (file)
@@ -280,13 +280,6 @@ class cache_helper {
     /**
      * Purges the cache for a specific definition.
      *
-     * If you need to purge a definition that requires identifiers or an aggregate and you don't
-     * know the details of those please use cache_helper::purge_stores_used_by_definition instead.
-     * It is a more aggressive purge and will purge all data within the store, not just the data
-     * belonging to the given definition.
-     *
-     * @todo MDL-36660: Change the signature: $aggregate must be added.
-     *
      * @param string $component
      * @param string $area
      * @param array $identifiers
@@ -298,7 +291,6 @@ class cache_helper {
         // Initialise, in case of a store.
         if ($cache instanceof cache_store) {
             $factory = cache_factory::instance();
-            // TODO MDL-36660: Providing $aggregate is required for purging purposes: $definition->get_id()
             $definition = $factory->create_definition($component, $area, null);
             $definition->set_identifiers($identifiers);
             $cache->initialise($definition);
index ae2ba70..6cd588a 100644 (file)
@@ -166,12 +166,12 @@ class cache implements cache_loader {
      * @param string $component The component for the definition
      * @param string $area The area for the definition
      * @param array $identifiers Any additional identifiers that should be provided to the definition.
-     * @param string $aggregate Super advanced feature. More docs later.
+     * @param string $unused Used to be datasourceaggregate but that was removed and this is now unused.
      * @return cache_application|cache_session|cache_store
      */
-    public static function make($component, $area, array $identifiers = array(), $aggregate = null) {
+    public static function make($component, $area, array $identifiers = array(), $unused = null) {
         $factory = cache_factory::instance();
-        return $factory->create_cache_from_definition($component, $area, $identifiers, $aggregate);
+        return $factory->create_cache_from_definition($component, $area, $identifiers);
     }
 
     /**
index 26c938b..fae2f35 100644 (file)
@@ -184,10 +184,10 @@ class cache_factory_disabled extends cache_factory {
      *
      * @param string $component
      * @param string $area
-     * @param string $aggregate Unused.
+     * @param string $unused Used to be datasourceaggregate but that was removed and this is now unused.
      * @return cache_definition
      */
-    public function create_definition($component, $area, $aggregate = null) {
+    public function create_definition($component, $area, $unused = null) {
         return cache_definition::load_adhoc(cache_store::MODE_REQUEST, $component, $area);
     }
 
@@ -208,11 +208,11 @@ class cache_factory_disabled extends cache_factory {
      * @param string $component
      * @param string $area
      * @param array $identifiers
-     * @param string $aggregate
+     * @param string $unused Used to be datasourceaggregate but that was removed and this is now unused.
      * @return cache_application|cache_session|cache_request
      */
-    public function create_cache_from_definition($component, $area, array $identifiers = array(), $aggregate = null) {
-        $definition = $this->create_definition($component, $area, $aggregate);
+    public function create_cache_from_definition($component, $area, array $identifiers = array(), $unused = null) {
+        $definition = $this->create_definition($component, $area);
         $cache = $this->create_cache($definition, $identifiers);
         return $cache;
     }
index 75ce1e6..ac36f1f 100644 (file)
@@ -1,6 +1,16 @@
 This files describes API changes in /cache/stores/* - cache store plugins.
 Information provided here is intended especially for developers.
 
+=== 2.9 ===
+* Cache data source aggregation functionality has been removed. This functionality was found to be broken and unused.
+  It was decided that rather than fixing it it should be removed.
+  As well as the processing code being removed the following API changes have been made.
+  The following changes have come about because of it:
+   - cache_definition::$datasourceaggregate is deprecated an unused.
+   - cache_definition::load Argument 3 (final arg) is now unused.
+   - cache_factory::create_cache_from_definition Argument 4 (final arg) is now unused.
+   - cache::make Argument 4 (final arg) is now unused.
+
 === 2.7 ===
 * cache_store::is_ready is no longer abstract, calling cache_store::are_requirements_met by default.