maintenance/update.php complains about locked database when $wgReadOnly is set
Open, Needs TriagePublic

Description

I'm in the process of updating from 1.25 to 1.28, and I find it good measure to set $wgReadOnly before starting the upgrade in order to have consistent backups and exclusive access to the database while maintenance/upgrade.php runs. The Upgrade Manual also advises to do so. And the documentation for $wgReadOnly contains a big red warning that maintenance scripts may ignore this setting :-)

However, the database updater for 1.28 complains in that case, in my opinion unneccessarily:

# php maintenance/update.php
MediaWiki 1.28.0 Updater

Your composer.lock file is up to date with current dependencies!
Going to run database updates for mediawiki_stratum0-mw_
Depending on the size of your database this may take a while!
Abort with control-c in the next five seconds (skip this countdown with --quick) ... 0
Turning off Content Handler DB fields for this part of upgrade.
...have ipb_id field in ipblocks table.
...have ipb_expiry field in ipblocks table.
...already have interwiki table
[…]
...wl_notificationtimestamp is already nullable.
...index times already set on logging table.
...have ipb_range_start field in ipblocks table.
[d78ec32197315f3715770f28] [no req]   DBReadOnlyError from line 837 of /srv/www/mediawiki-1.28.0/includes/libs/rdbms/database/Database.php: Database is read-only: This wiki is currently being upgraded to a newer software version.
Backtrace:
#0 /srv/www/mediawiki-1.28.0/includes/installer/MysqlUpdater.php(823): Database->query(string, string)
#1 [internal function]: MysqlUpdater->doPageRandomUpdate()
#2 /srv/www/mediawiki-1.28.0/includes/installer/DatabaseUpdater.php(472): call_user_func_array(array, array)
#3 /srv/www/mediawiki-1.28.0/includes/installer/DatabaseUpdater.php(433): DatabaseUpdater->runUpdates(array, boolean)
#4 /srv/www/mediawiki-1.28.0/maintenance/update.php(172): DatabaseUpdater->doUpdates(array)
#5 /srv/www/mediawiki-1.28.0/maintenance/doMaintenance.php(111): UpdateMediaWiki->execute()
#6 /srv/www/mediawiki-1.28.0/maintenance/update.php(217): require_once(string)
#7 {main}

Previous updaters ignored the read-only setting, justifiably. I also cannot find anything in the recent Release Notes that this change was made on purpose.

Rohieb created this task.Nov 28 2016, 11:38 PM
Restricted Application added a subscriber: Aklapper. · View Herald TranscriptNov 28 2016, 11:38 PM
Krinkle moved this task from Backlog to Meta on the MediaWiki-Database board.
Krinkle added subscribers: aaron, tstarling.

I've tested this and is still current as of MediaWiki 1.29. This started happening since MediaWiki 1.27.

aaron added a comment.Aug 7 2017, 7:40 PM

Have you tied something like this?

$wgReadOnly = ( PHP_SAPI === 'cli' ) ? false : 'This wiki is currently being upgraded to a newer software version.'
aaron added a comment.Aug 7 2017, 7:40 PM

$wgReadOnly is enforced at the LB/DB layer in addition to random callers checked wfReadOnly().

Hmmm, may be a good compromise. It will require only to update documentation