'IndexPager' => 'includes/Pager.php',
'Interwiki' => 'includes/interwiki/Interwiki.php',
'IP' => 'includes/IP.php',
+ 'LCStore_Accel' => 'includes/LocalisationCache.php',
'LCStore_CDB' => 'includes/LocalisationCache.php',
'LCStore_DB' => 'includes/LocalisationCache.php',
'LCStore_Null' => 'includes/LocalisationCache.php',
case 'db':
$storeClass = 'LCStore_DB';
break;
+ case 'accel':
case 'detect':
- $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
+ if ( !( wfGetCache( CACHE_ACCEL ) instanceof FakeMemCachedClient ) ) {
+ $storeClass = 'LCStore_Accel';
+ } else {
+ $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
+ }
break;
default:
throw new MWException(
}
$deps = $this->store->get( $code, 'deps' );
- if ( $deps === null ) {
+ $keys = $this->store->get( $code, 'list', 'messages' );
+ // 'list:messages' sometimes expires separately of 'deps' in LCStore_Accel
+ if ( $deps === null || $keys === null ) {
wfDebug( __METHOD__."($code): cache missing, need to make one\n" );
return true;
}
function set( $key, $value );
}
+/**
+ * LCStore implementation which uses PHP accelerator to store data.
+ * This will work if one of XCache, eAccelerator, or APC cacher is configured.
+ * (See ObjectCache.php)
+ */
+class LCStore_Accel implements LCStore {
+ var $currentLang;
+ var $keys;
+
+ public function __construct() {
+ $this->cache = wfGetCache( CACHE_ACCEL );
+ }
+
+ public function get( $code, $key ) {
+ $k = wfMemcKey( 'l10n', $code, 'k', $key );
+ return $this->cache->get( $k );
+ }
+
+ public function startWrite( $code ) {
+ $k = wfMemcKey( 'l10n', $code, 'l' );
+ $keys = $this->cache->get( $k );
+ if ( $keys ) {
+ foreach ( $keys as $k ) {
+ $this->cache->delete( $k );
+ }
+ }
+ $this->currentLang = $code;
+ $this->keys = array();
+ }
+
+ public function finishWrite() {
+ if ( $this->currentLang ) {
+ $k = wfMemcKey( 'l10n', $this->currentLang, 'l' );
+ $this->cache->set( $k, array_keys( $this->keys ) );
+ }
+ $this->currentLang = null;
+ $this->keys = array();
+ }
+
+ public function set( $key, $value ) {
+ if ( $this->currentLang ) {
+ $k = wfMemcKey( 'l10n', $this->currentLang, 'k', $key );
+ $this->keys[$k] = true;
+ $this->cache->set( $k, $value );
+ }
+ }
+}
+
/**
* LCStore implementation which uses the standard DB functions to store data.
* This will work on any MediaWiki installation.
$this->unload( $code );
}
}
-}
+}
\ No newline at end of file