Page MenuHomePhabricator

updateSpecialPages.php tries (and fails) to silently ignore DB errors
Open, Needs TriagePublic

Description

updateSpecialPages.php runs QueryCache::recache() for each special page being updated, with the $ignoreErrors parameter set to true (the default).
I don't blame it for trying, only for failing. While this successfully swallows the original error, the script will immediately fail anyways with DBTransactionStateError:

✗ php maintenance/updateSpecialPages.php --only=Deadendpages
Deadendpages                   [QueryPage] FAILED: database error
[75a40936e82be293f6b978fb] [no req]   Wikimedia\Rdbms\DBTransactionStateError: Cannot execute query from Wikimedia\Rdbms\Database::ping while transaction status is ERROR
Backtrace:
from mediawiki/includes/libs/rdbms/database/Database.php(1521)
#0 mediawiki/includes/libs/rdbms/database/Database.php(1237): Wikimedia\Rdbms\Database->assertQueryIsCurrentlyAllowed(string, string)
#1 mediawiki/includes/libs/rdbms/database/Database.php(4870): Wikimedia\Rdbms\Database->query(string, string, integer)
#2 mediawiki/includes/libs/rdbms/database/Database.php(723): Wikimedia\Rdbms\Database->ping(NULL)
#3 mediawiki/includes/libs/rdbms/database/Database.php(711): Wikimedia\Rdbms\Database->pingAndCalculateLastTrxApplyTime()
#4 mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1745): Wikimedia\Rdbms\Database->pendingWriteQueryDuration(string)
#5 mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php(2255): Wikimedia\Rdbms\LoadBalancer::Wikimedia\Rdbms\{closure}(Wikimedia\Rdbms\DatabaseMysqli)
#6 mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1761): Wikimedia\Rdbms\LoadBalancer->forEachOpenMasterConnection(Closure)
#7 mediawiki/includes/libs/rdbms/lbfactory/LBFactory.php(247): Wikimedia\Rdbms\LoadBalancer->approveMasterChanges(array, string, integer)
#8 mediawiki/includes/libs/rdbms/lbfactory/LBFactorySimple.php(145): Wikimedia\Rdbms\LBFactory::Wikimedia\Rdbms\{closure}(Wikimedia\Rdbms\LoadBalancer, string, array)
#9 mediawiki/includes/libs/rdbms/lbfactory/LBFactory.php(249): Wikimedia\Rdbms\LBFactorySimple->forEachLB(Closure, array)
#10 mediawiki/includes/libs/rdbms/lbfactory/LBFactory.php(308): Wikimedia\Rdbms\LBFactory->forEachLBCallMethod(string, array)
#11 mediawiki/maintenance/includes/Maintenance.php(1267): Wikimedia\Rdbms\LBFactory->commitMasterChanges(string)
#12 mediawiki/maintenance/doMaintenance.php(134): Maintenance->shutdown()
#13 mediawiki/maintenance/updateSpecialPages.php(180): require_once(string)

Considering that this is one of the transaction misuse errors featured in the guidelines, it'd probably be better to just let the original error bubble up. It'd also help provide information as to what kind of error occurred - currently, the original error isn't even logged, which makes debugging difficult.

Event Timeline

Change 675122 had a related patch set uploaded (by TK-999; author: TK-999):
[mediawiki/core@master] QueryPage: Don't try to swallow DBErrors

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