/**
* Map of job types to configuration arrays.
+ * This determines which queue class and storage system is used for each job type.
+ * Job types that do not have explicit configuration will use the 'default' config.
* These settings should be global to all wikis.
*/
$wgJobTypeConf = array(
return $types;
}
+ /**
+ * Check if jobs should not be popped of a queue right now.
+ * This is only used for performance, such as to avoid spamming
+ * the queue with many sub-jobs before they actually get run.
+ *
+ * @param $type string
+ * @return bool
+ */
+ public function isQueueDeprioritized( $type ) {
+ if ( $type === 'refreshLinks2' ) {
+ // Don't keep converting refreshLinks2 => refreshLinks jobs if the
+ // later jobs have not been done yet. This helps throttle queue spam.
+ return !$this->get( 'refreshLinks' )->isEmpty();
+ }
+ return false;
+ }
+
/**
* Execute any due periodic queue maintenance tasks for all queues.
*
return; // no jobs for this type
}
- list( $type, $db ) = $candidates[ mt_rand( 0, count( $candidates ) - 1 ) ];
- if ( !$this->checkJob( $type, $db ) ) { // queue is actually empty?
- $pendingDBs[$type] = array_diff( $pendingDBs[$type], $db );
- JobQueueAggregator::singleton()->notifyQueueEmpty( $db, $type );
+ list( $type, $db ) = $candidates[mt_rand( 0, count( $candidates ) - 1 )];
+ if ( JobQueueGroup::singleton( $db )->isQueueDeprioritized( $type ) ) {
+ $pendingDBs[$type] = array_diff( $pendingDBs[$type], array( $db ) );
$again = true;
}
} while ( $again );
}
}
- /**
- * Check if the specified database has a job of the specified type in it.
- * The type may be false to indicate "all".
- * @param $type string
- * @param $dbName string
- * @return bool
- */
- private function checkJob( $type, $dbName ) {
- return !JobQueueGroup::singleton( $dbName )->get( $type )->isEmpty();
- }
-
/**
* Do all ready periodic jobs for all databases every 5 minutes (and .1% of the time)
* @return integer