Page MenuHomePhabricator

Error when database is in read-only mode
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Place database in readonly mode
  • Browse to a page with Cargo data

What happens?:

Error message:

Original exception: [Y-WoGm2Ndn9qAFMXfSkw5gAAixM] /index.php/Main_Page Wikimedia\Rdbms\DBReadOnlyError from line 995 of /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/Database.php: Database is read-only: This wiki is currently being upgraded to a newer software version. Please check back in a couple of hours.
Backtrace:
#0 /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/Database.php(1273): Wikimedia\Rdbms\Database->assertIsWritableMaster()
#1 /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/Database.php(1224): Wikimedia\Rdbms\Database->executeQuery()
#2 /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/Database.php(3452): Wikimedia\Rdbms\Database->query()
#3 /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/DBConnRef.php(68): Wikimedia\Rdbms\Database->delete()
#4 /var/www/html/mediawiki_corporate/includes/libs/rdbms/database/DBConnRef.php(518): Wikimedia\Rdbms\DBConnRef->__call()
#5 /var/www/html/mediawiki_corporate/extensions/Cargo/includes/CargoBackLinks.php(32): Wikimedia\Rdbms\DBConnRef->delete()
#6 /var/www/html/mediawiki_corporate/extensions/Cargo/includes/CargoBackLinks.php(46): CargoBackLinks::removeBackLinks()
#7 /var/www/html/mediawiki_corporate/extensions/Cargo/includes/parserfunctions/CargoQuery.php(194): CargoBackLinks::setBackLinks()
#8 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3340): CargoQuery::run()
#9 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3047): Parser->callParserFunction()
#10 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(263): Parser->braceSubstitution()
#11 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3225): PPFrame_Hash->expand()
#12 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(263): Parser->braceSubstitution()
#13 /var/www/html/mediawiki_corporate/includes/parser/PPTemplateFrame_Hash.php(89): PPFrame_Hash->expand()
#14 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3222): PPTemplateFrame_Hash->cachedExpand()
#15 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(263): Parser->braceSubstitution()
#16 /var/www/html/mediawiki_corporate/includes/parser/PPTemplateFrame_Hash.php(169): PPFrame_Hash->expand()
#17 /var/www/html/mediawiki_corporate/includes/parser/PPTemplateFrame_Hash.php(181): PPTemplateFrame_Hash->getNamedArgument()
#18 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3834): PPTemplateFrame_Hash->getArgument()
#19 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(280): Parser->argSubstitution()
#20 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(2963): PPFrame_Hash->expand()
#21 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(263): Parser->braceSubstitution()
#22 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(3225): PPFrame_Hash->expand()
#23 /var/www/html/mediawiki_corporate/includes/parser/PPFrame_Hash.php(263): Parser->braceSubstitution()
#24 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(2887): PPFrame_Hash->expand()
#25 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(1556): Parser->replaceVariables()
#26 /var/www/html/mediawiki_corporate/includes/parser/Parser.php(651): Parser->internalParse()
#27 /var/www/html/mediawiki_corporate/includes/OutputPage.php(2113): Parser->parse()
#28 /var/www/html/mediawiki_corporate/includes/OutputPage.php(2063): OutputPage->parseInternal()
#29 /var/www/html/mediawiki_corporate/includes/skins/Skin.php(1932): OutputPage->parseAsInterface()
#30 /var/www/html/mediawiki_corporate/includes/libs/objectcache/wancache/WANObjectCache.php(1529): Skin->{closure}()
#31 /var/www/html/mediawiki_corporate/includes/libs/objectcache/wancache/WANObjectCache.php(1376): WANObjectCache->fetchOrRegenerate()
#32 /var/www/html/mediawiki_corporate/includes/skins/Skin.php(1933): WANObjectCache->getWithSetCallback()
#33 /var/www/html/mediawiki_corporate/includes/skins/Skin.php(1958): Skin->getCachedNotice()
#34 /var/www/html/mediawiki_corporate/includes/skins/SkinTemplate.php(384): Skin->getSiteNotice()
#35 /var/www/html/mediawiki_corporate/includes/skins/SkinTemplate.php(127): SkinTemplate->prepareQuickTemplate()
#36 /var/www/html/mediawiki_corporate/includes/skins/SkinTemplate.php(144): SkinTemplate->generateHTML()
#37 /var/www/html/mediawiki_corporate/includes/OutputPage.php(2622): SkinTemplate->outputPage()
#38 /var/www/html/mediawiki_corporate/includes/MediaWiki.php(952): OutputPage->output()
#39 /var/www/html/mediawiki_corporate/includes/MediaWiki.php(965): MediaWiki->{closure}()
#40 /var/www/html/mediawiki_corporate/includes/MediaWiki.php(548): MediaWiki->main()
#41 /var/www/html/mediawiki_corporate/index.php(53): MediaWiki->run()
#42 /var/www/html/mediawiki_corporate/index.php(46): wfIndexMain()
#43 {main}

What should have happened instead?:

No error message

Software version (skip for WMF-hosted wikis like Wikipedia):

MW1.35, Cargo 3.2

Possible fix

diff --git a/includes/CargoBackLinks.php b/includes/CargoBackLinks.php
index 65cf5f1..0b6138e 100644
--- a/includes/CargoBackLinks.php
+++ b/includes/CargoBackLinks.php
@@ -29,7 +29,7 @@ class CargoBackLinks {
        public static function removeBackLinks( $pageId ) {
                $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
                $dbw = $lb->getConnectionRef( DB_PRIMARY );
-               if ( $dbw->tableExists( 'cargo_backlinks' ) ) {
+               if ( $dbw->tableExists( 'cargo_backlinks' ) && !$dbw->isReadOnly() ) {
                        $dbw->delete( 'cargo_backlinks', [
                                'cbl_query_page_id' => $pageId
                        ], __METHOD__ );
@@ -39,7 +39,7 @@ class CargoBackLinks {
        public static function setBackLinks( $title, $resultsPageIds ) {
                $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
                $dbw = $lb->getConnectionRef( DB_PRIMARY );
-               if ( !$dbw->tableExists( 'cargo_backlinks' ) ) {
+               if ( !$dbw->tableExists( 'cargo_backlinks' ) || $dbw->isReadOnly() ) {
                        return;
                }
                // Sanity check

Event Timeline

Change 891294 had a related patch set uploaded (by Yaron Koren; author: Yaron Koren):

[mediawiki/extensions/Cargo@master] Fix for read-only mode - patch by Platinops

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

Change 891294 merged by jenkins-bot:

[mediawiki/extensions/Cargo@master] Fix for read-only mode - patch by Platinops

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

Yaron_Koren claimed this task.