From: jenkins-bot Date: Wed, 3 Apr 2019 17:43:31 +0000 (+0000) Subject: Merge "jobqueue: remove entire unused JobQueueAggregator class hierarchy" X-Git-Tag: 1.34.0-rc.0~2185 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/membres/fiche.php?a=commitdiff_plain;h=f28f7a0d0f322b299dd3cdd3b7b02a364b269958;hp=846d970e6e02ebc0a284f32968e1681201706270;p=lhc%2Fweb%2Fwiklou.git Merge "jobqueue: remove entire unused JobQueueAggregator class hierarchy" --- diff --git a/autoload.php b/autoload.php index 95dd2aee5e..bb1b3b2ad3 100644 --- a/autoload.php +++ b/autoload.php @@ -705,9 +705,6 @@ $wgAutoloadLocalClasses = [ 'JavaScriptMinifier' => __DIR__ . '/includes/libs/JavaScriptMinifier.php', 'Job' => __DIR__ . '/includes/jobqueue/Job.php', 'JobQueue' => __DIR__ . '/includes/jobqueue/JobQueue.php', - 'JobQueueAggregator' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php', - 'JobQueueAggregatorNull' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorNull.php', - 'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php', 'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/exception/JobQueueConnectionError.php', 'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php', 'JobQueueEnqueueUpdate' => __DIR__ . '/includes/deferred/JobQueueEnqueueUpdate.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index f16b8cbed2..cedba704e2 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -7571,14 +7571,6 @@ $wgJobTypeConf = [ 'default' => [ 'class' => JobQueueDB::class, 'order' => 'random', 'claimTTL' => 3600 ], ]; -/** - * Which aggregator to use for tracking which queues have jobs. - * These settings should be global to all wikis. - */ -$wgJobQueueAggregator = [ - 'class' => JobQueueAggregatorNull::class -]; - /** * Whether to include the number of jobs that are queued * for the API's maxlag parameter. diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php index c9f17cf54c..8cfed3b149 100644 --- a/includes/jobqueue/JobQueue.php +++ b/includes/jobqueue/JobQueue.php @@ -44,8 +44,6 @@ abstract class JobQueue { /** @var BagOStuff */ protected $dupCache; - /** @var JobQueueAggregator */ - protected $aggr; const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions @@ -69,7 +67,6 @@ abstract class JobQueue { throw new JobQueueError( __CLASS__ . " does not support '{$this->order}' order." ); } $this->dupCache = wfGetCache( CACHE_ANYTHING ); - $this->aggr = $params['aggregator'] ?? new JobQueueAggregatorNull( [] ); $this->readOnlyReason = $params['readOnlyReason'] ?? false; } @@ -338,7 +335,6 @@ abstract class JobQueue { } $this->doBatchPush( $jobs, $flags ); - $this->aggr->notifyQueueNonEmpty( $this->domain, $this->type ); foreach ( $jobs as $job ) { if ( $job->isRootJob() ) { @@ -376,10 +372,6 @@ abstract class JobQueue { $job = $this->doPop(); - if ( !$job ) { - $this->aggr->notifyQueueEmpty( $this->domain, $this->type ); - } - // Flag this job as an old duplicate based on its "root" job... try { if ( $job && $this->isRootJobOldDuplicate( $job ) ) { diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php index 74a6559ee5..86b0e1abbd 100644 --- a/includes/jobqueue/JobQueueDB.php +++ b/includes/jobqueue/JobQueueDB.php @@ -724,7 +724,6 @@ class JobQueueDB extends JobQueue { $affected = $dbw->affectedRows(); $count += $affected; JobQueue::incrStats( 'recycles', $this->type, $affected ); - $this->aggr->notifyQueueNonEmpty( $this->domain, $this->type ); } } diff --git a/includes/jobqueue/JobQueueGroup.php b/includes/jobqueue/JobQueueGroup.php index 7ae9713115..b9c4157574 100644 --- a/includes/jobqueue/JobQueueGroup.php +++ b/includes/jobqueue/JobQueueGroup.php @@ -114,7 +114,6 @@ class JobQueueGroup { } else { $conf = $conf + $wgJobTypeConf['default']; } - $conf['aggregator'] = JobQueueAggregator::singleton(); if ( !isset( $conf['readOnlyReason'] ) ) { $conf['readOnlyReason'] = $this->readOnlyReason; } diff --git a/includes/jobqueue/aggregator/JobQueueAggregator.php b/includes/jobqueue/aggregator/JobQueueAggregator.php deleted file mode 100644 index b44fc456ff..0000000000 --- a/includes/jobqueue/aggregator/JobQueueAggregator.php +++ /dev/null @@ -1,159 +0,0 @@ -doNotifyQueueEmpty( $wiki, $type ); - - return $ok; - } - - /** - * @see JobQueueAggregator::notifyQueueEmpty() - * @param string $wiki - * @param string $type - * @return bool - */ - abstract protected function doNotifyQueueEmpty( $wiki, $type ); - - /** - * Mark a queue as being non-empty - * - * @param string $wiki - * @param string $type - * @return bool Success - */ - final public function notifyQueueNonEmpty( $wiki, $type ) { - $ok = $this->doNotifyQueueNonEmpty( $wiki, $type ); - - return $ok; - } - - /** - * @see JobQueueAggregator::notifyQueueNonEmpty() - * @param string $wiki - * @param string $type - * @return bool - */ - abstract protected function doNotifyQueueNonEmpty( $wiki, $type ); - - /** - * Get the list of all of the queues with jobs - * - * @return array (job type => (list of wiki IDs)) - */ - final public function getAllReadyWikiQueues() { - $res = $this->doGetAllReadyWikiQueues(); - - return $res; - } - - /** - * @see JobQueueAggregator::getAllReadyWikiQueues() - */ - abstract protected function doGetAllReadyWikiQueues(); - - /** - * Purge all of the aggregator information - * - * @return bool Success - */ - final public function purge() { - $res = $this->doPurge(); - - return $res; - } - - /** - * @see JobQueueAggregator::purge() - */ - abstract protected function doPurge(); - - /** - * Get all databases that have a pending job. - * This poll all the queues and is this expensive. - * - * @return array (job type => (list of wiki IDs)) - */ - protected function findPendingWikiQueues() { - global $wgLocalDatabases; - - $pendingDBs = []; // (job type => (db list)) - foreach ( $wgLocalDatabases as $wikiId ) { - foreach ( JobQueueGroup::singleton( $wikiId )->getQueuesWithJobs() as $type ) { - $pendingDBs[$type][] = $wikiId; - } - } - - return $pendingDBs; - } -} diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorNull.php b/includes/jobqueue/aggregator/JobQueueAggregatorNull.php deleted file mode 100644 index c44d70e07a..0000000000 --- a/includes/jobqueue/aggregator/JobQueueAggregatorNull.php +++ /dev/null @@ -1,42 +0,0 @@ -servers = $params['redisServers'] ?? [ $params['redisServer'] ]; // b/c - $params['redisConfig']['serializer'] = 'none'; - $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] ); - $this->logger = \MediaWiki\Logger\LoggerFactory::getInstance( 'redis' ); - } - - protected function doNotifyQueueEmpty( $wiki, $type ) { - return true; // managed by the service - } - - protected function doNotifyQueueNonEmpty( $wiki, $type ) { - return true; // managed by the service - } - - protected function doGetAllReadyWikiQueues() { - $conn = $this->getConnection(); - if ( !$conn ) { - return []; - } - try { - $map = $conn->hGetAll( $this->getReadyQueueKey() ); - - if ( is_array( $map ) && isset( $map['_epoch'] ) ) { - unset( $map['_epoch'] ); // ignore - $pendingDBs = []; // (type => list of wikis) - foreach ( $map as $key => $time ) { - list( $type, $wiki ) = $this->decodeQueueName( $key ); - $pendingDBs[$type][] = $wiki; - } - } else { - throw new UnexpectedValueException( - "No queue listing found; make sure redisJobChronService is running." - ); - } - - return $pendingDBs; - } catch ( RedisException $e ) { - $this->redisPool->handleError( $conn, $e ); - - return []; - } - } - - protected function doPurge() { - return true; // fully and only refreshed by the service - } - - /** - * Get a connection to the server that handles all sub-queues for this queue - * - * @return RedisConnRef|bool Returns false on failure - * @throws MWException - */ - protected function getConnection() { - $conn = false; - foreach ( $this->servers as $server ) { - $conn = $this->redisPool->getConnection( $server, $this->logger ); - if ( $conn ) { - break; - } - } - - return $conn; - } - - /** - * @return string - */ - private function getReadyQueueKey() { - return "jobqueue:aggregator:h-ready-queues:v2"; // global - } - - /** - * @param string $name - * @return string[] - */ - private function decodeQueueName( $name ) { - list( $type, $wiki ) = explode( '/', $name, 2 ); - - return [ rawurldecode( $type ), rawurldecode( $wiki ) ]; - } -}