summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmir Sarabadani <ladsgroup@gmail.com>2022-01-03 11:24:23 +0100
committerLadsgroup <Ladsgroup@gmail.com>2022-01-05 01:34:41 +0000
commit0c34b8e7d6d9520f46698bd1cbede560722b8722 (patch)
treee8b3a295d6dbf6f5d0e57ab4b5d5b392f8f50771
parentdc3e3a80f9550742408e6afc8d56a68b13c9f24c (diff)
maintenance: Add support for oldimage table metadata refresh
This doesn't handle deleted files yet but that can be done in later patches. I have been struggling to find a solution for it. Bug: T298417 Change-Id: I4f33afa92be8b55d6b8f9797cb4d3aa03a37ad79 (cherry picked from commit 28ad6f27fbbfb0e267a707d190b8b5c1c9af5afb)
-rw-r--r--maintenance/refreshImageMetadata.php42
1 files changed, 26 insertions, 16 deletions
diff --git a/maintenance/refreshImageMetadata.php b/maintenance/refreshImageMetadata.php
index ca5ac1346205..1bb75dc4c5d8 100644
--- a/maintenance/refreshImageMetadata.php
+++ b/maintenance/refreshImageMetadata.php
@@ -107,6 +107,7 @@ class RefreshImageMetadata extends Maintenance {
false,
true
);
+ $this->addOption( 'oldimage', 'Run and refresh on oldimage table.' );
}
public function execute() {
@@ -117,6 +118,14 @@ class RefreshImageMetadata extends Maintenance {
$split = $this->hasOption( 'split' );
$sleep = (int)$this->getOption( 'sleep', 0 );
$reserialize = $this->hasOption( 'convert-to-json' );
+ $oldimage = $this->hasOption( 'oldimage' );
+ if ( $oldimage ) {
+ $fieldPrefix = 'oi_';
+ $fileQuery = OldLocalFile::getQueryInfo();
+ } else {
+ $fieldPrefix = 'img_';
+ $fileQuery = LocalFile::getQueryInfo();
+ }
$upgraded = 0;
$leftAlone = 0;
@@ -129,20 +138,19 @@ class RefreshImageMetadata extends Maintenance {
}
$repo = $this->newLocalRepo( $force, $brokenOnly, $reserialize, $split );
- $conds = $this->getConditions( $dbw );
+ $conds = $this->getConditions( $dbw, $fieldPrefix );
// For the WHERE img_name > 'foo' condition that comes after doing a batch
$conds2 = [];
if ( $start !== false ) {
- $conds2[] = 'img_name >= ' . $dbw->addQuotes( $start );
+ $conds2[] = $fieldPrefix . 'name >= ' . $dbw->addQuotes( $start );
}
$options = [
'LIMIT' => $batchSize,
- 'ORDER BY' => 'img_name ASC',
+ 'ORDER BY' => $fieldPrefix . 'name ASC',
];
- $fileQuery = LocalFile::getQueryInfo();
$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
do {
@@ -155,9 +163,10 @@ class RefreshImageMetadata extends Maintenance {
$fileQuery['joins']
);
+ $nameField = $fieldPrefix . 'name';
if ( $res->numRows() > 0 ) {
$row1 = $res->current();
- $this->output( "Processing next {$res->numRows()} row(s) starting with {$row1->img_name}.\n" );
+ $this->output( "Processing next {$res->numRows()} row(s) starting with {$row1->$nameField}.\n" );
$res->rewind();
}
@@ -169,26 +178,26 @@ class RefreshImageMetadata extends Maintenance {
if ( $file->getUpgraded() ) {
// File was upgraded.
$upgraded++;
- $this->output( "Refreshed File:{$row->img_name}.\n" );
+ $this->output( "Refreshed File:{$row->$nameField}.\n" );
} else {
$leftAlone++;
if ( $force ) {
$file->upgradeRow();
if ( $verbose ) {
- $this->output( "Forcibly refreshed File:{$row->img_name}.\n" );
+ $this->output( "Forcibly refreshed File:{$row->$nameField}.\n" );
}
} else {
if ( $verbose ) {
- $this->output( "Skipping File:{$row->img_name}.\n" );
+ $this->output( "Skipping File:{$row->$nameField}.\n" );
}
}
}
} catch ( Exception $e ) {
- $this->output( "{$row->img_name} failed. {$e->getMessage()}\n" );
+ $this->output( "{$row->$nameField} failed. {$e->getMessage()}\n" );
}
}
if ( $res->numRows() > 0 ) {
- $conds2 = [ 'img_name > ' . $dbw->addQuotes( $row->img_name ) ];
+ $conds2 = [ $fieldPrefix . 'name > ' . $dbw->addQuotes( $row->$nameField ) ];
}
$lbFactory->waitForReplication();
if ( $sleep ) {
@@ -210,9 +219,10 @@ class RefreshImageMetadata extends Maintenance {
/**
* @param IDatabase $dbw
+ * @param string $fieldPrefix like img_ or oi_
* @return array
*/
- private function getConditions( $dbw ) {
+ private function getConditions( $dbw, $fieldPrefix ) {
$conds = [];
$end = $this->getOption( 'end', false );
@@ -221,20 +231,20 @@ class RefreshImageMetadata extends Maintenance {
$like = $this->getOption( 'metadata-contains', false );
if ( $end !== false ) {
- $conds[] = 'img_name <= ' . $dbw->addQuotes( $end );
+ $conds[] = $fieldPrefix . 'name <= ' . $dbw->addQuotes( $end );
}
if ( $mime !== false ) {
list( $major, $minor ) = File::splitMime( $mime );
- $conds['img_major_mime'] = $major;
+ $conds[$fieldPrefix . 'major_mime'] = $major;
if ( $minor !== '*' ) {
- $conds['img_minor_mime'] = $minor;
+ $conds[$fieldPrefix . 'minor_mime'] = $minor;
}
}
if ( $mediatype !== false ) {
- $conds['img_media_type'] = $mediatype;
+ $conds[$fieldPrefix . 'media_type'] = $mediatype;
}
if ( $like ) {
- $conds[] = 'img_metadata ' . $dbw->buildLike( $dbw->anyString(), $like, $dbw->anyString() );
+ $conds[] = $fieldPrefix . 'metadata ' . $dbw->buildLike( $dbw->anyString(), $like, $dbw->anyString() );
}
return $conds;