From 9d53a09adc471b73cda46c9bd5802bbe67dc55cf Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Mon, 3 Aug 2015 12:46:30 -0700 Subject: [PATCH] Automatically de-duplicate EnqueueJob jobs when possible Bug: T107792 Change-Id: I1e7fe5d5a6fed7b9a0dd4482ef3fc3a260033109 --- includes/jobqueue/jobs/EnqueueJob.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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() { -- 2.20.1