From: Aaron Schulz Date: Mon, 3 Aug 2015 19:46:30 +0000 (-0700) Subject: Automatically de-duplicate EnqueueJob jobs when possible X-Git-Tag: 1.31.0-rc.0~10532^2 X-Git-Url: http://git.cyclocoop.org/%22.%28%24lien.?a=commitdiff_plain;h=9d53a09adc471b73cda46c9bd5802bbe67dc55cf;p=lhc%2Fweb%2Fwiklou.git Automatically de-duplicate EnqueueJob jobs when possible Bug: T107792 Change-Id: I1e7fe5d5a6fed7b9a0dd4482ef3fc3a260033109 --- diff --git a/includes/jobqueue/jobs/EnqueueJob.php b/includes/jobqueue/jobs/EnqueueJob.php index ca597ca9bb..a3b6b9664c 100644 --- a/includes/jobqueue/jobs/EnqueueJob.php +++ b/includes/jobqueue/jobs/EnqueueJob.php @@ -59,6 +59,8 @@ final class EnqueueJob extends Job { * @return EnqueueJob */ public static function newFromJobsByWiki( array $jobsByWiki ) { + $deduplicate = true; + $jobMapsByWiki = array(); foreach ( $jobsByWiki as $wiki => $jobs ) { $jobMapsByWiki[$wiki] = array(); @@ -68,10 +70,16 @@ final class EnqueueJob extends Job { } else { throw new InvalidArgumentException( "Jobs must be of type JobSpecification." ); } + $deduplicate = $deduplicate && $job->ignoreDuplicates(); } } - return new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) ); + $eJob = new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) ); + // If *all* jobs to be pushed are to be de-duplicated (a common case), then + // de-duplicate this whole job itself to avoid build up in high traffic cases + $eJob->removeDuplicates = $deduplicate; + + return $eJob; } public function run() {