Page MenuHomePhabricator

userOptions.php fails to delete very large number of DB rows
Closed, ResolvedPublicBUG REPORT

Description

When dropping rcenhancedfilters-seen-tour from loginwiki (~21 millions of DB rows) via userOptions.php, I encountered the following issue:

[urbanecm@mwmaint1002 ~]$ mwscript userOptions.php --wiki=loginwiki --delete rcenhancedfilters-seen-tour
[...] # very long SQL query with a lot of user IDs
Function: UserOptionsMaintenance::deleteOptions
Error: 2006 MySQL server has gone away

#0 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/Database.php(1187): Wikimedia\Rdbms\Database->getQueryException('MySQL server ha...', 2006, 'DELETE FROM `us...', 'UserOptionsMain...')                                             
#1 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/Database.php(1161): Wikimedia\Rdbms\Database->getQueryExceptionAndLog('MySQL server ha...', 2006, 'DELETE FROM `us...', 'UserOptionsMain...')                                       
#2 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/Database.php(652): Wikimedia\Rdbms\Database->reportQueryError('MySQL server ha...', 2006, 'DELETE FROM `us...', 'UserOptionsMain...', false)                                        
#3 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/Database.php(1735): Wikimedia\Rdbms\Database->query(Object(Wikimedia\Rdbms\Query), 'UserOptionsMain...')                                                                            
#4 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/DBConnRef.php(126): Wikimedia\Rdbms\Database->delete('user_properties', Array, 'UserOptionsMain...')                                                                                
#5 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/database/DBConnRef.php(583): Wikimedia\Rdbms\DBConnRef->__call('delete', Array)                                                                                                              
#6 /srv/mediawiki/php-1.43.0-wmf.3/includes/libs/rdbms/querybuilder/DeleteQueryBuilder.php(229): Wikimedia\Rdbms\DBConnRef->delete('user_properties', Array, 'UserOptionsMain...')                                                                  
#7 /srv/mediawiki/php-1.43.0-wmf.3/maintenance/userOptions.php(289): Wikimedia\Rdbms\DeleteQueryBuilder->execute()
#8 /srv/mediawiki/php-1.43.0-wmf.3/maintenance/userOptions.php(80): UserOptionsMaintenance->deleteOptions()
#9 /srv/mediawiki/php-1.43.0-wmf.3/maintenance/includes/MaintenanceRunner.php(698): UserOptionsMaintenance->execute()
#10 /srv/mediawiki/php-1.43.0-wmf.3/maintenance/run.php(51): MediaWiki\Maintenance\MaintenanceRunner->run()
#11 /srv/mediawiki/multiversion/MWScript.php(158): require_once('/srv/mediawiki/...')
#12 {main}
[urbanecm@mwmaint1002 ~]$

Event Timeline

Change #1028500 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/core@master] userOptions.php: Actually batch deletion

https://gerrit.wikimedia.org/r/1028500

The actual issue is that the batching implemented in userOptions.php for deletion does not work. So, we've asked the DB server to execute a command that looks like DELETE FROM user_properties WHERE up_property='...' AND up_user IN (20 millions of user IDs), which obviously cannot work.

Fortunately, the fix is fairly quick.

Change #1027744 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/core@wmf/1.43.0-wmf.3] userOptions.php: Actually batch deletion

https://gerrit.wikimedia.org/r/1027744

(will verify in prod once backport finishes)

Change #1028500 merged by jenkins-bot:

[mediawiki/core@master] userOptions.php: Actually batch deletion

https://gerrit.wikimedia.org/r/1028500

Change #1027744 merged by jenkins-bot:

[mediawiki/core@wmf/1.43.0-wmf.3] userOptions.php: Actually batch deletion

https://gerrit.wikimedia.org/r/1027744

Mentioned in SAL (#wikimedia-operations) [2024-05-06T15:03:45Z] <urbanecm@deploy1002> Started scap: Backport for [[gerrit:1027744|userOptions.php: Actually batch deletion (T364311)]]

Mentioned in SAL (#wikimedia-operations) [2024-05-06T15:20:36Z] <urbanecm@deploy1002> Finished scap: Backport for [[gerrit:1027744|userOptions.php: Actually batch deletion (T364311)]] (duration: 16m 51s)