Page MenuHomePhabricator

Fatal error when $wgPhonosFileBackend is invalid
Closed, DeclinedPublicBUG REPORT

Description

What is the problem?

If I set the config variable $wgPhonosFileBackend to something invalid (e.g. $wgPhonosFileBackend = "invalid";) I cannot load any page on the wiki and instead I get a fatal error:

MediaWiki internal error.

Original exception: [f719bad57681facf12862596] /wiki/Special:Version InvalidArgumentException: No backend defined with the name 'invalid'.
Backtrace:
from /var/www/html/w/includes/filebackend/FileBackendGroup.php(216)
#0 /var/www/html/w/includes/filebackend/FileBackendGroup.php(187): FileBackendGroup->config()
#1 /var/www/html/w/extensions/Phonos/includes/Engine/Engine.php(87): FileBackendGroup->get()
#2 /var/www/html/w/extensions/Phonos/includes/Engine/Engine.php(67): MediaWiki\Extension\Phonos\Engine\Engine::getFileBackend()
#3 /var/www/html/w/extensions/Phonos/includes/Engine/EspeakEngine.php(32): MediaWiki\Extension\Phonos\Engine\Engine->__construct()
#4 /var/www/html/w/extensions/Phonos/includes/ServiceWiring.php(17): MediaWiki\Extension\Phonos\Engine\EspeakEngine->__construct()
#5 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(447): Wikimedia\Services\ServiceContainer::{closure}()
#6 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
#7 /var/www/html/w/includes/MediaWikiServices.php(302): Wikimedia\Services\ServiceContainer->getService()
#8 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
#9 /var/www/html/w/vendor/wikimedia/object-factory/src/ObjectFactory.php(211): Wikimedia\Services\ServiceContainer->get()
#10 /var/www/html/w/vendor/wikimedia/object-factory/src/ObjectFactory.php(152): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec()
#11 /var/www/html/w/includes/HookContainer/HookContainer.php(473): Wikimedia\ObjectFactory\ObjectFactory->createObject()
#12 /var/www/html/w/includes/HookContainer/HookContainer.php(156): MediaWiki\HookContainer\HookContainer->getHandlers()
#13 /var/www/html/w/includes/HookContainer/HookRunner.php(2923): MediaWiki\HookContainer\HookContainer->run()
#14 /var/www/html/w/includes/parser/Parser.php(549): MediaWiki\HookContainer\HookRunner->onParserFirstCallInit()
#15 /var/www/html/w/includes/parser/ParserFactory.php(216): Parser->__construct()
#16 /var/www/html/w/includes/parser/ParserFactory.php(233): ParserFactory->create()
#17 /var/www/html/w/includes/ServiceWiring.php(1268): ParserFactory->getMainInstance()
#18 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(447): Wikimedia\Services\ServiceContainer::{closure}()
#19 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(411): Wikimedia\Services\ServiceContainer->createService()
#20 /var/www/html/w/includes/MediaWikiServices.php(302): Wikimedia\Services\ServiceContainer->getService()
#21 /var/www/html/w/vendor/wikimedia/services/src/ServiceContainer.php(419): MediaWiki\MediaWikiServices->getService()
#22 /var/www/html/w/vendor/wikimedia/object-factory/src/ObjectFactory.php(211): Wikimedia\Services\ServiceContainer->get()
#23 /var/www/html/w/vendor/wikimedia/object-factory/src/ObjectFactory.php(152): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec()
#24 /var/www/html/w/includes/specialpage/SpecialPageFactory.php(1290): Wikimedia\ObjectFactory\ObjectFactory->createObject()
#25 /var/www/html/w/includes/MediaWiki.php(275): MediaWiki\SpecialPage\SpecialPageFactory->getPage()
#26 /var/www/html/w/includes/MediaWiki.php(904): MediaWiki->performRequest()
#27 /var/www/html/w/includes/MediaWiki.php(562): MediaWiki->main()
#28 /var/www/html/w/index.php(50): MediaWiki->run()
#29 /var/www/html/w/index.php(46): wfIndexMain()
#30 {main}

We could handle invalid configurations more gracefully and without making the site inaccessible.

Steps to reproduce problem
  1. In LocalSettings.php, add $wgPhonosFileBackend = "invalid";
  2. Visit any page on the wiki

Expected behavior: The page loads. If the page has a Phonos template this should display an appropriate error when you try to play it.
Observed behavior: You see the above error.

Event Timeline

This is expected, but not intentional. I don't think we need to do very much to guard against sysadmins not following directions :) The file backend could fallback to FSFileBackend (the default), but then it obscures the misconfiguration from the sysadmin, so I'm thinking this behaviour is what we want. Leaving open for now to see what others think.

Per our call today I think this can be declined as well, since it's a sysadmin-only issue and the error message gives a fair hint as to what was misconfigured.