public $orphanBatchSize = 1000;
public $reportingInterval = 10;
public $numProcs = 1;
+ public $numBatches = 0;
public $useDiff, $pageBlobClass, $orphanBlobClass;
public $slavePipes, $slaveProcs, $prevSlaveId;
public $copyOnly = false;
return false;
}
- $row = $dbr->selectRow( 'blob_tracking', '*', false, __METHOD__ );
+ $row = $dbr->selectRow( 'blob_tracking', '*', '', __METHOD__ );
if ( !$row ) {
$this->info( "Warning: blob_tracking table contains no rows, skipping this wiki." );
$this->slavePipes = $this->slaveProcs = array();
for ( $i = 0; $i < $this->numProcs; $i++ ) {
- $pipes = false;
+ $pipes = array();
$spec = array(
array( 'pipe', 'r' ),
array( 'file', 'php://stdout', 'w' ),
array( 'file', 'php://stderr', 'w' )
);
- wfSuppressWarnings();
+ MediaWiki\suppressWarnings();
$proc = proc_open( "$cmd --slave-id $i", $spec, $pipes );
- wfRestoreWarnings();
+ MediaWiki\restoreWarnings();
if ( !$proc ) {
$this->critical( "Error opening slave process: $cmd" );
exit( 1 );
break;
}
foreach ( $res as $row ) {
+ $startId = $row->bt_page;
$this->dispatch( 'doPage', $row->bt_page );
$i++;
}
- $startId = $row->bt_page;
$this->report( 'pages', $i, $numPages );
}
$this->report( 'pages', $i, $numPages );
if ( $current == $end || $this->numBatches >= $this->reportingInterval ) {
$this->numBatches = 0;
$this->info( "$label: $current / $end" );
- $this->waitForSlaves();
+ wfWaitForSlaves();
}
}
}
$ids = array();
foreach ( $res as $row ) {
+ $startId = $row->bt_text_id;
$ids[] = $row->bt_text_id;
$i++;
}
call_user_func_array( array( $this, 'dispatch' ), $args );
}
- $startId = $row->bt_text_id;
$this->report( 'orphans', $i, $numOrphans );
}
$this->report( 'orphans', $i, $numOrphans );
case 'quit':
return;
}
- $this->waitForSlaves();
+ wfWaitForSlaves();
}
}
$lastTextId = 0;
foreach ( $res as $row ) {
+ $startId = $row->bt_text_id;
if ( $lastTextId == $row->bt_text_id ) {
// Duplicate (null edit)
continue;
$this->debug( "$titleText: committing blob with " . $trx->getSize() . " items" );
$trx->commit();
$trx = new CgzCopyTransaction( $this, $this->pageBlobClass );
- $this->waitForSlaves();
+ wfWaitForSlaves();
}
}
- $startId = $row->bt_text_id;
}
$this->debug( "$titleText: committing blob with " . $trx->getSize() . " items" );
}
$this->debug( 'Incomplete: ' . $res->numRows() . ' rows' );
foreach ( $res as $row ) {
+ $startId = $row->bt_text_id;
$this->moveTextRow( $row->bt_text_id, $row->bt_new_url );
if ( $row->bt_text_id % 10 == 0 ) {
- $this->waitForSlaves();
+ wfWaitForSlaves();
}
}
- $startId = $row->bt_text_id;
}
}
$this->debug( "[orphan]: committing blob with " . $trx->getSize() . " rows" );
$trx->commit();
$trx = new CgzCopyTransaction( $this, $this->orphanBlobClass );
- $this->waitForSlaves();
+ wfWaitForSlaves();
}
}
$this->debug( "[orphan]: committing blob with " . $trx->getSize() . " rows" );
$trx->commit();
}
-
- /**
- * Wait for slaves (quietly)
- */
- function waitForSlaves() {
- $lb = wfGetLB();
- while ( true ) {
- list( $host, $maxLag ) = $lb->getMaxLag();
- if ( $maxLag < 2 ) {
- break;
- }
- sleep( 5 );
- }
- }
}
/**
* Class to represent a recompression operation for a single CGZ blob
*/
class CgzCopyTransaction {
+ /** @var RecompressTracked */
public $parent;
public $blobClass;
+ /** @var ConcatenatedGzipHistoryBlob */
public $cgz;
public $referrers;
return;
}
- // Check to see if the target text_ids have been moved already.
- //
- // We originally read from the slave, so this can happen when a single
- // text_id is shared between multiple pages. It's rare, but possible
- // if a delete/move/undelete cycle splits up a null edit.
- //
- // We do a locking read to prevent closer-run race conditions.
+ /* Check to see if the target text_ids have been moved already.
+ *
+ * We originally read from the slave, so this can happen when a single
+ * text_id is shared between multiple pages. It's rare, but possible
+ * if a delete/move/undelete cycle splits up a null edit.
+ *
+ * We do a locking read to prevent closer-run race conditions.
+ */
$dbw = wfGetDB( DB_MASTER );
$dbw->begin( __METHOD__ );
$res = $dbw->select( 'blob_tracking',
// All have been moved already
if ( $originalCount > 1 ) {
// This is suspcious, make noise
- $this->critical( "Warning: concurrent operation detected, are there two conflicting " .
+ $this->parent->critical(
+ "Warning: concurrent operation detected, are there two conflicting " .
"processes running, doing the same job?" );
}