diff options
Diffstat (limited to 'includes/job/jobs/RefreshLinksJob.php')
-rw-r--r-- | includes/job/jobs/RefreshLinksJob.php | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/includes/job/jobs/RefreshLinksJob.php b/includes/job/jobs/RefreshLinksJob.php index 9dbe8278..4fc8bac6 100644 --- a/includes/job/jobs/RefreshLinksJob.php +++ b/includes/job/jobs/RefreshLinksJob.php @@ -37,21 +37,18 @@ class RefreshLinksJob extends Job { * @return boolean success */ function run() { - wfProfileIn( __METHOD__ ); - $linkCache = LinkCache::singleton(); $linkCache->clear(); if ( is_null( $this->title ) ) { $this->error = "refreshLinks: Invalid title"; - wfProfileOut( __METHOD__ ); return false; } # Wait for the DB of the current/next slave DB handle to catch up to the master. # This way, we get the correct page_latest for templates or files that just changed # milliseconds ago, having triggered this job to begin with. - if ( isset( $this->params['masterPos'] ) ) { + if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) { wfGetLB()->waitFor( $this->params['masterPos'] ); } @@ -59,13 +56,11 @@ class RefreshLinksJob extends Job { if ( !$revision ) { $this->error = 'refreshLinks: Article not found "' . $this->title->getPrefixedDBkey() . '"'; - wfProfileOut( __METHOD__ ); return false; // XXX: what if it was just deleted? } self::runForTitleInternal( $this->title, $revision, __METHOD__ ); - wfProfileOut( __METHOD__ ); return true; } @@ -101,6 +96,9 @@ class RefreshLinksJob extends Job { $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput ); DataUpdate::runUpdates( $updates ); + + InfoAction::invalidateCache( $title ); + wfProfileOut( $fname ); } } @@ -114,6 +112,8 @@ class RefreshLinksJob extends Job { class RefreshLinksJob2 extends Job { function __construct( $title, $params, $id = 0 ) { parent::__construct( 'refreshLinks2', $title, $params, $id ); + // Base jobs for large templates can easily be de-duplicated + $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] ); } /** @@ -123,14 +123,11 @@ class RefreshLinksJob2 extends Job { function run() { global $wgUpdateRowsPerJob; - wfProfileIn( __METHOD__ ); - $linkCache = LinkCache::singleton(); $linkCache->clear(); if ( is_null( $this->title ) ) { $this->error = "refreshLinks2: Invalid title"; - wfProfileOut( __METHOD__ ); return false; } @@ -144,7 +141,7 @@ class RefreshLinksJob2 extends Job { // Hopefully, when leaf jobs are popped, the slaves will have reached that position. if ( isset( $this->params['masterPos'] ) ) { $masterPos = $this->params['masterPos']; - } elseif ( wfGetLB()->getServerCount() > 1 ) { + } elseif ( wfGetLB()->getServerCount() > 1 ) { $masterPos = wfGetLB()->getMasterPos(); } else { $masterPos = false; @@ -158,7 +155,7 @@ class RefreshLinksJob2 extends Job { $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) ); } else { # This is a base job to trigger the insertion of partitioned jobs... - if ( $tbc->getNumLinks( $table ) <= $wgUpdateRowsPerJob ) { + if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) { # Just directly insert the single per-title jobs $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) ); } else { @@ -167,10 +164,10 @@ class RefreshLinksJob2 extends Job { list( $start, $end ) = $batch; $jobs[] = new RefreshLinksJob2( $this->title, array( - 'table' => $table, - 'start' => $start, - 'end' => $end, - 'masterPos' => $masterPos, + 'table' => $table, + 'start' => $start, + 'end' => $end, + 'masterPos' => $masterPos, ) + $this->getRootJobParams() // carry over information for de-duplication ); } @@ -181,7 +178,6 @@ class RefreshLinksJob2 extends Job { JobQueueGroup::singleton()->push( $jobs ); } - wfProfileOut( __METHOD__ ); return true; } |