summaryrefslogtreecommitdiff
path: root/maintenance/backup.inc
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/backup.inc')
-rw-r--r--maintenance/backup.inc42
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;