Page MenuHomePhabricator

parsertests cannot use MySQL: cannot reopen table: page_restrictions
Closed, ResolvedPublicBUG REPORT

Description

I was attempting to run the parser tests on my local install and i keep running into the following errors:

composer phpunit:entrypoint -- --testsuite parsertests

1) LegacyParserTest_Core_1__comments
Wikimedia\Rdbms\DBQueryError: Error 1137: Can't reopen table: 'page_restrictions'
Function: MediaWiki\Permissions\RestrictionStore::getCascadeProtectionSourcesInternalJoined
Query: (SELECT  pr_expiry,pr_page,page_namespace,page_title,pr_type,pr_level,'il' AS `type`  FROM `parsertest_page_restrictions` `page_restrictions` JOIN `parsertest_page` `page` ON ((page_id=pr_page)) JOIN `parsertest_imagelinks` `imagelinks` ON ((il_from=pr_page))   WHERE pr_cascade = 1 AND il_to = 'Foobar.jpg'  ) UNION ALL (SELECT  pr_expiry,pr_page,page_namespace,page_title,pr_type,pr_level,'tl' AS `type`  FROM `parsertest_page_restrictions` `page_restrictions` JOIN `parsertest_page` `page` ON ((page_id=pr_page)) JOIN `parsertest_templatelinks` `templatelinks` ON ((tl_from=pr_page))   WHERE pr_cascade = 1 AND (1=0)  )
 in /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php:1227
Stack trace:
#0 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php(1211): Wikimedia\Rdbms\Database->getQueryException('Can't reopen ta...', 1137, '(SELECT  pr_exp...', 'MediaWiki\\Permi...')
#1 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php(1185): Wikimedia\Rdbms\Database->getQueryExceptionAndLog('Can't reopen ta...', 1137, '(SELECT  pr_exp...', 'MediaWiki\\Permi...')
#2 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php(642): Wikimedia\Rdbms\Database->reportQueryError('Can't reopen ta...', 1137, '(SELECT  pr_exp...', 'MediaWiki\\Permi...', false)
#3 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/DBConnRef.php(128): Wikimedia\Rdbms\Database->query(Object(Wikimedia\Rdbms\Query), 'MediaWiki\\Permi...', 32)
#4 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/DBConnRef.php(333): Wikimedia\Rdbms\DBConnRef->__call('query', Array)
#5 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/QueryBuilder/UnionQueryBuilder.php(174): Wikimedia\Rdbms\DBConnRef->query(Object(Wikimedia\Rdbms\Query), 'MediaWiki\\Permi...')
#6 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Permissions/RestrictionStore.php(728): Wikimedia\Rdbms\UnionQueryBuilder->fetchResultSet()
#7 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Permissions/RestrictionStore.php(536): MediaWiki\Permissions\RestrictionStore->getCascadeProtectionSourcesInternalJoined(Object(MediaWiki\Page\PageIdentityValue))
#8 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Cache/BacklinkCache.php(534): MediaWiki\Permissions\RestrictionStore->getCascadeProtectionSources(Object(MediaWiki\Page\PageIdentityValue))
#9 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/LinksUpdate/LinksUpdate.php(253): MediaWiki\Cache\BacklinkCache->getCascadeProtectedLinkPages()
#10 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/LinksUpdate/LinksUpdate.php(217): MediaWiki\Deferred\LinksUpdate\LinksUpdate->queueRecursiveJobs()
#11 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/LinksUpdate/LinksUpdate.php(171): MediaWiki\Deferred\LinksUpdate\LinksUpdate->doIncrementalUpdate()
#12 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(445): MediaWiki\Deferred\LinksUpdate\LinksUpdate->doUpdate()
#13 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/RefreshSecondaryDataUpdate.php(99): MediaWiki\Deferred\DeferredUpdates::attemptUpdate(Object(MediaWiki\Deferred\LinksUpdate\LinksUpdate))
#14 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(445): MediaWiki\Deferred\RefreshSecondaryDataUpdate->doUpdate()
#15 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(187): MediaWiki\Deferred\DeferredUpdates::attemptUpdate(Object(MediaWiki\Deferred\RefreshSecondaryDataUpdate))
#16 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(285): MediaWiki\Deferred\DeferredUpdates::run(Object(MediaWiki\Deferred\RefreshSecondaryDataUpdate))
#17 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdatesScope.php(226): MediaWiki\Deferred\DeferredUpdates::{closure:{closure:MediaWiki\Deferred\DeferredUpdates::doUpdates():270}:284}(Object(MediaWiki\Deferred\RefreshSecondaryDataUpdate), 2)
#18 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdatesScope.php(158): MediaWiki\Deferred\DeferredUpdatesScope->processStageQueue(2, 2, Object(Closure))
#19 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(282): MediaWiki\Deferred\DeferredUpdatesScope->processUpdates(2, Object(Closure))
#20 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdatesScope.php(229): MediaWiki\Deferred\DeferredUpdates::{closure:MediaWiki\Deferred\DeferredUpdates::doUpdates():270}(Object(MediaWiki\Deferred\AutoCommitUpdate), 2)
#21 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdatesScope.php(158): MediaWiki\Deferred\DeferredUpdatesScope->processStageQueue(1, 2, Object(Closure))
#22 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(268): MediaWiki\Deferred\DeferredUpdatesScope->processUpdates(0, Object(Closure))
#23 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(359): MediaWiki\Deferred\DeferredUpdates::doUpdates(0)
#24 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/Deferred/DeferredUpdates.php(142): MediaWiki\Deferred\DeferredUpdates::tryOpportunisticExecute()
#25 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/FileRepo/File/LocalFile.php(2250): MediaWiki\Deferred\DeferredUpdates::addUpdate(Object(MediaWiki\Deferred\AutoCommitUpdate), 1)
#26 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php(2068): MediaWiki\FileRepo\File\LocalFile::{closure:MediaWiki\FileRepo\File\LocalFile::recordUpload3():2249}(1)
#27 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/Database.php(1981): Wikimedia\Rdbms\Database->runOnTransactionIdleCallbacks(1, Array)
#28 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/DBConnRef.php(128): Wikimedia\Rdbms\Database->onTransactionCommitOrIdle(Object(Closure), 'MediaWiki\\FileR...')
#29 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/libs/Rdbms/Database/DBConnRef.php(726): Wikimedia\Rdbms\DBConnRef->__call('onTransactionCo...', Array)
#30 /Users/hartman/Development/wikimedia-git/mediawiki-core/includes/FileRepo/File/LocalFile.php(2249): Wikimedia\Rdbms\DBConnRef->onTransactionCommitOrIdle(Object(Closure), 'MediaWiki\\FileR...')
#31 /Users/hartman/Development/wikimedia-git/mediawiki-core/tests/Common/Parser/ParserTestRunner.php(2599): MediaWiki\FileRepo\File\LocalFile->recordUpload3('', 'Upload of some ...', 'Some lame file', Object(MediaWiki\Permissions\UltimateAuthority), Array, '20010115123500')
#32 /Users/hartman/Development/wikimedia-git/mediawiki-core/tests/phpunit/suites/ParserTestTopLevelSuite.php(178): MediaWiki\Tests\Common\Parser\ParserTestRunner->setupUploads(Object(Wikimedia\ScopedCallback))
#33 /Users/hartman/Development/wikimedia-git/mediawiki-core/tests/phpunit/suites/SuiteEventsTrait.php(32): ParserTestTopLevelSuite->setUp()
#34 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): ParserTestTopLevelSuite->run(Object(PHPUnit\Framework\TestResult))
#35 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#36 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(651): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#37 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/src/TextUI/Command.php(146): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\Framework\TestSuite), Array, Array, true)
#38 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/src/TextUI/Command.php(99): PHPUnit\TextUI\Command->run(Array, true)
#39 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/phpunit/phpunit/phpunit(107): PHPUnit\TextUI\Command::main()
#40 /Users/hartman/Development/wikimedia-git/mediawiki-core/vendor/bin/phpunit(122): include('/Users/hartman/...')
#41 {main}

MySQL 8.0 macos
Not sure if this is new, haven't run parser tests locally in a long time.

Event Timeline

unblocked myself by running them in a clean docker setup... still curious what is causing this however. will investigate more tomorrow.

I'm having this issue as well when using MySQL. Switching to MariaDB fixed it for me.

mysql cannot refer to the same temporary table twice in the same query apparently, which this definetly does.

(SELECT  pr_expiry,pr_page,page_namespace,page_title,pr_type,pr_level,'il' AS `type`  FROM `parsertest_page_restrictions` `page_restrictions` JOIN `parsertest_page` `page` ON ((page_id=pr_page)) JOIN `parsertest_imagelinks` `imagelinks` ON ((il_from=pr_page))   WHERE pr_cascade = 1 AND il_to = 'Foobar.jpg'  ) UNION ALL (SELECT  pr_expiry,pr_page,page_namespace,page_title,pr_type,pr_level,'tl' AS `type`  FROM `parsertest_page_restrictions` `page_restrictions` JOIN `parsertest_page` `page` ON ((page_id=pr_page)) JOIN `parsertest_templatelinks` `templatelinks` ON ((tl_from=pr_page))   WHERE pr_cascade = 1 AND (1=0)  )
TheDJ renamed this task from parsertests fail with cannot reopen table: page_restrictions to parsertests cannot use MySQL: cannot reopen table: page_restrictions.Dec 11 2025, 9:13 PM

Change #1236282 had a related patch set uploaded (by Thiemo Kreuz (WMDE); author: Thiemo Kreuz (WMDE)):

[mediawiki/core@master] Fix UNION query not being supported in MySQL test setups

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

Change #1239253 had a related patch set uploaded (by Thiemo Kreuz (WMDE); author: SomeRandomDeveloper):

[mediawiki/core@master] [POC] Emulate union queries in integration tests when using MySQL

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

Change #1239253 merged by jenkins-bot:

[mediawiki/core@master] Rdbms: Emulate UNION queries in tests when using MySQL

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

Change #1236282 abandoned by TheDJ:

[mediawiki/core@master] Fix UNION query not being supported in MySQL test setups

Reason:

in favor of Ieb1a2b7ab34cb095df44758181d4480b5d3ce349

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