*/
require_once __DIR__ . '/../Maintenance.php';
+require_once __DIR__ . '/../../includes/export/WikiExporter.php';
use MediaWiki\MediaWikiServices;
use Wikimedia\Rdbms\LoadBalancer;
-use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* @ingroup Dump
public $dumpUploads = false;
public $dumpUploadFileContents = false;
public $orderRevs = false;
+ public $limitNamespaces = [];
protected $reportingInterval = 100;
protected $pageCount = 0;
protected $revCount = 0;
+ protected $schemaVersion = null; // use default
protected $server = null; // use default
protected $sink = null; // Output filters
protected $lastTime = 0;
/**
* The dependency-injected database to use.
*
- * @var IDatabase|null
+ * @var IMaintainableDatabase|null
*
* @see self::setDB
*/
$this->registerOutput( 'gzip', DumpGZipOutput::class );
$this->registerOutput( 'bzip2', DumpBZip2Output::class );
$this->registerOutput( 'dbzip2', DumpDBZip2Output::class );
+ $this->registerOutput( 'lbzip2', DumpLBZip2Output::class );
$this->registerOutput( '7zip', Dump7ZipOutput::class );
$this->registerFilter( 'latest', DumpLatestFilter::class );
$this->addOption( 'plugin', 'Load a dump plugin class. Specify as <class>[:<file>].',
false, true, false, true );
$this->addOption( 'output', 'Begin a filtered output stream; Specify as <type>:<file>. ' .
- '<type>s: file, gzip, bzip2, 7zip, dbzip2', false, true, false, true );
+ '<type>s: file, gzip, bzip2, 7zip, dbzip2, lbzip2', false, true, false, true );
$this->addOption( 'filter', 'Add a filter on an output branch. Specify as ' .
'<type>[:<options>]. <types>s: latest, notalk, namespace', false, true, false, true );
$this->addOption( 'report', 'Report position and speed after every n pages processed. ' .
'Default: 100.', false, true );
+ $this->addOption( 'schema-version', 'Schema version to use for output. ' .
+ 'Default: ' . WikiExporter::schemaVersion(), false, true );
$this->addOption( 'server', 'Force reading from MySQL server', false, true );
$this->addOption( '7ziplevel', '7zip compression level for all 7zip outputs. Used for ' .
'-mx option to 7za command.', false, true );
$sink = null;
$sinks = [];
+ $this->schemaVersion = WikiExporter::schemaVersion();
+
$options = $this->orderedOptions;
foreach ( $options as $arg ) {
- $opt = $arg[0];
- $param = $arg[1];
+ list( $opt, $param ) = $arg;
switch ( $opt ) {
case 'plugin':
unset( $sink );
$sink = $filter;
+ break;
+ case 'schema-version':
+ if ( !in_array( $param, XmlDumpWriter::$supportedSchemas ) ) {
+ $this->fatalError(
+ "Unsupported schema version $param. Supported versions: " .
+ implode( ', ', XmlDumpWriter::$supportedSchemas )
+ );
+ }
+ $this->schemaVersion = $param;
break;
}
}
$this->initProgress( $history );
$db = $this->backupDb();
- $exporter = new WikiExporter( $db, $history, $text );
+ $exporter = new WikiExporter( $db, $history, $text, $this->limitNamespaces );
+ $exporter->setSchemaVersion( $this->schemaVersion );
$exporter->dumpUploads = $this->dumpUploads;
$exporter->dumpUploadFileContents = $this->dumpUploadFileContents;
$dbr = $this->forcedDb;
if ( $this->forcedDb === null ) {
- $dbr = wfGetDB( DB_REPLICA );
+ $dbr = $this->getDB( DB_REPLICA );
}
$this->maxCount = $dbr->selectField( $table, "MAX($field)", '', __METHOD__ );
$this->startTime = microtime( true );
* @todo Fixme: the --server parameter is currently not respected, as it
* doesn't seem terribly easy to ask the load balancer for a particular
* connection by name.
- * @return IDatabase
+ * @return IMaintainableDatabase
*/
function backupDb() {
if ( $this->forcedDb !== null ) {
$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
$this->lb = $lbFactory->newMainLB();
- $db = $this->lb->getConnection( DB_REPLICA, 'dump' );
+ $db = $this->lb->getMaintenanceConnectionRef( DB_REPLICA, 'dump' );
// Discourage the server from disconnecting us if it takes a long time
// to read out the big ol' batch query.
* Force the dump to use the provided database connection for database
* operations, wherever possible.
*
- * @param IDatabase|null $db (Optional) the database connection to use. If null, resort to
- * use the globally provided ways to get database connections.
+ * @param IMaintainableDatabase $db The database connection to use
*/
- function setDB( IDatabase $db = null ) {
+ function setDB( IMaintainableDatabase $db ) {
parent::setDB( $db );
$this->forcedDb = $db;
}
$pageRatePart = '-';
$revRatePart = '-';
}
+
+ $dbDomain = WikiMap::getCurrentWikiDbDomain()->getId();
$this->progress( sprintf(
"%s: %s (ID %d) %d pages (%0.1f|%0.1f/sec all|curr), "
. "%d revs (%0.1f|%0.1f/sec all|curr), ETA %s [max %d]",
- $now, wfWikiID(), $this->ID, $this->pageCount, $pageRate,
+ $now, $dbDomain, $this->ID, $this->pageCount, $pageRate,
$pageRatePart, $this->revCount, $revRate, $revRatePart, $etats,
$this->maxCount
) );