Page MenuHomePhabricator

REL1_39 extension requires LBFactory::getReplicaDatabase, which isn't in MW 1.39
Closed, ResolvedPublic

Description

Steps to reproduce

  1. Install MW 1.39
  2. Download REL1_39 from ExtensionDistributor and install: https://extdist.wmflabs.org/dist/extensions/Editcount-REL1_39-6a830ed.tar.gz
  3. Go to Special:EditCount
  4. Enter a user name

Expected behavior

The extension outputs the edit count

Observed behavior

[84be554544b78ec19e67b424] /wiki/Special:Editcount Error: Call to undefined method Wikimedia\Rdbms\LBFactorySimple::getReplicaDatabase()

Backtrace:

from /var/www/html/extensions/Editcount/src/Editcount.php(71)
#0 /var/www/html/extensions/Editcount/src/Editcount.php(39): Editcount->editsByNs()
#1 /var/www/html/includes/specialpage/SpecialPage.php(701): Editcount->execute()
#2 /var/www/html/includes/specialpage/SpecialPageFactory.php(1428): SpecialPage->run()
#3 /var/www/html/includes/MediaWiki.php(316): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#4 /var/www/html/includes/MediaWiki.php(904): MediaWiki->performRequest()
#5 /var/www/html/includes/MediaWiki.php(562): MediaWiki->main()
#6 /var/www/html/index.php(50): MediaWiki->run()
#7 /var/www/html/index.php(46): wfIndexMain()
#8 {main}

Confirmed the REL1_39 extension uses the missing function:

$ grep -niR getReplicaDatabase Editcount
Editcount/src/Editcount.php:71:         $dbr = MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->getReplicaDatabase();
Editcount/src/Editcount.php:103:                $dbr = MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->getReplicaDatabase();

Workarounds

  • Manually downgrade the extension to a previous version
  • Upgrade from LTS 1.39 to stable 1.41 or master? (not tested)

Event Timeline

Oznogon updated the task description. (Show Details)

Change adding use of getReplicaDatabase made in commit 522636b... ("Editcount: Migrate to fluent style query"), cherry-picked from the master branch on 24 Jan 2024. The change set the new minimum version from 1.32 to 1.36.

LBFactory::getReplicaDatabase doesn't appear to be implemented in the MW REL1_39 branch. First appears in REL1_40. T326274 commit I78dd5c (" rdbms: Switch LBFactory::getReplicaDatabase to narrow IReadableDatabase").

Oznogon renamed this task from 1.39 branch uses getReplicaDatabase, which isn't in MW 1.39 to REL1_39 extension requires LBFactory::getReplicaDatabase, which isn't in MW 1.39.Mar 10 2024, 7:28 PM

Setup

or

[7cd4a96ca8e46e5ac7c222f2] [no req] Error: Call to undefined method Wikimedia\Rdbms\LBFactorySimple::getReplicaDatabase()

Backtrace:

from /../w/extensions/Editcount/src/Editcount.php(104)
#0 /../w/extensions/Editcount/src/Editcount.php(35): Editcount->editsInNs()
#1 /../w/includes/specialpage/SpecialPage.php(701): Editcount->execute()
#2 /../w/includes/specialpage/SpecialPageFactory.php(1428): SpecialPage->run()
#3 /../w/includes/specialpage/SpecialPageFactory.php(1490): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#4 /../w/includes/parser/Parser.php(3221): MediaWiki\SpecialPage\SpecialPageFactory->capturePath()
#5 /../w/includes/parser/PPFrame_Hash.php(275): Parser->braceSubstitution()
#6 /../w/includes/parser/Parser.php(2953): PPFrame_Hash->expand()
#7 /../w/includes/parser/Parser.php(1609): Parser->replaceVariables()
#8 /../w/includes/parser/Parser.php(723): Parser->internalParse()
#9 /../w/includes/content/WikitextContentHandler.php(301): Parser->parse()
#10 /../w/includes/content/ContentHandler.php(1721): WikitextContentHandler->fillParserOutput()
#11 /../w/includes/content/Renderer/ContentRenderer.php(47): ContentHandler->getParserOutput()
#12 /../w/includes/Revision/RenderedRevision.php(266): MediaWiki\Content\Renderer\ContentRenderer->getParserOutput()
#13 /../w/includes/Revision/RenderedRevision.php(237): MediaWiki\Revision\RenderedRevision->getSlotParserOutputUncached()
#14 /../w/includes/Revision/RevisionRenderer.php(221): MediaWiki\Revision\RenderedRevision->getSlotParserOutput()
#15 /../w/includes/Revision/RevisionRenderer.php(158): MediaWiki\Revision\RevisionRenderer->combineSlotOutput()
#16 [internal function]: MediaWiki\Revision\RevisionRenderer->MediaWiki\Revision\{closure}()
#17 /../w/includes/Revision/RenderedRevision.php(199): call_user_func()
#18 /../w/includes/poolcounter/PoolWorkArticleView.php(91): MediaWiki\Revision\RenderedRevision->getRevisionParserOutput()
#19 /../w/includes/poolcounter/PoolWorkArticleViewCurrent.php(97): PoolWorkArticleView->renderRevision()
#20 /../w/includes/poolcounter/PoolCounterWork.php(162): PoolWorkArticleViewCurrent->doWork()
#21 /../w/includes/page/ParserOutputAccess.php(299): PoolCounterWork->execute()
#22 /../w/includes/page/Article.php(714): MediaWiki\Page\ParserOutputAccess->getParserOutput()
#23 /../w/includes/page/Article.php(528): Article->generateContentOutput()
#24 /../w/includes/actions/ViewAction.php(78): Article->view()
#25 /../w/includes/MediaWiki.php(542): ViewAction->show()
#26 /../w/includes/MediaWiki.php(322): MediaWiki->performAction()
#27 /../w/includes/MediaWiki.php(904): MediaWiki->performRequest()
#28 /../w/includes/MediaWiki.php(562): MediaWiki->main()
#29 /../w/index.php(50): MediaWiki->run()
#30 /../w/index.php(46): wfIndexMain()
#31 {main}

The error can be mitigated by returning to REL1_38 6fcbb6f48305fc579390814d6b828834b8b7c860 or presumably upgrading to MediaWiki 1.40.x

Change #1032817 had a related patch set uploaded (by Reedy; author: Reedy):

[mediawiki/extensions/Editcount@REL1_39] Revert "Editcount: Migrate to fluent style query"

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

Change #1032817 merged by jenkins-bot:

[mediawiki/extensions/Editcount@REL1_39] Revert "Editcount: Migrate to fluent style query"

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

Reedy claimed this task.

When it's broken, attributable to a specific commit... It's easiest to just revert it. Especially when it's been sat a few months!