Make RefreshLinksJob run DataUpdates such that they have outer scope
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 29 Mar 2019 01:59:42 +0000 (18:59 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 29 Mar 2019 23:47:50 +0000 (23:47 +0000)
This is how DeferrableUpdates are supposed to run as documented.

Change-Id: Ie4fb8c9a64b94bc2422d7e51391998315f4eeddb

includes/jobqueue/jobs/RefreshLinksJob.php

index 7f9b2a3..0cfaebe 100644 (file)
@@ -54,6 +54,8 @@ class RefreshLinksJob extends Job {
                        !( isset( $params['pages'] ) && count( $params['pages'] ) != 1 )
                );
                $this->params += [ 'causeAction' => 'unknown', 'causeAgent' => 'unknown' ];
+               // This will control transaction rounds in order to run DataUpdates
+               $this->executionFlags |= self::JOB_NO_EXPLICIT_TRX_ROUND;
        }
 
        /**
@@ -145,6 +147,8 @@ class RefreshLinksJob extends Job {
                $renderer = $services->getRevisionRenderer();
                $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
 
+               $lbFactory->beginMasterChanges( __METHOD__ );
+
                $page = WikiPage::factory( $title );
                $page->loadPageData( WikiPage::READ_LATEST );
 
@@ -284,6 +288,9 @@ class RefreshLinksJob extends Job {
                                $options['triggeringUser'] = User::newFromName( $userInfo['userName'], false );
                        }
                }
+
+               $lbFactory->commitMasterChanges( __METHOD__ );
+
                $page->doSecondaryDataUpdates( $options );
 
                InfoAction::invalidateCache( $title );