From 804cf86dae97af4cb6aacb3408817c10ec8d32a7 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 5 Mar 2008 22:16:40 +0000 Subject: [PATCH] Rearrange the updaters into chronological order, instead of four separate groups by type with weird ordering within them. This should make it a lot easier to avoid regressions due to unnoticed dependencies, like the one we had in 1.11 which broke upgrades from 1.4 or below, when someone didn't realize there was an ordering problem and moved one of the updates for aesthetic grouping reasons. :) (r24608) It also makes it easier to see when past updates were added, since they're now grouped by version. Extension updates are still using the 'add table', 'add field', 'add index' grouping. I also removed the special-case checks for whether to do updates to the user table. This was presumably meant for shared-db situations to avoid running updates multiple times, but there's no need for it as the updates all check if they've been previously applied. --- maintenance/updaters.inc | 257 +++++++++++++++++++-------------------- 1 file changed, 123 insertions(+), 134 deletions(-) diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc index 86e87014d5..61abff4866 100644 --- a/maintenance/updaters.inc +++ b/maintenance/updaters.inc @@ -16,77 +16,124 @@ require_once 'deleteDefaultMessages.php'; # Extension updates require_once( "$IP/includes/Hooks.php" ); -$wgRenamedTables = array( -# from to patch file -# array( 'group', 'groups', 'patch-rename-group.sql' ), -); - -$wgNewTables = array( -# table patch file (in maintenance/archives) - array( 'hitcounter', 'patch-hitcounter.sql' ), - array( 'querycache', 'patch-querycache.sql' ), - array( 'objectcache', 'patch-objectcache.sql' ), - array( 'categorylinks', 'patch-categorylinks.sql' ), - array( 'logging', 'patch-logging.sql' ), - array( 'user_newtalk', 'patch-usernewtalk2.sql' ), - array( 'transcache', 'patch-transcache.sql' ), - array( 'trackbacks', 'patch-trackbacks.sql' ), - array( 'externallinks', 'patch-externallinks.sql' ), - array( 'job', 'patch-job.sql' ), - array( 'langlinks', 'patch-langlinks.sql' ), - array( 'querycache_info', 'patch-querycacheinfo.sql' ), - array( 'filearchive', 'patch-filearchive.sql' ), - array( 'querycachetwo', 'patch-querycachetwo.sql' ), - array( 'redirect', 'patch-redirect.sql' ), - array( 'protected_titles', 'patch-protected_titles.sql' ), - array( 'page_props', 'patch-page_props.sql' ), +/** + * List of update functions to call on a MySQL-based MediaWiki installation, + * in sequence. First item is function name, rest are parameters to pass. + */ +$wgMysqlUpdates = array( + // 1.2 + // update_passwords obsolete + array( 'add_field', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ), + array( 'add_field', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ), + array( 'do_interwiki_update' ), + array( 'do_index_update' ), + // do_linkscc_update obsolete + array( 'add_table', 'hitcounter', 'patch-hitcounter.sql' ), + array( 'add_field', 'recentchanges', 'rc_type', 'patch-rc_type.sql' ), + + // 1.3 + array( 'add_field', 'user', 'user_real_name', 'patch-user-realname.sql' ), + array( 'add_table', 'querycache', 'patch-querycache.sql' ), + array( 'add_table', 'objectcache', 'patch-objectcache.sql' ), + array( 'add_table', 'categorylinks', 'patch-categorylinks.sql' ), + // do_linkscc_1_3_update obsolete + array( 'do_old_links_update' ), + array( 'add_field', 'recentchanges', 'rc_ip', 'patch-rc_ip.sql' ), + + // 1.4 + array( 'do_image_name_unique_update' ), + array( 'add_field', 'recentchanges', 'rc_id', 'patch-rc_id.sql' ), + array( 'add_field', 'recentchanges', 'rc_patrolled', 'patch-rc-patrol.sql' ), + array( 'add_table', 'logging', 'patch-logging.sql' ), + // do_user_rights_update obsolete + array( 'add_field', 'user', 'user_token', 'patch-user_token.sql' ), + // old, old_articleid, patch-remove-old-title-namespace.sql obsolete + // user_groups, patch-userlevels.sql obsolete + // do_group_update() obsolete + array( 'do_watchlist_update' ), + array( 'do_user_update' ), + // do_copy_newtalk_to_watchlist obsolete + + // 1.5 + array( 'do_schema_restructuring' ), + array( 'add_field', 'logging', 'log_params', 'patch-log_params.sql' ), + array( 'do_logging_encoding' ), + array( 'add_field', 'archive', 'ar_rev_id', 'patch-archive-rev_id.sql' ), + array( 'add_field', 'page', 'page_len', 'patch-page_len.sql' ), + array( 'do_inverse_timestamp' ), + array( 'do_text_id' ), + array( 'add_field', 'revision', 'rev_deleted', 'patch-rev_deleted.sql' ), + array( 'add_field', 'image', 'img_width', 'patch-img_width.sql' ), + array( 'add_field', 'image', 'img_metadata', 'patch-img_metadata.sql' ), + array( 'add_field', 'user', 'user_email_token', 'patch-user_email_token.sql' ), + array( 'add_field', 'archive', 'ar_text_id', 'patch-archive-text_id.sql' ), + array( 'do_namespace_size' ), + array( 'add_field', 'image', 'img_media_type', 'patch-img_media_type.sql' ), + array( 'do_pagelinks_update' ), + array( 'do_drop_img_type' ), + array( 'do_user_unique_update' ), + array( 'do_user_groups_update' ), + array( 'add_field', 'site_stats', 'ss_total_pages', 'patch-ss_total_articles.sql' ), + array( 'add_table', 'user_newtalk', 'patch-usernewtalk2.sql' ), + array( 'add_table', 'transcache', 'patch-transcache.sql' ), + array( 'add_field', 'interwiki', 'iw_trans', 'patch-interwiki-trans.sql' ), + array( 'add_table', 'trackbacks', 'patch-trackbacks.sql' ), + + // 1.6 + array( 'do_watchlist_null' ), + // do_image_index_update obsolete + array( 'do_logging_timestamp_index' ), + array( 'add_field', 'ipblocks', 'ipb_range_start', 'patch-ipb_range_start.sql' ), + array( 'do_page_random_update' ), + array( 'add_field', 'user', 'user_registration','patch-user_registration.sql' ), + array( 'do_templatelinks_update' ), + array( 'add_table', 'externallinks', 'patch-externallinks.sql' ), + array( 'add_table', 'job', 'patch-job.sql' ), + array( 'add_field', 'site_stats', 'ss_images', 'patch-ss_images.sql' ), + array( 'add_table', 'langlinks', 'patch-langlinks.sql' ), + array( 'add_table', 'querycache_info', 'patch-querycacheinfo.sql' ), + array( 'add_table', 'filearchive', 'patch-filearchive.sql' ), + array( 'add_field', 'ipblocks', 'ipb_anon_only', 'patch-ipb_anon_only.sql' ), + array( 'do_rc_indices_update' ), + + // 1.9 + array( 'add_field', 'user', 'user_newpass_time', 'patch-user_newpass_time.sql' ), + array( 'add_table', 'redirect', 'patch-redirect.sql' ), + array( 'add_table', 'querycachetwo', 'patch-querycachetwo.sql' ), + array( 'add_field', 'ipblocks', 'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ), + array( 'do_backlinking_indices_update' ), + array( 'add_field', 'recentchanges', 'rc_old_len', 'patch-rc_len.sql' ), + array( 'add_field', 'user', 'user_editcount', 'patch-user_editcount.sql' ), + + // 1.10 + array( 'do_restrictions_update' ), + array( 'add_field', 'logging', 'log_id', 'patch-log_id.sql' ), + array( 'add_field', 'revision', 'rev_parent_id', 'patch-rev_parent_id.sql' ), + array( 'add_field', 'page_restrictions', 'pr_id', 'patch-page_restrictions_sortkey.sql' ), + array( 'add_field', 'revision', 'rev_len', 'patch-rev_len.sql' ), + array( 'add_field', 'recentchanges', 'rc_deleted', 'patch-rc_deleted.sql' ), + array( 'add_field', 'logging', 'log_deleted', 'patch-log_deleted.sql' ), + array( 'add_field', 'archive', 'ar_deleted', 'patch-ar_deleted.sql' ), + array( 'add_field', 'ipblocks', 'ipb_deleted', 'patch-ipb_deleted.sql' ), + array( 'add_field', 'filearchive', 'fa_deleted', 'patch-fa_deleted.sql' ), + array( 'add_field', 'archive', 'ar_len', 'patch-ar_len.sql' ), + + // 1.11 + array( 'add_field', 'ipblocks', 'ipb_block_email', 'patch-ipb_emailban.sql' ), + array( 'do_categorylinks_indices_update' ), + array( 'add_field', 'oldimage', 'oi_metadata', 'patch-oi_metadata.sql'), + array( 'do_archive_user_index' ), + array( 'do_image_user_index' ), + array( 'do_oldimage_user_index' ), + array( 'add_field', 'archive', 'ar_page_id', 'patch-archive-page_id.sql'), + array( 'add_field', 'image', 'img_sha1', 'patch-img_sha1.sql' ), + array( 'add_table', 'protected_titles', 'patch-protected_titles.sql' ), + + // 1.13 + array( 'add_field', 'ipblocks', 'ipb_by_text', 'patch-ipb_by_text.sql' ), + array( 'add_table', 'page_props', 'patch-page_props.sql' ), ); -$wgNewFields = array( -# table field patch file (in maintenance/archives) - array( 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ), - array( 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ), - array( 'recentchanges', 'rc_type', 'patch-rc_type.sql' ), - array( 'recentchanges', 'rc_ip', 'patch-rc_ip.sql' ), - array( 'recentchanges', 'rc_id', 'patch-rc_id.sql' ), - array( 'recentchanges', 'rc_patrolled', 'patch-rc-patrol.sql' ), - array( 'recentchanges', 'rc_old_len', 'patch-rc_len.sql' ), - array( 'user', 'user_real_name', 'patch-user-realname.sql' ), - array( 'user', 'user_token', 'patch-user_token.sql' ), - array( 'user', 'user_email_token', 'patch-user_email_token.sql' ), - array( 'user', 'user_registration','patch-user_registration.sql' ), - array( 'logging', 'log_params', 'patch-log_params.sql' ), - array( 'archive', 'ar_rev_id', 'patch-archive-rev_id.sql' ), - array( 'archive', 'ar_text_id', 'patch-archive-text_id.sql' ), - array( 'page', 'page_len', 'patch-page_len.sql' ), - array( 'revision', 'rev_deleted', 'patch-rev_deleted.sql' ), - array( 'image', 'img_width', 'patch-img_width.sql' ), - array( 'image', 'img_metadata', 'patch-img_metadata.sql' ), - array( 'image', 'img_media_type', 'patch-img_media_type.sql' ), - array( 'site_stats', 'ss_total_pages', 'patch-ss_total_articles.sql' ), - array( 'interwiki', 'iw_trans', 'patch-interwiki-trans.sql' ), - array( 'ipblocks', 'ipb_range_start', 'patch-ipb_range_start.sql' ), - array( 'site_stats', 'ss_images', 'patch-ss_images.sql' ), - array( 'ipblocks', 'ipb_anon_only', 'patch-ipb_anon_only.sql' ), - array( 'ipblocks', 'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ), - array( 'user', 'user_newpass_time','patch-user_newpass_time.sql' ), - array( 'user', 'user_editcount', 'patch-user_editcount.sql' ), - array( 'recentchanges', 'rc_deleted', 'patch-rc_deleted.sql' ), - array( 'logging', 'log_id', 'patch-log_id.sql' ), - array( 'logging', 'log_deleted', 'patch-log_deleted.sql' ), - array( 'archive', 'ar_deleted', 'patch-ar_deleted.sql' ), - array( 'ipblocks', 'ipb_deleted', 'patch-ipb_deleted.sql' ), - array( 'filearchive', 'fa_deleted', 'patch-fa_deleted.sql' ), - array( 'revision', 'rev_len', 'patch-rev_len.sql' ), - array( 'archive', 'ar_len', 'patch-ar_len.sql' ), - array( 'revision', 'rev_parent_id', 'patch-rev_parent_id.sql' ), - array( 'page_restrictions', 'pr_id', 'patch-page_restrictions_sortkey.sql' ), - array( 'ipblocks', 'ipb_block_email', 'patch-ipb_emailban.sql' ), - array( 'oldimage', 'oi_metadata', 'patch-oi_metadata.sql'), - array( 'archive', 'ar_page_id', 'patch-archive-page_id.sql'), - array( 'image', 'img_sha1', 'patch-img_sha1.sql' ), - array( 'ipblocks', 'ipb_by_text', 'patch-ipb_by_text.sql' ), -); # For extensions only, should be populated via hooks # $wgDBtype should be checked to specifiy the proper file @@ -946,26 +993,16 @@ function do_all_updates( $shared = false, $purge = true ) { do_postgres_updates(); return; } - - # Rename tables - foreach ( $wgRenamedTables as $tableRecord ) { - rename_table( $tableRecord[0], $tableRecord[1], $tableRecord[2] ); - } - - # Add missing tables - foreach ( $wgNewTables as $tableRecord ) { - add_table( $tableRecord[0], $tableRecord[1] ); - flush(); - } - - # Add missing fields - foreach ( $wgNewFields as $fieldRecord ) { - if ( $fieldRecord[0] != 'user' || $doUser ) { - add_field( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2] ); - } + + # Run core updates in sequence... + global $wgMysqlUpdates; + foreach( $wgMysqlUpdates as $params ) { + $func = array_shift( $params ); + call_user_func_array( $func, $params ); flush(); } + /// @fixme clean up this mess too! global $wgExtNewTables, $wgExtNewFields, $wgExtNewIndexes; # Add missing extension tables foreach ( $wgExtNewTables as $tableRecord ) { @@ -985,54 +1022,6 @@ function do_all_updates( $shared = false, $purge = true ) { flush(); } - # Do schema updates which require special handling - do_interwiki_update(); flush(); - do_index_update(); flush(); - do_old_links_update(); flush(); - do_image_name_unique_update(); flush(); - do_watchlist_update(); flush(); - if ( $doUser ) { - do_user_update(); flush(); - } -###### do_copy_newtalk_to_watchlist(); flush(); - do_logging_encoding(); flush(); - - do_schema_restructuring(); flush(); - do_inverse_timestamp(); flush(); - do_text_id(); flush(); - do_namespace_size(); flush(); - - do_pagelinks_update(); flush(); - do_templatelinks_update(); flush(); // after pagelinks - - do_drop_img_type(); flush(); - - if ( $doUser ) { - do_user_unique_update(); flush(); - } - do_user_groups_update(); flush(); - - do_watchlist_null(); flush(); - - //do_image_index_update(); flush(); - - do_logging_timestamp_index(); flush(); - - do_page_random_update(); flush(); - - do_rc_indices_update(); flush(); - - do_backlinking_indices_update(); flush(); - - do_categorylinks_indices_update(); flush(); - - do_restrictions_update(); flush (); - - do_archive_user_index(); flush (); - - do_image_user_index(); flush (); - - do_oldimage_user_index(); flush (); echo "Deleting old default messages (this may take a long time!)..."; flush(); deleteDefaultMessages(); -- 2.20.1