Page MenuHomePhabricator

Session user loaded before session set up in GrowthExperimentsMentorManager service
Closed, ResolvedPublicPRODUCTION ERROR

Description

/srv/mediawiki/php-1.38.0-wmf.13/includes/user/User.php:380
User::loadFromSession called before the end of Setup.php
from /srv/mediawiki/php-1.38.0-wmf.13/includes/user/User.php(380)
#0 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/User.php(1893): User->load()
#1 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/User.php(2529): User->getId()
#2 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/UserOptionsManager.php(644): User->isRegistered()
#3 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/UserOptionsManager.php(594): MediaWiki\User\UserOptionsManager->getCacheKey(User)
#4 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/UserOptionsManager.php(497): MediaWiki\User\UserOptionsManager->loadOriginalOptions(User, integer, NULL)
#5 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/UserOptionsManager.php(147): MediaWiki\User\UserOptionsManager->loadUserOptions(User, integer)
#6 /srv/mediawiki/php-1.38.0-wmf.13/includes/user/User.php(2356): MediaWiki\User\UserOptionsManager->getOption(User, string, NULL, boolean)
#7 /srv/mediawiki/php-1.38.0-wmf.13/includes/context/RequestContext.php(384): User->getOption(string)
#8 /srv/mediawiki/php-1.38.0-wmf.13/extensions/GrowthExperiments/ServiceWiring.php(397): RequestContext->getLanguage()
#9 /srv/mediawiki/php-1.38.0-wmf.13/vendor/wikimedia/services/src/ServiceContainer.php(447): Wikimedia\Services\ServiceContainer::{closure}(MediaWiki\MediaWikiServices)
#10 /srv/mediawiki/php-1.38.0-wmf.13/vendor/wikimedia/services/src/ServiceContainer.php(416): Wikimedia\Services\ServiceContainer->createService(string)
#11 /srv/mediawiki/php-1.38.0-wmf.13/includes/MediaWikiServices.php(291): Wikimedia\Services\ServiceContainer->getService(string)
#12 /srv/mediawiki/php-1.38.0-wmf.13/vendor/wikimedia/services/src/ServiceContainer.php(424): MediaWiki\MediaWikiServices->getService(string)
#13 /srv/mediawiki/php-1.38.0-wmf.13/vendor/wikimedia/object-factory/src/ObjectFactory/ObjectFactory.php(209): Wikimedia\Services\ServiceContainer->get(string)
#14 /srv/mediawiki/php-1.38.0-wmf.13/vendor/wikimedia/object-factory/src/ObjectFactory/ObjectFactory.php(150): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec(array, array)
#15 /srv/mediawiki/php-1.38.0-wmf.13/includes/HookContainer/HookContainer.php(473): Wikimedia\ObjectFactory\ObjectFactory->createObject(array)
#16 /srv/mediawiki/php-1.38.0-wmf.13/includes/HookContainer/HookContainer.php(156): MediaWiki\HookContainer\HookContainer->getHandlers(string, array)
#17 /srv/mediawiki/php-1.38.0-wmf.13/includes/HookContainer/HookRunner.php(2366): MediaWiki\HookContainer\HookContainer->run(string, array)
#18 /srv/mediawiki/php-1.38.0-wmf.13/includes/auth/AuthManager.php(1828): MediaWiki\HookContainer\HookRunner->onLocalUserCreated(User, boolean)
#19 /srv/mediawiki/php-1.38.0-wmf.13/includes/Setup.php(900): MediaWiki\Auth\AuthManager->autoCreateUser(User, string, boolean)
#20 /srv/mediawiki/php-1.38.0-wmf.13/includes/WebStart.php(90): require_once(string)
#21 /srv/mediawiki/php-1.38.0-wmf.13/index.php(44): require(string)
#22 /srv/mediawiki/w/index.php(3): require(string)
#23 {main}

~100 times a day (example)

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

This happens during registration. The control flow is MentorHooks::onLocalUserCreated hook called during autocreation -> MentorManager service gets instantiated (as a dependency of the hook) -> RequestContext::getMain()->getLanguage() is called as language is one of the parameters of the service constructor -> the usual dependency chain (language depends on preferences, preferences depend on user, user is still in the process of being autocreated).

In hindsight, using the same hook for normal registration and autocreation was not a good design decision.

Change 747707 had a related patch set uploaded (by Gergő Tisza; author: Gergő Tisza):

[mediawiki/extensions/GrowthExperiments@master] Use content language for mentor intro text

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

Change 747707 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Use content language for mentor intro text

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

No warnings are recorded after the patch was deployed to`wmf.14` - https://logstash.wikimedia.org/goto/24b06f9d4996ee261987ecdc511ce83d .