use MediaWiki\Http\HttpRequestFactory;
use MediaWiki\Interwiki\ClassicInterwikiLookup;
use MediaWiki\Interwiki\InterwikiLookup;
+use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\Logger\LoggerFactory;
$services->getDBLoadBalancerFactory(),
$services->getExternalStoreAccess(),
$services->getMainWANObjectCache(),
- new ServiceOptions( BlobStoreFactory::$constructorOptions,
+ new ServiceOptions( BlobStoreFactory::CONSTRUCTOR_OPTIONS,
$services->getMainConfig() ),
$services->getContentLanguage()
);
'BlockManager' => function ( MediaWikiServices $services ) : BlockManager {
return new BlockManager(
new ServiceOptions(
- BlockManager::$constructorOptions, $services->getMainConfig()
+ BlockManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
),
$services->getPermissionManager(),
LoggerFactory::getInstance( 'BlockManager' )
$lbConf = MWLBFactory::applyDefaultConfig(
$mainConfig->get( 'LBFactoryConf' ),
- new ServiceOptions( MWLBFactory::$applyDefaultConfigOptions, $mainConfig ),
+ new ServiceOptions( MWLBFactory::APPLY_DEFAULT_CONFIG_OPTIONS, $mainConfig ),
$services->getConfiguredReadOnlyMode(),
$services->getLocalServerObjectCache(),
$services->getMainObjectStash(),
);
},
+ 'LanguageNameUtils' => function ( MediaWikiServices $services ) : LanguageNameUtils {
+ return new LanguageNameUtils( new ServiceOptions(
+ LanguageNameUtils::CONSTRUCTOR_OPTIONS,
+ $services->getMainConfig()
+ ) );
+ },
+
'LinkCache' => function ( MediaWikiServices $services ) : LinkCache {
return new LinkCache(
$services->getTitleFormatter(),
);
},
+ 'LocalisationCache' => function ( MediaWikiServices $services ) : LocalisationCache {
+ $conf = $services->getMainConfig()->get( 'LocalisationCacheConf' );
+
+ $logger = LoggerFactory::getInstance( 'localisation' );
+
+ $store = LocalisationCache::getStoreFromConf(
+ $conf, $services->getMainConfig()->get( 'CacheDirectory' ) );
+ $logger->debug( 'LocalisationCache: using store ' . get_class( $store ) );
+
+ return new $conf['class'](
+ new ServiceOptions(
+ LocalisationCache::CONSTRUCTOR_OPTIONS,
+ // Two of the options are stored in $wgLocalisationCacheConf
+ $conf,
+ // In case someone set that config variable and didn't reset all keys, set defaults.
+ [
+ 'forceRecache' => false,
+ 'manualRecache' => false,
+ ],
+ // Some other options come from config itself
+ $services->getMainConfig()
+ ),
+ $store,
+ $logger,
+ [ function () use ( $services ) {
+ $services->getResourceLoader()->getMessageBlobStore()->clear();
+ } ],
+ $services->getLanguageNameUtils()
+ );
+ },
+
'LocalServerObjectCache' => function ( MediaWikiServices $services ) : BagOStuff {
$config = $services->getMainConfig();
$cacheId = ObjectCache::detectLocalServerCache();
"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 {
}
$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 {
'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()
);
);
},
+ 'PasswordReset' => function ( MediaWikiServices $services ) : PasswordReset {
+ $options = new ServiceOptions( PasswordReset::CONSTRUCTOR_OPTIONS, $services->getMainConfig() );
+ return new PasswordReset(
+ $options,
+ AuthManager::singleton(),
+ $services->getPermissionManager(),
+ $services->getDBLoadBalancer(),
+ LoggerFactory::getInstance( 'authentication' )
+ );
+ },
+
'PerDbNameStatsdDataFactory' =>
function ( MediaWikiServices $services ) : StatsdDataFactoryInterface {
$config = $services->getMainConfig();
'PermissionManager' => function ( MediaWikiServices $services ) : PermissionManager {
return new PermissionManager(
new ServiceOptions(
- PermissionManager::$constructorOptions, $services->getMainConfig()
+ PermissionManager::CONSTRUCTOR_OPTIONS, $services->getMainConfig()
),
$services->getSpecialPageFactory(),
$services->getRevisionLookup(),
'PreferencesFactory' => function ( MediaWikiServices $services ) : PreferencesFactory {
$factory = new DefaultPreferencesFactory(
new ServiceOptions(
- DefaultPreferencesFactory::$constructorOptions, $services->getMainConfig() ),
+ DefaultPreferencesFactory::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ),
$services->getContentLanguage(),
AuthManager::singleton(),
$services->getLinkRendererFactory()->create(),