Page MenuHomePhabricator

AccessControl extension crashes and causes timeout on some pages
Open, Needs TriagePublicBUG REPORT

Description

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

I'm not positive what about it is causing the crash and timeouts, but it's only happening on some (non-Latin-heavy) pages on my wiki. Can elaborate on page content if needed.

What happens?:

I get this in a backtrace:

PHP Deprecated: Use of MediaWiki\Content\ContentHandler::getContentText was deprecated in MediaWiki 1.37. [Called from AccessControlHooks::getContentPage]
#0 [internal function]: MWExceptionHandler::handleError()
#1 /data/server/wiki.firespeaker.org/includes/debug/MWDebug.php(385): trigger_error()
#2 /data/server/wiki.firespeaker.org/includes/debug/MWDebug.php(355): MediaWiki\Debug\MWDebug::sendRawDeprecated()
#3 /data/server/wiki.firespeaker.org/includes/debug/MWDebug.php(237): MediaWiki\Debug\MWDebug::deprecatedMsg()
#4 /data/server/wiki.firespeaker.org/includes/GlobalFunctions.php(773): MediaWiki\Debug\MWDebug::deprecated()
#5 /data/server/wiki.firespeaker.org/includes/content/ContentHandler.php(118): wfDeprecated()
#6 /data/server/wiki.firespeaker.org/extensions/AccessControl/src/AccessControlHooks.php(973): MediaWiki\Content\ContentHandler::getContentText()
#7 /data/server/wiki.firespeaker.org/extensions/AccessControl/src/AccessControlHooks.php(308): AccessControlHooks::getContentPage()
#8 /data/server/wiki.firespeaker.org/includes/HookContainer/HookContainer.php(159): AccessControlHooks::onUserCan()
#9 /data/server/wiki.firespeaker.org/includes/HookContainer/HookRunner.php(2027): MediaWiki\HookContainer\HookContainer->run()
#10 /data/server/wiki.firespeaker.org/includes/Permissions/PermissionManager.php(553): MediaWiki\HookContainer\HookRunner->onGetUserPermissionsErrors()
#11 /data/server/wiki.firespeaker.org/includes/Permissions/PermissionManager.php(507): MediaWiki\Permissions\PermissionManager->checkPermissionHooks()
#12 /data/server/wiki.firespeaker.org/includes/Permissions/UserAuthority.php(372): MediaWiki\Permissions\PermissionManager->getPermissionStatus()
#13 /data/server/wiki.firespeaker.org/includes/Permissions/UserAuthority.php(232): MediaWiki\Permissions\UserAuthority->internalCan()
#14 /data/server/wiki.firespeaker.org/includes/user/User.php(3308): MediaWiki\Permissions\UserAuthority->authorizeRead()
#15 /data/server/wiki.firespeaker.org/includes/actions/ActionEntryPoint.php(405): MediaWiki\User\User->authorizeRead()
#16 /data/server/wiki.firespeaker.org/includes/actions/ActionEntryPoint.php(146): MediaWiki\Actions\ActionEntryPoint->performRequest()
#17 /data/server/wiki.firespeaker.org/includes/MediaWikiEntryPoint.php(200): MediaWiki\Actions\ActionEntryPoint->execute()
#18 /data/server/wiki.firespeaker.org/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#19 {main}

Followed by thousands of repeat queries like this until the PHP execution limit is reached:

[rdbms] WikiPage::pageData [0.318ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'Ns:image'  LIMIT 1  
[rdbms] WikiPage::pageData [0.19ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'Ns:image'  LIMIT 1  
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] WikiPage::pageData [0.424ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'Ns:image'  LIMIT 1  
[rdbms] WikiPage::pageData [0.209ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'PAGENAME'  LIMIT 1  
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] WikiPage::pageData [0.25ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'PAGENAME'  LIMIT 1  
[rdbms] WikiPage::pageData [0.184ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'PAGENAME'  LIMIT 1  
[rdbms] WikiPage::pageData [0.187ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'PAGENAME'  LIMIT 1  
[rdbms] Wikimedia\Rdbms\LoadBalancer::reuseOrOpenConnectionForNewRef: reusing connection for 0/wikidb
[rdbms] WikiPage::pageData [0.307ms] localhost: SELECT  page_id,page_namespace,page_title,page_is_redirect,page_is_new,page_random,page_touched,page_links_updated,page_latest,page_len,page_content_model  FROM `page`    WHERE page_namespace = 10 AND page_title = 'PAGENAME'  LIMIT 1

What should have happened instead?:

No page timeout, no crash in the logs—which is what happens when AccessControl is disabled.

Software version (on Special:Version page; skip for WMF-hosted wikis like Wikipedia):

MediaWiki 1.43.0
PHP 8.2.26 (apache2handler)
ICU 72.1
MariaDB 10.11.6-MariaDB-0+deb12u1
AccessControl 6.0

Other information (browser name/version, screenshots, etc.):

Full debug log, but it goes away in a month: https://dpaste.org/g3S9N

Event Timeline

Change #1112091 had a related patch set uploaded (by Wargo; author: Wargo):

[mediawiki/extensions/AccessControl@master] Replace deprecated ContentHandler::getContentText()

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

Change #1112091 merged by jenkins-bot:

[mediawiki/extensions/AccessControl@master] Replace deprecated ContentHandler::getContentText()

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