From 17c91ad61042592813e692cfc5b5c6b3e84ee9c1 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sat, 31 Oct 2015 11:42:48 -0700 Subject: [PATCH] Replace newAccelerator() with getLocalServerInstance() The name is clearer and more consistent, with simpler arguments. Change-Id: I7205a99ce033e8b086a52cd02c8a721e99c84b1e --- includes/DefaultSettings.php | 2 +- includes/GlobalFunctions.php | 2 +- includes/TemplateParser.php | 2 +- includes/cache/MessageCache.php | 2 +- includes/db/Database.php | 2 +- includes/db/loadbalancer/LoadMonitorMySQL.php | 2 +- includes/filebackend/SwiftFileBackend.php | 2 +- .../filebackend/lockmanager/DBLockManager.php | 2 +- .../media/TransformationalImageHandler.php | 2 +- includes/objectcache/ObjectCache.php | 73 +++++++++++-------- includes/parser/DateFormatter.php | 2 +- includes/registration/ExtensionRegistry.php | 2 +- includes/resourceloader/ResourceLoader.php | 2 +- .../ResourceLoaderFileModule.php | 2 +- includes/utils/FileContentsHasher.php | 2 +- includes/utils/MWCryptHKDF.php | 2 +- includes/utils/UIDGenerator.php | 2 +- 17 files changed, 59 insertions(+), 46 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index d20b9314aa..6032ba3bbc 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2211,7 +2211,7 @@ $wgObjectCaches = array( CACHE_DB => array( 'class' => 'SqlBagOStuff', 'loggroup' => 'SQLBagOStuff' ), CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ), - CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ), + CACHE_ACCEL => array( 'factory' => 'ObjectCache::getLocalServerInstance' ), CACHE_MEMCACHED => array( 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ), 'db-replicated' => array( diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 791bf33667..3bc3a90712 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -4010,7 +4010,7 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) { return $bad; } - $cache = ObjectCache::newAccelerator( 'hash' ); + $cache = ObjectCache::getLocalServerInstance( 'hash' ); $key = wfMemcKey( 'bad-image-list', ( $blacklist === null ) ? 'default' : md5( $blacklist ) ); $badImages = $cache->get( $key ); diff --git a/includes/TemplateParser.php b/includes/TemplateParser.php index 44d264dec9..8ce342020f 100644 --- a/includes/TemplateParser.php +++ b/includes/TemplateParser.php @@ -103,7 +103,7 @@ class TemplateParser { if ( $secretKey ) { // See if the compiled PHP code is stored in cache. - $cache = ObjectCache::newAccelerator( CACHE_ANYTHING ); + $cache = ObjectCache::getLocalServerInstance( CACHE_ANYTHING ); $key = $cache->makeKey( 'template', $templateName, $fastHash ); $code = $this->forceRecompile ? null : $cache->get( $key ); diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index bcfa792a37..ae746e3236 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -154,7 +154,7 @@ class MessageCache { $this->mExpiry = $expiry; if ( $wgUseLocalMessageCache ) { - $this->localCache = ObjectCache::newAccelerator( CACHE_NONE ); + $this->localCache = ObjectCache::getLocalServerInstance( CACHE_NONE ); } else { $this->localCache = wfGetCache( CACHE_NONE ); } diff --git a/includes/db/Database.php b/includes/db/Database.php index cf774fa053..531086b363 100644 --- a/includes/db/Database.php +++ b/includes/db/Database.php @@ -615,7 +615,7 @@ abstract class DatabaseBase implements IDatabase { function __construct( array $params ) { global $wgDBprefix, $wgDBmwschema, $wgCommandLineMode; - $this->srvCache = ObjectCache::newAccelerator( 'hash' ); + $this->srvCache = ObjectCache::getLocalServerInstance( 'hash' ); $server = $params['host']; $user = $params['user']; diff --git a/includes/db/loadbalancer/LoadMonitorMySQL.php b/includes/db/loadbalancer/LoadMonitorMySQL.php index f49e965e91..59d6ef6c64 100644 --- a/includes/db/loadbalancer/LoadMonitorMySQL.php +++ b/includes/db/loadbalancer/LoadMonitorMySQL.php @@ -36,7 +36,7 @@ class LoadMonitorMySQL implements LoadMonitor { public function __construct( $parent ) { $this->parent = $parent; - $this->srvCache = ObjectCache::newAccelerator( 'hash' ); + $this->srvCache = ObjectCache::getLocalServerInstance( 'hash' ); $this->mainCache = ObjectCache::getLocalClusterInstance(); } diff --git a/includes/filebackend/SwiftFileBackend.php b/includes/filebackend/SwiftFileBackend.php index 83c1da190d..8097549508 100644 --- a/includes/filebackend/SwiftFileBackend.php +++ b/includes/filebackend/SwiftFileBackend.php @@ -140,7 +140,7 @@ class SwiftFileBackend extends FileBackendStore { $this->srvCache = ObjectCache::getLocalClusterInstance(); } else { // Look for APC, XCache, WinCache, ect... - $this->srvCache = ObjectCache::newAccelerator( CACHE_NONE ); + $this->srvCache = ObjectCache::getLocalServerInstance( CACHE_NONE ); } } else { $this->srvCache = new EmptyBagOStuff(); diff --git a/includes/filebackend/lockmanager/DBLockManager.php b/includes/filebackend/lockmanager/DBLockManager.php index 9d4f0090d4..1c389c3c29 100644 --- a/includes/filebackend/lockmanager/DBLockManager.php +++ b/includes/filebackend/lockmanager/DBLockManager.php @@ -96,7 +96,7 @@ abstract class DBLockManager extends QuorumLockManager { // Tracks peers that couldn't be queried recently to avoid lengthy // connection timeouts. This is useless if each bucket has one peer. try { - $this->statusCache = ObjectCache::newAccelerator(); + $this->statusCache = ObjectCache::getLocalServerInstance(); } catch ( Exception $e ) { trigger_error( __CLASS__ . " using multiple DB peers without apc, xcache, or wincache." ); diff --git a/includes/media/TransformationalImageHandler.php b/includes/media/TransformationalImageHandler.php index 30f9e2e971..f72df19bd3 100644 --- a/includes/media/TransformationalImageHandler.php +++ b/includes/media/TransformationalImageHandler.php @@ -508,7 +508,7 @@ abstract class TransformationalImageHandler extends ImageHandler { * @return string|bool Representing the IM version; false on error */ protected function getMagickVersion() { - $cache = ObjectCache::newAccelerator( CACHE_NONE ); + $cache = ObjectCache::getLocalServerInstance( CACHE_NONE ); return $cache->getWithSetCallback( 'imagemagick-version', $cache::TTL_HOUR, diff --git a/includes/objectcache/ObjectCache.php b/includes/objectcache/ObjectCache.php index 3d14c33f10..09123507a9 100644 --- a/includes/objectcache/ObjectCache.php +++ b/includes/objectcache/ObjectCache.php @@ -42,22 +42,15 @@ use MediaWiki\Logger\LoggerFactory; * * Primary entry points: * - * - ObjectCache::newAccelerator( $fallbackType ) - * Purpose: Cache for very hot keys. - * Stored only on the individual web server. - * Not associated with other servers. - * * - ObjectCache::getMainWANInstance() - * Purpose: Cache. + * Purpose: Memory cache. * Stored in the local data-center's main cache (uses different cache keys). * Delete events are broadcasted to other DCs. See WANObjectCache for details. * - * - ObjectCache::getMainStashInstance() - * Purpose: Ephemeral storage. - * Stored centrally within the primary data-center. - * Changes are applied there first and replicated to other DCs (best-effort). - * To retrieve the latest value (e.g. not from a slave), use BagOStuff:READ_LATEST. - * This store may be subject to LRU style evictions. + * - ObjectCache::getLocalServerInstance( $fallbackType ) + * Purpose: Memory cache for very hot keys. + * Stored only on the individual web server (often EmptyBagOStuff in CLI mode). + * Not replicated to the other servers. * * - ObjectCache::getLocalClusterInstance() * Purpose: Memory storage for per-cluster coordination and tracking. @@ -65,7 +58,15 @@ use MediaWiki\Logger\LoggerFactory; * Stored centrally within the local data-center. Not replicated to other DCs. * Also known as $wgMemc. Configured by $wgMainCacheType. * - * - wfGetCache( $cacheType ) + * - ObjectCache::getMainStashInstance() + * Purpose: Ephemeral global storage. + * Stored centrally within the primary data-center. + * Changes are applied there first and replicated to other DCs (best-effort). + * To retrieve the latest value (e.g. not from a slave), use BagOStuff:READ_LATEST. + * This store may be subject to LRU style evictions. + * + * - ObjectCache::getInstance( $cacheType ) + * Purpose: Special cases (like tiered memory/disk caches). * Get a specific cache type by key in $wgObjectCaches. * * All the above cache instances (BagOStuff and WANObjectCache) have their makeKey() @@ -236,15 +237,39 @@ class ObjectCache { * A fallback cache can be specified if none is found. * * // Direct calls - * ObjectCache::newAccelerator( $fallbackType ); + * ObjectCache::getLocalServerInstance( $fallbackType ); * * // From $wgObjectCaches via newFromParams() - * ObjectCache::newAccelerator( array( 'fallback' => $fallbackType ) ); + * ObjectCache::getLocalServerInstance( array( 'fallback' => $fallbackType ) ); * + * @param int|string|array $fallback Fallback cache or parameter map with 'fallback' + * @return BagOStuff + * @throws MWException + * @since 1.27 + */ + public static function getLocalServerInstance( $fallback = CACHE_NONE ) { + if ( function_exists( 'apc_fetch' ) ) { + $id = 'apc'; + } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) { + $id = 'xcache'; + } elseif ( function_exists( 'wincache_ucache_get' ) ) { + $id = 'wincache'; + } else { + if ( is_array( $fallback ) ) { + $id = isset( $fallback['fallback'] ) ? $fallback['fallback'] : CACHE_NONE; + } else { + $id = $fallback; + } + } + + return self::getInstance( $id ); + } + + /** * @param array $params [optional] Array key 'fallback' for $fallback. * @param int|string $fallback Fallback cache, e.g. (CACHE_NONE, "hash") (since 1.24) * @return BagOStuff - * @throws MWException + * @deprecated 1.27 */ public static function newAccelerator( $params = array(), $fallback = null ) { if ( $fallback === null ) { @@ -256,20 +281,8 @@ class ObjectCache { $fallback = $params; } } - if ( function_exists( 'apc_fetch' ) ) { - $id = 'apc'; - } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) { - $id = 'xcache'; - } elseif ( function_exists( 'wincache_ucache_get' ) ) { - $id = 'wincache'; - } else { - if ( $fallback === null ) { - throw new MWException( 'CACHE_ACCEL requested but no suitable object ' . - 'cache is present. You may want to install APC.' ); - } - $id = $fallback; - } - return self::getInstance( $id ); + + return self::getLocalServerInstance( $fallback ); } /** diff --git a/includes/parser/DateFormatter.php b/includes/parser/DateFormatter.php index 5ffca2354f..edb9ff1d28 100644 --- a/includes/parser/DateFormatter.php +++ b/includes/parser/DateFormatter.php @@ -128,7 +128,7 @@ class DateFormatter { global $wgContLang, $wgMainCacheType; $lang = $lang ? wfGetLangObj( $lang ) : $wgContLang; - $cache = ObjectCache::newAccelerator( $wgMainCacheType ); + $cache = ObjectCache::getLocalServerInstance( $wgMainCacheType ); static $dateFormatter = false; if ( !$dateFormatter ) { diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php index 59b9249d41..732b4a03e5 100644 --- a/includes/registration/ExtensionRegistry.php +++ b/includes/registration/ExtensionRegistry.php @@ -86,7 +86,7 @@ class ExtensionRegistry { // we don't want to fail here if $wgObjectCaches is not configured // properly for APC setup try { - $this->cache = ObjectCache::newAccelerator(); + $this->cache = ObjectCache::getLocalServerInstance(); } catch ( MWException $e ) { $this->cache = new EmptyBagOStuff(); } diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index f7ba4d28a5..c6bba6d034 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -197,7 +197,7 @@ class ResourceLoader implements LoggerAwareInterface { } $stats = RequestContext::getMain()->getStats(); - $cache = ObjectCache::newAccelerator( CACHE_ANYTHING ); + $cache = ObjectCache::getLocalServerInstance( CACHE_ANYTHING ); $key = $cache->makeGlobalKey( 'resourceloader', diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php index ef98400298..1421b10790 100644 --- a/includes/resourceloader/ResourceLoaderFileModule.php +++ b/includes/resourceloader/ResourceLoaderFileModule.php @@ -935,7 +935,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { static $cache; if ( !$cache ) { - $cache = ObjectCache::newAccelerator( CACHE_ANYTHING ); + $cache = ObjectCache::getLocalServerInstance( CACHE_ANYTHING ); } // Construct a cache key from the LESS file name and a hash digest diff --git a/includes/utils/FileContentsHasher.php b/includes/utils/FileContentsHasher.php index c86691903b..12f6285325 100644 --- a/includes/utils/FileContentsHasher.php +++ b/includes/utils/FileContentsHasher.php @@ -31,7 +31,7 @@ class FileContentsHasher { * Constructor. */ public function __construct() { - $this->cache = ObjectCache::newAccelerator( 'hash' ); + $this->cache = ObjectCache::getLocalServerInstance( 'hash' ); } /** diff --git a/includes/utils/MWCryptHKDF.php b/includes/utils/MWCryptHKDF.php index 740df92241..2dfc902c96 100644 --- a/includes/utils/MWCryptHKDF.php +++ b/includes/utils/MWCryptHKDF.php @@ -176,7 +176,7 @@ class MWCryptHKDF { $context[] = gethostname(); // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup - $cache = ObjectCache::newAccelerator( $wgMainCacheType ); + $cache = ObjectCache::getLocalServerInstance( $wgMainCacheType ); if ( is_null( self::$singleton ) ) { self::$singleton = new self( $secret, $wgHKDFAlgorithm, $cache, $context ); diff --git a/includes/utils/UIDGenerator.php b/includes/utils/UIDGenerator.php index 04c8e1945c..f781435b76 100644 --- a/includes/utils/UIDGenerator.php +++ b/includes/utils/UIDGenerator.php @@ -283,7 +283,7 @@ class UIDGenerator { $cache = null; if ( ( $flags & self::QUICK_VOLATILE ) && PHP_SAPI !== 'cli' ) { try { - $cache = ObjectCache::newAccelerator(); + $cache = ObjectCache::getLocalServerInstance(); } catch ( Exception $e ) { // not supported } -- 2.20.1