diff options
Diffstat (limited to 'maintenance/backup.inc')
-rw-r--r-- | maintenance/backup.inc | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/maintenance/backup.inc b/maintenance/backup.inc index 9f67a1ac..e3dc488b 100644 --- a/maintenance/backup.inc +++ b/maintenance/backup.inc @@ -28,7 +28,7 @@ * @ingroup Dump Maintenance */ class DumpDBZip2Output extends DumpPipeOutput { - function DumpDBZip2Output( $file ) { + function __construct( $file ) { parent::__construct( "dbzip2", $file ); } } @@ -61,6 +61,15 @@ class BackupDumper { var $outputTypes = array(), $filterTypes = array(); /** + * The dependency-injected database to use. + * + * @var DatabaseBase|null + * + * @see self::setDb + */ + protected $forcedDb = null; + + /** * @var LoadBalancer */ protected $lb; @@ -245,9 +254,12 @@ class BackupDumper { $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(); } @@ -259,16 +271,32 @@ class BackupDumper { * @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(); @@ -300,9 +328,9 @@ class BackupDumper { 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; |