return $this->getService( 'TitleParser' );
}
+ /**
+ * @since 1.28
+ * @return \BagOStuff
+ */
+ public function getMainObjectStash() {
+ return $this->getService( 'MainObjectStash' );
+ }
+
+ /**
+ * @since 1.28
+ * @return \WANObjectCache
+ */
+ public function getMainWANObjectCache() {
+ return $this->getService( 'MainWANObjectCache' );
+ }
+
+ /**
+ * @since 1.28
+ * @return \BagOStuff
+ */
+ public function getLocalServerObjectCache() {
+ return $this->getService( 'LocalServerObjectCache' );
+ }
+
/**
* @since 1.28
* @return VirtualRESTServiceClient
return $services->getService( '_MediaWikiTitleCodec' );
},
+ 'MainObjectStash' => function( MediaWikiServices $services ) {
+ $mainConfig = $services->getMainConfig();
+
+ $id = $mainConfig->get( 'MainStash' );
+ if ( !isset( $mainConfig->get( 'ObjectCaches' )[$id] ) ) {
+ throw new UnexpectedValueException(
+ "Cache type \"$id\" is not present in \$wgObjectCaches." );
+ }
+
+ return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+ },
+
+ 'MainWANObjectCache' => function( MediaWikiServices $services ) {
+ $mainConfig = $services->getMainConfig();
+
+ $id = $mainConfig->get( 'MainWANCache' );
+ if ( !isset( $mainConfig->get( 'WANObjectCaches' )[$id] ) ) {
+ throw new UnexpectedValueException(
+ "WAN cache type \"$id\" is not present in \$wgWANObjectCaches." );
+ }
+
+ $params = $mainConfig->get( 'WANObjectCaches' )[$id];
+ $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];
+
+ return \ObjectCache::newWANCacheFromParams( $params );
+ },
+
+ 'LocalServerObjectCache' => function( MediaWikiServices $services ) {
+ $mainConfig = $services->getMainConfig();
+
+ if ( function_exists( 'apc_fetch' ) ) {
+ $id = 'apc';
+ } elseif ( function_exists( 'apcu_fetch' ) ) {
+ $id = 'apcu';
+ } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) {
+ $id = 'xcache';
+ } elseif ( function_exists( 'wincache_ucache_get' ) ) {
+ $id = 'wincache';
+ } else {
+ $id = CACHE_NONE;
+ }
+
+ if ( !isset( $mainConfig->get( 'ObjectCaches' )[$id] ) ) {
+ throw new UnexpectedValueException(
+ "Cache type \"$id\" is not present in \$wgObjectCaches." );
+ }
+
+ return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+ },
+
'VirtualRESTServiceClient' => function( MediaWikiServices $services ) {
$config = $services->getMainConfig()->get( 'VirtualRestConfig' );
* @since 1.27
*/
public static function getLocalServerInstance( $fallback = CACHE_NONE ) {
- if ( function_exists( 'apc_fetch' ) ) {
- $id = 'apc';
- } elseif ( function_exists( 'apcu_fetch' ) ) {
- $id = 'apcu';
- } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) {
- $id = 'xcache';
- } elseif ( function_exists( 'wincache_ucache_get' ) ) {
- $id = 'wincache';
- } else {
+ $cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
+ if ( $cache instanceof EmptyBagOStuff ) {
if ( is_array( $fallback ) ) {
- $id = isset( $fallback['fallback'] ) ? $fallback['fallback'] : CACHE_NONE;
- } else {
- $id = $fallback;
+ $fallback = isset( $fallback['fallback'] ) ? $fallback['fallback'] : CACHE_NONE;
}
+ $cache = self::getInstance( $fallback );
}
- return self::getInstance( $id );
+ return $cache;
}
/**
*
* @since 1.26
* @return WANObjectCache
+ * @deprecated Since 1.28 Use MediaWikiServices::getMainWANCache()
*/
public static function getMainWANInstance() {
- global $wgMainWANCache;
-
- return self::getWANInstance( $wgMainWANCache );
+ return MediaWikiServices::getInstance()->getMainWANObjectCache();
}
/**
*
* @return BagOStuff
* @since 1.26
+ * @deprecated Since 1.28 Use MediaWikiServices::getMainObjectStash
*/
public static function getMainStashInstance() {
- global $wgMainStash;
-
- return self::getInstance( $wgMainStash );
+ return MediaWikiServices::getInstance()->getMainObjectStash();
}
/**
JobQueueGroup::destroySingletons();
ObjectCache::clear();
+ $services = MediaWikiServices::getInstance();
+ $services->resetServiceForTesting( 'MainObjectStash' );
+ $services->resetServiceForTesting( 'LocalServerObjectCache' );
+ $services->getMainWANObjectCache()->clearProcessCache();
FileBackendGroup::destroySingleton();
// TODO: move global state into MediaWikiServices
'_MediaWikiTitleCodec' => [ '_MediaWikiTitleCodec', MediaWikiTitleCodec::class ],
'TitleFormatter' => [ 'TitleFormatter', TitleFormatter::class ],
'TitleParser' => [ 'TitleParser', TitleParser::class ],
- 'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ],
- 'ProxyLookup' => [ 'ProxyLookup', ProxyLookup::class ]
+ 'ProxyLookup' => [ 'ProxyLookup', ProxyLookup::class ],
+ 'MainObjectStash' => [ 'MainObjectStash', BagOStuff::class ],
+ 'MainWANObjectCache' => [ 'MainWANObjectCache', WANObjectCache::class ],
+ 'LocalServerObjectCache' => [ 'LocalServerObjectCache', BagOStuff::class ],
+ 'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ]
];
}