Page MenuHomePhabricator

Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string blocking use of BundleSizeTestBase
Closed, ResolvedPublicBUG REPORT

Description

The following test failure is blocking merges in WikimediaMessages on this patch: https://gerrit.wikimedia.org/r/c/mediawiki/extensions/WikimediaMessages/+/1071984

11:50:15 mw-error.log:2024-09-12 18:29:00 1a43f383625e wikidb: [e298a95dce5ecb7f35eb7ab1] [no req]   Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string
11:50:15 mw-error.log:#0 /workspace/src/extensions/Wikibase/lib/includes/Rdbms/RepoDomainDbFactory.php(37): Wikimedia\Assert\Assert::parameterType()
11:50:15 mw-error.log:#1 /workspace/src/extensions/Wikibase/client/WikibaseClient.ServiceWiring.php(844): Wikibase\Lib\Rdbms\RepoDomainDbFactory->__construct()
11:50:15 mw-error.log:#2 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(447): MediaWikiIntegrationTestCase::{closure}()
11:50:15 mw-error.log:#3 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
11:50:15 mw-error.log:#4 /workspace/src/includes/MediaWikiServices.php(355): Wikimedia\Services\ServiceContainer->getService()
11:50:15 mw-error.log:#5 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
11:50:15 mw-error.log:#6 /workspace/src/extensions/Wikibase/client/includes/WikibaseClient.php(523): Wikimedia\Services\ServiceContainer->get()
11:50:15 mw-error.log:#7 /workspace/src/extensions/Wikibase/client/WikibaseClient.ServiceWiring.php(1095): Wikibase\Client\WikibaseClient::getRepoDomainDbFactory()
11:50:15 mw-error.log:#8 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(447): MediaWikiIntegrationTestCase::{closure}()
11:50:15 mw-error.log:#9 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
11:50:15 mw-error.log:#10 /workspace/src/includes/MediaWikiServices.php(355): Wikimedia\Services\ServiceContainer->getService()
11:50:15 mw-error.log:#11 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
11:50:15 mw-error.log:#12 /workspace/src/extensions/Wikibase/client/includes/WikibaseClient.php(150): Wikimedia\Services\ServiceContainer->get()
11:50:15 mw-error.log:#13 /workspace/src/extensions/Wikibase/client/WikibaseClient.ServiceWiring.php(984): Wikibase\Client\WikibaseClient::getWikibaseServices()
11:50:15 mw-error.log:#14 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(447): MediaWikiIntegrationTestCase::{closure}()
11:50:15 mw-error.log:#15 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
11:50:15 mw-error.log:#16 /workspace/src/includes/MediaWikiServices.php(355): Wikimedia\Services\ServiceContainer->getService()
11:50:15 mw-error.log:#17 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
11:50:15 mw-error.log:#18 /workspace/src/extensions/Wikibase/client/includes/WikibaseClient.php(215): Wikimedia\Services\ServiceContainer->get()
11:50:15 mw-error.log:#19 /workspace/src/extensions/Wikibase/client/WikibaseClient.ServiceWiring.php(407): Wikibase\Client\WikibaseClient::getStore()
11:50:15 mw-error.log:#20 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(447): MediaWikiIntegrationTestCase::{closure}()
11:50:15 mw-error.log:#21 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
11:50:15 mw-error.log:#22 /workspace/src/includes/MediaWikiServices.php(355): Wikimedia\Services\ServiceContainer->getService()
11:50:15 mw-error.log:#23 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
11:50:15 mw-error.log:#24 /workspace/src/extensions/Wikibase/client/includes/WikibaseClient.php(160): Wikimedia\Services\ServiceContainer->get()
11:50:15 mw-error.log:#25 /workspace/src/extensions/Wikibase/client/WikibaseClient.ServiceWiring.php(872): Wikibase\Client\WikibaseClient::getEntityLookup()
11:50:15 mw-error.log:#26 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(447): MediaWikiIntegrationTestCase::{closure}()
11:50:15 mw-error.log:#27 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
11:50:15 mw-error.log:#28 /workspace/src/includes/MediaWikiServices.php(355): Wikimedia\Services\ServiceContainer->getService()
11:50:15 mw-error.log:#29 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
11:50:15 mw-error.log:#30 /workspace/src/vendor/wikimedia/object-factory/src/ObjectFactory.php(204): Wikimedia\Services\ServiceContainer->get()
11:50:15 mw-error.log:#31 /workspace/src/vendor/wikimedia/object-factory/src/ObjectFactory.php(149): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec()
11:50:15 mw-error.log:#32 /workspace/src/includes/HookContainer/HookContainer.php(256): Wikimedia\ObjectFactory\ObjectFactory->createObject()
11:50:15 mw-error.log:#33 /workspace/src/includes/HookContainer/HookContainer.php(348): MediaWiki\HookContainer\HookContainer->makeExtensionHandlerCallback()
11:50:15 mw-error.log:#34 /workspace/src/includes/HookContainer/HookContainer.php(524): MediaWiki\HookContainer\HookContainer->normalizeHandler()
11:50:15 mw-error.log:#35 /workspace/src/includes/HookContainer/HookContainer.php(146): MediaWiki\HookContainer\HookContainer->getHandlers()
11:50:15 mw-error.log:#36 /workspace/src/includes/HookContainer/HookRunner.php(2983): MediaWiki\HookContainer\HookContainer->run()
11:50:15 mw-error.log:#37 /workspace/src/includes/parser/Parser.php(653): MediaWiki\HookContainer\HookRunner->onParserClearState()
11:50:15 mw-error.log:#38 /workspace/src/includes/parser/Parser.php(4929): MediaWiki\Parser\Parser->clearState()
11:50:15 mw-error.log:#39 /workspace/src/includes/parser/Parser.php(696): MediaWiki\Parser\Parser->startParse()
11:50:15 mw-error.log:#40 /workspace/src/includes/language/MessageCache.php(1533): MediaWiki\Parser\Parser->parse()
11:50:15 mw-error.log:#41 /workspace/src/includes/Message/Message.php(1492): MessageCache->parse()
11:50:15 mw-error.log:#42 /workspace/src/includes/Message/Message.php(1059): MediaWiki\Message\Message->parseText()
11:50:15 mw-error.log:#43 /workspace/src/includes/Message/Message.php(1087): MediaWiki\Message\Message->format()
11:50:15 mw-error.log:#44 [internal function]: MediaWiki\Message\Message->__toString()
11:50:15 mw-error.log:#45 /workspace/src/extensions/WikimediaMessages/includes/SiteAdminHelperModule.php(69): explode()
11:50:15 mw-error.log:#46 /workspace/src/includes/ResourceLoader/FileModule.php(410): MediaWiki\Extension\WikimediaMessages\SiteAdminHelperModule->getStyleFiles()
11:50:15 mw-error.log:#47 /workspace/src/includes/ResourceLoader/Module.php(853): MediaWiki\ResourceLoader\FileModule->getStyles()
11:50:15 mw-error.log:#48 /workspace/src/includes/ResourceLoader/Module.php(812): MediaWiki\ResourceLoader\Module->buildContent()
11:50:15 mw-error.log:#49 /workspace/src/includes/ResourceLoader/ResourceLoader.php(1268): MediaWiki\ResourceLoader\Module->getModuleContent()
11:50:15 mw-error.log:#50 /workspace/src/includes/ResourceLoader/ResourceLoader.php(1192): MediaWiki\ResourceLoader\ResourceLoader->addOneModuleResponse()
11:50:15 mw-error.log:#51 /workspace/src/includes/ResourceLoader/ResourceLoader.php(1110): MediaWiki\ResourceLoader\ResourceLoader->getOneModuleResponse()
11:50:15 mw-error.log:#52 /workspace/src/tests/phpunit/structure/BundleSizeTestBase.php(81): MediaWiki\ResourceLoader\ResourceLoader->makeModuleResponse()
11:50:15 mw-error.log:#53 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(1617): MediaWiki\Tests\Structure\BundleSizeTestBase->testBundleSize()
11:50:15 mw-error.log:#54 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(1223): PHPUnit\Framework\TestCase->runTest()
11:50:15 mw-error.log:#55 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestResult.php(729): PHPUnit\Framework\TestCase->runBare()
11:50:15 mw-error.log:#56 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(973): PHPUnit\Framework\TestResult->run()
11:50:15 mw-error.log:#57 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestCase->run()
11:50:15 mw-error.log:#58 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestSuite->run()
11:50:15 mw-error.log:#59 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestSuite->run()
11:50:15 mw-error.log:#60 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestSuite->run()
11:50:15 mw-error.log:#61 /workspace/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(685): PHPUnit\Framework\TestSuite->run()
11:50:15 mw-error.log:#62 /workspace/src/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(651): PHPUnit\Framework\TestSuite->run()
11:50:15 mw-error.log:#63 /workspace/src/vendor/phpunit/phpunit/src/TextUI/Command.php(146): PHPUnit\TextUI\TestRunner->run()
11:50:15 mw-error.log:#64 /workspace/src/vendor/phpunit/phpunit/src/TextUI/Command.php(99): PHPUnit\TextUI\Command->run()
11:50:15 mw-error.log:#65 phpvfscomposer:///workspace/src/vendor/phpunit/phpunit/phpunit(106): PHPUnit\TextUI\Command::main()
11:50:15 mw-error.log:#66 /workspace/src/vendor/bin/phpunit(118): include(string)
11:50:15 mw-error.log:#67 {main}
11:50:15 + set -e
11:50:15 + echo -e 'MediaWiki emitted some errors. Check output above.'
11:50:15 MediaWiki emitted some errors. Check output above.
11:50:15 + exit 1
11:50:15 Build step 'Execute shell' marked build as failure
11:50:15 [PostBuildScript] - [INFO] Executing post build scripts.
11:50:15 [wmf-quibble-vendor-mysql-php74] $ /bin/bash /tmp/jenkins3798968297428817702.sh
11:50:15 + set -o pipefail
11:50:15 ++ pwd
11:50:15 + '[' '!' -d /srv/jenkins/workspace/wmf-quibble-vendor-mysql-php74/log ']'
11:50:15 ++ pwd
11:50:15 + exec docker run --entrypoint=/bin/rm --volume /srv/jenkins/workspace/wmf-quibble-vendor-mysql-php74/log:/log --security-opt seccomp=unconfined --init --rm --label jenkins.job=wmf-quibble-vendor-mysql-php74 --label jenkins.build=17712 --env-file /dev/fd/63 docker-registry.wikimedia.org/buster:latest -fR /log/rawSeleniumVideoGrabs
11:50:15 ++ /usr/bin/env
11:50:15 ++ egrep -v '^(HOME|SHELL|PATH|LOGNAME|MAIL)='
11:50:15 [PostBuildScript] - [INFO] Executing post build scripts.
11:50:15 [wmf-quibble-vendor-mysql-php74] $ /bin/bash -xe /tmp/jenkins2937141356033878064.sh
11:50:15 + find log/ -name 'mw-debug-*.log' -exec gzip '{}' +

Event Timeline

Jdlrobson renamed this task from Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string blocking merges to Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string blocking updates to tests.Sep 12 2024, 8:40 PM
Jdlrobson renamed this task from Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string blocking updates to tests to Wikimedia\Assert\ParameterTypeException: Bad value for parameter $repoDomain: must be a string blocking use of BundleSizeTestBase.Sep 12 2024, 8:42 PM
Jdlrobson updated the task description. (Show Details)

FTR, judging by this other change the failure only seems to affect the change linked in the task description, not WikimediaMessages CI in general. Though it’s not clear to me why that change makes a difference for the Wikibase test.

Though it’s not clear to me why that change makes a difference for the Wikibase test.

Oh. The BundleSizeTest test being added by the change directly shows up in the stack trace. I hadn’t noticed that before. And the affected module is WikimediaMessages-specific (SiteAdminHelperModule), which explains why we didn’t see this in another extension before.

I feel like we’ve seen the underlying problem before – that the site ID somehow isn’t set in CI (or that the sites table is empty and doesn’t contain an entry for the local site?) – but I can’t find it right now. (There’s T153729, but that can’t be the one I’m remembering.)

I tried to look through the Git log but didn’t really find what I was looking for; the closest changes were service wiring changes for RecentChangeFactory and SiteGroup.

I also noticed that the stack trace doesn’t show the problem being in a site ID, exactly; the bad $repoDomain comes from here and (I think) must be the result of $lbFactory->getLocalDomainID():

WikibaseClient.ServiceWiring.php::WikibaseClient.RepoDomainDbFactory
return new RepoDomainDbFactory(
	$lbFactory,
	WikibaseClient::getItemAndPropertySource( $services )->getDatabaseName() ?: $lbFactory->getLocalDomainID(),
	[ DomainDb::LOAD_GROUP_FROM_CLIENT ]
);

The real implementation of getLocalDomainID() looks like it always has to return a string, so I’m guessing the $lbFactory ends up being a PHPUnit mock. So let’s try to communicate the right type to PHPUnit?

Change #1072779 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/core@master] rdbms: Make sure ILBFactory::getLocalDomainID() returns a string

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

Other possible approaches to fix the test might include:

  • Make WikimediaMessages’ BundleSizeTest clear the ParserClearState hook, removing Wikibase’s hook handler. This feels a bit like a hack, but it should work. (We did the same thing with another hook earlier today for T374690, incidentally.)
  • Fix whatever the source of $lbFactory->getLocalDomainID() is to return a string. (But I have no idea where that mock comes from, assuming it even is a mock.)
  • Make sure the $lbFactory in this context is a real LBFactory and not a mock. (Assuming yadda yadda.)
  • Make Wikibase tolerate the invalid $repoDomain somehow (though I have no idea what we’re supposed to do with it).

Change #1072780 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/extensions/WikimediaMessages@master] DNM: empty change to test CI

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

Change #1072781 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/extensions/Wikibase@master] Add return type to FakeLBFactory::getLocalDomainID()

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

Thanks for jumping on this so quickly and the explanation! I can wait until https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Wikibase/+/1072781 gets deployed - I can confirm this addresses the issue!

Change #1072781 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] Add return type to FakeLBFactory::getLocalDomainID()

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

Change #1072780 abandoned by Lucas Werkmeister (WMDE):

[mediawiki/extensions/WikimediaMessages@master] DNM: empty change to test CI

Reason:

no longer needed, we successfully demonstrated that the depended-on change made CI green

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

The core change still needs to be reviewed; IMHO it’s harmless enough that it would be fine for someone from our team to merge it, but I also wouldn’t mind if a WMF person does it ^^

Change #1072779 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Make sure ILBFactory::getLocalDomainID() returns a string

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