Page MenuHomePhabricator

GlobalPreferences\Hooks::getPreferencesFactory() must be an instance of GlobalPreferences\GlobalPreferencesFactory
Open, Stalled, LowPublicBUG REPORT

Description

2020/07/10 15:36:59 [error] 30645#30645: *122671459 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of GlobalPreferences\Hooks::getPreferencesFactory() must be an instance of GlobalPreferences\GlobalPreferencesFactory, instance of MediaWiki\Preferences\DefaultPreferencesFactory returned in /<path>/w/extensions/GlobalPreferences/includes/Hooks.php:293
Stack trace:
#0 <path>/w/extensions/GlobalPreferences/includes/Hooks.php(43): GlobalPreferences\Hooks::getPreferencesFactory(Object(User))
#1 /<path>/w/includes/Hooks.php(174): GlobalPreferences\Hooks::onUserLoadOptions(Object(User), Array)
#2 /<path>/w/includes/Hooks.php(202): Hooks::callHook('UserLoadOptions', Array, Array, NULL)
#3 /<path>/w/includes/user/User.php(5200): Hooks::run('UserLoadOptions', Array)
#4 /<path>/w/includes/user/User.php(2994): User->loadOptions()
#5 /<path>/w/includes/resourceloader/ResourceLoaderUserOptionsModule.php(76): User->getOptions(1)
#6 /<path>/w/includes/resourceloader/ResourceLoaderClientHtml.php(149):"

REL1_34 MediaWiki Core + GlobalPreferences.

Not sure where to start with debugging this issue found on every page load (as far as I can tell). Upgraded from REL1_32->REL1_34 and ran into this.

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript
TheresNoTime changed the task status from Open to Stalled.Jun 21 2022, 2:54 PM
TheresNoTime subscribed.

Stalling per above request for further information

Forgot about this one - yes, and in REL1_35.

Is the cause likely to be similar to T285894 ?

Updated backtrace from my dev stack. For testing purposes, I disabled every extension, skin and non-"core" hook call.

[681ce7ac7b4d7d4eb733cc15] /wiki/Main_Page TypeError from line 300 of /home/lcawte/webhost/quietwiki/w/extensions/GlobalPreferences/includes/Hooks.php: Return value of GlobalPreferences\Hooks::getPreferencesFactory() must be an instance of GlobalPreferences\GlobalPreferencesFactory, instance of MediaWiki\Preferences\DefaultPreferencesFactory returned

Backtrace:

#0 /home/lcawte/webhost/quietwiki/w/extensions/GlobalPreferences/includes/Hooks.php(43): GlobalPreferences\Hooks::getPreferencesFactory()
#1 /home/lcawte/webhost/quietwiki/w/includes/HookContainer/HookContainer.php(329): GlobalPreferences\Hooks::onUserLoadOptions()
#2 /home/lcawte/webhost/quietwiki/w/includes/HookContainer/HookContainer.php(132): MediaWiki\HookContainer\HookContainer->callLegacyHook()
#3 /home/lcawte/webhost/quietwiki/w/includes/HookContainer/HookRunner.php(4369): MediaWiki\HookContainer\HookContainer->run()
#4 /home/lcawte/webhost/quietwiki/w/includes/user/UserOptionsManager.php(557): MediaWiki\HookContainer\HookRunner->onUserLoadOptions()
#5 /home/lcawte/webhost/quietwiki/w/includes/user/UserOptionsManager.php(135): MediaWiki\User\UserOptionsManager->loadUserOptions()
#6 /home/lcawte/webhost/quietwiki/w/includes/user/UserOptionsLookup.php(123): MediaWiki\User\UserOptionsManager->getOption()
#7 /home/lcawte/webhost/quietwiki/w/includes/user/User.php(2718): MediaWiki\User\UserOptionsLookup->getIntOption()
#8 /home/lcawte/webhost/quietwiki/w/includes/user/User.php(2910): User->getIntOption()
#9 /home/lcawte/webhost/quietwiki/w/includes/linker/LinkRendererFactory.php(99): User->getStubThreshold()
#10 /home/lcawte/webhost/quietwiki/w/includes/ServiceWiring.php(531): MediaWiki\Linker\LinkRendererFactory->createForUser()
#11 /home/lcawte/webhost/quietwiki/w/vendor/wikimedia/services/src/ServiceContainer.php(447): Wikimedia\Services\ServiceContainer->{closure}()
#12 /home/lcawte/webhost/quietwiki/w/vendor/wikimedia/services/src/ServiceContainer.php(416): Wikimedia\Services\ServiceContainer->createService()
#13 /home/lcawte/webhost/quietwiki/w/includes/MediaWikiServices.php(834): Wikimedia\Services\ServiceContainer->getService()
#14 /home/lcawte/webhost/quietwiki/w/includes/page/Article.php(164): MediaWiki\MediaWikiServices->getLinkRenderer()
#15 /home/lcawte/webhost/quietwiki/w/includes/page/Article.php(211): Article->__construct()
#16 /home/lcawte/webhost/quietwiki/w/includes/page/Article.php(227): Article::newFromTitle()
#17 /home/lcawte/webhost/quietwiki/w/includes/MediaWiki.php(422): Article::newFromWikiPage()
#18 /home/lcawte/webhost/quietwiki/w/includes/MediaWiki.php(311): MediaWiki->initializeArticle()
#19 /home/lcawte/webhost/quietwiki/w/includes/MediaWiki.php(947): MediaWiki->performRequest()
#20 /home/lcawte/webhost/quietwiki/w/includes/MediaWiki.php(547): MediaWiki->main()
#21 /home/lcawte/webhost/quietwiki/w/index.php(53): MediaWiki->run()
#22 /home/lcawte/webhost/quietwiki/w/index.php(46): wfIndexMain()
#23 {main}
Legoktm changed the task status from Stalled to Open.EditedMay 19 2023, 7:29 PM
Legoktm triaged this task as Low priority.
Legoktm subscribed.

After debugging with @lcawte, this is basically the same issue in T285894: TypeError: Return value of GlobalPreferences\Hooks::getPreferencesFactory() must be an instance of GlobalPreferences\GlobalPreferencesFactory, instance of MediaWiki\Preferences\DefaultPreferencesFactory returned - premature access to MediaWikiServices in LocalSettings.php. On master you can just stick MediaWiki\MediaWikiServices::getInstance() in LocalSettings.php, and you get a bizzare traceback that falsely implicates GlobalPreferences:

[988acb724113b1f5da63d795] /index.php?title=Special:UserLogin&returnto=Main+Page Error: Call to undefined method MediaWiki\Preferences\DefaultPreferencesFactory::isUserGlobalized()

Backtrace:

from /home/user/gerrit/mediawiki/core/extensions/GlobalPreferences/includes/Hooks.php(86)
#0 /home/user/gerrit/mediawiki/core/includes/HookContainer/HookContainer.php(160): GlobalPreferences\Hooks->onLoadUserOptions()
#1 /home/user/gerrit/mediawiki/core/includes/HookContainer/HookRunner.php(4316): MediaWiki\HookContainer\HookContainer->run()
#2 /home/user/gerrit/mediawiki/core/includes/user/UserOptionsManager.php(654): MediaWiki\HookContainer\HookRunner->onLoadUserOptions()
#3 /home/user/gerrit/mediawiki/core/includes/user/UserOptionsManager.php(508): MediaWiki\User\UserOptionsManager->loadOriginalOptions()
#4 /home/user/gerrit/mediawiki/core/includes/user/UserOptionsManager.php(157): MediaWiki\User\UserOptionsManager->loadUserOptions()
#5 /home/user/gerrit/mediawiki/core/includes/context/RequestContext.php(445): MediaWiki\User\UserOptionsManager->getOption()
#6 /home/user/gerrit/mediawiki/core/includes/language/Message.php(818): RequestContext->getLanguage()

The service container should emit a better error message instead of silently having the redefineService call failing.

TheresNoTime changed the subtype of this task from "Task" to "Bug Report".May 24 2023, 2:10 PM
TheresNoTime moved this task from New & TBD Tickets to Needs Discussion on the Community-Tech board.
JWheeler-WMF changed the task status from Open to Stalled.Mar 26 2024, 9:42 PM
JWheeler-WMF moved this task from Needs Discussion to Freezer on the Community-Tech board.