http://www.mediawiki.org/wiki/Special:Code/MediaWiki/97867
Revision: 97867
Author: asher
Date: 2011-09-22 23:39:12 +0000 (Thu, 22 Sep 2011)
Log Message:
-----------
rewrite to use Maintenance framework - added a cli
option to override sectionsByDB based on the new
wmf-config/db-secondary.php config file pointing to
non-prod slaves (eqiad datacenter + analytics)
Modified Paths:
--------------
branches/wmf/1.18wmf1/maintenance/upgrade-1.18wmf1-1.php
Modified: branches/wmf/1.18wmf1/maintenance/upgrade-1.18wmf1-1.php
===================================================================
--- branches/wmf/1.18wmf1/maintenance/upgrade-1.18wmf1-1.php 2011-09-22
23:06:27 UTC (rev 97866)
+++ branches/wmf/1.18wmf1/maintenance/upgrade-1.18wmf1-1.php 2011-09-22
23:39:12 UTC (rev 97867)
@@ -1,109 +1,128 @@
<?php
-require( dirname( __FILE__ ) . '/commandLine.inc' );
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-doAllSchemaChanges();
-function doAllSchemaChanges() {
- global $wgLBFactoryConf, $wgConf;
+class SchemaMigration extends Maintenance {
- $sectionLoads = $wgLBFactoryConf['sectionLoads'];
- $sectionsByDB = $wgLBFactoryConf['sectionsByDB'];
- $rootPass = trim( wfShellExec( '/home/wikipedia/bin/mysql_root_pass' )
);
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = "Run Schema Migrations for branch against all
wikis";
+ $this->addOption( 'secondary', 'Run on secondary / non-prod slaves',
false, false );
+ }
- // Compile wiki lists
- $wikisBySection = array();
- foreach ( $wgConf->getLocalDatabases() as $wiki ) {
- if ( isset( $sectionsByDB[$wiki] ) ) {
- $wikisBySection[$sectionsByDB[$wiki]][] = $wiki;
- } else {
- $wikisBySection['DEFAULT'][] = $wiki;
- }
- }
+ function doAllSchemaChanges() {
+ global $wgLBFactoryConf, $wgConf;
- // Do the upgrades
- foreach ( $sectionLoads as $section => $loads ) {
- $master = true;
- foreach ( $loads as $server => $load ) {
- if ( $master ) {
- echo "Skipping $section master $server\n";
- $master = false;
- continue;
- }
+ if ( $this->getOption( 'secondary' ) ) {
+ require( dirname( __FILE__ ) .
'/../../wmf-config/db-secondary.php' );
+ }
- $db = new DatabaseMysql(
- $server,
- 'root',
- $rootPass,
- false, /* dbName */
- 0, /* flags, no transactions */
- '' /* prefix */
- );
+ $sectionLoads = $wgLBFactoryConf['sectionLoads'];
+ $sectionsByDB = $wgLBFactoryConf['sectionsByDB'];
- foreach ( $wikisBySection[$section] as $wiki ) {
- $db->selectDB( $wiki );
- upgradeWiki( $db );
- while ( $db->getLag() > 10 ) {
- echo "Waiting for $server to catch up
to master.\n";
- sleep( 60 );
- }
- }
- }
- }
+ $rootPass = trim( wfShellExec( '/home/wikipedia/bin/mysql_root_pass' )
);
- echo "All done (except masters).\n";
-}
+ // Compile wiki lists
+ $wikisBySection = array();
+ foreach ( $wgConf->getLocalDatabases() as $wiki ) {
+ if ( isset( $sectionsByDB[$wiki] ) ) {
+ $wikisBySection[$sectionsByDB[$wiki]][] = $wiki;
+ } else {
+ $wikisBySection['DEFAULT'][] = $wiki;
+ }
+ }
-function upgradeWiki( $db ) {
- $wiki = $db->getDBname();
- $server = $db->getServer();
+ // Do the upgrades
+ foreach ( $sectionLoads as $section => $loads ) {
+ $master = true;
+ foreach ( $loads as $server => $load ) {
+ if ( $master ) {
+ echo "Skipping $section master $server\n";
+ $master = false;
+ continue;
+ }
- $upgradeLogRow = $db->selectRow( 'updatelog',
- 'ul_key',
- array( 'ul_key' => '1.18wmf1-1' ),
- __FUNCTION__ );
- if ( $upgradeLogRow ) {
- echo $db->getDBname() . ": already done\n";
- return;
- }
+ $db = new DatabaseMysql(
+ $server,
+ 'root',
+ $rootPass,
+ false, /* dbName */
+ 0, /* flags, no transactions */
+ '' /* prefix */
+ );
- echo "$server $wiki 1.18wmf1-1";
+ foreach ( $wikisBySection[$section] as $wiki ) {
+ $db->selectDB( $wiki );
+ $this->upgradeWiki( $db );
+ while ( $db->getLag() > 10 ) {
+ echo "Waiting for $server to catch up to master.\n";
+ sleep( 60 );
+ }
+ }
+ }
+ }
- sourceUpgradeFile( $db, dirname( __FILE__ )
.'/schema-changes-1.18wmf1-1.sql' );
-
- if ( isFlaggedRevsWiki( $wiki ) ) {
- echo " FlaggedRevs";
- sourceUpgradeFile( $db,
dirname(__FILE__).'/../extensions/FlaggedRevs/schema/mysql/' .
- 'patch-fr_page_rev-index-wmf1.8.sql' );
- }
+ echo "All done (except masters).\n";
+ }
- if ( $db->fieldExists( 'article_feedback', 'aa_page_id' ) ) {
- echo " aa_page_id index";
- sourceUpgradeFile( $db, dirname( __FILE__ ) .
'/../extensions/ArticleFeedback/sql/AddArticleFeedbackPageIndex.sql' );
- }
+ function upgradeWiki( $db ) {
+ $wiki = $db->getDBname();
+ $server = $db->getServer();
- $db->insert( 'updatelog',
- array( 'ul_key' => '1.18wmf1-1' ),
- __FUNCTION__ );
- echo " ok\n";
-}
+ $upgradeLogRow = $db->selectRow( 'updatelog',
+ 'ul_key',
+ array( 'ul_key' => '1.18wmf1-1' ),
+ __FUNCTION__ );
+ if ( $upgradeLogRow ) {
+ echo $db->getDBname() . ": already done\n";
+ return;
+ }
-function isFlaggedRevsWiki( $wiki ) {
- static $dblist;
- global $IP;
+ echo "$server $wiki 1.18wmf1-1";
- if ( $dblist === null ) {
- $dblist = array_map( 'trim', file( "$IP/../flaggedrevs.dblist"
) );
- }
- return in_array( $wiki, $dblist );
-}
+ $this->sourceUpgradeFile( $db, dirname( __FILE__ )
.'/schema-changes-1.18wmf1-1.sql' );
+
+ if ( $this->isFlaggedRevsWiki( $wiki ) ) {
+ echo " FlaggedRevs";
+ $this->sourceUpgradeFile( $db,
dirname(__FILE__).'/../extensions/FlaggedRevs/schema/mysql/' .
+ 'patch-fr_page_rev-index-wmf1.8.sql' );
+ }
-function sourceUpgradeFile( $db, $file ) {
- if ( !file_exists( $file ) ) {
- echo "File missing: $file\n";
- exit( 1 );
- }
- $db->sourceFile( $file );
+ if ( $db->fieldExists( 'article_feedback', 'aa_page_id' ) ) {
+ echo " aa_page_id index";
+ $this->sourceUpgradeFile( $db, dirname( __FILE__ ) .
'/../extensions/ArticleFeedback/sql/AddArticleFeedbackPageIndex.sql' );
+ }
+
+ $db->insert( 'updatelog',
+ array( 'ul_key' => '1.18wmf1-1' ),
+ __FUNCTION__ );
+ echo " ok\n";
+ }
+
+ function isFlaggedRevsWiki( $wiki ) {
+ static $dblist;
+ global $IP;
+
+ if ( $dblist === null ) {
+ $dblist = array_map( 'trim', file( "$IP/../flaggedrevs.dblist" ) );
+ }
+ return in_array( $wiki, $dblist );
+ }
+
+ function sourceUpgradeFile( $db, $file ) {
+ if ( !file_exists( $file ) ) {
+ echo "File missing: $file\n";
+ exit( 1 );
+ }
+ $db->sourceFile( $file );
+ }
+
+ function execute() {
+ $this->doAllSchemaChanges();
+ }
}
+$maintClass = "SchemaMigration";
+require_once( RUN_MAINTENANCE_IF_MAIN );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs