Merge "Make DBAccessBase use DBConnRef, rename $wiki, and hide getLoadBalancer()"
[lhc/web/wiklou.git] / includes / filebackend / lockmanager / LockManagerGroupFactory.php
1 <?php
2
3 namespace MediaWiki\FileBackend\LockManager;
4
5 use LockManagerGroup;
6 use Wikimedia\Rdbms\LBFactory;
7
8 /**
9 * Service to construct LockManagerGroups.
10 */
11 class LockManagerGroupFactory {
12 /** @var string */
13 private $defaultDomain;
14
15 /** @var array */
16 private $lockManagerConfigs;
17
18 /** @var LBFactory */
19 private $lbFactory;
20
21 /** @var LockManagerGroup[] (domain => LockManagerGroup) */
22 private $instances = [];
23
24 /**
25 * Do not call directly, use MediaWikiServices.
26 *
27 * @param string $defaultDomain
28 * @param array $lockManagerConfigs In format of $wgLockManagers
29 * @param LBFactory $lbFactory
30 */
31 public function __construct( $defaultDomain, array $lockManagerConfigs, LBFactory $lbFactory ) {
32 $this->defaultDomain = $defaultDomain;
33 $this->lockManagerConfigs = $lockManagerConfigs;
34 $this->lbFactory = $lbFactory;
35 }
36
37 /**
38 * @param string|null|false $domain Domain (usually wiki ID). false for the default (normally
39 * the current wiki's domain).
40 * @return LockManagerGroup
41 */
42 public function getLockManagerGroup( $domain = false ) : LockManagerGroup {
43 if ( $domain === false || $domain === null ) {
44 $domain = $this->defaultDomain;
45 }
46
47 if ( !isset( $this->instances[$domain] ) ) {
48 $this->instances[$domain] =
49 new LockManagerGroup( $domain, $this->lockManagerConfigs, $this->lbFactory );
50 }
51
52 return $this->instances[$domain];
53 }
54 }