Page MenuHomePhabricator

PHP Warning: Undefined array key "active_experiments"
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
  • mwversion: 1.45.0-wmf.13
  • timestamp: 2025-08-06T08:34:54.415Z
  • phpversion: 8.1.33
  • reqId: 026338e9-9784-4622-a716-48cd547715b8
  • Find reqId in Logstash
normalized_message
[{reqId}] {exception_url}   PHP Warning: Undefined array key "active_experiments"

Followed by:

normalized_message
in_array(): Argument #2 ($haystack) must be of type array, null given

Both from /srv/mediawiki/php-1.45.0-wmf.13/extensions/MetricsPlatform/includes/XLab/ExperimentManager.php:44

FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.13/extensions/MetricsPlatform/includes/XLab/ExperimentManager.php(44)
#0/srv/mediawiki/php-1.45.0-wmf.13/extensions/MetricsPlatform/includes/XLab/ExperimentManager.php(44)MediaWiki\Exception\MWExceptionHandler::handleError(int, string, string, int)
#1/srv/mediawiki/php-1.45.0-wmf.13/extensions/WikimediaMessages/includes/Hooks.php(1925)MediaWiki\Extension\MetricsPlatform\XLab\ExperimentManager->getExperiment(string)
#2/srv/mediawiki/php-1.45.0-wmf.13/extensions/WikimediaMessages/includes/Hooks.php(1991)MediaWiki\Extension\WikimediaMessages\Hooks->addDonateLink(array, array)
#3/srv/mediawiki/php-1.45.0-wmf.13/includes/HookContainer/HookContainer.php(155)MediaWiki\Extension\WikimediaMessages\Hooks->onSkinTemplateNavigation__Universal(MediaWiki\Skins\Vector\SkinVector22, array)
#4/srv/mediawiki/php-1.45.0-wmf.13/includes/HookContainer/HookRunner.php(4053)MediaWiki\HookContainer\HookContainer->run(string, array, array)
#5/srv/mediawiki/php-1.45.0-wmf.13/includes/skins/SkinTemplate.php(986)MediaWiki\HookContainer\HookRunner->onSkinTemplateNavigation__Universal(MediaWiki\Skins\Vector\SkinVector22, array)
#6/srv/mediawiki/php-1.45.0-wmf.13/skins/Vector/includes/SkinVector22.php(56)MediaWiki\Skin\SkinTemplate->runOnSkinTemplateNavigationHooks(MediaWiki\Skins\Vector\SkinVector22, array)
#7/srv/mediawiki/php-1.45.0-wmf.13/includes/skins/SkinTemplate.php(1389)MediaWiki\Skins\Vector\SkinVector22->runOnSkinTemplateNavigationHooks(MediaWiki\Skins\Vector\SkinVector22, array)
#8/srv/mediawiki/php-1.45.0-wmf.13/includes/skins/SkinTemplate.php(613)MediaWiki\Skin\SkinTemplate->buildContentNavigationUrlsInternal()
#9/srv/mediawiki/php-1.45.0-wmf.13/includes/skins/SkinTemplate.php(600)MediaWiki\Skin\SkinTemplate->getPortletsTemplateData()
#10/srv/mediawiki/php-1.45.0-wmf.13/includes/skins/Skin.php(826)MediaWiki\Skin\SkinTemplate->getCategoryLinks()
#11/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiParse.php(607)MediaWiki\Skin\Skin->getCategories()
#12/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiMain.php(2033)MediaWiki\Api\ApiParse->execute()
#13/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiMain.php(924)MediaWiki\Api\ApiMain->executeAction()
#14/srv/mediawiki/php-1.45.0-wmf.13/extensions/VisualEditor/includes/ApiVisualEditorEdit.php(178)MediaWiki\Api\ApiMain->execute()
#15/srv/mediawiki/php-1.45.0-wmf.13/extensions/VisualEditor/includes/ApiVisualEditorEdit.php(474)MediaWiki\Extension\VisualEditor\ApiVisualEditorEdit->parseWikitext(int, array)
#16/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiMain.php(2033)MediaWiki\Extension\VisualEditor\ApiVisualEditorEdit->execute()
#17/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiMain.php(955)MediaWiki\Api\ApiMain->executeAction()
#18/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiMain.php(926)MediaWiki\Api\ApiMain->executeActionWithErrorHandling()
#19/srv/mediawiki/php-1.45.0-wmf.13/includes/api/ApiEntryPoint.php(152)MediaWiki\Api\ApiMain->execute()
#20/srv/mediawiki/php-1.45.0-wmf.13/includes/MediaWikiEntryPoint.php(198)MediaWiki\Api\ApiEntryPoint->execute()
#21/srv/mediawiki/php-1.45.0-wmf.13/api.php(44)MediaWiki\MediaWikiEntryPoint->run()
#22/srv/mediawiki/w/api.php(3)require(string)
#23{main}
Impact
Notes

Event Timeline

hashar triaged this task as Unbreak Now! priority.

Change #1176194 had a related patch set uploaded (by Phuedx; author: Phuedx):

[mediawiki/extensions/MetricsPlatform@master] ExperimentManager: Fix #getExperiment() when uninitialized

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

Change #1176195 had a related patch set uploaded (by Hashar; author: Phuedx):

[mediawiki/extensions/MetricsPlatform@wmf/1.45.0-wmf.13] ExperimentManager: Fix #getExperiment() when uninitialized

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

Change #1176195 merged by jenkins-bot:

[mediawiki/extensions/MetricsPlatform@wmf/1.45.0-wmf.13] ExperimentManager: Fix #getExperiment() when uninitialized

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

Mentioned in SAL (#wikimedia-operations) [2025-08-06T09:45:55Z] <hashar@deploy1003> Started scap sync-world: Backport for [[gerrit:1176195|ExperimentManager: Fix #getExperiment() when uninitialized (T401294)]]

Mentioned in SAL (#wikimedia-operations) [2025-08-06T09:47:44Z] <hashar@deploy1003> hashar: Backport for [[gerrit:1176195|ExperimentManager: Fix #getExperiment() when uninitialized (T401294)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Change #1176194 merged by jenkins-bot:

[mediawiki/extensions/MetricsPlatform@master] ExperimentManager: Fix #getExperiment() when uninitialized

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

Mentioned in SAL (#wikimedia-operations) [2025-08-06T09:54:15Z] <hashar@deploy1003> Finished scap sync-world: Backport for [[gerrit:1176195|ExperimentManager: Fix #getExperiment() when uninitialized (T401294)]] (duration: 08m 20s)

The error is gone!

I am letting @phuedx mark this as resolved

This bug has existed since the creation of the ExperimentManager class in {86850b4630e1c8b6c330050729bd987e7e6fb9d2}.

The bug itself is that ExperimentManager#getExperiment() expects ExperimentManager#$enrollmentResult to always have an active_experiments entry. However, this will only be the case when ExperimentManager#initialize() has been called. Currently, ExperimentManager#initialize() is called when the BeforeInitialize hook is run.

The reason that the bug has only just started to be triggered is that up until now, no code has been running in production that calls ExperimentManager#getExperiment() in a context when the BeforeInitialize hook hasn't run (and therefore ExperimentMananger#initialize() hasn't been called), i.e. a MediaWiki Action API request.