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

Reply via email to