Page MenuHomePhabricator

With QuickInstantCommons installed, update.php crashes on a new installation: "Cannot register a backend with no name"
Closed, ResolvedPublic

Description

At https://patchdemo.wmflabs.org/, creating new wikis is currently failing at the step where it runs update.php:

Converting djvu metadata...PHP Notice:  Undefined index: backend in /srv/patchdemo-wikis/fb03625f0b/w/includes/filebackend/FileBackendGroup.php on line 112
Notice: Undefined index: backend in /srv/patchdemo-wikis/fb03625f0b/w/includes/filebackend/FileBackendGroup.php on line 112
InvalidArgumentException from line 154 of /srv/patchdemo-wikis/fb03625f0b/w/includes/filebackend/FileBackendGroup.php: Cannot register a backend with no name.
#0 /srv/patchdemo-wikis/fb03625f0b/w/includes/filebackend/FileBackendGroup.php(141): FileBackendGroup->register(Array, false)
#1 /srv/patchdemo-wikis/fb03625f0b/w/includes/ServiceWiring.php(653): FileBackendGroup->__construct(Object(MediaWiki\Config\ServiceOptions), Object(ConfiguredReadOnlyMode), Object(HashBagOStuff), Object(WANObjectCache), Object(MimeAnalyzer), Object(MediaWiki\FileBackend\LockManager\LockManagerGroupFactory), Object(MediaWiki\FileBackend\FSFile\TempFSFileFactory), Object(Wikimedia\ObjectFactory\ObjectFactory))
#2 /srv/patchdemo-wikis/fb03625f0b/w/vendor/wikimedia/services/src/ServiceContainer.php(447): Wikimedia\Services\ServiceContainer::{closure}(Object(MediaWiki\MediaWikiServices))
#3 /srv/patchdemo-wikis/fb03625f0b/w/vendor/wikimedia/services/src/ServiceContainer.php(416): Wikimedia\Services\ServiceContainer->createService('FileBackendGrou...')
#4 /srv/patchdemo-wikis/fb03625f0b/w/includes/MediaWikiServices.php(298): Wikimedia\Services\ServiceContainer->getService('FileBackendGrou...')
#5 /srv/patchdemo-wikis/fb03625f0b/w/includes/MediaWikiServices.php(988): MediaWiki\MediaWikiServices->getService('FileBackendGrou...')
#6 /srv/patchdemo-wikis/fb03625f0b/w/includes/filerepo/FileRepo.php(186): MediaWiki\MediaWikiServices->getFileBackendGroup()
#7 /srv/patchdemo-wikis/fb03625f0b/w/includes/filerepo/LocalRepo.php(77): FileRepo->__construct(Array)
#8 /srv/patchdemo-wikis/fb03625f0b/w/includes/filerepo/RepoGroup.php(413): LocalRepo->__construct(Array)
#9 /srv/patchdemo-wikis/fb03625f0b/w/includes/filerepo/RepoGroup.php(400): RepoGroup->newRepo(Array)
#10 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/refreshImageMetadata.php(284): RepoGroup->newCustomLocalRepo(Array)
#11 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/refreshImageMetadata.php(140): RefreshImageMetadata->newLocalRepo(true, false, false, false)
#12 /srv/patchdemo-wikis/fb03625f0b/w/includes/installer/DatabaseUpdater.php(1184): RefreshImageMetadata->execute()
#13 /srv/patchdemo-wikis/fb03625f0b/w/includes/installer/DatabaseUpdater.php(547): DatabaseUpdater->doConvertDjvuMetadata()
#14 /srv/patchdemo-wikis/fb03625f0b/w/includes/installer/DatabaseUpdater.php(511): DatabaseUpdater->runUpdates(Array, false)
#15 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/update.php(193): DatabaseUpdater->doUpdates(Array)
#16 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/includes/MaintenanceRunner.php(309): UpdateMediaWiki->execute()
#17 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/doMaintenance.php(85): MediaWiki\Maintenance\MaintenanceRunner->run()
#18 /srv/patchdemo-wikis/fb03625f0b/w/maintenance/update.php(264): require_once('/srv/patchdemo-...')
#19 {main}

This seems to be triggered by rMWb72b9a8c43f9: Move dynamic defaults into MainConfigSchema (reverting that patch avoids the issue). I don't know whether that patch or QuickInstantCommons is at fault.

(Originally reported at https://github.com/MatmaRex/patchdemo/issues/471)

Event Timeline

QuickInstantCommons tries to do some automatic config, with some back compat hacks, which is a bit weird

So the part of setup.php needed is still in Setup.php

foreach ( $wgForeignFileRepos as &$repo ) {
	if ( !isset( $repo['directory'] ) && $repo['class'] === ForeignAPIRepo::class ) {
		$repo['directory'] = $wgUploadDirectory; // b/c
	}
	if ( !isset( $repo['backend'] ) ) {
		$repo['backend'] = $repo['name'] . '-backend';
	}
}

QuickInstantCommons assumes this code is run after the extension.json callback config MediaWiki\\Extension\\QuickInstantCommons\\Hooks::setup

I guess maybe the patch makes Setup.php run prior to extension registration callbacks?

Ah ok.

So pior to b72b9a8c43f, this setup code would execute after ExtensionRegistry::getInstance()->loadFromQueue(); However, it got moved around, and now SetupDynamicConfig.php gets executed prior to that.

I'm not clear if this is an intentional change or a merge conflict issue/accidental. The commit message doesn't seem to mention this change. If intentional, maybe worth a mention in the release notes.

Either way, I can change the extension to not rely on this setup code running.

Change 812429 had a related patch set uploaded (by Brian Wolff; author: Brian Wolff):

[mediawiki/extensions/QuickInstantCommons@master] Explicitly set backend instead of relying on SetupDynamicConfig.php

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

Change 812429 merged by jenkins-bot:

[mediawiki/extensions/QuickInstantCommons@master] Explicitly set backend instead of relying on SetupDynamicConfig.php

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

Bawolff claimed this task.

Change 812431 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] filerepo: Move default 'backend' from Setup to to service class

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