Aaron Schulz has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/345706 )
Change subject: Use IDatabase type hints in /maintenance
......................................................................
Use IDatabase type hints in /maintenance
Relatedly, move lockTables()/unlockTables() to IMaintainableDatabase
Change-Id: Ib53e9fa948deb2f9a70f0ce16c002613d0060bf9
---
M includes/libs/rdbms/database/Database.php
M includes/libs/rdbms/database/IMaintainableDatabase.php
M includes/libs/rdbms/database/MaintainableDBConnRef.php
M maintenance/Maintenance.php
M maintenance/archives/upgradeLogging.php
M maintenance/benchmarks/bench_delete_truncate.php
M maintenance/convertUserOptions.php
M maintenance/deleteOrphanedRevisions.php
M maintenance/deleteRevision.php
M maintenance/dumpIterator.php
M maintenance/dumpTextPass.php
M maintenance/fetchText.php
M maintenance/namespaceDupes.php
M maintenance/orphans.php
M maintenance/populateContentModel.php
M maintenance/populateRecentChangesSource.php
M maintenance/rebuildImages.php
M maintenance/rebuildtextindex.php
M maintenance/refreshImageMetadata.php
M maintenance/refreshLinks.php
M maintenance/sql.php
M maintenance/update.php
M maintenance/updateCollation.php
23 files changed, 97 insertions(+), 54 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/06/345706/1
diff --git a/includes/libs/rdbms/database/Database.php
b/includes/libs/rdbms/database/Database.php
index fbfd899..90ebc45 100644
--- a/includes/libs/rdbms/database/Database.php
+++ b/includes/libs/rdbms/database/Database.php
@@ -3306,25 +3306,10 @@
return false;
}
- /**
- * Lock specific tables
- *
- * @param array $read Array of tables to lock for read access
- * @param array $write Array of tables to lock for write access
- * @param string $method Name of caller
- * @param bool $lowPriority Whether to indicate writes to be LOW
PRIORITY
- * @return bool
- */
public function lockTables( $read, $write, $method, $lowPriority = true
) {
return true;
}
- /**
- * Unlock specific tables
- *
- * @param string $method The caller
- * @return bool
- */
public function unlockTables( $method ) {
return true;
}
diff --git a/includes/libs/rdbms/database/IMaintainableDatabase.php
b/includes/libs/rdbms/database/IMaintainableDatabase.php
index 138cf2d..2c4a0d0 100644
--- a/includes/libs/rdbms/database/IMaintainableDatabase.php
+++ b/includes/libs/rdbms/database/IMaintainableDatabase.php
@@ -210,6 +210,31 @@
public function duplicateTableStructure(
$oldName, $newName, $temporary = false, $fname = __METHOD__
);
+
+ /**
+ * Lock specific tables
+ *
+ * Only use this method within a transaction
+ *
+ * @param array $read Array of tables to lock for read access
+ * @param array $write Array of tables to lock for write access
+ * @param string $method Name of caller
+ * @param bool $lowPriority Whether to indicate writes to be LOW
PRIORITY
+ * @return bool
+ * @since 1.29
+ */
+ public function lockTables( $read, $write, $method, $lowPriority = true
);
+
+ /**
+ * Unlock specific tables
+ *
+ * Only use this method within a transaction
+ *
+ * @param string $method The caller
+ * @return bool
+ * @since 1.29
+ */
+ public function unlockTables( $method );
}
class_alias( 'Wikimedia\Rdbms\IMaintainableDatabase', 'IMaintainableDatabase'
);
diff --git a/includes/libs/rdbms/database/MaintainableDBConnRef.php
b/includes/libs/rdbms/database/MaintainableDBConnRef.php
index 30c62de..aedd5ed 100644
--- a/includes/libs/rdbms/database/MaintainableDBConnRef.php
+++ b/includes/libs/rdbms/database/MaintainableDBConnRef.php
@@ -68,6 +68,14 @@
) {
return $this->__call( __FUNCTION__, func_get_args() );
}
+
+ public function lockTables( $read, $write, $method, $lowPriority = true
) {
+ return $this->__call( __FUNCTION__, func_get_args() );
+ }
+
+ public function unlockTables( $method ) {
+ return $this->__call( __FUNCTION__, func_get_args() );
+ }
}
class_alias( 'Wikimedia\Rdbms\MaintainableDBConnRef', 'MaintainableDBConnRef'
);
diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php
index a8080c5..e5ba411 100644
--- a/maintenance/Maintenance.php
+++ b/maintenance/Maintenance.php
@@ -40,6 +40,7 @@
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* Abstract maintenance class for quickly writing and churning out
@@ -106,7 +107,7 @@
/**
* Used by getDB() / setDB()
- * @var Database
+ * @var IMaintainableDatabase
*/
private $mDb = null;
@@ -206,7 +207,7 @@
* @param string $description The description of the param to show on
--help
* @param bool $required Is the param required?
* @param bool $withArg Is an argument required with this option?
- * @param string $shortName Character to use as short name
+ * @param string|bool $shortName Character to use as short name
* @param bool $multiOccurrence Can this option be passed multiple
times?
*/
protected function addOption( $name, $description, $required = false,
@@ -1243,7 +1244,7 @@
* @param integer $db DB index (DB_REPLICA/DB_MASTER)
* @param array $groups; default: empty array
* @param string|bool $wiki; default: current wiki
- * @return Database
+ * @return IMaintainableDatabase
*/
protected function getDB( $db, $groups = [], $wiki = false ) {
if ( is_null( $this->mDb ) ) {
@@ -1256,7 +1257,7 @@
/**
* Sets database object to be returned by getDB().
*
- * @param IDatabase $db Database object to be used
+ * @param IDatabase $db
*/
public function setDB( IDatabase $db ) {
$this->mDb = $db;
@@ -1318,7 +1319,7 @@
/**
* Lock the search index
- * @param Database &$db
+ * @param IMaintainableDatabase &$db
*/
private function lockSearchindex( $db ) {
$write = [ 'searchindex' ];
@@ -1336,7 +1337,7 @@
/**
* Unlock the tables
- * @param Database &$db
+ * @param IMaintainableDatabase &$db
*/
private function unlockSearchindex( $db ) {
$db->unlockTables( __CLASS__ . '::' . __METHOD__ );
@@ -1345,7 +1346,7 @@
/**
* Unlock and lock again
* Since the lock is low-priority, queued reads will be able to complete
- * @param Database &$db
+ * @param IMaintainableDatabase &$db
*/
private function relockSearchindex( $db ) {
$this->unlockSearchindex( $db );
@@ -1356,7 +1357,7 @@
* Perform a search index update with locking
* @param int $maxLockTime The maximum time to keep the search index
locked.
* @param string $callback The function that will update the function.
- * @param Database $dbw
+ * @param IMaintainableDatabase $dbw
* @param array $results
*/
public function updateSearchIndex( $maxLockTime, $callback, $dbw,
$results ) {
@@ -1392,7 +1393,7 @@
/**
* Update the searchindex table for a given pageid
- * @param Database $dbw A database write handle
+ * @param IDatabase $dbw A database write handle
* @param int $pageId The page ID to update.
* @return null|string
*/
diff --git a/maintenance/archives/upgradeLogging.php
b/maintenance/archives/upgradeLogging.php
index 0beff7c..231f137 100644
--- a/maintenance/archives/upgradeLogging.php
+++ b/maintenance/archives/upgradeLogging.php
@@ -23,16 +23,18 @@
require __DIR__ . '/../commandLine.inc';
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script that upgrade for log_id/log_deleted fields in a
* replication-safe way.
*
* @ingroup Maintenance
*/
-class UpdateLogging {
+class UpdateLogging extends Maintenance {
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
public $dbw;
public $batchSize = 1000;
diff --git a/maintenance/benchmarks/bench_delete_truncate.php
b/maintenance/benchmarks/bench_delete_truncate.php
index 2a8d79a..9170eba 100644
--- a/maintenance/benchmarks/bench_delete_truncate.php
+++ b/maintenance/benchmarks/bench_delete_truncate.php
@@ -69,7 +69,7 @@
}
/**
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return void
*/
private function insertData( $dbw ) {
@@ -82,7 +82,7 @@
}
/**
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return void
*/
private function delete( $dbw ) {
@@ -90,7 +90,7 @@
}
/**
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return void
*/
private function truncate( $dbw ) {
diff --git a/maintenance/convertUserOptions.php
b/maintenance/convertUserOptions.php
index 70f3654..675d069 100644
--- a/maintenance/convertUserOptions.php
+++ b/maintenance/convertUserOptions.php
@@ -24,6 +24,7 @@
require_once __DIR__ . '/Maintenance.php';
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
/**
* Maintenance script to convert user options to the new `user_properties`
table.
@@ -76,7 +77,7 @@
/**
* @param ResultWrapper $res
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return null|int
*/
function convertOptionBatch( $res, $dbw ) {
diff --git a/maintenance/deleteOrphanedRevisions.php
b/maintenance/deleteOrphanedRevisions.php
index df496d4..e99f2b0 100644
--- a/maintenance/deleteOrphanedRevisions.php
+++ b/maintenance/deleteOrphanedRevisions.php
@@ -26,6 +26,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Maintenance script that deletes revisions which refer to a nonexisting page.
*
@@ -83,7 +85,7 @@
* Do this inside a transaction
*
* @param array $id Array of revision id values
- * @param Database $dbw Database class (needs to be a master)
+ * @param IDatabase $dbw Master DB handle
*/
private function deleteRevs( $id, &$dbw ) {
if ( !is_array( $id ) ) {
diff --git a/maintenance/deleteRevision.php b/maintenance/deleteRevision.php
index 0111ac5..3abbdab 100644
--- a/maintenance/deleteRevision.php
+++ b/maintenance/deleteRevision.php
@@ -86,7 +86,6 @@
);
$dbw->delete( 'revision', [ 'rev_id' => $revID
] );
if ( $pageLatest == $revID ) {
- // Database integrity
$newLatest = $dbw->selectField(
'revision',
'rev_id',
diff --git a/maintenance/dumpIterator.php b/maintenance/dumpIterator.php
index 9f983c1..6dbad94 100644
--- a/maintenance/dumpIterator.php
+++ b/maintenance/dumpIterator.php
@@ -117,7 +117,7 @@
/**
* Callback function for each revision, child classes should override
* processRevision instead.
- * @param Database $rev
+ * @param WikiRevision $rev
*/
public function handleRevision( $rev ) {
$title = $rev->getTitle();
diff --git a/maintenance/dumpTextPass.php b/maintenance/dumpTextPass.php
index 5d92eec..581f0d7 100644
--- a/maintenance/dumpTextPass.php
+++ b/maintenance/dumpTextPass.php
@@ -27,7 +27,7 @@
require_once __DIR__ . '/backup.inc';
require_once __DIR__ . '/../includes/export/WikiExporter.php';
-use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* @ingroup Maintenance
@@ -88,7 +88,7 @@
protected $checkpointFiles = [];
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
protected $db;
diff --git a/maintenance/fetchText.php b/maintenance/fetchText.php
index 9dee6e5..9c5a375 100644
--- a/maintenance/fetchText.php
+++ b/maintenance/fetchText.php
@@ -24,6 +24,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Maintenance script used to fetch page text in a subprocess.
*
@@ -71,7 +73,7 @@
/**
* May throw a database error if, say, the server dies during query.
- * @param Database $db
+ * @param IDatabase $db
* @param int $id The old_id
* @return string
*/
diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php
index 80e8011..0bd627f 100644
--- a/maintenance/namespaceDupes.php
+++ b/maintenance/namespaceDupes.php
@@ -24,11 +24,12 @@
* @ingroup Maintenance
*/
+require_once __DIR__ . '/Maintenance.php';
+
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\ResultWrapper;
-
-require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* Maintenance script that checks for articles to fix after
@@ -39,7 +40,7 @@
class NamespaceConflictChecker extends Maintenance {
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
protected $db;
diff --git a/maintenance/orphans.php b/maintenance/orphans.php
index 2da8830..e36c5b6 100644
--- a/maintenance/orphans.php
+++ b/maintenance/orphans.php
@@ -30,6 +30,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script that looks for 'orphan' revisions hooked to pages which
* don't exist and 'childless' pages with no revisions.
@@ -56,7 +58,7 @@
/**
* Lock the appropriate tables for the script
- * @param Database $db
+ * @param IMaintainableDatabase $db
* @param string[] $extraTable The name of any extra tables to lock
(eg: text)
*/
private function lockTables( $db, $extraTable = [] ) {
diff --git a/maintenance/populateContentModel.php
b/maintenance/populateContentModel.php
index b41e0e0..7d83180 100644
--- a/maintenance/populateContentModel.php
+++ b/maintenance/populateContentModel.php
@@ -23,13 +23,15 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Usage:
* populateContentModel.php --ns=1 --table=page
*/
class PopulateContentModel extends Maintenance {
protected $wikiId;
-
+ /** @var WANObjectCache */
protected $wanCache;
public function __construct() {
@@ -78,7 +80,7 @@
$this->wanCache->delete( $revisionKey );
}
- private function updatePageRows( Database $dbw, $pageIds, $model ) {
+ private function updatePageRows( IDatabase $dbw, $pageIds, $model ) {
$count = count( $pageIds );
$this->output( "Setting $count rows to $model..." );
$dbw->update(
@@ -91,7 +93,7 @@
$this->output( "done.\n" );
}
- protected function populatePage( Database $dbw, $ns ) {
+ protected function populatePage( IDatabase $dbw, $ns ) {
$toSave = [];
$lastId = 0;
$nsCondition = $ns === 'all' ? [] : [ 'page_namespace' => $ns ];
@@ -123,7 +125,7 @@
}
}
- private function updateRevisionOrArchiveRows( Database $dbw, $ids,
$model, $table ) {
+ private function updateRevisionOrArchiveRows( IDatabase $dbw, $ids,
$model, $table ) {
$prefix = $table === 'archive' ? 'ar' : 'rev';
$model_column = "{$prefix}_content_model";
$format_column = "{$prefix}_content_format";
@@ -142,7 +144,7 @@
$this->output( "done.\n" );
}
- protected function populateRevisionOrArchive( Database $dbw, $table,
$ns ) {
+ protected function populateRevisionOrArchive( IDatabase $dbw, $table,
$ns ) {
$prefix = $table === 'archive' ? 'ar' : 'rev';
$model_column = "{$prefix}_content_model";
$format_column = "{$prefix}_content_format";
diff --git a/maintenance/populateRecentChangesSource.php
b/maintenance/populateRecentChangesSource.php
index ac87cf3..5d5da89 100644
--- a/maintenance/populateRecentChangesSource.php
+++ b/maintenance/populateRecentChangesSource.php
@@ -23,6 +23,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Maintenance script to populate the rc_source field.
*
@@ -83,7 +85,7 @@
return __CLASS__;
}
- protected function buildUpdateCondition( Database $dbw ) {
+ protected function buildUpdateCondition( IDatabase $dbw ) {
$rcNew = $dbw->addQuotes( RC_NEW );
$rcSrcNew = $dbw->addQuotes( RecentChange::SRC_NEW );
$rcEdit = $dbw->addQuotes( RC_EDIT );
diff --git a/maintenance/rebuildImages.php b/maintenance/rebuildImages.php
index 6aa1f37..966864e 100644
--- a/maintenance/rebuildImages.php
+++ b/maintenance/rebuildImages.php
@@ -32,6 +32,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script to update image metadata records.
*
@@ -40,7 +42,7 @@
class ImageBuilder extends Maintenance {
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
protected $dbw;
diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php
index b7f0762..e4bb60e 100644
--- a/maintenance/rebuildtextindex.php
+++ b/maintenance/rebuildtextindex.php
@@ -27,6 +27,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script that rebuilds search index table from scratch.
*
@@ -36,7 +38,7 @@
const RTI_CHUNK_SIZE = 500;
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
private $db;
diff --git a/maintenance/refreshImageMetadata.php
b/maintenance/refreshImageMetadata.php
index 372c352..b557f3d 100644
--- a/maintenance/refreshImageMetadata.php
+++ b/maintenance/refreshImageMetadata.php
@@ -29,6 +29,9 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script to refresh image metadata fields.
*
@@ -37,7 +40,7 @@
class RefreshImageMetadata extends Maintenance {
/**
- * @var Database
+ * @var IMaintainableDatabase
*/
protected $dbw;
@@ -205,7 +208,7 @@
}
/**
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return array
*/
function getConditions( $dbw ) {
diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php
index 67f7780..a6cd548 100644
--- a/maintenance/refreshLinks.php
+++ b/maintenance/refreshLinks.php
@@ -390,7 +390,7 @@
* By specifying a null $start or $end, it is also possible to create
* half-bounded or unbounded intervals using this function.
*
- * @param IDatabase $db Database connection
+ * @param IDatabase $db
* @param string $var Field name
* @param mixed $start First value to include or null
* @param mixed $end Last value to include or null
diff --git a/maintenance/sql.php b/maintenance/sql.php
index b03620d..70f9aaa 100644
--- a/maintenance/sql.php
+++ b/maintenance/sql.php
@@ -77,7 +77,7 @@
$index = DB_MASTER;
}
- /** @var Database $db DB handle for the appropriate
cluster/wiki */
+ /** @var IDatabase $db DB handle for the appropriate
cluster/wiki */
$db = $lb->getConnection( $index, [], $wiki );
if ( $replicaDB != '' && $db->getLBInfo( 'master' ) !== null ) {
$this->error( "The server selected ({$db->getServer()})
is not a replica DB.", 1 );
diff --git a/maintenance/update.php b/maintenance/update.php
index d96cecd..5f705ba 100755
--- a/maintenance/update.php
+++ b/maintenance/update.php
@@ -27,6 +27,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
/**
* Maintenance script to run database schema updates.
*
@@ -145,7 +147,7 @@
$this->output( "Going to run database updates for " .
wfWikiID() . "\n" );
if ( $db->getType() === 'sqlite' ) {
- /** @var Database|DatabaseSqlite $db */
+ /** @var IMaintainableDatabase|DatabaseSqlite $db */
$this->output( "Using SQLite file:
'{$db->getDbFilePath()}'\n" );
}
$this->output( "Depending on the size of your database this may
take a while!\n" );
diff --git a/maintenance/updateCollation.php b/maintenance/updateCollation.php
index e70a176..84fc2d2 100644
--- a/maintenance/updateCollation.php
+++ b/maintenance/updateCollation.php
@@ -26,6 +26,8 @@
require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IDatabase;
+
/**
* Maintenance script that will find all rows in the categorylinks table
* whose collation is out-of-date.
@@ -242,7 +244,7 @@
* Return an SQL expression selecting rows which sort above the given
row,
* assuming an ordering of cl_collation, cl_to, cl_type, cl_from
* @param stdClass $row
- * @param Database $dbw
+ * @param IDatabase $dbw
* @return string
*/
function getBatchCondition( $row, $dbw ) {
--
To view, visit https://gerrit.wikimedia.org/r/345706
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib53e9fa948deb2f9a70f0ce16c002613d0060bf9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits