From: Bartosz DziewoƄski Date: Sun, 22 May 2016 20:48:11 +0000 (+0200) Subject: populateRevisionLength: Read from slaves when possible X-Git-Tag: 1.31.0-rc.0~6753^2 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=4e214028863cf78dd14418ec7ff179dd55f6c474;p=lhc%2Fweb%2Fwiklou.git populateRevisionLength: Read from slaves when possible The references to revision content stored in 'revision' and 'archive' tables are immutable (outside of other maintenance scripts), so we can safely query them from slave databases. Also: * Avoid transactions with no operations inside them * Improve documentation Bug: T135414 Change-Id: I3e1407e18e09cf01f105c1cae6d6c23bfde747e6 --- diff --git a/maintenance/populateRevisionLength.php b/maintenance/populateRevisionLength.php index 10408ec7cb..dcb9933e5b 100644 --- a/maintenance/populateRevisionLength.php +++ b/maintenance/populateRevisionLength.php @@ -1,7 +1,6 @@ getDB( DB_MASTER ); - if ( !$db->tableExists( 'revision' ) ) { + $dbw = $this->getDB( DB_MASTER ); + if ( !$dbw->tableExists( 'revision' ) ) { $this->error( "revision table does not exist", true ); - } elseif ( !$db->tableExists( 'archive' ) ) { + } elseif ( !$dbw->tableExists( 'archive' ) ) { $this->error( "archive table does not exist", true ); - } elseif ( !$db->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) { + } elseif ( !$dbw->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) { $this->output( "rev_len column does not exist\n\n", true ); return false; @@ -73,9 +73,10 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { * @return int */ protected function doLenUpdates( $table, $idCol, $prefix, $fields ) { - $db = $this->getDB( DB_MASTER ); - $start = $db->selectField( $table, "MIN($idCol)", false, __METHOD__ ); - $end = $db->selectField( $table, "MAX($idCol)", false, __METHOD__ ); + $dbr = $this->getDB( DB_SLAVE ); + $dbw = $this->getDB( DB_MASTER ); + $start = $dbw->selectField( $table, "MIN($idCol)", false, __METHOD__ ); + $end = $dbw->selectField( $table, "MAX($idCol)", false, __METHOD__ ); if ( !$start || !$end ) { $this->output( "...$table table seems to be empty.\n" ); @@ -89,7 +90,7 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { while ( $blockStart <= $end ) { $this->output( "...doing $idCol from $blockStart to $blockEnd\n" ); - $res = $db->select( + $res = $dbr->select( $table, $fields, [ @@ -100,14 +101,16 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { __METHOD__ ); - $this->beginTransaction( $db, __METHOD__ ); - # Go through and update rev_len from these rows. - foreach ( $res as $row ) { - if ( $this->upgradeRow( $row, $table, $idCol, $prefix ) ) { - $count++; + if ( $res->numRows() > 0 ) { + $this->beginTransaction( $dbw, __METHOD__ ); + # Go through and update rev_len from these rows. + foreach ( $res as $row ) { + if ( $this->upgradeRow( $row, $table, $idCol, $prefix ) ) { + $count++; + } } + $this->commitTransaction( $dbw, __METHOD__ ); } - $this->commitTransaction( $db, __METHOD__ ); $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; @@ -125,7 +128,7 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { * @return bool */ protected function upgradeRow( $row, $table, $idCol, $prefix ) { - $db = $this->getDB( DB_MASTER ); + $dbw = $this->getDB( DB_MASTER ); $rev = ( $table === 'archive' ) ? Revision::newFromArchiveRow( $row ) @@ -141,7 +144,7 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance { } # Update the row... - $db->update( $table, + $dbw->update( $table, [ "{$prefix}_len" => $content->getSize() ], [ $idCol => $row->$idCol ], __METHOD__