Today, I discovered that purgeExpiredMentorStatus does not operate correctly when the number of deleted rows is higher than batch size.
At my dev wiki, I have the following entries for the growthexperiments-mentor-away-timestamp user property:
MariaDB [awiki]> select * from user_properties where up_property='growthexperiments-mentor-away-timestamp'; +---------+-----------------------------------------+----------------+ | up_user | up_property | up_value | +---------+-----------------------------------------+----------------+ | 33 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 34 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 37 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 41 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 42 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 43 | growthexperiments-mentor-away-timestamp | 19700101000000 | | 44 | growthexperiments-mentor-away-timestamp | 19700101000000 | +---------+-----------------------------------------+----------------+ 7 rows in set (0.002 sec) MariaDB [awiki]>
Running purgeExpiredMentorStatus.php's dry run with default batch size (which is 100) correctly reports it would delete 7 rows:
urbanecm@notebook ~/unsynced/gerrit/mediawiki/extensions/GrowthExperiments $ php maintenance/purgeExpiredMentorStatus.php --wiki=awiki --dry-run Would delete 7 rows from user_properties. urbanecm@notebook ~/unsynced/gerrit/mediawiki/extensions/GrowthExperiments $
Decreasing batch size to 5 makes the script report deletion of 20 rows:
urbanecm@notebook ~/unsynced/gerrit/mediawiki/extensions/GrowthExperiments $ php maintenance/purgeExpiredMentorStatus.php --wiki=awiki --dry-run --batch-size 5 Would delete 20 rows from user_properties. urbanecm@notebook ~/unsynced/gerrit/mediawiki/extensions/GrowthExperiments $
This means the script tries to delete some rows multiple times. It happens because the maintenance script's batching logic does not empty $batch after yielding it, see https://gerrit.wikimedia.org/g/mediawiki/extensions/GrowthExperiments/+/f2d321081d9f302d46b6d3744a447a642b7e17f0/maintenance/purgeExpiredMentorStatus.php#63.