From ebf762cc671dffc5fb1866caf6e538556f0c5e05 Mon Sep 17 00:00:00 2001 From: DannyS712 Date: Thu, 1 Apr 2021 20:48:53 +0000 Subject: [PATCH] ClassicInterwikiLookup: inject load balancer Per todo comments, to avoid using wfGetDB Change-Id: Ic4a7f9c5bcbfef3042e5ec0606babbd14d3e6124 --- includes/ServiceWiring.php | 1 + includes/interwiki/ClassicInterwikiLookup.php | 11 +++++++++-- .../includes/interwiki/ClassicInterwikiLookupTest.php | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index aa5d2e329d0..f88d62a6a50 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -562,6 +562,7 @@ return [ $services->getContentLanguage(), $services->getMainWANObjectCache(), $services->getHookContainer(), + $services->getDBLoadBalancer(), $config->get( 'InterwikiExpiry' ), $config->get( 'InterwikiCache' ), $config->get( 'InterwikiScopes' ), diff --git a/includes/interwiki/ClassicInterwikiLookup.php b/includes/interwiki/ClassicInterwikiLookup.php index 1d44f37c259..44056eab464 100644 --- a/includes/interwiki/ClassicInterwikiLookup.php +++ b/includes/interwiki/ClassicInterwikiLookup.php @@ -32,6 +32,7 @@ use MediaWiki\HookContainer\HookRunner; use WANObjectCache; use WikiMap; use Wikimedia\Rdbms\Database; +use Wikimedia\Rdbms\ILoadBalancer; /** * InterwikiLookup implementing the "classic" interwiki storage (hardcoded up to MW 1.26). @@ -95,10 +96,14 @@ class ClassicInterwikiLookup implements InterwikiLookup { /** @var HookRunner */ private $hookRunner; + /** @var ILoadBalancer */ + private $loadBalancer; + /** * @param Language $contLang Language object used to convert prefixes to lower case * @param WANObjectCache $objectCache Cache for interwiki info retrieved from the database * @param HookContainer $hookContainer + * @param ILoadBalancer $loadBalancer * @param int $objectCacheExpiry Expiry time for $objectCache, in seconds * @param bool|array|string $cdbData The path of a CDB file, or * an array resembling the contents of a CDB file, @@ -113,6 +118,7 @@ class ClassicInterwikiLookup implements InterwikiLookup { Language $contLang, WANObjectCache $objectCache, HookContainer $hookContainer, + ILoadBalancer $loadBalancer, $objectCacheExpiry, $cdbData, $interwikiScopes, @@ -123,6 +129,7 @@ class ClassicInterwikiLookup implements InterwikiLookup { $this->contLang = $contLang; $this->objectCache = $objectCache; $this->hookRunner = new HookRunner( $hookContainer ); + $this->loadBalancer = $loadBalancer; $this->objectCacheExpiry = $objectCacheExpiry; $this->cdbData = $cdbData; $this->interwikiScopes = $interwikiScopes; @@ -295,7 +302,7 @@ class ClassicInterwikiLookup implements InterwikiLookup { $this->objectCache->makeKey( 'interwiki', $prefix ), $this->objectCacheExpiry, function ( $oldValue, &$ttl, array &$setOpts ) use ( $prefix, $fname ) { - $dbr = wfGetDB( DB_REPLICA ); // TODO: inject LoadBalancer + $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA ); $setOpts += Database::getCacheSetOptions( $dbr ); @@ -445,7 +452,7 @@ class ClassicInterwikiLookup implements InterwikiLookup { * @return array[] Interwiki rows */ private function getAllPrefixesDB( $local ) { - $db = wfGetDB( DB_REPLICA ); // TODO: inject DB LoadBalancer + $db = $this->loadBalancer->getConnectionRef( DB_REPLICA ); $where = []; diff --git a/tests/phpunit/includes/interwiki/ClassicInterwikiLookupTest.php b/tests/phpunit/includes/interwiki/ClassicInterwikiLookupTest.php index 5f714f878e8..27551b8c435 100644 --- a/tests/phpunit/includes/interwiki/ClassicInterwikiLookupTest.php +++ b/tests/phpunit/includes/interwiki/ClassicInterwikiLookupTest.php @@ -41,6 +41,7 @@ class ClassicInterwikiLookupTest extends MediaWikiIntegrationTestCase { MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' ), WANObjectCache::newEmpty(), MediaWikiServices::getInstance()->getHookContainer(), + MediaWikiServices::getInstance()->getDBLoadBalancer(), 60 * 60, false, 3, @@ -156,6 +157,7 @@ class ClassicInterwikiLookupTest extends MediaWikiIntegrationTestCase { MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' ), WANObjectCache::newEmpty(), MediaWikiServices::getInstance()->getHookContainer(), + MediaWikiServices::getInstance()->getDBLoadBalancer(), 60 * 60, $cdbFile, 3, @@ -208,6 +210,7 @@ class ClassicInterwikiLookupTest extends MediaWikiIntegrationTestCase { MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' ), WANObjectCache::newEmpty(), MediaWikiServices::getInstance()->getHookContainer(), + MediaWikiServices::getInstance()->getDBLoadBalancer(), 60 * 60, $hash, 3, @@ -262,6 +265,7 @@ class ClassicInterwikiLookupTest extends MediaWikiIntegrationTestCase { MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' ), WANObjectCache::newEmpty(), MediaWikiServices::getInstance()->getHookContainer(), + MediaWikiServices::getInstance()->getDBLoadBalancer(), 60 * 60, $hash, 3,