MediaWiki REL1_31
Wikimedia\Rdbms\LBFactoryMulti Class Reference

A multi-database, multi-master factory for Wikimedia and similar installations. More...

Inheritance diagram for Wikimedia\Rdbms\LBFactoryMulti:
Collaboration diagram for Wikimedia\Rdbms\LBFactoryMulti:

Public Member Functions

 __construct (array $conf)
 
 forEachLB ( $callback, array $params=[])
 Execute a function for each tracked load balancer The callback is called with the load balancer as the first parameter, and $params passed as the subsequent parameters.
 
 getAllExternalLBs ()
 Get cached (tracked) load balancers for all external database clusters.
 
 getAllMainLBs ()
 Get cached (tracked) load balancers for all main database clusters.
 
 getExternalLB ( $cluster)
 
 getMainLB ( $domain=false)
 
 newExternalLB ( $cluster)
 
 newMainLB ( $domain=false)
 
- Public Member Functions inherited from Wikimedia\Rdbms\LBFactory
 __destruct ()
 
 appendShutdownCPIndexAsQuery ( $url, $index)
 Append ?cpPosIndex parameter to a URL for ChronologyProtector purposes if needed.
 
 beginMasterChanges ( $fname=__METHOD__)
 Flush any master transaction snapshots and set DBO_TRX (if DBO_DEFAULT is set)
 
 closeAll ()
 Close all open database connections on all open load balancers.
 
 commitAll ( $fname=__METHOD__, array $options=[])
 Commit open transactions on all connections.
 
 commitAndWaitForReplication ( $fname, $ticket, array $opts=[])
 Convenience method for safely running commitMasterChanges()/waitForReplication()
 
 commitMasterChanges ( $fname=__METHOD__, array $options=[])
 Commit changes on all master connections.
 
 destroy ()
 Disables all load balancers.
 
 disableChronologyProtection ()
 Disable the ChronologyProtector for all load balancers.
 
 flushReplicaSnapshots ( $fname=__METHOD__)
 Commit all replica DB transactions so as to flush any REPEATABLE-READ or SSI snapshot.
 
 getChronologyProtectorTouched ( $dbName)
 
 getEmptyTransactionTicket ( $fname)
 Get a token asserting that no transaction writes are active.
 
 hasMasterChanges ()
 Determine if any master connection has pending changes.
 
 hasOrMadeRecentMasterChanges ( $age=null)
 Determine if any master connection has pending/written changes from this request.
 
 hasTransactionRound ()
 Check if a transaction round is active.
 
 laggedReplicaUsed ()
 Detemine if any lagged replica DB connection was used.
 
 rollbackMasterChanges ( $fname=__METHOD__)
 Rollback changes on all master connections.
 
 setAgentName ( $agent)
 
 setDomainPrefix ( $prefix)
 Set a new table prefix for the existing local domain ID for testing.
 
 setIndexAliases (array $aliases)
 Convert certain index names to alternative names before querying the DB.
 
 setRequestInfo (array $info)
 
 setTableAliases (array $aliases)
 Make certain table names use their own database, schema, and table prefix when passed into SQL queries pre-escaped and without a qualified database name.
 
 setWaitForReplicationListener ( $name, callable $callback=null)
 Add a callback to be run in every call to waitForReplication() before waiting.
 
 shutdown ( $mode=self::SHUTDOWN_CHRONPROT_SYNC, callable $workCallback=null, &$cpIndex=null)
 Prepare all tracked load balancers for shutdown.
 
 waitForReplication (array $opts=[])
 Waits for the replica DBs to catch up to the current master position.
 

Private Member Functions

 getDBNameAndPrefix ( $domain=false)
 
 getSectionForDomain ( $domain=false)
 
 makeServerArray ( $template, $loads, $groupLoads)
 Make a server array as expected by LoadBalancer::__construct, using a template and load array.
 
 newLoadBalancer ( $template, $loads, $groupLoads, $readOnlyReason)
 Make a new load balancer object based on template and load array.
 
 reindexGroupLoads ( $groupLoads)
 Take a group load array indexed by group then server, and reindex it by server then group.
 

Private Attributes

array $conf
 Load balancer factory configuration.
 
array $externalLoads = []
 A map of external storage cluster name to server load map.
 
array $externalTemplateOverrides
 A set of server info keys overriding serverTemplate for external storage.
 
LoadBalancer[] $extLBs = []
 
array $groupLoadsByDB = []
 A 3-d map giving server load ratios by DB name.
 
array $groupLoadsBySection = []
 A 3-d map giving server load ratios for each section and group.
 
array $hostsByName = []
 A map of hostname to IP address.
 
string $lastDomain
 
string $lastSection
 
string $loadMonitorClass = 'LoadMonitor'
 
LoadBalancer[] $mainLBs = []
 
array $masterTemplateOverrides
 An override array for all master servers.
 
int $maxLag = self::MAX_LAG_DEFAULT
 
array bool $readOnlyBySection = []
 A map of section name to read-only message.
 
array $sectionLoads
 A 2-d map.
 
array $sectionsByDB
 A map of database names to section names.
 
array[] $serverTemplate
 Server info associative array.
 
array $templateOverridesByCluster
 A 2-d map overriding the server info by external storage cluster.
 
array $templateOverridesBySection
 A 2-d map overriding the server info by section.
 
array $templateOverridesByServer
 A 2-d map overriding serverTemplate and externalTemplateOverrides on a server-by-server basis.
 

Additional Inherited Members

- Public Attributes inherited from Wikimedia\Rdbms\ILBFactory
const SHUTDOWN_CHRONPROT_ASYNC = 1
 
const SHUTDOWN_CHRONPROT_SYNC = 2
 
const SHUTDOWN_NO_CHRONPROT = 0
 
- Protected Member Functions inherited from Wikimedia\Rdbms\LBFactory
 baseLoadBalancerParams ()
 Base parameters to LoadBalancer::__construct()
 
 forEachLBCallMethod ( $methodName, array $args=[])
 Call a method of each tracked load balancer.
 
 getChronologyProtector ()
 
 getScopedPHPBehaviorForCommit ()
 Make PHP ignore user aborts/disconnects until the returned value leaves scope.
 
 initLoadBalancer (ILoadBalancer $lb)
 
 shutdownChronologyProtector (ChronologyProtector $cp, $workCallback, $mode, &$cpIndex=null)
 Get and record all of the staged DB positions into persistent memory storage.
 
- Protected Attributes inherited from Wikimedia\Rdbms\LBFactory
string $agent
 Agent name for query profiling.
 
ChronologyProtector $chronProt
 
bool $cliMode
 Whether this PHP instance is for a CLI script.
 
LoggerInterface $connLogger
 
callable $deprecationLogger
 Deprecation logger.
 
callable $errorLogger
 Error logger.
 
string $hostname
 Local hostname of the app server.
 
string[] $indexAliases = []
 Map of (index alias => index)
 
DatabaseDomain $localDomain
 Local domain.
 
BagOStuff $memStash
 
LoggerInterface $perfLogger
 
object string $profiler
 Class name or object With profileIn/profileOut methods.
 
LoggerInterface $queryLogger
 
string bool $readOnlyReason = false
 Reason all LBs are read-only or false if not.
 
callable[] $replicationWaitCallbacks = []
 
LoggerInterface $replLogger
 
array $requestInfo
 Web request information about the client.
 
BagOStuff $srvCache
 
 $tableAliases = []
 
mixed $ticket
 
TransactionProfiler $trxProfiler
 
string bool $trxRoundId = false
 String if a requested DBO_TRX transaction round is active.
 
WANObjectCache $wanCache
 

Detailed Description

A multi-database, multi-master factory for Wikimedia and similar installations.

Ignores the old configuration globals.

Definition at line 34 of file LBFactoryMulti.php.

Constructor & Destructor Documentation

◆ __construct()

Wikimedia\Rdbms\LBFactoryMulti::__construct ( array $conf)
See also
LBFactory::__construct()

Template override precedence (highest => lowest):

  • templateOverridesByServer
  • masterTemplateOverrides
  • templateOverridesBySection/templateOverridesByCluster
  • externalTemplateOverrides
  • serverTemplate Overrides only work on top level keys (so nested values will not be merged).

Server configuration maps should be of the format Database::factory() requires. Additionally, a 'max lag' key should also be set on server maps, indicating how stale the data can be before the load balancer tries to avoid using it. The map can have 'is static' set to disable blocking replication sync checks (intended for archive servers with unchanging data).

Parameters
array$confParameters of LBFactory::__construct() as well as:
  • sectionsByDB Map of database names to section names.
  • sectionLoads 2-d map. For each section, gives a map of server names to load ratios. For example: [ 'section1' => [ 'db1' => 100, 'db2' => 100 ] ]
  • serverTemplate Server configuration map intended for Database::factory(). Note that "host", "hostName" and "load" entries will be overridden by "sectionLoads" and "hostsByName".
  • groupLoadsBySection 3-d map giving server load ratios for each section/group. For example: [ 'section1' => [ 'group1' => [ 'db1' => 100, 'db2' => 100 ] ] ]
  • groupLoadsByDB 3-d map giving server load ratios by DB name.
  • hostsByName Map of hostname to IP address.
  • externalLoads Map of external storage cluster name to server load map.
  • externalTemplateOverrides Set of server configuration maps overriding "serverTemplate" for external storage.
  • templateOverridesByServer 2-d map overriding "serverTemplate" and "externalTemplateOverrides" on a server-by-server basis. Applies to both core and external storage.
  • templateOverridesBySection 2-d map overriding the server configuration maps by section.
  • templateOverridesByCluster 2-d map overriding the server configuration maps by external storage cluster.
  • masterTemplateOverrides Server configuration map overrides for all master servers.
  • loadMonitorClass Name of the LoadMonitor class to always use.
  • maxLag Avoid replica DBs with more lag than this many seconds.
  • readOnlyBySection A map of section name to read-only message. Missing or false for read/write.

Reimplemented from Wikimedia\Rdbms\LBFactory.

Definition at line 173 of file LBFactoryMulti.php.

References Wikimedia\Rdbms\LBFactoryMulti\$conf.

Member Function Documentation

◆ forEachLB()

Wikimedia\Rdbms\LBFactoryMulti::forEachLB ( $callback,
array $params = [] )

Execute a function for each tracked load balancer The callback is called with the load balancer as the first parameter, and $params passed as the subsequent parameters.

Parameters
callable$callback
array$params

Implements Wikimedia\Rdbms\ILBFactory.

Definition at line 423 of file LBFactoryMulti.php.

References $params.

◆ getAllExternalLBs()

Wikimedia\Rdbms\LBFactoryMulti::getAllExternalLBs ( )

Get cached (tracked) load balancers for all external database clusters.

Returns
LoadBalancer[] Map of (cluster name => LoadBalancer)
Since
1.29

Implements Wikimedia\Rdbms\ILBFactory.

Definition at line 306 of file LBFactoryMulti.php.

References Wikimedia\Rdbms\LBFactoryMulti\getExternalLB().

◆ getAllMainLBs()

Wikimedia\Rdbms\LBFactoryMulti::getAllMainLBs ( )

Get cached (tracked) load balancers for all main database clusters.

Returns
LoadBalancer[] Map of (cluster name => LoadBalancer)
Since
1.29

Implements Wikimedia\Rdbms\ILBFactory.

Definition at line 295 of file LBFactoryMulti.php.

References $section, and Wikimedia\Rdbms\LBFactoryMulti\getMainLB().

◆ getDBNameAndPrefix()

Wikimedia\Rdbms\LBFactoryMulti::getDBNameAndPrefix ( $domain = false)
private
Parameters
DatabaseDomain | string | bool$domainDomain ID, or false for the current domain
Returns
array [database name, table prefix]

Definition at line 408 of file LBFactoryMulti.php.

References false, and Wikimedia\Rdbms\DatabaseDomain\newFromId().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().

◆ getExternalLB()

Wikimedia\Rdbms\LBFactoryMulti::getExternalLB ( $cluster)
See also
ILBFactory::getExternalLB()
Parameters
string$cluster
Returns
LoadBalancer

Reimplemented from Wikimedia\Rdbms\LBFactory.

Definition at line 287 of file LBFactoryMulti.php.

References Wikimedia\Rdbms\LBFactoryMulti\newExternalLB().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\getAllExternalLBs().

◆ getMainLB()

Wikimedia\Rdbms\LBFactoryMulti::getMainLB ( $domain = false)
Parameters
DatabaseDomain | string | bool$domainDomain ID, or false for the current domain
Returns
LoadBalancer

Reimplemented from Wikimedia\Rdbms\LBFactory.

Definition at line 258 of file LBFactoryMulti.php.

References $section, Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\getAllMainLBs().

◆ getSectionForDomain()

Wikimedia\Rdbms\LBFactoryMulti::getSectionForDomain ( $domain = false)
private

◆ makeServerArray()

Wikimedia\Rdbms\LBFactoryMulti::makeServerArray ( $template,
$loads,
$groupLoads )
private

Make a server array as expected by LoadBalancer::__construct, using a template and load array.

Parameters
array$template
array$loads
array$groupLoads
Returns
array

Definition at line 347 of file LBFactoryMulti.php.

References $template, and Wikimedia\Rdbms\LBFactoryMulti\reindexGroupLoads().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\newLoadBalancer().

◆ newExternalLB()

Wikimedia\Rdbms\LBFactoryMulti::newExternalLB ( $cluster)
See also
ILBFactory::newExternalLB()
Parameters
string$cluster
Returns
LoadBalancer

Reimplemented from Wikimedia\Rdbms\LBFactory.

Definition at line 267 of file LBFactoryMulti.php.

References Wikimedia\Rdbms\LBFactoryMulti\$serverTemplate, $template, and Wikimedia\Rdbms\LBFactoryMulti\newLoadBalancer().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\getExternalLB().

◆ newLoadBalancer()

Wikimedia\Rdbms\LBFactoryMulti::newLoadBalancer ( $template,
$loads,
$groupLoads,
$readOnlyReason )
private

Make a new load balancer object based on template and load array.

Parameters
array$template
array$loads
array$groupLoads
string | bool$readOnlyReason
Returns
LoadBalancer

Definition at line 324 of file LBFactoryMulti.php.

References Wikimedia\Rdbms\LBFactory\$readOnlyReason, $template, Wikimedia\Rdbms\LBFactory\baseLoadBalancerParams(), Wikimedia\Rdbms\LBFactory\initLoadBalancer(), and Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().

Referenced by Wikimedia\Rdbms\LBFactoryMulti\newExternalLB(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().

◆ newMainLB()

◆ reindexGroupLoads()

Wikimedia\Rdbms\LBFactoryMulti::reindexGroupLoads ( $groupLoads)
private

Take a group load array indexed by group then server, and reindex it by server then group.

Parameters
array$groupLoads
Returns
array

Definition at line 393 of file LBFactoryMulti.php.

Referenced by Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().

Member Data Documentation

◆ $conf

array Wikimedia\Rdbms\LBFactoryMulti::$conf
private

Load balancer factory configuration.

Definition at line 93 of file LBFactoryMulti.php.

Referenced by Wikimedia\Rdbms\LBFactoryMulti\__construct().

◆ $externalLoads

array Wikimedia\Rdbms\LBFactoryMulti::$externalLoads = []
private

A map of external storage cluster name to server load map.

Definition at line 62 of file LBFactoryMulti.php.

◆ $externalTemplateOverrides

array Wikimedia\Rdbms\LBFactoryMulti::$externalTemplateOverrides
private

A set of server info keys overriding serverTemplate for external storage.

Definition at line 68 of file LBFactoryMulti.php.

◆ $extLBs

LoadBalancer [] Wikimedia\Rdbms\LBFactoryMulti::$extLBs = []
private

Definition at line 99 of file LBFactoryMulti.php.

◆ $groupLoadsByDB

array Wikimedia\Rdbms\LBFactoryMulti::$groupLoadsByDB = []
private

A 3-d map giving server load ratios by DB name.

Definition at line 56 of file LBFactoryMulti.php.

◆ $groupLoadsBySection

array Wikimedia\Rdbms\LBFactoryMulti::$groupLoadsBySection = []
private

A 3-d map giving server load ratios for each section and group.

Definition at line 53 of file LBFactoryMulti.php.

◆ $hostsByName

array Wikimedia\Rdbms\LBFactoryMulti::$hostsByName = []
private

A map of hostname to IP address.

Definition at line 59 of file LBFactoryMulti.php.

◆ $lastDomain

string Wikimedia\Rdbms\LBFactoryMulti::$lastDomain
private

Definition at line 105 of file LBFactoryMulti.php.

◆ $lastSection

string Wikimedia\Rdbms\LBFactoryMulti::$lastSection
private

◆ $loadMonitorClass

string Wikimedia\Rdbms\LBFactoryMulti::$loadMonitorClass = 'LoadMonitor'
private

Definition at line 102 of file LBFactoryMulti.php.

◆ $mainLBs

LoadBalancer [] Wikimedia\Rdbms\LBFactoryMulti::$mainLBs = []
private

Definition at line 96 of file LBFactoryMulti.php.

◆ $masterTemplateOverrides

array Wikimedia\Rdbms\LBFactoryMulti::$masterTemplateOverrides
private

An override array for all master servers.

Definition at line 84 of file LBFactoryMulti.php.

◆ $maxLag

int Wikimedia\Rdbms\LBFactoryMulti::$maxLag = self::MAX_LAG_DEFAULT
private

Definition at line 111 of file LBFactoryMulti.php.

◆ $readOnlyBySection

array bool Wikimedia\Rdbms\LBFactoryMulti::$readOnlyBySection = []
private

A map of section name to read-only message.

Missing or false for read/write

Definition at line 90 of file LBFactoryMulti.php.

◆ $sectionLoads

array Wikimedia\Rdbms\LBFactoryMulti::$sectionLoads
private

A 2-d map.

For each section, gives a map of server names to load ratios

Definition at line 42 of file LBFactoryMulti.php.

◆ $sectionsByDB

array Wikimedia\Rdbms\LBFactoryMulti::$sectionsByDB
private

A map of database names to section names.

Definition at line 36 of file LBFactoryMulti.php.

◆ $serverTemplate

array [] Wikimedia\Rdbms\LBFactoryMulti::$serverTemplate
private

Server info associative array.

Note
The host, hostName and load entries will be overridden

Definition at line 48 of file LBFactoryMulti.php.

Referenced by Wikimedia\Rdbms\LBFactoryMulti\newExternalLB(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().

◆ $templateOverridesByCluster

array Wikimedia\Rdbms\LBFactoryMulti::$templateOverridesByCluster
private

A 2-d map overriding the server info by external storage cluster.

Definition at line 81 of file LBFactoryMulti.php.

◆ $templateOverridesBySection

array Wikimedia\Rdbms\LBFactoryMulti::$templateOverridesBySection
private

A 2-d map overriding the server info by section.

Definition at line 78 of file LBFactoryMulti.php.

◆ $templateOverridesByServer

array Wikimedia\Rdbms\LBFactoryMulti::$templateOverridesByServer
private

A 2-d map overriding serverTemplate and externalTemplateOverrides on a server-by-server basis.

Applies to both core and external storage

Definition at line 75 of file LBFactoryMulti.php.


The documentation for this class was generated from the following file: