Page MenuHomePhabricator

LogicException: Must call prepareContent() or prepareUpdate() before calling MediaWiki\Storage\DerivedPageDataUpdater::getRenderedRevision
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
labels.normalized_message
[{reqId}] {exception_url}   LogicException: Must call prepareContent() or prepareUpdate() before calling MediaWiki\Storage\DerivedPageDataUpdater::getRenderedRevision
error.stack_trace
from /srv/mediawiki/php-1.41.0-wmf.13/includes/Storage/DerivedPageDataUpdater.php(1075)
#0 /srv/mediawiki/php-1.41.0-wmf.13/includes/Storage/DerivedPageDataUpdater.php(1059): MediaWiki\Storage\DerivedPageDataUpdater->assertPrepared(string)
#1 /srv/mediawiki/php-1.41.0-wmf.13/includes/Storage/DerivedPageDataUpdater.php(1464): MediaWiki\Storage\DerivedPageDataUpdater->getRenderedRevision()
#2 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Variables/LazyVariableComputer.php(254): MediaWiki\Storage\DerivedPageDataUpdater->getParserOutputForMetaData()
#3 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Variables/VariablesManager.php(79): MediaWiki\Extension\AbuseFilter\Variables\LazyVariableComputer->compute(MediaWiki\Extension\AbuseFilter\Variables\LazyLoadedVariable, MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, Closure)
#4 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Variables/VariablesManager.php(77): MediaWiki\Extension\AbuseFilter\Variables\VariablesManager->getVar(MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, string)
#5 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Variables/LazyVariableComputer.php(270): MediaWiki\Extension\AbuseFilter\Variables\VariablesManager->MediaWiki\Extension\AbuseFilter\Variables\{closure}(string)
#6 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Variables/VariablesManager.php(79): MediaWiki\Extension\AbuseFilter\Variables\LazyVariableComputer->compute(MediaWiki\Extension\AbuseFilter\Variables\LazyLoadedVariable, MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, Closure)
#7 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(822): MediaWiki\Extension\AbuseFilter\Variables\VariablesManager->getVar(MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, string, integer)
#8 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(457): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->getVarValue(string)
#9 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(497): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#10 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(581): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#11 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(588): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#12 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(438): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#13 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(382): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalTree(MediaWiki\Extension\AbuseFilter\Parser\AFPSyntaxTree)
#14 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(348): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->parse(string)
#15 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/FilterRunner.php(370): MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->checkConditions(string, string)
#16 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/FilterRunner.php(331): MediaWiki\Extension\AbuseFilter\FilterRunner->checkFilter(MediaWiki\Extension\AbuseFilter\Filter\ExistingFilter)
#17 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/FilterRunner.php(307): MediaWiki\Extension\AbuseFilter\FilterRunner->checkAllFiltersInternal()
#18 /srv/mediawiki/php-1.41.0-wmf.13/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(402): MediaWiki\Extension\AbuseFilter\FilterRunner->runForStash()
#19 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/MWCallableUpdate.php(38): MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->MediaWiki\Extension\AbuseFilter\Hooks\Handlers\{closure}()
#20 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesManager.php(506): MWCallableUpdate->doUpdate()
#21 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesManager.php(432): MediaWiki\Deferred\DeferredUpdatesManager->attemptUpdate(MWCallableUpdate, Wikimedia\Rdbms\LBFactoryMulti)
#22 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesManager.php(257): MediaWiki\Deferred\DeferredUpdatesManager->run(MWCallableUpdate, string)
#23 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesScope.php(267): MediaWiki\Deferred\DeferredUpdatesManager->MediaWiki\Deferred\{closure}(MWCallableUpdate, integer)
#24 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesScope.php(196): DeferredUpdatesScope->processStageQueue(integer, integer, Closure)
#25 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdatesManager.php(278): DeferredUpdatesScope->processUpdates(integer, Closure)
#26 /srv/mediawiki/php-1.41.0-wmf.13/includes/deferred/DeferredUpdates.php(159): MediaWiki\Deferred\DeferredUpdatesManager->doUpdates(integer)
#27 /srv/mediawiki/php-1.41.0-wmf.13/includes/MediaWiki.php(698): DeferredUpdates::doUpdates(integer)
#28 /srv/mediawiki/php-1.41.0-wmf.13/includes/api/ApiMain.php(916): MediaWiki::preOutputCommit(DerivativeContext)
#29 /srv/mediawiki/php-1.41.0-wmf.13/includes/api/ApiMain.php(861): ApiMain->executeActionWithErrorHandling()
#30 /srv/mediawiki/php-1.41.0-wmf.13/api.php(95): ApiMain->execute()
#31 /srv/mediawiki/php-1.41.0-wmf.13/api.php(48): wfApiMain()
#32 /srv/mediawiki/w/api.php(3): require(string)
#33 {main}
Notes

Constant stream of errors in group1 wikis after deployment of wmf.13. Following change seems a likely cause: https://gerrit.wikimedia.org/r/c/mediawiki/extensions/AbuseFilter/+/929655

Event Timeline

jnuche triaged this task as Unbreak Now! priority.Jun 14 2023, 9:51 AM
jnuche created this task.

I'd blame https://gerrit.wikimedia.org/r/c/mediawiki/extensions/AbuseFilter/+/929657. Both changes were backported, this is the second (newer) one. Revert both if you need to be more certain.

I'd rather fix the bug. Will get to it once I'm back to a PC

ApiMain->execute() and MediaWiki\Extension\AbuseFilter\FilterRunner->runForStash() indicate the errors could come from action=stashedit.

In PageEditStash::parseAndCache there is:

$legacyPage = $this->wikiPageFactory->newFromTitle( $page );
$this->hookRunner->onParserOutputStashForEdit(
	$legacyPage, $content, $editInfo->output, $summary, $legacyUser );

$legacyPage might be a new instance of WikiPage returning a new PreparedUpdate instance different from $pageUpdater.
I'm a bit surprised it doesn't throw here first:

try {
	$update = $page->getCurrentUpdate();
} catch ( PreconditionException $ex ) {
	// Temporary workaround until this becomes
	// a hook parameter
	$update = null;
}

(I see you have just claimed the task, so I end my investigation here.)

Change 930162 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/extensions/AbuseFilter@master] Fix cases of LogicException in $update->getParserOutputForMetaData()

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

@matej_suchanek The patch fixes the issue. Thankfully FlaggedRevs went down the same route we have so I had something to copy paste from.

Change 929980 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/extensions/AbuseFilter@wmf/1.41.0-wmf.13] Fix cases of LogicException in $update->getParserOutputForMetaData()

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

Change 930162 merged by jenkins-bot:

[mediawiki/extensions/AbuseFilter@master] Fix cases of LogicException in $update->getParserOutputForMetaData()

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

Change 929980 merged by jenkins-bot:

[mediawiki/extensions/AbuseFilter@wmf/1.41.0-wmf.13] Fix cases of LogicException in $update->getParserOutputForMetaData()

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

Mentioned in SAL (#wikimedia-operations) [2023-06-14T12:21:22Z] <ladsgroup@deploy1002> Started scap: Backport for [[gerrit:929980|Fix cases of LogicException in $update->getParserOutputForMetaData() (T339094)]]

Mentioned in SAL (#wikimedia-operations) [2023-06-14T12:23:09Z] <ladsgroup@deploy1002> ladsgroup: Backport for [[gerrit:929980|Fix cases of LogicException in $update->getParserOutputForMetaData() (T339094)]] synced to the testservers: mwdebug1001.eqiad.wmnet, mwdebug1002.eqiad.wmnet, mwdebug2001.codfw.wmnet, mwdebug2002.codfw.wmnet

Mentioned in SAL (#wikimedia-operations) [2023-06-14T12:29:44Z] <ladsgroup@deploy1002> Finished scap: Backport for [[gerrit:929980|Fix cases of LogicException in $update->getParserOutputForMetaData() (T339094)]] (duration: 08m 21s)