Page MenuHomePhabricator

[wmf.18] DBPerformance: MentorPageMentorManager::setMentorForUser: Expectation (masterConns <= 0) not met
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error

MediaWiki version: 1.36.0-wmf.18

message
Expectation (masterConns <= 0) by MediaWiki::main not met (actual: 1):
[connect to 10.64.48.34 (svwiki)]
exception.trace
#0 /srv/mediawiki/php-1.36.0-wmf.18/includes/libs/rdbms/TransactionProfiler.php(189): Wikimedia\Rdbms\TransactionProfiler->reportExpectationViolated(string, string, integer)
#1 /srv/mediawiki/php-1.36.0-wmf.18/includes/libs/rdbms/loadbalancer/LoadBalancer.php(955): Wikimedia\Rdbms\TransactionProfiler->recordConnection(string, string, boolean)
#2 /srv/mediawiki/php-1.36.0-wmf.18/includes/libs/rdbms/loadbalancer/LoadBalancer.php(911): Wikimedia\Rdbms\LoadBalancer->getServerConnection(integer, string, integer)
#3 /srv/mediawiki/php-1.36.0-wmf.18/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1042): Wikimedia\Rdbms\LoadBalancer->getConnection(integer, array, string, integer)
#4 /srv/mediawiki/php-1.36.0-wmf.18/includes/user/UserOptionsManager.php(596): Wikimedia\Rdbms\LoadBalancer->getConnectionRef(integer, array)
#5 /srv/mediawiki/php-1.36.0-wmf.18/includes/user/UserOptionsManager.php(526): MediaWiki\User\UserOptionsManager->getDBForQueryFlags(integer)
#6 /srv/mediawiki/php-1.36.0-wmf.18/includes/user/UserOptionsManager.php(187): MediaWiki\User\UserOptionsManager->loadUserOptions(User, integer)
#7 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/Mentorship/MentorPageMentorManager.php(126): MediaWiki\User\UserOptionsManager->setOption(User, string, integer)
#8 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/Mentorship/MentorPageMentorManager.php(104): GrowthExperiments\Mentorship\MentorPageMentorManager->setMentorForUser(User, User)
#9 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/Mentorship/MentorPageMentorManager.php(113): GrowthExperiments\Mentorship\MentorPageMentorManager->getMentorForUser(User)
#10 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/HomepageModules/Mentorship.php(311): GrowthExperiments\Mentorship\MentorPageMentorManager->getMentorForUserSafe(User)
#11 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/HomepageModules/Mentorship.php(218): GrowthExperiments\HomepageModules\Mentorship->getMentor()
#12 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php(392): GrowthExperiments\HomepageModules\Mentorship->canRender()
#13 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php(80): GrowthExperiments\HomepageModules\BaseModule->shouldRender()
#14 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(313): GrowthExperiments\HomepageModules\BaseModule->render(string)
#15 /srv/mediawiki/php-1.36.0-wmf.18/extensions/GrowthExperiments/includes/Specials/SpecialHomepage.php(158): GrowthExperiments\Specials\SpecialHomepage->renderDesktop()
#16 /srv/mediawiki/php-1.36.0-wmf.18/includes/specialpage/SpecialPage.php(607): GrowthExperiments\Specials\SpecialHomepage->execute(NULL)
#17 /srv/mediawiki/php-1.36.0-wmf.18/includes/specialpage/SpecialPageFactory.php(1188): SpecialPage->run(NULL)
#18 /srv/mediawiki/php-1.36.0-wmf.18/includes/MediaWiki.php(310): MediaWiki\SpecialPage\SpecialPageFactory->executePath(Title, RequestContext)
#19 /srv/mediawiki/php-1.36.0-wmf.18/includes/MediaWiki.php(945): MediaWiki->performRequest()
#20 /srv/mediawiki/php-1.36.0-wmf.18/includes/MediaWiki.php(548): MediaWiki->main()
#21 /srv/mediawiki/php-1.36.0-wmf.18/index.php(53): MediaWiki->run()
#22 /srv/mediawiki/php-1.36.0-wmf.18/index.php(46): wfIndexMain()
#23 /srv/mediawiki/w/index.php(3): require(string)
#24 {main}

Notes

The warning is the same as in T265592 (the issue was about Flow extension). There were more than 30 messages in the logstash.

Details

Request ID
affb6698-4677-409f-b42f-cf62aaf77a4a
Request URL
https://sv.wikipedia.org/w/index.php?title=Special:Hemsida&source=personaltoolslink&namespace=-1

Event Timeline

Tgr renamed this task from [wmf.18] Expectation (masterConns <= 0) by MediaWiki::main not met - GrowthExperiments to [wmf.18] MentorPageMentorManager::setMentorForUser: Expectation (masterConns <= 0) by MediaWiki::main not met - GrowthExperiments.Nov 25 2020, 3:29 AM

This is the same issue mentioned in T250235#6605155.

I tried to write a core patch for this but it didn't feel convincing. The mentor manager in GrowthExperiments is the only thing using this pattern; only GrowthExperiments and flow use UserOptionsUpdateJob in the first place. And UserOptionsManager would require a new caching layer to handle this without breaking the use case that resulted in rMWff50d815a567: UserOptionsManager: take into account $queryFlags when caching which seems like a lot of complexity for something with such marginal utility. It also introduces various risks (what if the job gets lost or fails, but the updated user option gets stored somewhere else, resulting in loss of DB consistency? What if something tries to set the option between scheduling and running the job?) We can accept those risk for the specific use case of MentorPageMentorManager because we know the option is not going to be used in any way where that would be a serious problem, but providing it as a general-use interface seems fragile.

I think our least bad option is to add a cache layer to the mentor manager which does the same kind of thing UserOptionsManager::setOption would do.

Krinkle renamed this task from [wmf.18] MentorPageMentorManager::setMentorForUser: Expectation (masterConns <= 0) by MediaWiki::main not met - GrowthExperiments to [wmf.18] DBPerformance: MentorPageMentorManager::setMentorForUser: Expectation (masterConns <= 0) not met.Dec 3 2020, 3:15 AM
Krinkle moved this task from Untriaged to Nov 2020 on the Wikimedia-production-error board.
Krinkle added a project: GrowthExperiments.
Krinkle updated the task description. (Show Details)
Krinkle edited Stack Trace. (Show Details)

Would assume fixed after https://gerrit.wikimedia.org/r/c/mediawiki/extensions/GrowthExperiments/+/634945, but that is older wmf version than mention here

But the problem is the UserOptionsManager::setOption call (currently at MentorPageMentorManager.php:169) which reads unconditionally from the master since https://gerrit.wikimedia.org/r/c/mediawiki/core/+/599403 and therefor not usable on GET requests.

But this is also used in the BetaFeatures extension when visiting Special:Preferences as GET request seems not to trigger this, at least there are no reports about it.

Tgr claimed this task.

Did not happen in last 90 days. Was fixed by rMW73bcc40836a3: Improvements to user preferences fetching/saving probably.