* @param bool $useDB
* @param int $expiry Lifetime for cache. @see $mExpiry.
*/
- function __construct( $memCached, $useDB, $expiry ) {
+ function __construct( BagOStuff $memCached, $useDB, $expiry ) {
global $wgUseLocalMessageCache;
- if ( !$memCached ) {
- $memCached = wfGetCache( CACHE_NONE );
- }
-
$this->mMemc = $memCached;
$this->mDisable = !$useDB;
$this->mExpiry = $expiry;
if ( $text === false ) {
// Failed to fetch data; possible ES errors?
// Store a marker to fetch on-demand as a workaround...
+ // TODO Use a differnt marker
$entry = '!TOO BIG';
wfDebugLog(
'MessageCache',
$cache['VERSION'] = MSG_CACHE_VERSION;
ksort( $cache );
+
+ # Hash for validating local cache (APC). No need to take into account
+ # messages larger than $wgMaxMsgCacheEntrySize, since those are only
+ # stored and fetched from memcache.
$cache['HASH'] = md5( serialize( $cache ) );
$cache['EXPIRY'] = wfTimestamp( TS_MW, time() + $this->mExpiry );
}
ScopedCallback::consume( $scopedLock );
- // Relay the purge to APC and other DCs
+ // Relay the purge. Touching this check key expires cache contents
+ // and local cache (APC) validation hash across all datacenters.
$this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
// Also delete cached sidebar... just in case it is affected