LocalisationCache: Don't instantiate ResourceLoader
[lhc/web/wiklou.git] / includes / ServiceWiring.php
index 1ee17b2..a106157 100644 (file)
@@ -109,8 +109,7 @@ return [
                        $services->getExternalStoreAccess(),
                        $services->getMainWANObjectCache(),
                        new ServiceOptions( BlobStoreFactory::CONSTRUCTOR_OPTIONS,
-                               $services->getMainConfig() ),
-                       $services->getContentLanguage()
+                               $services->getMainConfig() )
                );
        },
 
@@ -262,7 +261,7 @@ return [
 
        'LanguageNameUtils' => function ( MediaWikiServices $services ) : LanguageNameUtils {
                return new LanguageNameUtils( new ServiceOptions(
-                       LanguageNameUtils::$constructorOptions,
+                       LanguageNameUtils::CONSTRUCTOR_OPTIONS,
                        $services->getMainConfig()
                ) );
        },
@@ -320,7 +319,10 @@ return [
                        $store,
                        $logger,
                        [ function () use ( $services ) {
-                               $services->getResourceLoader()->getMessageBlobStore()->clear();
+                               // NOTE: Make sure we use the same cache object that is assigned in the
+                               // constructor of the MessageBlobStore class used by ResourceLoader.
+                               // T231866: Avoid circular dependency via ResourceLoader.
+                               MessageBlobStore::clearGlobalCacheEntry( $services->getMainWANObjectCache() );
                        } ],
                        $services->getLanguageNameUtils()
                );
@@ -359,7 +361,15 @@ return [
                                "Cache type \"$id\" is not present in \$wgObjectCaches." );
                }
 
-               return ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+               $params = $mainConfig->get( 'ObjectCaches' )[$id];
+               $logger = $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' );
+
+               $store = ObjectCache::newFromParams( $params );
+               $logger->debug( 'MainObjectStash using store {class}', [
+                       'class' => get_class( $store )
+               ] );
+
+               return $store;
        },
 
        'MainWANObjectCache' => function ( MediaWikiServices $services ) : WANObjectCache {
@@ -372,14 +382,35 @@ return [
                }
 
                $params = $mainConfig->get( 'WANObjectCaches' )[$id];
+
+               $logger = LoggerFactory::getInstance( $params['loggroup'] ?? 'objectcache' );
+
                $objectCacheId = $params['cacheId'];
                if ( !isset( $mainConfig->get( 'ObjectCaches' )[$objectCacheId] ) ) {
                        throw new UnexpectedValueException(
                                "Cache type \"$objectCacheId\" is not present in \$wgObjectCaches." );
                }
-               $params['store'] = $mainConfig->get( 'ObjectCaches' )[$objectCacheId];
+               $storeParams = $mainConfig->get( 'ObjectCaches' )[$objectCacheId];
+               $store = ObjectCache::newFromParams( $storeParams );
+               $logger->debug( 'MainWANObjectCache using store {class}', [
+                       'class' => get_class( $store )
+               ] );
+
+               $params['logger'] = $logger;
+               $params['cache'] = $store;
+               $params['secret'] = $params['secret'] ?? $mainConfig->get( 'SecretKey' );
+               if ( !$mainConfig->get( 'CommandLineMode' ) ) {
+                       // Send the statsd data post-send on HTTP requests; avoid in CLI mode (T181385)
+                       $params['stats'] = $services->getStatsdDataFactory();
+                       // Let pre-emptive refreshes happen post-send on HTTP requests
+                       $params['asyncHandler'] = [ DeferredUpdates::class, 'addCallableUpdate' ];
+               }
+
+               $class = $params['class'];
+               $instance = new $class( $params );
 
-               return ObjectCache::newWANCacheFromParams( $params );
+               '@phan-var WANObjectCache $instance';
+               return $instance;
        },
 
        'MediaHandlerFactory' => function ( MediaWikiServices $services ) : MediaHandlerFactory {
@@ -390,12 +421,21 @@ return [
 
        'MessageCache' => function ( MediaWikiServices $services ) : MessageCache {
                $mainConfig = $services->getMainConfig();
+               $clusterCache = ObjectCache::getInstance( $mainConfig->get( 'MessageCacheType' ) );
+               $srvCache = $mainConfig->get( 'UseLocalMessageCache' )
+                       ? $services->getLocalServerObjectCache()
+                       : new EmptyBagOStuff();
+
+               // TODO: Inject this into MessageCache.
+               $logger = LoggerFactory::getInstance( 'MessageCache' );
+               $logger->debug( 'MessageCache using store {class}', [
+                       'class' => get_class( $clusterCache )
+               ] );
+
                return new MessageCache(
                        $services->getMainWANObjectCache(),
-                       ObjectCache::getInstance( $mainConfig->get( 'MessageCacheType' ) ),
-                       $mainConfig->get( 'UseLocalMessageCache' )
-                               ? $services->getLocalServerObjectCache()
-                               : new EmptyBagOStuff(),
+                       $clusterCache,
+                       $srvCache,
                        $mainConfig->get( 'UseDatabaseMessages' ),
                        $services->getContentLanguage()
                );