Cleanups to MigrateFileRepoLayout

* Use "bypassReadOnly" as other file backend maintenance
  scripts do.  One may want to run this while site traffic
  is off via $wgReadOnly.
* Fixed handling for when img_sha1 is not set.
* Fixed some IDEA errors.

Change-Id: I95c426c5f2082576fc9ea40282d2869750a9f3d8
This commit is contained in:
Aaron Schulz 2015-10-04 21:45:25 -07:00
parent d21c75418d
commit b4ff14f730
4 changed files with 19 additions and 13 deletions

View file

@ -361,7 +361,7 @@ class Status {
*
* @note: this handles RawMessage poorly
*
* @param string $type
* @param string|bool $type
* @return array
*/
protected function getStatusArray( $type = false ) {

View file

@ -1444,7 +1444,7 @@ abstract class File implements IDBAccessObject {
* @param string $end Only revisions newer than $end will be returned
* @param bool $inc Include the endpoints of the time range
*
* @return array
* @return File[]
*/
function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
return array();

View file

@ -986,7 +986,7 @@ class LocalFile extends File {
* @param int $start Optional: Timestamp, start from
* @param int $end Optional: Timestamp, end at
* @param bool $inc
* @return array
* @return OldLocalFile[]
*/
function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
$dbr = $this->repo->getSlaveDB();

View file

@ -72,7 +72,8 @@ class MigrateFileRepoLayout extends Maintenance {
$batch = array();
$lastName = '';
do {
$res = $dbw->select( 'image', array( 'img_name', 'img_sha1' ),
$res = $dbw->select( 'image',
array( 'img_name', 'img_sha1' ),
array_merge( array( 'img_name > ' . $dbw->addQuotes( $lastName ) ), $conds ),
__METHOD__,
array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name' )
@ -80,12 +81,14 @@ class MigrateFileRepoLayout extends Maintenance {
foreach ( $res as $row ) {
$lastName = $row->img_name;
$sha1 = $row->img_sha1;
if ( !strlen( $sha1 ) ) {
$this->error( "Image SHA-1 not set for {$row->img_name}." );
} else {
$file = $repo->newFile( $row->img_name );
/** @var LocalFile $file */
$file = $repo->newFile( $row->img_name );
// Check in case SHA1 rows are not populated for some files
$sha1 = strlen( $row->img_sha1 ) ? $row->img_sha1 : $file->getSha1();
if ( !strlen( $sha1 ) ) {
$this->error( "Image SHA-1 not known for {$row->img_name}." );
} else {
if ( $oldLayout === 'sha1' ) {
$spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
} else {
@ -98,7 +101,8 @@ class MigrateFileRepoLayout extends Maintenance {
$dpath = $file->getPath();
}
$status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
$status = $be->prepare( array(
'dir' => dirname( $dpath ), 'bypassReadOnly' => 1 ) );
if ( !$status->isOK() ) {
$this->error( print_r( $status->getErrorsArray(), true ) );
}
@ -130,7 +134,8 @@ class MigrateFileRepoLayout extends Maintenance {
$dpath = $ofile->getPath();
}
$status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
$status = $be->prepare( array(
'dir' => dirname( $dpath ), 'bypassReadOnly' => 1 ) );
if ( !$status->isOK() ) {
$this->error( print_r( $status->getErrorsArray(), true ) );
}
@ -187,7 +192,8 @@ class MigrateFileRepoLayout extends Maintenance {
'/' . $repo->getDeletedHashPath( $sha1Key ) . $sha1Key;
}
$status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
$status = $be->prepare( array(
'dir' => dirname( $dpath ), 'bypassReadOnly' => 1 ) );
if ( !$status->isOK() ) {
$this->error( print_r( $status->getErrorsArray(), true ) );
}
@ -219,7 +225,7 @@ class MigrateFileRepoLayout extends Maintenance {
$this->output( "\"{$op['img']}\" (dest: {$op['dst']})\n" );
}
$status = $be->doOperations( $ops );
$status = $be->doOperations( $ops, array( 'bypassReadOnly' => 1 ) );
if ( !$status->isOK() ) {
$this->output( print_r( $status->getErrorsArray(), true ) );
}