Special:Homapage errors out with
[a3777da0e7bef2b536b810f3] /w/index.php?title=Special:Homepage&source=personaltoolslink&namespace=-1 Error: Maximum function nesting level of '200' reached, aborting!
Backtrace:
from /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1028)
#0 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(Closure, integer, integer)
...
#173 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(Closure, integer, integer)
#174 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(array, integer, integer)
#175 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(array, integer, integer)
#176 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(Title, integer, integer)
#177 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(GrowthExperiments\NewcomerTasks\Task\Task, integer, integer)
#178 /vagrant/mediawiki/includes/libs/objectcache/MediumSpecificBagOStuff.php(1063): MediumSpecificBagOStuff->guessSerialValueSize(array, integer, integer)
#179 /vagrant/mediawiki/includes/libs/objectcache/MemcachedPeclBagOStuff.php(281): MediumSpecificBagOStuff->guessSerialValueSize(GrowthExperiments\NewcomerTasks\Task\TaskSet)
#180 /vagrant/mediawiki/includes/libs/objectcache/wancache/WANObjectCache.php(1873): MemcachedPeclBagOStuff->setNewPreparedValues(array)
#181 /vagrant/mediawiki/includes/libs/objectcache/wancache/WANObjectCache.php(1710): WANObjectCache->checkAndSetCooloff(string, string, GrowthExperiments\NewcomerTasks\Task\TaskSet, double, boolean)
#182 /vagrant/mediawiki/includes/libs/objectcache/wancache/WANObjectCache.php(1518): WANObjectCache->fetchOrRegenerate(string, integer, Closure, array, array)
#183 /vagrant/mediawiki/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/CacheDecorator.php(181): WANObjectCache->getWithSetCallback(string, integer, Closure, array)
#184 /vagrant/mediawiki/extensions/GrowthExperiments/includes/NewcomerTasks/TaskSuggester/QualityGateDecorator.php(69): GrowthExperiments\NewcomerTasks\TaskSuggester\CacheDecorator->suggest(User, array, array, integer, NULL, array)
#185 /vagrant/mediawiki/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php(402): GrowthExperiments\NewcomerTasks\TaskSuggester\QualityGateDecorator->suggest(User, array, array, NULL, NULL, array)
#186 /vagrant/mediawiki/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php(802): GrowthExperiments\HomepageModules\SuggestedEdits->getTaskSet()
#187 /vagrant/mediawiki/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php(165): GrowthExperiments\HomepageModules\SuggestedEdits->getActionData()
#188 /vagrant/mediawiki/extensions/GrowthExperiments/includes/DashboardModule/DashboardModule.php(184): GrowthExperiments\HomepageModules\BaseModule->outputDependencies()
#189 /vagrant/mediawiki/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(325): GrowthExperiments\DashboardModule\DashboardModule->render(string)
#190 /vagrant/mediawiki/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(267): GrowthExperiments\Specials\SpecialHomepage->getModuleRenderHtmlSafe(GrowthExperiments\HomepageModules\SuggestedEdits, string)
#191 /vagrant/mediawiki/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(137): GrowthExperiments\Specials\SpecialHomepage->renderDesktop()
#192 /vagrant/mediawiki/includes/specialpage/SpecialPage.php(647): GrowthExperiments\Specials\SpecialHomepage->execute(NULL)
#193 /vagrant/mediawiki/includes/specialpage/SpecialPageFactory.php(1375): SpecialPage->run(NULL)
#194 /vagrant/mediawiki/includes/MediaWiki.php(314): MediaWiki\SpecialPage\SpecialPageFactory->executePath(string, RequestContext)
#195 /vagrant/mediawiki/includes/MediaWiki.php(910): MediaWiki->performRequest()
#196 /vagrant/mediawiki/includes/MediaWiki.php(554): MediaWiki->main()
#197 /vagrant/mediawiki/index.php(53): MediaWiki->run()
#198 /vagrant/mediawiki/index.php(46): wfIndexMain()
#199 /var/www/w/index.php(5): require(string)
#200 {main}Apparently MediumSpecificBagOStuff->guessSerialValueSize tries to traverse the cached object, and gets into an infinite loop inside the Title contained in TaskSet (Title -> deprecatedPublicProperties -> mTextform -> Closure -> Title).
Not sure if this affects production (MediumSpecificBagOStuff->guessSerialValueSize has some logic to abort after 256 levels so depends on how much nesting is allowed) Also not sure why I'm only seeing this error now, none of the affected code is new. In any case, TaskSet should probably be JsonSerializable, so that a JSON-ish representation is serialized instead of the full object, per T161647: RFC: Deprecate using php serialization inside MediaWiki.