From: Legoktm Date: Wed, 11 Mar 2015 17:10:18 +0000 (+0000) Subject: Revert "Made JobQueueFederated no longer need "checkDelay" for delaying" X-Git-Tag: 1.31.0-rc.0~12135^2 X-Git-Url: https://git.cyclocoop.org/admin/?a=commitdiff_plain;h=b9fd0f311c292424fd49d7bff550f67e94a62bc4;p=lhc%2Fweb%2Fwiklou.git Revert "Made JobQueueFederated no longer need "checkDelay" for delaying" Breaks Cirrus and Wikibase This reverts commit c8f96384aad312e52969b81dd8ce6b8d80c3857a. Change-Id: I15278d52806bf30d6ea6c6b9eb8586160f65c42b --- diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php index 04929549f6..1a730d3049 100644 --- a/includes/jobqueue/JobQueue.php +++ b/includes/jobqueue/JobQueue.php @@ -44,6 +44,9 @@ abstract class JobQueue { /** @var int Maximum number of times to try a job */ protected $maxTries; + /** @var bool Allow delayed jobs */ + protected $checkDelay; + /** @var BagOStuff */ protected $dupCache; /** @var JobQueueAggregator */ @@ -70,6 +73,10 @@ abstract class JobQueue { if ( !in_array( $this->order, $this->supportedOrders() ) ) { throw new MWException( __CLASS__ . " does not support '{$this->order}' order." ); } + $this->checkDelay = !empty( $params['checkDelay'] ); + if ( $this->checkDelay && !$this->supportsDelayedJobs() ) { + throw new MWException( __CLASS__ . " does not support delayed jobs." ); + } $this->dupCache = wfGetCache( CACHE_ANYTHING ); $this->aggr = isset( $params['aggregator'] ) ? $params['aggregator'] @@ -96,6 +103,10 @@ abstract class JobQueue { * but not acknowledged as completed after this many seconds. Recycling * of jobs simple means re-inserting them into the queue. Jobs can be * attempted up to three times before being discarded. + * - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions. + * This lets delayed jobs wait in a staging area until a given timestamp is + * reached, at which point they will enter the queue. If this is not enabled + * or not supported, an exception will be thrown on delayed job insertion. * * Queue classes should throw an exception if they do not support the options given. * @@ -137,6 +148,14 @@ abstract class JobQueue { return $this->order; } + /** + * @return bool Whether delayed jobs are enabled + * @since 1.22 + */ + final public function delayedJobsEnabled() { + return $this->checkDelay; + } + /** * Get the allowed queue orders for configuration validation * @@ -307,7 +326,7 @@ abstract class JobQueue { if ( $job->getType() !== $this->type ) { throw new MWException( "Got '{$job->getType()}' job; expected a '{$this->type}' job." ); - } elseif ( $job->getReleaseTimestamp() && !$this->supportsDelayedJobs() ) { + } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) { throw new MWException( "Got delayed '{$job->getType()}' job; delays are not supported." ); } diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php index d9fe30b110..243fec9070 100644 --- a/includes/jobqueue/JobQueueRedis.php +++ b/includes/jobqueue/JobQueueRedis.php @@ -93,6 +93,7 @@ class JobQueueRedis extends JobQueue { "Non-daemonized mode is no longer supported. Please install the " . "mediawiki/services/jobrunner service and update \$wgJobTypeConf as needed." ); } + $this->checkDelay = true; // always enabled } protected function supportedOrders() {