*/
class UpdateCollation extends Maintenance {
const BATCH_SIZE = 100; // Number of rows to process in one batch
- const SYNC_INTERVAL = 20; // Wait for slaves after this many batches
+ const SYNC_INTERVAL = 5; // Wait for slaves after this many batches
public $sizeHistogram = [];
global $wgCategoryCollation;
$dbw = $this->getDB( DB_MASTER );
+ $dbr = $this->getDB( DB_SLAVE );
$force = $this->getOption( 'force' );
$dryRun = $this->getOption( 'dry-run' );
$verboseStats = $this->getOption( 'verbose-stats' );
$options = [
'LIMIT' => self::BATCH_SIZE,
'ORDER BY' => $orderBy,
+ 'STRAIGHT_JOIN' // per T58041
];
- if ( $force || $dryRun ) {
+ if ( $force ) {
$collationConds = [];
} else {
if ( $this->hasOption( 'previous-collation' ) ) {
];
}
- $count = $dbw->estimateRowCount(
+ $count = $dbr->estimateRowCount(
'categorylinks',
'*',
$collationConds,
);
// Improve estimate if feasible
if ( $count < 1000000 ) {
- $count = $dbw->selectField(
+ $count = $dbr->selectField(
'categorylinks',
'COUNT(*)',
$collationConds,
return;
}
- $this->output( "Fixing collation for $count rows.\n" );
+ if ( $dryRun ) {
+ $this->output( "$count rows would be updated.\n" );
+ } else {
+ $this->output( "Fixing collation for $count rows.\n" );
+ }
+ wfWaitForSlaves();
}
$count = 0;
$batchCount = 0;