Page MenuHomePhabricator

PageForms generates TransactionProfiler warnings on pageviews
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Use PageForms on a wiki with multiple (primary-replica) DB servers

What happens?:
A TransactionProfiler warning is logged for pageviews, example:

Expectation (masterConns <= 0) by MediaWiki::main not met (actual: 1):
[connect to geo-db-c-master.query.consul. (mfbeyblade)]
 	RuntimeException from line 467 of /includes/libs/rdbms/TransactionProfiler.php: 
	#0 /includes/libs/rdbms/TransactionProfiler.php(222): Wikimedia\Rdbms\TransactionProfiler->reportExpectationViolated(string, string, integer)
	#1 /includes/libs/rdbms/loadbalancer/LoadBalancer.php(983): Wikimedia\Rdbms\TransactionProfiler->recordConnection(string, string, boolean)
	#2 /includes/libs/rdbms/loadbalancer/LoadBalancer.php(944): Wikimedia\Rdbms\LoadBalancer->getServerConnection(integer, string, integer)
	#3 /extensions/fandom/FandomIncludes/src/Database/FandomLoadBalancer.php(104): Wikimedia\Rdbms\LoadBalancer->getConnectionInternal(integer, array, string, integer)
	#4 /includes/libs/rdbms/database/DBConnRef.php(95): Fandom\Includes\Database\FandomLoadBalancer->getConnectionInternal(integer, array, string, integer)
	#5 /includes/libs/rdbms/database/DBConnRef.php(101): Wikimedia\Rdbms\DBConnRef->ensureConnection()
	#6 /includes/libs/rdbms/database/DBConnRef.php(392): Wikimedia\Rdbms\DBConnRef->__call(string, array)
	#7 /includes/block/DatabaseBlock.php(270): Wikimedia\Rdbms\DBConnRef->makeList(array, integer)
	#8 /includes/block/DatabaseBlock.php(890): MediaWiki\Block\DatabaseBlock::newLoad(User, integer, boolean, string)
	#9 /includes/block/BlockManager.php(161): MediaWiki\Block\DatabaseBlock::newListFromTarget(User, string, boolean)
	#10 /includes/user/User.php(1447): MediaWiki\Block\BlockManager->getUserBlock(User, WebRequest, boolean, boolean)
	#11 /includes/user/User.php(1545): User->getBlockedStatus(boolean, boolean)
	#12 /includes/Permissions/PermissionManager.php(814): User->getBlock(integer)
	#13 /includes/Permissions/PermissionManager.php(538): MediaWiki\Permissions\PermissionManager->checkUserBlock(string, User, array, string, boolean, Title)
	#14 /includes/Permissions/PermissionManager.php(1228): MediaWiki\Permissions\PermissionManager->getPermissionErrorsInternal(string, User, Title, string, boolean)
	#15 /includes/Permissions/PermissionManager.php(538): MediaWiki\Permissions\PermissionManager->checkActionPermissions(string, User, array, string, boolean, Title)
	#16 /includes/Permissions/PermissionManager.php(299): MediaWiki\Permissions\PermissionManager->getPermissionErrorsInternal(string, User, Title, string, boolean)
	#17 /extensions/PageForms/includes/PF_HelperFormAction.php(83): MediaWiki\Permissions\PermissionManager->userCan(string, User, Title)
	#18 /includes/HookContainer/HookContainer.php(338): PFHelperFormAction::displayTab(Fandom\FandomDesktop\SkinFandomDesktop, array)
	#19 /includes/HookContainer/HookContainer.php(137): MediaWiki\HookContainer\HookContainer->callLegacyHook(string, array, array, array)
	#20 /includes/HookContainer/HookRunner.php(3542): MediaWiki\HookContainer\HookContainer->run(string, array, array)
	#21 /includes/skins/SkinTemplate.php(1203): MediaWiki\HookContainer\HookRunner->onSkinTemplateNavigation__Universal(Fandom\FandomDesktop\SkinFandomDesktop, array)
	#22 /includes/skins/SkinTemplate.php(1574): SkinTemplate->runOnSkinTemplateNavigationHooks(Fandom\FandomDesktop\SkinFandomDesktop, array)
	#23 /includes/skins/SkinTemplate.php(790): SkinTemplate->buildContentNavigationUrlsInternal()
	#24 /includes/skins/SkinTemplate.php(762): SkinTemplate->getPortletsTemplateData()
	#25 /includes/skins/Skin.php(667): SkinTemplate->getCategoryLinks()
	#26 /includes/skins/SkinTemplate.php(259): Skin->getCategories()
	#27 /skins/FandomDesktop/src/SkinFandomDesktop.php(105): SkinTemplate->prepareQuickTemplate()
	#28 /includes/skins/SkinTemplate.php(146): Fandom\FandomDesktop\SkinFandomDesktop->prepareQuickTemplate()
	#29 /includes/skins/SkinTemplate.php(177): SkinTemplate->generateHTML()
	#30 /includes/OutputPage.php(2876): SkinTemplate->outputPage()
	#31 /includes/MediaWiki.php(922): OutputPage->output(boolean)
	#32 /includes/MediaWiki.php(562): MediaWiki->main()
	#33 /index.php(50): MediaWiki->run()
	#34 /index.php(46): wfIndexMain()

What should have happened instead?:
PageForms should generate no TransactionProfiler warnings on pageviews

Software version (skip for WMF-hosted wikis like Wikipedia):
MW 1.39 with PageForms 5.6

Event Timeline

Change 928484 had a related patch set uploaded (by TK-999; author: TK-999):

[mediawiki/extensions/PageForms@master] Use RIGOR_QUICK for authorization checks when rendering formedit tab

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

Change 928484 merged by jenkins-bot:

[mediawiki/extensions/PageForms@master] Use RIGOR_QUICK for authorization checks when rendering formedit tab

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

Yaron_Koren claimed this task.
Yaron_Koren subscribed.

@TK-999 - thank you!

Change 929684 had a related patch set uploaded (by TK-999; author: TK-999):

[mediawiki/extensions/PageForms@master] Use RIGOR_QUICK for authorization checks when rendering formcreate tab

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

Thanks! Sorry, it seems I missed one spot so I made a fast follow.

Change 929684 merged by jenkins-bot:

[mediawiki/extensions/PageForms@master] Use RIGOR_QUICK for authorization checks when rendering formcreate tab

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

Change 997891 had a related patch set uploaded (by Ttomalak; author: Ttomalak):

[mediawiki/extensions/PageForms@master] Mark PF_FormEdit and PF_FormEditAction as doing writes

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