X-Git-Url: https://git.cyclocoop.org/%242?a=blobdiff_plain;f=includes%2Fdeferred%2FLinksUpdate.php;h=89136428911d133273eff58876284ee327cb8110;hb=b4e9b1ba621d77b580cfd5b19e927ccaec54831a;hp=18a87e8bf2fc5423f52423f7c61e565a0dd4c50e;hpb=3e88f9fa2a5a00bc1330560accf8e9d09c8be42a;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/deferred/LinksUpdate.php b/includes/deferred/LinksUpdate.php index 18a87e8bf2..8913642891 100644 --- a/includes/deferred/LinksUpdate.php +++ b/includes/deferred/LinksUpdate.php @@ -306,10 +306,13 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { * using the job queue. */ protected function queueRecursiveJobs() { - self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' ); + $action = $this->getCauseAction(); + $agent = $this->getCauseAgent(); + + self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks', $action, $agent ); if ( $this->mTitle->getNamespace() == NS_FILE ) { // Process imagelinks in case the title is or was a redirect - self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' ); + self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks', $action, $agent ); } $bc = $this->mTitle->getBacklinkCache(); @@ -320,7 +323,13 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { // Which ever runs first generally no-ops the other one. $jobs = []; foreach ( $bc->getCascadeProtectedLinks() as $title ) { - $jobs[] = RefreshLinksJob::newPrioritized( $title, [] ); + $jobs[] = RefreshLinksJob::newPrioritized( + $title, + [ + 'causeAction' => $action, + 'causeAgent' => $agent + ] + ); } JobQueueGroup::singleton()->push( $jobs ); } @@ -330,8 +339,12 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { * * @param Title $title Title to do job for * @param string $table Table to use (e.g. 'templatelinks') + * @param string $action Triggering action + * @param string $userName Triggering user name */ - public static function queueRecursiveJobsForTable( Title $title, $table ) { + public static function queueRecursiveJobsForTable( + Title $title, $table, $action = 'unknown', $userName = 'unknown' + ) { if ( $title->getBacklinkCache()->hasLinks( $table ) ) { $job = new RefreshLinksJob( $title, @@ -340,7 +353,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { 'recursive' => true, ] + Job::newRootJobParams( // "overall" refresh links job info "refreshlinks:{$table}:{$title->getPrefixedText()}" - ) + ) + [ 'causeAction' => $action, 'causeAgent' => $userName ] ); JobQueueGroup::singleton()->push( $job ); @@ -366,20 +379,22 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { return; } - $wikiId = $this->getDB()->getWikiID(); + $domainId = $this->getDB()->getDomainID(); $wp = WikiPage::factory( $this->mTitle ); $lbf = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); // T163801: try to release any row locks to reduce contention - $lbf->commitAndWaitForReplication( __METHOD__, $this->ticket, [ 'wiki' => $wikiId ] ); + $lbf->commitAndWaitForReplication( __METHOD__, $this->ticket, [ 'domain' => $domainId ] ); foreach ( array_chunk( array_keys( $added ), $wgUpdateRowsPerQuery ) as $addBatch ) { $wp->updateCategoryCounts( $addBatch, [], $this->mId ); - $lbf->commitAndWaitForReplication( __METHOD__, $this->ticket, [ 'wiki' => $wikiId ] ); + $lbf->commitAndWaitForReplication( + __METHOD__, $this->ticket, [ 'domain' => $domainId ] ); } foreach ( array_chunk( array_keys( $deleted ), $wgUpdateRowsPerQuery ) as $deleteBatch ) { $wp->updateCategoryCounts( [], $deleteBatch, $this->mId ); - $lbf->commitAndWaitForReplication( __METHOD__, $this->ticket, [ 'wiki' => $wikiId ] ); + $lbf->commitAndWaitForReplication( + __METHOD__, $this->ticket, [ 'domain' => $domainId ] ); } } @@ -450,10 +465,12 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { } } + $domainId = $this->getDB()->getDomainID(); + foreach ( $deleteWheres as $deleteWhere ) { $this->getDB()->delete( $table, $deleteWhere, __METHOD__ ); $lbf->commitAndWaitForReplication( - __METHOD__, $this->ticket, [ 'wiki' => $this->getDB()->getWikiID() ] + __METHOD__, $this->ticket, [ 'domain' => $domainId ] ); } @@ -461,7 +478,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { foreach ( $insertBatches as $insertBatch ) { $this->getDB()->insert( $table, $insertBatch, __METHOD__, 'IGNORE' ); $lbf->commitAndWaitForReplication( - __METHOD__, $this->ticket, [ 'wiki' => $this->getDB()->getWikiID() ] + __METHOD__, $this->ticket, [ 'domain' => $domainId ] ); } @@ -548,7 +565,6 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { foreach ( $diffs as $url => $dummy ) { foreach ( wfMakeUrlIndexes( $url ) as $index ) { $arr[] = [ - 'el_id' => $this->getDB()->nextSequenceValue( 'externallinks_el_id_seq' ), 'el_from' => $this->mId, 'el_to' => $url, 'el_index' => $index, @@ -1039,7 +1055,9 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { $inv = [ $inv ]; } foreach ( $inv as $table ) { - DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, $table ) ); + DeferredUpdates::addUpdate( + new HTMLCacheUpdate( $this->mTitle, $table, 'page-props' ) + ); } } } @@ -1144,7 +1162,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { } return [ - 'wiki' => $this->getDB()->getWikiID(), + 'wiki' => WikiMap::getWikiIdFromDomain( $this->getDB()->getDomainID() ), 'job' => new JobSpecification( 'refreshLinksPrioritized', [ @@ -1153,6 +1171,8 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate { 'useRecursiveLinksUpdate' => $this->mRecursive, 'triggeringUser' => $userInfo, 'triggeringRevisionId' => $triggeringRevisionId, + 'causeAction' => $this->getCauseAction(), + 'causeAgent' => $this->getCauseAgent() ], [ 'removeDuplicates' => true ], $this->getTitle()