* Class to handle enqueueing of background jobs
*
* @ingroup JobQueue
- * @since 1.20
+ * @since 1.21
*/
class JobQueueGroup {
/** @var Array */
public function get( $type ) {
global $wgJobTypeConf;
- $conf = false;
+ $conf = array( 'wiki' => $this->wiki, 'type' => $type );
if ( isset( $wgJobTypeConf[$type] ) ) {
- $conf = $wgJobTypeConf[$type];
+ $conf = $conf + $wgJobTypeConf[$type];
} else {
- $conf = $wgJobTypeConf['default'];
+ $conf = $conf + $wgJobTypeConf['default'];
}
- return JobQueue::factory( array(
- 'class' => $conf['class'],
- 'wiki' => $this->wiki,
- 'type' => $type,
- ) );
+ return JobQueue::factory( $conf );
}
/**
* Insert jobs into the respective queues of with the belong
*
* @param $jobs Job|array A single Job or a list of Jobs
+ * @throws MWException
* @return bool
*/
public function push( $jobs ) {
return $this->get( $job->getType() )->ack( $job );
}
+ /**
+ * Register the "root job" of a given job into the queue for de-duplication.
+ * This should only be called right *after* all the new jobs have been inserted.
+ *
+ * @param $job Job
+ * @return bool
+ */
+ public function deduplicateRootJob( Job $job ) {
+ return $this->get( $job->getType() )->deduplicateRootJob( $job );
+ }
+
/**
* Get the list of queue types
*
return array_diff( $this->getQueueTypes(), $wgJobTypesExcludedFromDefaultQueue );
}
+
+ /**
+ * @return Array List of job types that have non-empty queues
+ */
+ public function getQueuesWithJobs() {
+ $types = array();
+ foreach ( $this->getQueueTypes() as $type ) {
+ if ( !$this->get( $type )->isEmpty() ) {
+ $types[] = $type;
+ }
+ }
+ return $types;
+ }
}