diff options
author | Amir Sarabadani <ladsgroup@gmail.com> | 2022-01-03 11:24:23 +0100 |
---|---|---|
committer | Ladsgroup <Ladsgroup@gmail.com> | 2022-01-05 01:34:41 +0000 |
commit | 0c34b8e7d6d9520f46698bd1cbede560722b8722 (patch) | |
tree | e8b3a295d6dbf6f5d0e57ab4b5d5b392f8f50771 | |
parent | dc3e3a80f9550742408e6afc8d56a68b13c9f24c (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.php | 42 |
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; |