Page MenuHomePhabricator

Prevent article metadata compilation on rollback actions
Closed, DeclinedPublic

Description

In T199699: PageTriage performs unexpected db writes on GET request (TransactionProfiler warning from ArticleCompileProcessor) and T154719: PageTriage opens master connection on GET for ArticleMetadata cache misses we made some changes to prevent writes and master connections on GET requests. However looks like we missed one: rollbacks of edits are done via a GET request, and that triggers onLinksUpdateComplete which then compiles metadata. Example:

Expectation (writes <= 0) by MediaWiki::restInPeace not met (actual: 29):
query-m: UPDATE `pagetriage_page` SET ptrp_tags_updated = 'X' [TRX#d51b24]
#0 /srv/mediawiki/php-1.32.0-wmf.18/includes/libs/rdbms/TransactionProfiler.php(224): Wikimedia\Rdbms\TransactionProfiler->reportExpectationViolated()
#1 /srv/mediawiki/php-1.32.0-wmf.18/includes/libs/rdbms/database/Database.php(1246): Wikimedia\Rdbms\TransactionProfiler->recordQueryCompletion()
#2 /srv/mediawiki/php-1.32.0-wmf.18/includes/libs/rdbms/database/Database.php(1143): Wikimedia\Rdbms\Database->doProfiledQuery()
#3 /srv/mediawiki/php-1.32.0-wmf.18/includes/libs/rdbms/database/Database.php(2062): Wikimedia\Rdbms\Database->query()
#4 /srv/mediawiki/php-1.32.0-wmf.18/extensions/PageTriage/includes/PageTriage.php(164): Wikimedia\Rdbms\Database->update()
#5 /srv/mediawiki/php-1.32.0-wmf.18/extensions/PageTriage/includes/ArticleCompile/ArticleCompileProcessor.php(267): MediaWiki\Extension\PageTriage\PageTriage->update()
#6 /srv/mediawiki/php-1.32.0-wmf.18/extensions/PageTriage/includes/ArticleCompile/ArticleCompileProcessor.php(133): MediaWiki\Extension\PageTriage\ArticleCompile\ArticleCompileProcessor->save()
#7 /srv/mediawiki/php-1.32.0-wmf.18/extensions/PageTriage/includes/Hooks.php(200): MediaWiki\Extension\PageTriage\ArticleCompile\ArticleCompileProcessor->compileMetadata()
#8 /srv/mediawiki/php-1.32.0-wmf.18/includes/deferred/MWCallableUpdate.php(34): Closure$MediaWiki\Extension\PageTriage\Hooks::onLinksUpdateComplete()
#9 /srv/mediawiki/php-1.32.0-wmf.18/includes/deferred/DeferredUpdates.php(268): MWCallableUpdate->doUpdate()
#10 /srv/mediawiki/php-1.32.0-wmf.18/includes/deferred/DeferredUpdates.php(226): DeferredUpdates::runUpdate()
#11 /srv/mediawiki/php-1.32.0-wmf.18/includes/deferred/DeferredUpdates.php(134): DeferredUpdates::execute()
#12 /srv/mediawiki/php-1.32.0-wmf.18/includes/MediaWiki.php(914): DeferredUpdates::doUpdates()
#13 /srv/mediawiki/php-1.32.0-wmf.18/includes/MediaWiki.php(734): MediaWiki->restInPeace()
#14 (): Closure$MediaWiki::doPostOutputShutdown()
#15 {main}

referrer is https://en.wikipedia.org/w/index.php?title=D.K.&action=history and URL is /w/index.php?title=D.K.&action=rollback&from=Bollywood+Filmies&token={redacted}

Oddly, when I do a rollback action locally and log the request method in onLinksUpdateComplete, MediaWiki tells me it's a POST request so I'm unable to reproduce this.

One solution would be to wrap the deferred update in onLinksUpdateComplete() with a check for whether the request is a POST, and if not, use the job queue to get the metadata compiled at a later time. Not ideal since that could happen several hours after the request, but not sure what other options we have in this scenario.

Event Timeline

Change 455870 had a related patch set uploaded (by Kosta Harlan; owner: Kosta Harlan):
[mediawiki/extensions/PageTriage@master] Ensure retrieval and storage of page metadata

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

kostajh added a subscriber: Catrope.

@Catrope and I discussed this and have decided not to try to work around T88044. When T88044 is fixed, PageTriage will no longer have issues with master DB connections or DB writes on GET due to rollback action.