Page MenuHomePhabricator

BadMethodCallException: Sessions are disabled for load entry point (code path: Parser->makeImage)
Closed, ResolvedPublic

Description

I see this error on beta cluster. For example, just going to https://en.wikipedia.beta.wmflabs.org/wiki/Main_Page:

[ZDlKnxdXJNPNmiKj8AWTdgAAABE] /w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022   BadMethodCallException: Sessions are disabled for load entry point
Backtrace:
from /srv/mediawiki/php-master/includes/session/SessionManager.php(900)
#0 /srv/mediawiki/php-master/includes/session/SessionManager.php(249): MediaWiki\Session\SessionManager->getSessionFromInfo(MediaWiki\Session\SessionInfo, WebRequest)
#1 /srv/mediawiki/php-master/includes/WebRequest.php(840): MediaWiki\Session\SessionManager->getSessionForRequest(WebRequest)
#2 /srv/mediawiki/php-master/includes/user/User.php(1105): WebRequest->getSession()
#3 /srv/mediawiki/php-master/includes/user/User.php(443): User->loadFromSession()
#4 /srv/mediawiki/php-master/includes/user/User.php(1661): User->load()
#5 /srv/mediawiki/php-master/includes/user/User.php(2313): User->getId()
#6 /srv/mediawiki/php-master/includes/user/UserOptionsManager.php(650): User->isRegistered()
#7 /srv/mediawiki/php-master/includes/user/UserOptionsManager.php(502): MediaWiki\User\UserOptionsManager->getCacheKey(User)
#8 /srv/mediawiki/php-master/includes/user/UserOptionsManager.php(150): MediaWiki\User\UserOptionsManager->loadUserOptions(User, integer)
#9 /srv/mediawiki/php-master/includes/context/RequestContext.php(443): MediaWiki\User\UserOptionsManager->getOption(User, string)
#10 /srv/mediawiki/php-master/includes/StubObject/StubUserLang.php(40): RequestContext->getLanguage()
#11 /srv/mediawiki/php-master/includes/StubObject/StubObject.php(232): MediaWiki\StubObject\StubUserLang->_newObject()
#12 /srv/mediawiki/php-master/includes/StubObject/StubObject.php(124): MediaWiki\StubObject\StubObject->_unstub(string, integer)
#13 /srv/mediawiki/php-master/includes/StubObject/StubObject.php(155): MediaWiki\StubObject\StubObject->_call(string, array)
#14 /srv/mediawiki/php-master/includes/language/LanguageConverterFactory.php(181): MediaWiki\StubObject\StubObject->__call(string, array)
#15 /srv/mediawiki/php-master/includes/title/Title.php(219): MediaWiki\Languages\LanguageConverterFactory->getLanguageConverter(MediaWiki\StubObject\StubUserLang)
#16 /srv/mediawiki/php-master/includes/title/Title.php(4039): MediaWiki\Title\Title->getLanguageConverter(MediaWiki\StubObject\StubUserLang)
#17 /srv/mediawiki/php-master/includes/parser/Parser.php(5492): MediaWiki\Title\Title->getPageViewLanguage()
#18 /srv/mediawiki/php-master/includes/parser/Parser.php(2694): Parser->makeImage(MediaWiki\Title\Title, array, LinkHolderArray)
#19 /srv/mediawiki/php-master/includes/parser/Parser.php(2437): Parser->handleInternalLinks2(string)
#20 /srv/mediawiki/php-master/includes/parser/Parser.php(1616): Parser->handleInternalLinks(string)
#21 /srv/mediawiki/php-master/includes/parser/Parser.php(700): Parser->internalParse(string)
#22 /srv/mediawiki/php-master/includes/language/MessageCache.php(1481): Parser->parse(string, MediaWiki\Page\PageReferenceValue, ParserOptions, boolean)
#23 /srv/mediawiki/php-master/includes/language/Message.php(1428): MessageCache->parse(string, MediaWiki\Page\PageReferenceValue, boolean, boolean, LanguageEn)
#24 /srv/mediawiki/php-master/includes/language/Message.php(1005): Message->parseText(string)
#25 /srv/mediawiki/php-master/includes/language/Message.php(1043): Message->format(string)
#26 /srv/mediawiki/php-master/extensions/VisualEditor/includes/VisualEditorDataModule.php(32): Message->parse()
#27 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(816): MediaWiki\Extension\VisualEditor\VisualEditorDataModule->getScript(MediaWiki\ResourceLoader\Context)
#28 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(785): MediaWiki\ResourceLoader\Module->buildContent(MediaWiki\ResourceLoader\Context)
#29 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(925): MediaWiki\ResourceLoader\Module->getModuleContent(MediaWiki\ResourceLoader\Context)
#30 /srv/mediawiki/php-master/includes/ResourceLoader/StartUpModule.php(223): MediaWiki\ResourceLoader\Module->getVersionHash(MediaWiki\ResourceLoader\Context)
#31 /srv/mediawiki/php-master/includes/ResourceLoader/StartUpModule.php(412): MediaWiki\ResourceLoader\StartUpModule->getModuleRegistrations(MediaWiki\ResourceLoader\Context)
#32 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(816): MediaWiki\ResourceLoader\StartUpModule->getScript(MediaWiki\ResourceLoader\Context)
#33 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(785): MediaWiki\ResourceLoader\Module->buildContent(MediaWiki\ResourceLoader\Context)
#34 /srv/mediawiki/php-master/includes/ResourceLoader/Module.php(925): MediaWiki\ResourceLoader\Module->getModuleContent(MediaWiki\ResourceLoader\Context)
#35 /srv/mediawiki/php-master/includes/ResourceLoader/ResourceLoader.php(688): MediaWiki\ResourceLoader\Module->getVersionHash(MediaWiki\ResourceLoader\Context)
#36 [internal function]: MediaWiki\ResourceLoader\ResourceLoader->MediaWiki\ResourceLoader\{closure}(string)
#37 /srv/mediawiki/php-master/includes/ResourceLoader/ResourceLoader.php(686): array_map(Closure, array)
#38 /srv/mediawiki/php-master/includes/ResourceLoader/ResourceLoader.php(787): MediaWiki\ResourceLoader\ResourceLoader->getCombinedVersion(MediaWiki\ResourceLoader\Context, array)
#39 /srv/mediawiki/php-master/load.php(53): MediaWiki\ResourceLoader\ResourceLoader->respond(MediaWiki\ResourceLoader\Context)
#40 /srv/mediawiki/php-master/load.php(39): wfLoadMain()
#41 /srv/mediawiki/w/load.php(3): require(string)
#42 {main}

Note

Caused by commit 42aa5f9

Event Timeline

Change 908823 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/core@master] RequestContext: Fix lang parameter used in load.php

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

This is at least the 3rd time that we cause an error like this as a result of ContentHandler::getPageLanguage() accessing the session (previously: T298659, T302754).

After one of the previous occurrences, a long-term solution was suggested in T299369: Consider removing global $userLang from onPageContentLanguage hook. @Winston_Sung Perhaps you'd have the time to look into that? I'd be happy to merge patches for that.

Oh, actually, I misread the stack trace… Ignore that. Sorry.

It's actually quite weird that RequestContext ignore ?lang URL parameter and try to find ?uselang parameter in load.php web requests.

Also, ?lang is used as the URL parameter for SVG display language on file pages.

I had a look at the code from https://gerrit.wikimedia.org/r/c/mediawiki/core/+/804707 now, and it seems wrong to use Title::getPageViewLanguage() in Parser. The parser output is cached, and the cache is split per-language (depending on Parser::getTargetLanguage()). Wouldn't Title::getPageViewLanguage() pull in a potentially unrelated language, and then cache the result for whichever language the parser used, resulting in the wrong language being used sometimes?

The parser output is cached, and the cache is split per-language (depending on Parser::getTargetLanguage()).
Wouldn't Title::getPageViewLanguage() pull in a potentially unrelated language, and then cache the result for whichever language the parser used, resulting in the wrong language being used sometimes?

If the cache is split per-page-source-code-language, what part of the codes made it show up correctly in language variants ( MediaWiki-Language-converter )?

It looks like it's actually split per language with variant. The cache key is included in the output HTML, for example:

https://zh.wikipedia.org/wiki/准确新闻及资讯法

<!-- Saved in parser cache with key zhwiki:pcache:idhash:3777189-0!canonical!zh and timestamp 20230414112759 and revision id 76808446. Rendering was triggered because: api-parse
 -->

https://zh.wikipedia.org/zh-tw/准确新闻及资讯法

<!-- Saved in parser cache with key zhwiki:pcache:idhash:3777189-0!userlang=zh-tw!zh-tw and timestamp 20230414112826 and revision id 76808446. Rendering was triggered because: page-view
 -->

https://zh.wikipedia.org/zh-cn/准确新闻及资讯法

<!-- Saved in parser cache with key zhwiki:pcache:idhash:3777189-0!userlang=zh-cn!zh-cn and timestamp 20230414112828 and revision id 76808446. Rendering was triggered because: page-view
 -->

I think the value is the $confstr computed here: https://gerrit.wikimedia.org/g/mediawiki/core/+/3a37fa50daa80b361d62282573244cb5db1c80ee/includes/parser/ParserOptions.php#1436

There is probably some way to use those values in the Parser code. $this->getTargetLanguageConverter()->getPreferredVariant()? (I didn't test)

I think it's here?

https://gerrit.wikimedia.org/g/mediawiki/core/+/3a37fa50daa80b361d62282573244cb5db1c80ee/includes/parser/ParserOptions.php#1443

ParserOptions.php#1443
$confstr .= $converter->getExtraHashOptions();

https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/3a37fa50daa80b361d62282573244cb5db1c80ee/includes/language/LanguageConverter.php#1115

LanguageConverter.php#1115-1119
public function getExtraHashOptions() {
	$variant = $this->getPreferredVariant();

	return '!' . $variant;
}
thiemowmde subscribed.

It looks like the beta cluster is broken because of this. Attempting to edit any page throws this exception, no matter which editor is used: https://en.wikipedia.beta.wmflabs.org/w/index.php?title=Polish_People%27s_Republic&action=edit. Is there anything we can do to help fixing this?

Change 908960 had a related patch set uploaded (by Func; author: Func):

[mediawiki/core@master] Revert "Display SVGs in page view language for language variants"

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

Change 908960 merged by jenkins-bot:

[mediawiki/core@master] Revert "Display SVGs in page view language for language variants"

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

Change 908823 abandoned by Winston Sung:

[mediawiki/core@master] RequestContext: Fix lang parameter used in load.php

Reason:

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

Change 908823 restored by Winston Sung:

[mediawiki/core@master] RequestContext: Fix lang parameter used in load.php

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