Skip to content
Browse files

MDL-25290 conversion: Converted string cache to MUC

  • Loading branch information...
1 parent 7e8ae12 commit d90bbe6fceab1a6ed57f86bfe5ad18c22e78b63c Sam Hemelryk committed Aug 14, 2012
Showing with 25 additions and 39 deletions.
  1. +25 −39 lib/moodlelib.php
View
64 lib/moodlelib.php
@@ -6302,12 +6302,6 @@ function get_string_manager($forcereload=false) {
if ($singleton === null) {
if (empty($CFG->early_install_lang)) {
- if (empty($CFG->langcacheroot)) {
- $langcacheroot = $CFG->cachedir . '/lang';
- } else {
- $langcacheroot = $CFG->langcacheroot;
- }
-
if (empty($CFG->langlist)) {
$translist = array();
} else {
@@ -6320,7 +6314,7 @@ function get_string_manager($forcereload=false) {
$langmenucache = $CFG->langmenucachefile;
}
- $singleton = new core_string_manager($CFG->langotherroot, $CFG->langlocalroot, $langcacheroot,
+ $singleton = new core_string_manager($CFG->langotherroot, $CFG->langlocalroot,
!empty($CFG->langstringcache), $translist, $langmenucache);
} else {
@@ -6451,18 +6445,16 @@ class core_string_manager implements string_manager {
protected $otherroot;
/** @var string location of all lang pack local modifications */
protected $localroot;
- /** @var string location of on-disk cache of merged strings */
- protected $cacheroot;
- /** @var array lang string cache - it will be optimised more later */
- protected $cache = array();
+ /** @var cache lang string cache - it will be optimised more later */
+ protected $cache;
/** @var int get_string() counter */
protected $countgetstring = 0;
/** @var int in-memory cache hits counter */
protected $countmemcache = 0;
/** @var int on-disk cache hits counter */
protected $countdiskcache = 0;
/** @var bool use disk cache */
- protected $usediskcache;
+ protected $usecache;
/** @var array limit list of translations */
protected $translist;
/** @var string location of a file that caches the list of available translations */
@@ -6473,18 +6465,24 @@ class core_string_manager implements string_manager {
*
* @param string $otherroot location of downlaoded lang packs - usually $CFG->dataroot/lang
* @param string $localroot usually the same as $otherroot
- * @param string $cacheroot usually lang dir in cache folder
- * @param bool $usediskcache use disk cache
+ * @param bool $usecache use disk cache
* @param array $translist limit list of visible translations
* @param string $menucache the location of a file that caches the list of available translations
*/
- public function __construct($otherroot, $localroot, $cacheroot, $usediskcache, $translist, $menucache) {
+ public function __construct($otherroot, $localroot, $usecache, $translist, $menucache) {
$this->otherroot = $otherroot;
$this->localroot = $localroot;
- $this->cacheroot = $cacheroot;
- $this->usediskcache = $usediskcache;
+ $this->usecache = $usecache;
$this->translist = $translist;
$this->menucache = $menucache;
+
+ if ($this->usecache) {
+ // We can use a proper cache, establish the cache using the 'String cache' definition.
+ $this->cache = cache::make('core', 'string');
+ } else {
+ // We only want a cache for the length of the request, create a static cache.
+ $this->cache = cache::make_from_params(cache_store::MODE_REQUEST, 'core', 'string');
+ }
}
/**
@@ -6531,18 +6529,13 @@ public function load_component_strings($component, $lang, $disablecache=false, $
$component = $plugintype . '_' . $pluginname;
}
- if (!$disablecache and !$disablelocal) {
- // try in-memory cache first
- if (isset($this->cache[$lang][$component])) {
- $this->countmemcache++;
- return $this->cache[$lang][$component];
- }
+ $cachekey = $lang.'/'.$component;
- // try on-disk cache then
- if ($this->usediskcache and file_exists($this->cacheroot . "/$lang/$component.php")) {
+ if (!$disablecache and !$disablelocal) {
+ $string = $this->cache->get($cachekey);
+ if ($string) {
$this->countdiskcache++;
- include($this->cacheroot . "/$lang/$component.php");
- return $this->cache[$lang][$component];
+ return $string;
}
}
@@ -6625,11 +6618,7 @@ public function load_component_strings($component, $lang, $disablecache=false, $
if (!$disablelocal) {
// now we have a list of strings from all possible sources. put it into both in-memory and on-disk
// caches so we do not need to do all this merging and dependencies resolving again
- $this->cache[$lang][$component] = $string;
- if ($this->usediskcache) {
- check_dir_exists("$this->cacheroot/$lang");
- file_put_contents("$this->cacheroot/$lang/$component.php", "<?php \$this->cache['$lang']['$component'] = ".var_export($string, true).";");
- }
+ $this->cache->set($cachekey, $string);
}
return $string;
}
@@ -6708,12 +6697,12 @@ public function get_string($identifier, $component = '', $a = NULL, $lang = NULL
// parentlanguage is a special string, undefined means use English if not defined
return 'en';
}
- if ($this->usediskcache) {
+ if ($this->usecache) {
// maybe the on-disk cache is dirty - let the last attempt be to find the string in original sources,
// do NOT write the results to disk cache because it may end up in race conditions see MDL-31904
- $this->usediskcache = false;
+ $this->usecache = false;
$string = $this->load_component_strings($component, $lang, true);
- $this->usediskcache = true;
+ $this->usecache = true;
}
if (!isset($string[$identifier])) {
// the string is still missing - should be fixed by developer
@@ -7005,10 +6994,7 @@ public function reset_caches($phpunitreset = false) {
require_once("$CFG->libdir/filelib.php");
// clear the on-disk disk with aggregated string files
- fulldelete($this->cacheroot);
-
- // clear the in-memory cache of loaded strings
- $this->cache = array();
+ $this->cache->purge();
if (!$phpunitreset) {
// Increment the revision counter.

0 comments on commit d90bbe6

Please sign in to comment.
Something went wrong with that request. Please try again.