MediaWiki REL1_34
LockManagerGroup.php
Go to the documentation of this file.
1<?php
26
35 protected $domain;
36
38 protected $lbFactory;
39
41 protected $managers = [];
42
50 public function __construct( $domain, array $lockManagerConfigs, LBFactory $lbFactory ) {
51 $this->domain = $domain;
52 $this->lbFactory = $lbFactory;
53
54 foreach ( $lockManagerConfigs as $config ) {
55 $config['domain'] = $this->domain;
56 if ( !isset( $config['name'] ) ) {
57 throw new Exception( "Cannot register a lock manager with no name." );
58 }
59 $name = $config['name'];
60 if ( !isset( $config['class'] ) ) {
61 throw new Exception( "Cannot register lock manager `{$name}` with no class." );
62 }
63 $class = $config['class'];
64 unset( $config['class'] ); // lock manager won't need this
65 $this->managers[$name] = [
66 'class' => $class,
67 'config' => $config,
68 'instance' => null
69 ];
70 }
71 }
72
79 public static function singleton( $domain = false ) {
80 return MediaWikiServices::getInstance()->getLockManagerGroupFactory()
81 ->getLockManagerGroup( $domain );
82 }
83
89 public static function destroySingletons() {
90 MediaWikiServices::getInstance()->resetServiceForTesting( 'LockManagerGroupFactory' );
91 }
92
100 public function get( $name ) {
101 if ( !isset( $this->managers[$name] ) ) {
102 throw new Exception( "No lock manager defined with the name `$name`." );
103 }
104 // Lazy-load the actual lock manager instance
105 if ( !isset( $this->managers[$name]['instance'] ) ) {
106 $class = $this->managers[$name]['class'];
107 '@phan-var string $class';
108 $config = $this->managers[$name]['config'];
109 $config['logger'] = LoggerFactory::getInstance( 'LockManager' );
110
111 $this->managers[$name]['instance'] = new $class( $config );
112 }
113
114 return $this->managers[$name]['instance'];
115 }
116
124 public function config( $name ) {
125 if ( !isset( $this->managers[$name] ) ) {
126 throw new Exception( "No lock manager defined with the name `$name`." );
127 }
128 $class = $this->managers[$name]['class'];
129
130 return [ 'class' => $class ] + $this->managers[$name]['config'];
131 }
132
141 public function getDefault() {
142 return isset( $this->managers['default'] )
143 ? $this->get( 'default' )
144 : new NullLockManager( [] );
145 }
146
157 public function getAny() {
158 return isset( $this->managers['default'] )
159 ? $this->get( 'default' )
160 : $this->get( 'fsLockManager' );
161 }
162}
Class to handle file lock manager registration.
getDefault()
Get the default lock manager configured for the site.
string $domain
domain (usually wiki ID)
config( $name)
Get the config array for a lock manager object with a given name.
getAny()
Get the default lock manager configured for the site or at least some other effective configured lock...
static singleton( $domain=false)
static destroySingletons()
Destroy the singleton instances.
array $managers
Array of (name => ('class' => ..., 'config' => ..., 'instance' => ...))
__construct( $domain, array $lockManagerConfigs, LBFactory $lbFactory)
Do not call this directly.
PSR-3 logger instance factory.
MediaWikiServices is the service locator for the application scope of MediaWiki.
Simple version of LockManager that only does lock reference counting.
An interface for generating database load balancers.
Definition LBFactory.php:40