Migrate several wfGetDB() to use ICP
And doing proper dependency injection. Bug: T330641 Change-Id: I4978c158e513f88f5547343c4fbbe4b39078dc09
This commit is contained in:
parent
953a7c1251
commit
3e157496ff
8 changed files with 39 additions and 10 deletions
|
|
@ -290,7 +290,8 @@ return [
|
|||
'BacklinkCacheFactory' => static function ( MediaWikiServices $services ): BacklinkCacheFactory {
|
||||
return new BacklinkCacheFactory(
|
||||
$services->getMainWANObjectCache(),
|
||||
$services->getHookContainer()
|
||||
$services->getHookContainer(),
|
||||
$services->getDBLoadBalancerFactory()
|
||||
);
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ use MediaWiki\Revision\RevisionRecord;
|
|||
use MediaWiki\Title\TitleFactory;
|
||||
use MediaWiki\User\UserOptionsLookup;
|
||||
use MediaWiki\Watchlist\WatchlistManager;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
use Wikimedia\Rdbms\ReadOnlyMode;
|
||||
use Wikimedia\RequestTimeout\TimeoutException;
|
||||
|
||||
|
|
@ -83,6 +84,8 @@ class DeleteAction extends FormAction {
|
|||
/** @var TitleFactory */
|
||||
private $titleFactory;
|
||||
|
||||
private IConnectionProvider $dbProvider;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
|
|
@ -99,6 +102,7 @@ class DeleteAction extends FormAction {
|
|||
$this->namespaceInfo = $services->getNamespaceInfo();
|
||||
$this->titleFormatter = $services->getTitleFormatter();
|
||||
$this->titleFactory = $services->getTitleFactory();
|
||||
$this->dbProvider = $services->getDBLoadBalancerFactory();
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
|
|
@ -288,7 +292,7 @@ class DeleteAction extends FormAction {
|
|||
// This, as a side-effect, also makes sure that the following query isn't being run for
|
||||
// pages with a larger history, unless the user has the 'bigdelete' right
|
||||
// (and is about to delete this page).
|
||||
$revisions = (int)wfGetDB( DB_REPLICA )->newSelectQueryBuilder()
|
||||
$revisions = (int)$this->dbProvider->getReplicaDatabase()->newSelectQueryBuilder()
|
||||
->select( 'COUNT(rev_page)' )
|
||||
->from( 'revision' )
|
||||
->where( [ 'rev_page' => $title->getArticleID() ] )
|
||||
|
|
|
|||
7
includes/cache/BacklinkCache.php
vendored
7
includes/cache/BacklinkCache.php
vendored
|
|
@ -38,6 +38,7 @@ use MediaWiki\Title\TitleArray;
|
|||
use MediaWiki\Title\TitleArrayFromResult;
|
||||
use Wikimedia\Rdbms\Database;
|
||||
use Wikimedia\Rdbms\FakeResultWrapper;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
use Wikimedia\Rdbms\IReadableDatabase;
|
||||
use Wikimedia\Rdbms\IResultWrapper;
|
||||
use Wikimedia\Rdbms\SelectQueryBuilder;
|
||||
|
|
@ -92,22 +93,26 @@ class BacklinkCache {
|
|||
protected $page;
|
||||
|
||||
private const CACHE_EXPIRY = 3600;
|
||||
private IConnectionProvider $dbProvider;
|
||||
|
||||
/**
|
||||
* Create a new BacklinkCache
|
||||
*
|
||||
* @param WANObjectCache $wanCache
|
||||
* @param HookContainer $hookContainer
|
||||
* @param IConnectionProvider $dbProvider
|
||||
* @param PageReference $page Page to create a backlink cache for
|
||||
*/
|
||||
public function __construct(
|
||||
WANObjectCache $wanCache,
|
||||
HookContainer $hookContainer,
|
||||
IConnectionProvider $dbProvider,
|
||||
PageReference $page
|
||||
) {
|
||||
$this->page = $page;
|
||||
$this->wanCache = $wanCache;
|
||||
$this->hookRunner = new HookRunner( $hookContainer );
|
||||
$this->dbProvider = $dbProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -141,7 +146,7 @@ class BacklinkCache {
|
|||
* @return IReadableDatabase
|
||||
*/
|
||||
protected function getDB() {
|
||||
return wfGetDB( DB_REPLICA );
|
||||
return $this->dbProvider->getReplicaDatabase();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
8
includes/cache/BacklinkCacheFactory.php
vendored
8
includes/cache/BacklinkCacheFactory.php
vendored
|
|
@ -27,6 +27,7 @@ use BacklinkCache;
|
|||
use MediaWiki\HookContainer\HookContainer;
|
||||
use MediaWiki\Page\PageReference;
|
||||
use WANObjectCache;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
|
||||
/**
|
||||
* @since 1.37
|
||||
|
|
@ -41,16 +42,20 @@ class BacklinkCacheFactory {
|
|||
/** @var HookContainer */
|
||||
private $hookContainer;
|
||||
|
||||
private IConnectionProvider $dbProvider;
|
||||
|
||||
/**
|
||||
* @param WANObjectCache $wanCache
|
||||
* @param HookContainer $hookContainer
|
||||
*/
|
||||
public function __construct(
|
||||
WANObjectCache $wanCache,
|
||||
HookContainer $hookContainer
|
||||
HookContainer $hookContainer,
|
||||
IConnectionProvider $dbProvider
|
||||
) {
|
||||
$this->wanCache = $wanCache;
|
||||
$this->hookContainer = $hookContainer;
|
||||
$this->dbProvider = $dbProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -68,6 +73,7 @@ class BacklinkCacheFactory {
|
|||
$this->latestBacklinkCache = new BacklinkCache(
|
||||
$this->wanCache,
|
||||
$this->hookContainer,
|
||||
$this->dbProvider,
|
||||
$page
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ use MediaWiki\Storage\NameTableAccessException;
|
|||
use MediaWiki\StubObject\StubUserLang;
|
||||
use MediaWiki\Title\Title;
|
||||
use MediaWiki\User\UserOptionsLookup;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
|
||||
/**
|
||||
* DifferenceEngine is responsible for rendering the difference between two revisions as HTML.
|
||||
|
|
@ -246,6 +247,8 @@ class DifferenceEngine extends ContextSource {
|
|||
/** @var CommentFormatter */
|
||||
private $commentFormatter;
|
||||
|
||||
private IConnectionProvider $dbProvider;
|
||||
|
||||
/** @var Message[] */
|
||||
private $revisionLoadErrors = [];
|
||||
|
||||
|
|
@ -281,6 +284,7 @@ class DifferenceEngine extends ContextSource {
|
|||
$this->wikiPageFactory = $services->getWikiPageFactory();
|
||||
$this->userOptionsLookup = $services->getUserOptionsLookup();
|
||||
$this->commentFormatter = $services->getCommentFormatter();
|
||||
$this->dbProvider = $services->getDBLoadBalancerFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -514,9 +518,8 @@ class DifferenceEngine extends ContextSource {
|
|||
*/
|
||||
public function deletedLink( $id ) {
|
||||
if ( $this->getAuthority()->isAllowed( 'deletedhistory' ) ) {
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
$arQuery = $this->revisionStore->getArchiveQueryInfo();
|
||||
$row = $dbr->selectRow(
|
||||
$row = $this->dbProvider->getReplicaDatabase()->selectRow(
|
||||
$arQuery['tables'],
|
||||
array_merge( $arQuery['fields'], [ 'ar_namespace', 'ar_title' ] ),
|
||||
[ 'ar_rev_id' => $id ],
|
||||
|
|
@ -2148,7 +2151,7 @@ class DifferenceEngine extends ContextSource {
|
|||
}
|
||||
|
||||
// Load tags information for both revisions
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
$dbr = $this->dbProvider->getReplicaDatabase();
|
||||
$changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
|
||||
if ( $this->mOldid !== false ) {
|
||||
$tagIds = $dbr->selectFieldValues(
|
||||
|
|
|
|||
|
|
@ -764,6 +764,7 @@ class SpecialPageFactory {
|
|||
'services' => [
|
||||
'Parser',
|
||||
'UrlUtils',
|
||||
'DBLoadBalancerFactory',
|
||||
]
|
||||
],
|
||||
'Lockdb' => [
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ use MediaWiki\Utils\UrlUtils;
|
|||
use Symfony\Component\Yaml\Yaml;
|
||||
use Wikimedia\Parsoid\Core\SectionMetadata;
|
||||
use Wikimedia\Parsoid\Core\TOCData;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
|
||||
/**
|
||||
* Give information about the version of MediaWiki, PHP, the DB and extensions
|
||||
|
|
@ -76,17 +77,22 @@ class SpecialVersion extends SpecialPage {
|
|||
/** @var UrlUtils */
|
||||
private $urlUtils;
|
||||
|
||||
private IConnectionProvider $dbProvider;
|
||||
|
||||
/**
|
||||
* @param Parser $parser
|
||||
* @param UrlUtils $urlUtils
|
||||
* @param IConnectionProvider $dbProvider
|
||||
*/
|
||||
public function __construct(
|
||||
Parser $parser,
|
||||
UrlUtils $urlUtils
|
||||
UrlUtils $urlUtils,
|
||||
IConnectionProvider $dbProvider
|
||||
) {
|
||||
parent::__construct( 'Version' );
|
||||
$this->parser = $parser;
|
||||
$this->urlUtils = $urlUtils;
|
||||
$this->dbProvider = $dbProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -363,7 +369,7 @@ class SpecialVersion extends SpecialPage {
|
|||
* @return string[] Array of wikitext strings keyed by wikitext strings
|
||||
*/
|
||||
private function getSoftwareInformation() {
|
||||
$dbr = wfGetDB( DB_REPLICA );
|
||||
$dbr = $this->dbProvider->getReplicaDatabase();
|
||||
|
||||
// Put the software in an array of form 'name' => 'version'. All messages should
|
||||
// be loaded here, so feel free to use wfMessage in the 'name'. Wikitext
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use MediaWiki\Cache\BacklinkCacheFactory;
|
||||
use MediaWiki\Page\PageReferenceValue;
|
||||
use Wikimedia\Rdbms\IConnectionProvider;
|
||||
|
||||
/**
|
||||
* @group Cache
|
||||
|
|
@ -13,10 +14,12 @@ class BacklinkCacheFactoryTest extends MediaWikiUnitTestCase {
|
|||
*/
|
||||
public function testGetBacklinkCache() {
|
||||
$wanCache = new WANObjectCache( [ 'cache' => new EmptyBagOStuff() ] );
|
||||
$dbProvider = $this->createMock( IConnectionProvider::class );
|
||||
$page = PageReferenceValue::localReference( NS_CATEGORY, "kittens" );
|
||||
$factory = new BacklinkCacheFactory(
|
||||
$wanCache,
|
||||
$this->createHookContainer()
|
||||
$this->createHookContainer(),
|
||||
$dbProvider
|
||||
);
|
||||
$cache = $factory->getBacklinkCache( $page );
|
||||
$this->assertTrue( $cache->getPage()->isSamePageAs( $page ) );
|
||||
|
|
|
|||
Loading…
Reference in a new issue