* @ingroup Dump Maintenance
*/
class DumpDBZip2Output extends DumpPipeOutput {
- function DumpDBZip2Output( $file ) {
+ function __construct( $file ) {
parent::__construct( "dbzip2", $file );
}
}
var $skipFooter = false; // don't output </mediawiki>
var $startId = 0;
var $endId = 0;
+ var $revStartId = 0;
+ var $revEndId = 0;
var $sink = null; // Output filters
var $stubText = false; // include rev_text_id instead of text; for 2-pass dump
var $dumpUploads = false;
var $revCountLast = 0;
var $ID = 0;
- function BackupDumper( $args ) {
+ var $outputTypes = array(), $filterTypes = array();
+
+ /**
+ * The dependency-injected database to use.
+ *
+ * @var DatabaseBase|null
+ *
+ * @see self::setDb
+ */
+ protected $forcedDb = null;
+
+ /**
+ * @var LoadBalancer
+ */
+ protected $lb;
+
+ function __construct( $args ) {
$this->stderr = fopen( "php://stderr", "wt" );
// Built-in output and filter plugins
} else if ( is_null( $this->pages ) ) {
if ( $this->startId || $this->endId ) {
$exporter->pagesByRange( $this->startId, $this->endId );
+ } elseif ( $this->revStartId || $this->revEndId ) {
+ $exporter->revsByRange( $this->revStartId, $this->revEndId );
} else {
$exporter->allPages();
}
$table = ( $history == WikiExporter::CURRENT ) ? 'page' : 'revision';
$field = ( $history == WikiExporter::CURRENT ) ? 'page_id' : 'rev_id';
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->forcedDb;
+ if ( $this->forcedDb === null ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ }
$this->maxCount = $dbr->selectField( $table, "MAX($field)", '', __METHOD__ );
- $this->startTime = wfTime();
+ $this->startTime = microtime( true );
$this->lastTime = $this->startTime;
$this->ID = getmypid();
}
* @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 DatabaseBase
*/
function backupDb() {
+ if ( $this->forcedDb !== null ) {
+ return $this->forcedDb;
+ }
+
$this->lb = wfGetLBFactory()->newMainLB();
$db = $this->lb->getConnection( DB_SLAVE, 'backup' );
// Discourage the server from disconnecting us if it takes a long time
// to read out the big ol' batch query.
- $db->setTimeout( 3600 * 24 );
+ $db->setSessionOptions( array( 'connTimeout' => 3600 * 24 ) );
return $db;
}
+ /**
+ * Force the dump to use the provided database connection for database
+ * operations, wherever possible.
+ *
+ * @param $db DatabaseBase|null: (Optional) the database connection to
+ * use. If null, resort to use the globally provided ways to
+ * get database connections.
+ */
+ function setDb( DatabaseBase $db = null ) {
+ $this->forcedDb = $db;
+ }
+
function __destruct() {
if ( isset( $this->lb ) ) {
$this->lb->closeAll();
function showReport() {
if ( $this->reporting ) {
$now = wfTimestamp( TS_DB );
- $nowts = wfTime();
- $deltaAll = wfTime() - $this->startTime;
- $deltaPart = wfTime() - $this->lastTime;
+ $nowts = microtime( true );
+ $deltaAll = $nowts - $this->startTime;
+ $deltaPart = $nowts - $this->lastTime;
$this->pageCountPart = $this->pageCount - $this->pageCountLast;
$this->revCountPart = $this->revCount - $this->revCountLast;
}
class ExportProgressFilter extends DumpFilter {
- function ExportProgressFilter( &$sink, &$progress ) {
+ function __construct( &$sink, &$progress ) {
parent::__construct( $sink );
$this->progress = $progress;
}