From ffa868bcf1142b64bd3ae6c6829705025bad0011 Mon Sep 17 00:00:00 2001 From: a smart kitten Date: Sun, 3 Aug 2025 11:40:46 +0100 Subject: [PATCH] PostgresUpdater: Fix typo in `sites_group` index renaming; re-attempt to drop most of the dropped `sites` indexes Why: - From MediaWiki 1.36 to MediaWiki 1.44 (inclusive), `PostgresUpdater.php` contains a typo in the instruction to rename the `sites_group` index to `site_group`. - This typo means that - on Postgres wikis - the MediaWiki update script will not currently rename this index as intended, as the index which the updater is told to rename (i.e., containing the typo) doesn't exist. - From MediaWiki 1.42 onwards, this typo indirectly causes `update.php` on Postgres wikis to throw an error on its first run: - From MW 1.42 onwards, the update script included an instruction to drop multiple indexes on the `sites` table, including this index that was previously intended to be renamed. - However, as this typo meant that the `sites_group` index was never renamed on Postgres wikis, the database is unable to find the renamed index in order to drop it; and consequently throws an error (reported on Phabricator as T374042). - This only affects the first run of `update.php` due to the fact that - when deciding whether to apply the patch containing _all_ of the index-drops for the `sites` table - the `dropIndex` instruction only checks for the existence of the `site_type` index (and, if the `site_type` index doesn't exist, the patch as a whole isn't applied). However, as - within `patch-sites-drop_indexes.sql` - the statement to drop the `site_type` index is located _before_ the instruction to drop the `site_group` index, the `site_type` index will have been dropped on the first run of `update.php`. - This also means that - on any future runs of `update.php` - the indexes listed after (and including) `site_group` in that SQL file will currently remain un-dropped. What: - Fix the typo in the PostgresUpdater index renaming instruction: `'sites_group, '` -> `'sites_group'` - Update PostgresUpdater to individually re-attempt to drop the indexes listed after & including `site_group` in `patch-sites-drop_indexes.sql`, to ensure that they're dropped on Postgres wikis that have already (1) upgraded to MW 1.42+, & (2) ran `update.php`. (These could theoretically have all been combined within one extra SQL patch, rather than one for each index; but I thought it might be best for the updater to check for the existence of each of these indexes individually before it attempts to drop each one.) Follows-up 9907b56c9b, 616744db1d Bug: T374042 Change-Id: Ie6ffa92153e64ca653f726a35a5a6b5d95d093f5 --- includes/installer/PostgresUpdater.php | 16 +++++++++++++++- .../patch-sites-drop_site_domain_index.sql | 5 +++++ .../patch-sites-drop_site_forward_index.sql | 5 +++++ .../patch-sites-drop_site_group_index.sql | 5 +++++ .../patch-sites-drop_site_language_index.sql | 5 +++++ .../patch-sites-drop_site_protocol_index.sql | 5 +++++ .../patch-sites-drop_site_source_index.sql | 5 +++++ 7 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_domain_index.sql create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_forward_index.sql create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_group_index.sql create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_language_index.sql create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_protocol_index.sql create mode 100644 maintenance/postgres/archives/patch-sites-drop_site_source_index.sql diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php index 5461389d6fd..895cabfe32e 100644 --- a/includes/installer/PostgresUpdater.php +++ b/includes/installer/PostgresUpdater.php @@ -239,7 +239,7 @@ class PostgresUpdater extends DatabaseUpdater { [ 'renameIndex', 'user_properties', 'user_properties_property', 'up_property' ], [ 'renameIndex', 'sites', 'sites_global_key', 'site_global_key' ], [ 'renameIndex', 'sites', 'sites_type', 'site_type' ], - [ 'renameIndex', 'sites', 'sites_group, ', 'site_group' ], + [ 'renameIndex', 'sites', 'sites_group', 'site_group' ], [ 'renameIndex', 'sites', 'sites_source', 'site_source' ], [ 'renameIndex', 'sites', 'sites_language', 'site_language' ], [ 'renameIndex', 'sites', 'sites_protocol', 'site_protocol' ], @@ -427,6 +427,20 @@ class PostgresUpdater extends DatabaseUpdater { [ 'dropIndex', 'categorylinks', 'cl_collation_ext', 'patch-drop-cl_collation_ext.sql' ], [ 'runMaintenance', PopulateUserIsTemp::class ], [ 'dropIndex', 'sites', 'site_type', 'patch-sites-drop_indexes.sql' ], + // Re-attempt to drop most of the dropped `sites`-table indexes: + // If a Postgres wiki previously ran `update.php` on MW 1.42 or above, the script would have errored after + // reaching the "DROP INDEX site_group;" line of `patch-sites-drop_indexes.sql` (due to a previous + // index-renaming typo from MW 1.36). + // However, as the `site_type` index itself _would_ have been successfully dropped, the `.sql` file listed + // in the `dropIndex` line above will not be re-applied on any future runs of `update.php`. + // Therefore, to ensure that the remaining indexes are definitely dropped on these wikis, we need to + // separately attempt to drop them again. (T374042; T374042#11017896) + [ 'dropIndex', 'sites', 'site_group', 'patch-sites-drop_site_group_index.sql' ], + [ 'dropIndex', 'sites', 'site_source', 'patch-sites-drop_site_source_index.sql' ], + [ 'dropIndex', 'sites', 'site_language', 'patch-sites-drop_site_language_index.sql' ], + [ 'dropIndex', 'sites', 'site_protocol', 'patch-sites-drop_site_protocol_index.sql' ], + [ 'dropIndex', 'sites', 'site_domain', 'patch-sites-drop_site_domain_index.sql' ], + [ 'dropIndex', 'sites', 'site_forward', 'patch-sites-drop_site_forward_index.sql' ], [ 'dropIndex', 'iwlinks', 'iwl_prefix_from_title', 'patch-iwlinks-drop-iwl_prefix_from_title.sql' ], // 1.43 diff --git a/maintenance/postgres/archives/patch-sites-drop_site_domain_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_domain_index.sql new file mode 100644 index 00000000000..22e4045ad1f --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_domain_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_domain; diff --git a/maintenance/postgres/archives/patch-sites-drop_site_forward_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_forward_index.sql new file mode 100644 index 00000000000..374b27c4e87 --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_forward_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_forward; diff --git a/maintenance/postgres/archives/patch-sites-drop_site_group_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_group_index.sql new file mode 100644 index 00000000000..19e2885c4b9 --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_group_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_group; diff --git a/maintenance/postgres/archives/patch-sites-drop_site_language_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_language_index.sql new file mode 100644 index 00000000000..c17e2c251e1 --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_language_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_language; diff --git a/maintenance/postgres/archives/patch-sites-drop_site_protocol_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_protocol_index.sql new file mode 100644 index 00000000000..def3dcedb28 --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_protocol_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_protocol; diff --git a/maintenance/postgres/archives/patch-sites-drop_site_source_index.sql b/maintenance/postgres/archives/patch-sites-drop_site_source_index.sql new file mode 100644 index 00000000000..49271e1526b --- /dev/null +++ b/maintenance/postgres/archives/patch-sites-drop_site_source_index.sql @@ -0,0 +1,5 @@ +-- This file was manually written, in order to make sure that this index (intended to be dropped on the upgrade to +-- MediaWiki 1.42) is still dropped for Postgres wikis whose first run of `update.php` on MW 1.42+ failed due to an +-- index-renaming typo from MW 1.36. +-- See https://phabricator.wikimedia.org/T374042; https://phabricator.wikimedia.org/T374042#11017896 +DROP INDEX site_source;