X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2Fbackup.inc;h=e3dc488b54429487bddd513c6a20a550969cd67b;hb=51491c785b688a63949d0500703e38b95700d948;hp=36c3beb573ae9d3d7d7532ddc3b7b16f483c6850;hpb=e336b5e951ed31eef3ddeb9c2e4abbb06f070c34;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/backup.inc b/maintenance/backup.inc index 36c3beb573..e3dc488b54 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 ); } } @@ -47,6 +47,8 @@ class BackupDumper { var $skipFooter = false; // don't output 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; @@ -58,6 +60,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 */ @@ -217,6 +228,8 @@ class BackupDumper { } 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(); } @@ -241,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(); } @@ -255,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(); @@ -296,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;