Page MenuHomePhabricator

SkinException: No registered builder available for .
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
labels.normalized_message
[{reqId}] {exception_url}   SkinException: No registered builder available for .
error.stack_trace
from /srv/mediawiki/php-1.41.0-wmf.19/includes/skins/SkinFactory.php(133)
#0 /srv/mediawiki/php-1.41.0-wmf.19/includes/context/RequestContext.php(564): SkinFactory->makeSkin(string)
#1 /srv/mediawiki/php-1.41.0-wmf.19/includes/parser/ParserOutput.php(452): RequestContext->getSkin()
#2 /srv/mediawiki/php-1.41.0-wmf.19/extensions/CommonsMetadata/src/DataCollector.php(125): ParserOutput->getText()
#3 /srv/mediawiki/php-1.41.0-wmf.19/extensions/CommonsMetadata/src/HookHandler.php(153): CommonsMetadata\DataCollector->verifyAttributionMetadata(ParserOutput, LocalFile)
#4 /srv/mediawiki/php-1.41.0-wmf.19/includes/HookContainer/HookContainer.php(160): CommonsMetadata\HookHandler::onContentAlterParserOutput(WikitextContent, MediaWiki\Title\Title, ParserOutput)
#5 /srv/mediawiki/php-1.41.0-wmf.19/includes/HookContainer/HookRunner.php(1182): MediaWiki\HookContainer\HookContainer->run(string, array)
#6 /srv/mediawiki/php-1.41.0-wmf.19/includes/content/ContentHandler.php(1795): MediaWiki\HookContainer\HookRunner->onContentAlterParserOutput(WikitextContent, MediaWiki\Title\Title, ParserOutput)
#7 /srv/mediawiki/php-1.41.0-wmf.19/includes/content/Renderer/ContentRenderer.php(47): ContentHandler->getParserOutput(WikitextContent, MediaWiki\Content\Renderer\ContentParseParams)
#8 /srv/mediawiki/php-1.41.0-wmf.19/includes/Revision/RenderedRevision.php(260): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput(WikitextContent, MediaWiki\Title\Title, NULL, ParserOptions, boolean)
#9 /srv/mediawiki/php-1.41.0-wmf.19/includes/Revision/RenderedRevision.php(232): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached(WikitextContent, boolean)
#10 /srv/mediawiki/php-1.41.0-wmf.19/includes/Revision/RevisionRenderer.php(242): MediaWiki\Revision\RenderedRevision->getSlotParserOutput(string, array)
#11 /srv/mediawiki/php-1.41.0-wmf.19/includes/Revision/RevisionRenderer.php(164): MediaWiki\Revision\RevisionRenderer->combineSlotOutput(MediaWiki\Revision\RenderedRevision, array)
#12 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}(MediaWiki\Revision\RenderedRevision, array)
#13 /srv/mediawiki/php-1.41.0-wmf.19/includes/Revision/RenderedRevision.php(199): call_user_func(Closure, MediaWiki\Revision\RenderedRevision, array)
#14 /srv/mediawiki/php-1.41.0-wmf.19/includes/Storage/DerivedPageDataUpdater.php(1464): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput(array)
#15 /srv/mediawiki/php-1.41.0-wmf.19/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(171): MediaWiki\Storage\DerivedPageDataUpdater->getParserOutputForMetaData()
#16 /srv/mediawiki/php-1.41.0-wmf.19/extensions/AbuseFilter/includes/VariableGenerator/RunVariableGenerator.php(211): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->newVariableHolderForEdit(WikiFilePage, string, WikitextContent, string, string, WikitextContent)
#17 /srv/mediawiki/php-1.41.0-wmf.19/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(157): MediaWiki\Extension\AbuseFilter\VariableGenerator\RunVariableGenerator->getEditVars(WikitextContent, string, string, WikiFilePage)
#18 /srv/mediawiki/php-1.41.0-wmf.19/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(109): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->filterEdit(DerivativeContext, User, WikitextContent, string, string)
#19 /srv/mediawiki/php-1.41.0-wmf.19/includes/HookContainer/HookContainer.php(160): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->onEditFilterMergedContent(DerivativeContext, WikitextContent, Status, string, User, boolean)
#20 /srv/mediawiki/php-1.41.0-wmf.19/includes/HookContainer/HookRunner.php(1473): MediaWiki\HookContainer\HookContainer->run(string, array)
#21 /srv/mediawiki/php-1.41.0-wmf.19/includes/editpage/Constraint/EditFilterMergedContentHookConstraint.php(106): MediaWiki\HookContainer\HookRunner->onEditFilterMergedContent(DerivativeContext, WikitextContent, Status, string, User, boolean)
#22 /srv/mediawiki/php-1.41.0-wmf.19/includes/editpage/Constraint/EditConstraintRunner.php(88): MediaWiki\EditPage\Constraint\EditFilterMergedContentHookConstraint->checkConstraint()
#23 /srv/mediawiki/php-1.41.0-wmf.19/includes/editpage/EditPage.php(2430): MediaWiki\EditPage\Constraint\EditConstraintRunner->checkConstraints()
#24 /srv/mediawiki/php-1.41.0-wmf.19/includes/editpage/EditPage.php(1823): MediaWiki\EditPage\EditPage->internalAttemptSave(NULL, boolean, boolean)
#25 /srv/mediawiki/php-1.41.0-wmf.19/includes/api/ApiEditPage.php(520): MediaWiki\EditPage\EditPage->attemptSave(NULL)
#26 /srv/mediawiki/php-1.41.0-wmf.19/includes/api/ApiMain.php(1915): ApiEditPage->execute()
#27 /srv/mediawiki/php-1.41.0-wmf.19/includes/api/ApiMain.php(892): ApiMain->executeAction()
#28 /srv/mediawiki/php-1.41.0-wmf.19/includes/api/ApiMain.php(863): ApiMain->executeActionWithErrorHandling()
#29 /srv/mediawiki/php-1.41.0-wmf.19/api.php(95): ApiMain->execute()
#30 /srv/mediawiki/php-1.41.0-wmf.19/api.php(48): wfApiMain()
#31 /srv/mediawiki/w/api.php(3): require(string)
#32 {main}
Impact

Constant stream of errors after deploying 1.41.0-wmf.19 to group1.

Multiple group1 wikis are affected (including commons), most likely all of them are. The affected code is widely used which means many different code paths are affected, the error stacktrace above is just one example.

On the affected wikis, I have been trying different skins for random pages and a few of the urls mentioned in the logstash errors. Skins seem to render correctly AFAICS, so I cannot confirm this is causing a problem with the skins for the users.

Notes

Root cause seems to be one of these changes:

Event Timeline

jnuche triaged this task as Unbreak Now! priority.Jul 26 2023, 9:21 AM
jnuche created this task.

Not rolling back for the moment since I can't confirm this is user-facing.

Not rolling back for the moment since I can't confirm this is user-facing.

This is user facing for users that have skin set to an empty string in their user preferences. Empty string doesn't pass validation by now, but it used to and we do have a lot of users with an empty string as their skin:

mysql:research@dbstore1007.eqiad.wmnet [commonswiki]> select count(*) from user_properties where up_property='skin' and up_value='';
+----------+
| count(*) |
+----------+
|   545733 |
+----------+
1 row in set (8.113 sec)

mysql:research@dbstore1007.eqiad.wmnet [commonswiki]>

This prevents ~500k users from accessing Commons. Ofc, hard to tell how many of them actually do it logged in, but seems worth rolling back anyway.

Thanks for checking that up @Urbanecm_WMF. I'll roll back at the next available window.

I have not looked at the details, but the only recently merged change that seems potentially relevant is https://gerrit.wikimedia.org/r/c/mediawiki/core/+/935921 by @tstarling.

I have not looked at the details, but the only recently merged change that seems potentially relevant is https://gerrit.wikimedia.org/r/c/mediawiki/core/+/935921 by @tstarling.

I confirmed by reproducing locally that reverting that patch fixes it. I'll work on a proper fix though.

Change 941930 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Normalize the skin name when it comes from preferences or useskin

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

Change 941932 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Regression test for T342733 empty skin name

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

Change 941879 had a related patch set uploaded (by Jforrester; author: Tim Starling):

[mediawiki/core@wmf/1.41.0-wmf.19] Normalize the skin name when it comes from preferences or useskin

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

Change 941879 merged by jenkins-bot:

[mediawiki/core@wmf/1.41.0-wmf.19] Normalize the skin name when it comes from preferences or useskin

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

Mentioned in SAL (#wikimedia-operations) [2023-07-26T14:30:33Z] <jforrester@deploy1002> Started scap: Backport for [[gerrit:941879|Normalize the skin name when it comes from preferences or useskin (T342733)]]

Mentioned in SAL (#wikimedia-operations) [2023-07-26T14:32:06Z] <jforrester@deploy1002> jforrester: Backport for [[gerrit:941879|Normalize the skin name when it comes from preferences or useskin (T342733)]] synced to the testservers mwdebug2001.codfw.wmnet, mwdebug1002.eqiad.wmnet, mwdebug2002.codfw.wmnet, mwdebug1001.eqiad.wmnet, and mw-debug kubernetes deployment (accessible via k8s-experimental XWD option)

Mentioned in SAL (#wikimedia-operations) [2023-07-26T14:38:58Z] <jforrester@deploy1002> Finished scap: Backport for [[gerrit:941879|Normalize the skin name when it comes from preferences or useskin (T342733)]] (duration: 08m 24s)

Backport deployed, but master merge can't land until T342775 is fixed.

Urbanecm_WMF lowered the priority of this task from Unbreak Now! to High.Jul 26 2023, 5:31 PM

Shouldn't block this train from going forward; re-triaging as a .20 blocker.

Change 941930 merged by jenkins-bot:

[mediawiki/core@master] Normalize the skin name when it comes from preferences or useskin

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

Change 942038 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] Normalize the skin name when "skin" is in HiddenPrefs

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

Change 941932 merged by jenkins-bot:

[mediawiki/core@master] Regression test for T342733 empty skin name

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

Change 942038 merged by jenkins-bot:

[mediawiki/core@master] Normalize the skin name when "skin" is in HiddenPrefs

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

Krinkle assigned this task to tstarling.
Krinkle moved this task from Untriaged to Jul 2023 on the Wikimedia-production-error board.