Page MenuHomePhabricator

Warning "User::loadFromSession called before the end of Setup.php" (2025 October)
Open, Needs TriagePublic

Description

There are half a million of these messages logged daily, could use some culling. It happens when some code tries to access the user before it is loaded (and so mistakenly ends up believing the user is anonymous when that might not actually be the case) - not a big deal, but usually easy enough to fix. Might not be worth the effort hunting the long tail, but we could fix the most prolific sources of this warning.

[session] [warning] User::loadFromSession called before the end of Setup.php

We should probably have a dashboard for this specific log message that lets us split it by stack trace, so we can see what the common sources are.

Event Timeline

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

Change #1196478 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/core@master] user: Log user ID and username when Setup is fully initialized

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

Change #1196478 merged by jenkins-bot:

[mediawiki/core@master] user: Log user ID and name when Setup isn't fully initialized

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

Change #1197649 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/core@wmf/1.45.0-wmf.23] user: Log user ID and name when Setup isn't fully initialized

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

Change #1197650 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/core@wmf/1.45.0-wmf.24] user: Log user ID and name when Setup isn't fully initialized

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

I've looked at various request IDs on Logstash, and the stacktraces all look the same. Was hoping I'll see a different stacktrace, but I've not spotted a single one different from the one below:

from /srv/mediawiki/php-1.45.0-wmf.23/includes/user/User.php(377)
#0 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/User.php(1497): MediaWiki\User\User->load()
#1 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/User.php(2065): MediaWiki\User\User->getId()
#2 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/UserIdentityUtils.php(42): MediaWiki\User\User->isRegistered()
#3 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/ConditionalDefaultsLookup.php(155): MediaWiki\User\UserIdentityUtils->isNamed(MediaWiki\User\User)
#4 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/ConditionalDefaultsLookup.php(110): MediaWiki\User\Options\ConditionalDefaultsLookup->checkConditionForUser(MediaWiki\User\User, array)
#5 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/ConditionalDefaultsLookup.php(93): MediaWiki\User\Options\ConditionalDefaultsLookup->checkConditionsForUser(MediaWiki\User\User, array)
#6 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/DefaultOptionsLookup.php(133): MediaWiki\User\Options\ConditionalDefaultsLookup->getOptionDefaultForUser(string, MediaWiki\User\User)
#7 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/UserOptionsManager.php(538): MediaWiki\User\Options\DefaultOptionsLookup->getDefaultOptions(MediaWiki\User\User)
#8 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/UserOptionsManager.php(440): MediaWiki\User\Options\UserOptionsManager->loadOriginalOptions(MediaWiki\User\User, int)
#9 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/UserOptionsManager.php(163): MediaWiki\User\Options\UserOptionsManager->loadUserOptions(MediaWiki\User\User, int)
#10 /srv/mediawiki/php-1.45.0-wmf.23/includes/context/RequestContext.php(533): MediaWiki\User\Options\UserOptionsManager->getOption(MediaWiki\User\User, string)
#11 /srv/mediawiki/php-1.45.0-wmf.23/includes/context/RequestContext.php(512): MediaWiki\Context\RequestContext->fetchSkinName()
#12 /srv/mediawiki/php-1.45.0-wmf.23/skins/Vector/includes/Hooks.php(596): MediaWiki\Context\RequestContext->getSkinName()
#13 /srv/mediawiki/php-1.45.0-wmf.23/includes/HookContainer/HookContainer.php(141): MediaWiki\Skins\Vector\Hooks->onGetBetaFeaturePreferences(MediaWiki\User\User, array)
#14 /srv/mediawiki/php-1.45.0-wmf.23/extensions/BetaFeatures/includes/Hooks/HookRunner.php(28): MediaWiki\HookContainer\HookContainer->run(string, array)
#15 /srv/mediawiki/php-1.45.0-wmf.23/extensions/BetaFeatures/includes/Hooks.php(148): MediaWiki\Extension\BetaFeatures\Hooks\HookRunner->onGetBetaFeaturePreferences(MediaWiki\User\User, array)
#16 /srv/mediawiki/php-1.45.0-wmf.23/includes/HookContainer/HookContainer.php(141): MediaWiki\Extension\BetaFeatures\Hooks->onSaveUserOptions(MediaWiki\User\User, array, array)
#17 /srv/mediawiki/php-1.45.0-wmf.23/includes/HookContainer/HookRunner.php(5086): MediaWiki\HookContainer\HookContainer->run(string, array)
#18 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/UserOptionsManager.php(375): MediaWiki\HookContainer\HookRunner->onSaveUserOptions(MediaWiki\User\User, array, array)
#19 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/Options/UserOptionsManager.php(340): MediaWiki\User\Options\UserOptionsManager->saveOptionsInternal(MediaWiki\User\User)
#20 /srv/mediawiki/php-1.45.0-wmf.23/includes/user/User.php(2581): MediaWiki\User\Options\UserOptionsManager->saveOptions(MediaWiki\User\User)
#21 /srv/mediawiki/php-1.45.0-wmf.23/includes/auth/AuthManager.php(2139): MediaWiki\User\User->addToDatabase()
#22 /srv/mediawiki/php-1.45.0-wmf.23/includes/Setup.php(594): MediaWiki\Auth\AuthManager->autoCreateUser(MediaWiki\User\User, string, bool, bool, MediaWiki\User\User)
#23 /srv/mediawiki/php-1.45.0-wmf.23/includes/WebStart.php(72): require_once(string)
#24 /srv/mediawiki/php-1.45.0-wmf.23/index.php(36): require(string)
#25 /srv/mediawiki/w/index.php(3): require(string)
#26 {main}

index.php -> ... -> Setup.php -> ... -> BetaFeatures (extension) -> Vector (skin) -> ...

I'll deploy the backports later today to see if I can find anything useful for debugging.

Change #1197649 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.23] user: Log user ID and name when Setup isn't fully initialized

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

Change #1197650 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.24] user: Log user ID and name when Setup isn't fully initialized

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

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:10:07Z] <derick@deploy2002> Started scap sync-world: Backport for [[gerrit:1197649|user: Log user ID and name when Setup isn't fully initialized (T406433)]], [[gerrit:1197650|user: Log user ID and name when Setup isn't fully initialized (T406433)]]

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:14:22Z] <derick@deploy2002> d3r1ck01, derick: Backport for [[gerrit:1197649|user: Log user ID and name when Setup isn't fully initialized (T406433)]], [[gerrit:1197650|user: Log user ID and name when Setup isn't fully initialized (T406433)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-10-21T20:18:57Z] <derick@deploy2002> Finished scap sync-world: Backport for [[gerrit:1197649|user: Log user ID and name when Setup isn't fully initialized (T406433)]], [[gerrit:1197650|user: Log user ID and name when Setup isn't fully initialized (T406433)]] (duration: 08m 50s)

As suspected, the onSaveUserOptions() (ref) hook handler in BetaFeatures doesn't short-circuit on anonymous and temporary users. Examining new logs with user ID and username, I can already identify requests with user IDs of 0 and usernames of false or an IP address.

I'll revisit this tomorrow and work on a fix. @Tgr, you can also review the log entries.

Krinkle renamed this task from User::loadFromSession called before the end of Setup.php (2025 October) to Warning "User::loadFromSession called before the end of Setup.php" (2025 October).Oct 22 2025, 4:18 PM
Krinkle updated the task description. (Show Details)

Change #1198134 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/core@master] RequestContext: Use the intended user instead of global context

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

Change #1198135 had a related patch set uploaded (by D3r1ck01; author: Derick Alangi):

[mediawiki/skins/Vector@master] Hooks: Use the intended user object instead of global state

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