33 array $externalStores,
35 string $localDomainId,
36 ?LoggerInterface $logger =
null
38 $this->protocols = array_map(
'strtolower', $externalStores );
39 $this->writeBaseUrls = $defaultStores;
40 $this->localDomainId = $localDomainId;
41 $this->logger = $logger ?:
new NullLogger();
76 public function getStore( $proto, array $params = [] ) {
77 $cacheKey = $proto .
':' . json_encode( $params );
78 if ( isset( $this->stores[$cacheKey] ) ) {
79 return $this->stores[$cacheKey];
81 $protoLowercase = strtolower( $proto );
82 if ( !$this->protocols || !in_array( $protoLowercase, $this->protocols ) ) {
86 if ( $protoLowercase ===
'db' ) {
87 $class =
'ExternalStoreDB';
89 $class =
'ExternalStore' . ucfirst( $proto );
91 if ( isset( $params[
'wiki'] ) ) {
92 $params += [
'domain' => $params[
'wiki'] ];
94 if ( !isset( $params[
'domain'] ) || $params[
'domain'] ===
false ) {
95 $params[
'domain'] = $this->localDomainId;
96 $params[
'isDomainImplicit'] =
true;
100 if ( $protoLowercase ===
'db' ) {
101 $params[
'lbFactory'] = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
102 } elseif ( $protoLowercase ===
'mwstore' ) {
103 $params[
'fbGroup'] = MediaWikiServices::getInstance()->getFileBackendGroup();
105 $params[
'logger'] = $this->logger;
107 if ( !class_exists( $class ) ) {
112 $this->stores[$cacheKey] =
new $class( $params );
113 return $this->stores[$cacheKey];