* Added JobQueue::deduplicateRootJob() function which uses cache records of the last time a "root" job was initiated for a task in order to invalidate prior jobs for that task. For refreshLinks, the "task" is basically "enqueueing the refresh jobs for title X". * (bug 27914) Also added new Job::getDeduplicationFields() function and made use of it with refreshLinks to exclude things like 'masterPos' from duplicate job check comparisons for refreshLinks. * (bug 27914) Always resolve refreshLinks2 jobs down to refreshLinks jobs. For each affected pages, one of them will get their job popped first, which will remove the duplicates for that page unless one page is in a refreshLinks2 jobs and the other in refreshLinks. * (bug 37731) Made LinksUpdate/HTMLCacheUpdate defer the large backlinks query by doing it in an outer job. * (bug 42065) HTMLCacheUpdate will no longer purge pages that were already purged since the job was added. Change-Id: I71b743e0a38e60a874ca856e80cb761bea06b689
70 lines
1.9 KiB
PHP
70 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* HTML cache invalidation of all pages linking to a given title.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @ingroup Cache
|
|
*/
|
|
|
|
/**
|
|
* Class to invalidate the HTML cache of all the pages linking to a given title.
|
|
*
|
|
* @ingroup Cache
|
|
*/
|
|
class HTMLCacheUpdate implements DeferrableUpdate {
|
|
/**
|
|
* @var Title
|
|
*/
|
|
public $mTitle;
|
|
|
|
public $mTable;
|
|
|
|
/**
|
|
* @param $titleTo
|
|
* @param $table
|
|
* @param $start bool
|
|
* @param $end bool
|
|
*/
|
|
function __construct( Title $titleTo, $table ) {
|
|
$this->mTitle = $titleTo;
|
|
$this->mTable = $table;
|
|
}
|
|
|
|
public function doUpdate() {
|
|
wfProfileIn( __METHOD__ );
|
|
|
|
$job = new HTMLCacheUpdateJob(
|
|
$this->mTitle,
|
|
array(
|
|
'table' => $this->mTable,
|
|
) + Job::newRootJobParams( // "overall" refresh links job info
|
|
"htmlCacheUpdate:{$this->mTable}:{$this->mTitle->getPrefixedText()}"
|
|
)
|
|
);
|
|
|
|
$count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
|
|
if ( $count >= 200 ) { // many backlinks
|
|
JobQueueGroup::singleton()->push( $job );
|
|
JobQueueGroup::singleton()->deduplicateRootJob( $job );
|
|
} else { // few backlinks ($count might be off even if 0)
|
|
$job->run(); // just do the purge query now
|
|
}
|
|
|
|
wfProfileOut( __METHOD__ );
|
|
}
|
|
}
|