assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); $this->instances = []; $this->options = $options; $this->readOnlyMode = $readOnlyMode; $this->statsdDataFactory = $statsdDataFactory; $this->wanCache = $wanCache; $this->globalIdGenerator = $globalIdGenerator; } /** * @since 1.37 * * @param false|string $domain Wiki domain ID. False uses the current wiki domain ID * @return JobQueueGroup */ public function makeJobQueueGroup( $domain = false ): JobQueueGroup { if ( $domain === false ) { $domain = WikiMap::getCurrentWikiDbDomain()->getId(); } // Make sure jobs are not getting pushed to bogus wikis. This can confuse // the job runner system into spawning endless RPC requests that fail (T171371). $wikiId = WikiMap::getWikiIdFromDbDomain( $domain ); if ( !WikiMap::isCurrentWikiDbDomain( $domain ) && !in_array( $wikiId, $this->options->get( MainConfigNames::LocalDatabases ) ) ) { // Do not enqueue job that cannot be run (T171371) throw new LogicException( "Domain '{$domain}' is not recognized." ); } $localJobClasses = WikiMap::isCurrentWikiDbDomain( $domain ) ? $this->options->get( MainConfigNames::JobClasses ) : null; if ( !isset( $this->instances[$domain] ) ) { $this->instances[$domain] = new JobQueueGroup( $domain, $this->readOnlyMode, $localJobClasses, $this->options->get( MainConfigNames::JobTypeConf ), $this->options->get( MainConfigNames::JobTypesExcludedFromDefaultQueue ), $this->statsdDataFactory, $this->wanCache, $this->globalIdGenerator ); } return $this->instances[$domain]; } }