* Class to handle enqueueing and running of background jobs
*
* @ingroup JobQueue
- * @since 1.20
+ * @since 1.21
*/
abstract class JobQueue {
protected $wiki; // string; wiki ID
protected $type; // string; job type
+ protected $order; // string; job priority for pop()
const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
* @param $params array
*/
protected function __construct( array $params ) {
- $this->wiki = $params['wiki'];
- $this->type = $params['type'];
+ $this->wiki = $params['wiki'];
+ $this->type = $params['type'];
+ $this->order = isset( $params['order'] ) ? $params['order'] : 'random';
}
/**
* Get a job queue object of the specified type.
* $params includes:
- * class : what job class to use (determines job type)
+ * class : What job class to use (determines job type)
* wiki : wiki ID of the wiki the jobs are for (defaults to current wiki)
* type : The name of the job types this queue handles
+ * order : Order that pop() selects jobs, either "timestamp" or "random".
+ * If "timestamp" is used, the queue will effectively be FIFO. Note that
+ * pop() will not be exactly FIFO, and even if it was, job completion would
+ * not appear to be exactly FIFO since jobs can take different times to finish.
+ * If "random" is used, pop() will pick jobs in random order. This might be
+ * useful for improving concurrency depending on the queue storage medium.
*
* @param $params array
* @return JobQueue
}
/**
- * @return bool Quickly check if the queue is empty
+ * Quickly check if the queue is empty.
+ * Queue classes should use caching if they are any slower without memcached.
+ *
+ * @return bool
*/
final public function isEmpty() {
wfProfileIn( __METHOD__ );