Page MenuHomePhabricator

CI + Beta errors: Call to undefined method MediaWiki\Extension\CentralAuth\Hooks\Handlers\AbuseFilterHookHandler::onAbuseFilter-generateUserVars()
Closed, ResolvedPublic

Description

Example Wikibase CI build:

internal_api_error_Error: [909a91f664b380e8f87f5f64] Exception caught: Call to undefined method MediaWiki\Extension\CentralAuth\Hooks\Handlers\AbuseFilterHookHandler::onAbuseFilter-generateUserVars()

Also affects Beta (at least cswiki per T338213#8905338 and T338213#8905384.

Event Timeline

Possibly related to @daniel’s Simplify HookContainer? That was merged very recently, whereas I don’t see any recent changes in AbuseFilter or CentralAuth that look related at a glance. (From the error message, the simplified HookContainer might be missing some code to replace the - with _ in onAbuseFilter-generateUserVars?)

E.g. on this Wikibase change, several of the main test builds failed. The error message quoted above can be seen in selenium and in apitests, but neither of those give us a PHP stack trace unfortunately (unless it’s somewhere in the artifacts?); the noselenium job has plenty of errors, but eventually PHPUnit dies completely before it can print any of the details:

EEEEEEEEEEEEEEEEEEEEEEEEEEEE...EE...EE...EEEEEEEEEEEEEEEEEEEE 2135 / 4750 ( 44%)
EEEEEEEEEEEEEEEEEEEE.E.E.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 2196 / 4750 ( 46%)
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE..EE..EEEE.EEEEEEEEEEEEE 2257 / 4750 ( 47%)
EEEEEEEEEEEEEEEEEEEE...................EE.................... 2318 / 4750 ( 48%)
<...snip...>
.................E........................................... 4331 / 4750 ( 91%)
.....................................................S....... 4392 / 4750 ( 92%)
......................SSSSSSSSSSSSSSSSS..S..SSS..SS.SSSSSS... 4453 / 4750 ( 93%)
SS.....SSSSSSSSSSS......S.....S....S.......SSSPHP Fatal error:  Uncaught Wikimedia\Services\NoSuchServiceException: No such service: LanguageConverterFactory in /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php:218
Stack trace:
#0 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(372): Wikimedia\Services\ServiceContainer->peekService()
#1 /workspace/src/includes/MediaWikiServices.php(608): Wikimedia\Services\ServiceContainer->resetService()
#2 /workspace/src/tests/parser/ParserTestRunner.php(410): MediaWiki\MediaWikiServices->resetServiceForTesting()
#3 /workspace/src/tests/parser/ParserTestRunner.php(615): ParserTestRunner::{closure}()
#4 /workspace/src/tests/parser/ParserTestRunner.php(645): ParserTestRunner->executeSetupSnippets()
#5 [internal function]: ParserTestRunner->{closure}()
#6 /workspace/src/vendor/wikimedia/scoped-callback/src/ScopedCallback.php(102): call_user_func_array()
#7 [internal function]: Wikimedia\ScopedCallback->__destruct()
#8 {main}
  thrown in /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php on line 218
Call to undefined method ParserTestFileSuite::testAt()

Fatal error: Uncaught Wikimedia\Services\NoSuchServiceException: No such service: LanguageConverterFactory in /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php:218
Stack trace:
#0 /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php(372): Wikimedia\Services\ServiceContainer->peekService()
#1 /workspace/src/includes/MediaWikiServices.php(608): Wikimedia\Services\ServiceContainer->resetService()
#2 /workspace/src/tests/parser/ParserTestRunner.php(410): MediaWiki\MediaWikiServices->resetServiceForTesting()
#3 /workspace/src/tests/parser/ParserTestRunner.php(615): ParserTestRunner::{closure}()
#4 /workspace/src/tests/parser/ParserTestRunner.php(645): ParserTestRunner->executeSetupSnippets()
#5 [internal function]: ParserTestRunner->{closure}()
#6 /workspace/src/vendor/wikimedia/scoped-callback/src/ScopedCallback.php(102): call_user_func_array()
#7 [internal function]: Wikimedia\ScopedCallback->__destruct()
#8 {main}
  thrown in /workspace/src/vendor/wikimedia/services/src/ServiceContainer.php on line 218
Script php tests/phpunit/phpunit.php handling the phpunit event returned with error code 2

Aha, we can get a PHP stack trace from the noselenium artifacts mw-error.log:

2023-06-06 08:48:00 41d3d730c8bf wikidb-unittest_: [e8634fa4660e89e30ff265a5] [no req]   Error: Call to undefined method MediaWiki\Extension\CentralAuth\Hooks\Handlers\AbuseFilterHookHandler::onAbuseFilter-generateUserVars()
#0 /workspace/src/extensions/AbuseFilter/includes/Hooks/AbuseFilterHookRunner.php(145): MediaWiki\HookContainer\HookContainer->run()
#1 /workspace/src/extensions/AbuseFilter/includes/VariableGenerator/VariableGenerator.php(115): MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner->onAbuseFilter_generateUserVars()
#2 /workspace/src/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(155): MediaWiki\Extension\AbuseFilter\VariableGenerator\VariableGenerator->addUserVars()
#3 /workspace/src/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(91): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->newVariableHolderForEdit()
#4 /workspace/src/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(392): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->getStashEditVars()
#5 /workspace/src/includes/deferred/MWCallableUpdate.php(38): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->MediaWiki\Extension\AbuseFilter\Hooks\Handlers\{closure}()
#6 /workspace/src/includes/deferred/DeferredUpdatesManager.php(506): MWCallableUpdate->doUpdate()
...

Hmm, beta wikis are offline too with a similar error:

[ZH73@OA1dX58GXh@K8XaKgAAAJA] /wiki/Main_Page Error: Call to undefined method MediaWiki\Extension\TorBlock\TorBlockAbuseFilterHooks::onAbuseFilter-builder()

Backtrace:

from /srv/mediawiki/php-master/includes/HookContainer/HookContainer.php(158)
#0 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Hooks/AbuseFilterHookRunner.php(51): MediaWiki\HookContainer\HookContainer->run(string, array)
#1 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/KeywordsManager.php(219): MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner->onAbuseFilter_builder(array)
#2 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/KeywordsManager.php(283): MediaWiki\Extension\AbuseFilter\KeywordsManager->getBuilderValues()
#3 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/KeywordsManager.php(245): MediaWiki\Extension\AbuseFilter\KeywordsManager->getVarsMappings()
#4 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(798): MediaWiki\Extension\AbuseFilter\KeywordsManager->isVarInUse(string)
#5 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(817): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->varExists(string)
#6 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(459): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->getVarValue(string)
#7 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(546): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#8 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(551): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#9 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(590): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#10 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(590): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#11 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(590): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#12 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(590): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#13 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(590): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#14 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(439): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#15 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(383): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalTree(MediaWiki\Extension\AbuseFilter\Parser\AFPSyntaxTree)
#16 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(349): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->parse(string)
#17 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/FilterRunner.php(372): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->checkConditions(string, string)
#18 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/FilterRunner.php(333): MediaWiki\Extension\AbuseFilter\FilterRunner->checkFilter(MediaWiki\Extension\AbuseFilter\Filter\ExistingFilter)
#19 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/FilterRunner.php(224): MediaWiki\Extension\AbuseFilter\FilterRunner->checkAllFiltersInternal()
#20 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php(89): MediaWiki\Extension\AbuseFilter\FilterRunner->run()
#21 /srv/mediawiki/php-master/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php(66): MediaWiki\Extension\AbuseFilter\AbuseFilterPreAuthenticationProvider->testUser(User, User, boolean)
#22 /srv/mediawiki/php-master/includes/auth/AuthManager.php(1836): MediaWiki\Extension\AbuseFilter\AbuseFilterPreAuthenticationProvider->testUserForCreation(User, string, array)
#23 /srv/mediawiki/php-master/includes/Setup.php(578): MediaWiki\Auth\AuthManager->autoCreateUser(User, string, boolean)
#24 /srv/mediawiki/php-master/includes/WebStart.php(92): require_once(string)
#25 /srv/mediawiki/php-master/index.php(44): require(string)
#26 /srv/mediawiki/w/index.php(3): require(string)
#27 {main}

Okay, I can reproduce it locally by running the Wikibase test repo/tests/phpunit/includes/Store/Sql/WikiPageEntityStoreTest.php --filter testDeleteEntity, and reverting “Simplify HookContainer” in core indeed fixes the test again.

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

[mediawiki/core@master] Revert "Simplify HookContainer"

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

Lucas_Werkmeister_WMDE renamed this task from Wikibase CI failing: Call to undefined method MediaWiki\Extension\CentralAuth\Hooks\Handlers\AbuseFilterHookHandler::onAbuseFilter-generateUserVars() to CI + Beta errors: Call to undefined method MediaWiki\Extension\CentralAuth\Hooks\Handlers\AbuseFilterHookHandler::onAbuseFilter-generateUserVars().Jun 6 2023, 9:16 AM
Lucas_Werkmeister_WMDE updated the task description. (Show Details)

Hmm, beta wikis are offline too with a similar error:

[ZH73@OA1dX58GXh@K8XaKgAAAJA] /wiki/Main_Page Error: Call to undefined method MediaWiki\Extension\TorBlock\TorBlockAbuseFilterHooks::onAbuseFilter-builder()
...

Which beta wiki is that? The URL says Main Page, but beta enwiki, beta Wikidata and beta Commons all work for me at the moment.

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

[mediawiki/core@master] Revert "Simplify HookContainer"

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

I've +2'ed the patch. Beta should be fixed within ~60 minutes.

Hmm, beta wikis are offline too with a similar error:

[ZH73@OA1dX58GXh@K8XaKgAAAJA] /wiki/Main_Page Error: Call to undefined method MediaWiki\Extension\TorBlock\TorBlockAbuseFilterHooks::onAbuseFilter-builder()
...

Which beta wiki is that? The URL says Main Page, but beta enwiki, beta Wikidata and beta Commons all work for me at the moment.

Sorry, cs beta wiki: https://cs.wikipedia.beta.wmflabs.org/wiki/Speci%C3%A1ln%C3%AD:Uv%C3%ADtac%C3%AD_dotazn%C3%ADk

kostajh triaged this task as Unbreak Now! priority.Jun 6 2023, 9:18 AM

CI broken for multiple extensions + beta wikis offline => UBN.

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

[mediawiki/core@master] Simplify HookContainer (v2)

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

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

[mediawiki/extensions/Wikibase@master] DNM: Empty change to test CI

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

I think I actually found a fix for the original patch (though @daniel and/or @tstarling should definitely take a closer look) – let’s see if CI likes that. (But the revert can still finish going through gate-and-submit.)

Change 927590 merged by jenkins-bot:

[mediawiki/core@master] Revert "Simplify HookContainer"

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

Lucas_Werkmeister_WMDE lowered the priority of this task from Unbreak Now! to High.Jun 6 2023, 9:57 AM

Seems to work again, so no longer UBN. (Also, Wikibase CI seems to work with the ”Simplify HookContainer (v2)” I uploaded above, yay.)

Change 927596 merged by jenkins-bot:

[mediawiki/core@master] Simplify HookContainer (v2)

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

Change 927597 abandoned by Lucas Werkmeister (WMDE):

[mediawiki/extensions/Wikibase@master] DNM: Empty change to test CI

Reason:

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

Lucas_Werkmeister_WMDE claimed this task.

I think this is resolved now.

It still needs a regression test.

On translatewiki.net we had the following error pop up when running the rebuildLocalisationCache script:

[891c19fc2a4c905abf364b8d] [no req]   Error: Class 'PSExtensionHandler' not found
Backtrace:
from /srv/mediawiki/workdir/extensions/PageForms/includes/PF_PageSchemas.php(15)
#0 /srv/mediawiki/workdir/includes/AutoLoader.php(222): require()
#1 [internal function]: AutoLoader::autoload()
#2 [internal function]: spl_autoload_call()
#3 /srv/mediawiki/workdir/includes/HookContainer/HookContainer.php(344): is_callable()
#4 /srv/mediawiki/workdir/includes/HookContainer/HookContainer.php(521): MediaWiki\HookContainer\HookContainer->normalizeHandler()
#5 /srv/mediawiki/workdir/includes/HookContainer/HookContainer.php(450): MediaWiki\HookContainer\HookContainer->getHandlers()
#6 /srv/mediawiki/workdir/extensions/SemanticMediaWiki/src/MediaWiki/Hooks.php(152): MediaWiki\HookContainer\HookContainer->register()
#7 /srv/mediawiki/workdir/extensions/SemanticMediaWiki/src/Setup.php(389): SMW\MediaWiki\Hooks->register()
#8 /srv/mediawiki/workdir/extensions/SemanticMediaWiki/src/Setup.php(152): SMW\Setup->registerHooks()
#9 /srv/mediawiki/workdir/extensions/SemanticMediaWiki/includes/SemanticMediaWiki.php(84): SMW\Setup->init()
#10 /srv/mediawiki/workdir/includes/Setup.php(564): SemanticMediaWiki::onExtensionFunction()
#11 /srv/mediawiki/workdir/maintenance/run.php(49): require_once(string)
#12 {main}

Reverting this change fixed the issue:

[mediawiki/core@master] Simplify HookContainer (v2)
https://gerrit.wikimedia.org/r/927596