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
This commit is contained in:
a smart kitten 2025-08-03 11:40:46 +01:00
parent 4a391d63d0
commit ffa868bcf1
7 changed files with 45 additions and 1 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;