assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); $this->loadBalancerFactory = $loadBalancerFactory; $this->sharedDB = $options->get( MainConfigNames::SharedDB ); $this->sharedTables = $options->get( MainConfigNames::SharedTables ); $this->userNameUtils = $userNameUtils; $this->logger = $logger; } /** * @param string|false $wikiId * @return ActorNormalization */ public function getActorNormalization( $wikiId = WikiAwareEntity::LOCAL ): ActorNormalization { return $this->getActorStore( $wikiId ); } /** * @param string|false $wikiId * @return ActorStore */ public function getActorStore( $wikiId = WikiAwareEntity::LOCAL ): ActorStore { // During the transition from User, we still have old User objects // representing users from a different wiki, so we still have IDatabase::getDomainId // passed as $wikiId, so we need to remap it back to LOCAL. if ( is_string( $wikiId ) && $this->loadBalancerFactory->getLocalDomainID() === $wikiId ) { $wikiId = WikiAwareEntity::LOCAL; } $storeCacheKey = $this->getStoreCacheKey( $wikiId ); if ( !isset( $this->storeCache[$storeCacheKey] ) ) { $this->storeCache[$storeCacheKey] = new ActorStore( $this->getLoadBalancerForTable( 'actor', $wikiId ), $this->userNameUtils, $this->logger, $wikiId ); } return $this->storeCache[$storeCacheKey]; } /** * @param string|false $wikiId * @return UserIdentityLookup */ public function getUserIdentityLookup( $wikiId = WikiAwareEntity::LOCAL ): UserIdentityLookup { return $this->getActorStore( $wikiId ); } /** * @param string|false $wikiId * @return string */ private function getStoreCacheKey( $wikiId ): string { return $wikiId === WikiAwareEntity::LOCAL ? 'LOCAL' : $wikiId; } /** * Returns a load balancer for the database that has the $table * for the given $wikiId. * * @param string $table * @param string|false $wikiId * @return ILoadBalancer */ private function getLoadBalancerForTable( string $table, $wikiId = WikiAwareEntity::LOCAL ): ILoadBalancer { if ( $this->sharedDB && in_array( $table, $this->sharedTables ) ) { // The main LB is already properly set up for shared databases early in Setup.php return $this->loadBalancerFactory->getMainLB(); } return $this->loadBalancerFactory->getMainLB( $wikiId ); } }