X-Git-Url: https://git.cyclocoop.org/%20%27.%28%24debut%20%20%20%24par_page%29.%27?a=blobdiff_plain;f=includes%2Fjobqueue%2FJobQueueRedis.php;h=2140043b8f95a1aef86b79fe8bf43ce9bce890a1;hb=31e768e643bd513daa3e8b9720c2f3944ac7092c;hp=4d07a09a71c7f211a03f1993549ac098bc9fcb0b;hpb=749f531db34dff14ef3b247312754f348da75d91;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php index 4d07a09a71..2140043b8f 100644 --- a/includes/jobqueue/JobQueueRedis.php +++ b/includes/jobqueue/JobQueueRedis.php @@ -225,9 +225,9 @@ class JobQueueRedis extends JobQueue { $failed += count( $itemBatch ); } } - JobQueue::incrStats( 'inserts', $this->type, count( $items ) ); - JobQueue::incrStats( 'inserts_actual', $this->type, $pushed ); - JobQueue::incrStats( 'dupe_inserts', $this->type, + $this->incrStats( 'inserts', $this->type, count( $items ) ); + $this->incrStats( 'inserts_actual', $this->type, $pushed ); + $this->incrStats( 'dupe_inserts', $this->type, count( $items ) - $failed - $pushed ); if ( $failed > 0 ) { $err = "Could not insert {$failed} {$this->type} job(s)."; @@ -307,7 +307,7 @@ LUA; /** * @see JobQueue::doPop() - * @return Job|bool + * @return RunnableJob|bool * @throws JobQueueError */ protected function doPop() { @@ -321,7 +321,7 @@ LUA; break; // no jobs; nothing to do } - JobQueue::incrStats( 'pops', $this->type ); + $this->incrStats( 'pops', $this->type ); $item = $this->unserialize( $blob ); if ( $item === false ) { wfDebugLog( 'JobQueueRedis', "Could not unserialize {$this->type} job." ); @@ -379,12 +379,12 @@ LUA; /** * @see JobQueue::doAck() - * @param Job $job - * @return Job|bool + * @param RunnableJob $job + * @return RunnableJob|bool * @throws UnexpectedValueException * @throws JobQueueError */ - protected function doAck( Job $job ) { + protected function doAck( RunnableJob $job ) { $uuid = $job->getMetadata( 'uuid' ); if ( $uuid === null ) { throw new UnexpectedValueException( "Job of type '{$job->getType()}' has no UUID." ); @@ -424,7 +424,7 @@ LUA; return false; } - JobQueue::incrStats( 'acks', $this->type ); + $this->incrStats( 'acks', $this->type ); } catch ( RedisException $e ) { $this->throwRedisException( $conn, $e ); } @@ -463,11 +463,11 @@ LUA; /** * @see JobQueue::doIsRootJobOldDuplicate() - * @param Job $job + * @param IJobSpecification $job * @return bool * @throws JobQueueError */ - protected function doIsRootJobOldDuplicate( Job $job ) { + protected function doIsRootJobOldDuplicate( IJobSpecification $job ) { if ( !$job->hasRootJobParams() ) { return false; // job has no de-deplication info } @@ -627,7 +627,7 @@ LUA; * * @param string $uid * @param RedisConnRef $conn - * @return Job|bool Returns false if the job does not exist + * @return RunnableJob|bool Returns false if the job does not exist * @throws JobQueueError * @throws UnexpectedValueException */ @@ -639,10 +639,12 @@ LUA; } $item = $this->unserialize( $data ); if ( !is_array( $item ) ) { // this shouldn't happen - throw new UnexpectedValueException( "Could not find job with ID '$uid'." ); + throw new UnexpectedValueException( "Could not unserialize job with ID '$uid'." ); } - $title = Title::makeTitle( $item['namespace'], $item['title'] ); - $job = Job::factory( $item['type'], $title, $item['params'] ); + + $params = $item['params']; + $params += [ 'namespace' => $item['namespace'], 'title' => $item['title'] ]; + $job = $this->factoryJob( $item['type'], $params ); $job->setMetadata( 'uuid', $item['uuid'] ); $job->setMetadata( 'timestamp', $item['timestamp'] ); // Add in attempt count for debugging at showJobs.php @@ -684,8 +686,8 @@ LUA; return [ // Fields that describe the nature of the job 'type' => $job->getType(), - 'namespace' => $job->getTitle()->getNamespace(), - 'title' => $job->getTitle()->getDBkey(), + 'namespace' => $job->getParams()['namespace'] ?? NS_SPECIAL, + 'title' => $job->getParams()['title'] ?? '', 'params' => $job->getParams(), // Some jobs cannot run until a "release timestamp" 'rtimestamp' => $job->getReleaseTimestamp() ?: 0, @@ -700,11 +702,13 @@ LUA; /** * @param array $fields - * @return Job|bool + * @return RunnableJob|bool */ protected function getJobFromFields( array $fields ) { - $title = Title::makeTitle( $fields['namespace'], $fields['title'] ); - $job = Job::factory( $fields['type'], $title, $fields['params'] ); + $params = $fields['params']; + $params += [ 'namespace' => $fields['namespace'], 'title' => $fields['title'] ]; + + $job = $this->factoryJob( $fields['type'], $params ); $job->setMetadata( 'uuid', $fields['uuid'] ); $job->setMetadata( 'timestamp', $fields['timestamp'] );