From 3b8dbbd502b68d373b74481ed2bead7413050c83 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 6 Apr 2012 10:59:43 -0700 Subject: [PATCH] [LanguageConverter] Added some cache code based on the problems in r97512. * Added $wgLanguageConverterCacheType global to control LC cache type. We can use it to enable direct apc use for language converter (to match the live hack). Change-Id: I04616469aa53ccd1a5ce51af50a18acca5bb8bc4 --- includes/DefaultSettings.php | 9 ++++++- languages/LanguageConverter.php | 42 ++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 8402d698d3..0c19810977 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1636,6 +1636,13 @@ $wgMemCachedTimeout = 100000; */ $wgUseLocalMessageCache = false; +/** + * Make LanguageConverter use a different cache type. + * Possible values are false (none), 'main' ($wgMemc), and 'apc'. + * @since 1.20 + */ +$wgLanguageConverterCacheType = 'main'; + /** * Defines format of local cache * true - Serialized object @@ -4222,7 +4229,7 @@ $wgParserTestFiles = array( * ); */ $wgParserTestRemote = false; - + /** * Allow running of javascript test suites via [[Special:JavaScriptTest]] (such as QUnit). */ diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 2b9cc8e7b6..3997d7f270 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -813,13 +813,13 @@ class LanguageConverter { if ( $this->mTablesLoaded ) { return; } - global $wgMemc; + wfProfileIn( __METHOD__ ); $this->mTablesLoaded = true; $this->mTables = false; if ( $fromCache ) { wfProfileIn( __METHOD__ . '-cache' ); - $this->mTables = $wgMemc->get( $this->mCacheKey ); + $this->mTables = $this->cacheFetch( $this->mCacheKey ); wfProfileOut( __METHOD__ . '-cache' ); } if ( !$this->mTables @@ -837,12 +837,48 @@ class LanguageConverter { $this->postLoadTables(); $this->mTables[self::CACHE_VERSION_KEY] = true; - $wgMemc->set( $this->mCacheKey, $this->mTables, 43200 ); + $this->cacheStore( $this->mCacheKey, $this->mTables, 43200 ); wfProfileOut( __METHOD__ . '-recache' ); } wfProfileOut( __METHOD__ ); } + /** + * Read an object from the cache + * @param $key string + * @return mixed + */ + protected function cacheFetch( $key ) { + global $wgLanguageConverterCacheType, $wgMemc; + + if ( $wgLanguageConverterCacheType === 'apc' ) { + return apc_fetch( $key ); + } elseif ( $wgLanguageConverterCacheType === 'main' ) { + return $wgMemc->get( $key ); + } + + return false; // disabled + } + + /** + * Store an object into the cache + * @param $key string + * @param $val mixed + * @param $ttl integer Seconds to live + * @return bool Success + */ + protected function cacheStore( $key, $val, $ttl ) { + global $wgLanguageConverterCacheType, $wgMemc; + + if ( $wgLanguageConverterCacheType === 'apc' ) { + return apc_store( $key, $val, $ttl ); + } elseif ( $wgLanguageConverterCacheType === 'main' ) { + return $wgMemc->set( $key, $val, $ttl ); + } + + return true; // disabled + } + /** * Hook for post processing after conversion tables are loaded. */ -- 2.20.1