MediaWiki REL1_34
|
A multi-database, multi-master factory for Wikimedia and similar installations. More...
Public Member Functions | |
__construct (array $conf) | |
Template override precedence (highest => lowest): | |
forEachLB ( $callback, array $params=[]) | |
Execute a function for each currently tracked (instantiated) load balancer. | |
getAllExternalLBs () | |
Get cached (tracked) load balancers for all external database clusters. | |
getAllMainLBs () | |
Get cached (tracked) load balancers for all main database clusters. | |
getExternalLB ( $cluster) | |
Get a cached (tracked) load balancer for external storage. | |
getMainLB ( $domain=false) | |
Get a cached (tracked) load balancer object. | |
newExternalLB ( $cluster, $owner=null) | |
Create a new load balancer for external storage. | |
newMainLB ( $domain=false, $owner=null) | |
Create a new load balancer object. | |
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 and clear view snapshots 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. | |
getChronologyProtectorClientId () | |
Get the client ID of the ChronologyProtector instance. | |
getChronologyProtectorTouched ( $dbName) | |
getEmptyTransactionTicket ( $fname) | |
Get a token asserting that no transaction writes are active. | |
getLocalDomainID () | |
Get the local (and default) database domain ID of connection handles. | |
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 an explicit transaction round is active. | |
isReadyForRoundOperations () | |
Check if transaction rounds can be started, committed, or rolled back right now. | |
laggedReplicaUsed () | |
Detemine if any lagged replica DB connection was used. | |
redefineLocalDomain ( $domain) | |
Close all connection and redefine the local domain for testing or schema creation. | |
resolveDomainID ( $domain) | |
rollbackMasterChanges ( $fname=__METHOD__) | |
Rollback changes on all master connections. | |
setAgentName ( $agent) | |
setIndexAliases (array $aliases) | |
Convert certain index names to alternative names before querying the DB. | |
setLocalDomainPrefix ( $prefix) | |
Set a new table prefix for the existing local domain ID for testing. | |
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, &$cpClientId=null) | |
Prepare all currently tracked (instantiated) load balancers for shutdown. | |
waitForReplication (array $opts=[]) | |
Waits for the replica DBs to catch up to the current master position. | |
Private Member Functions | |
getDomainDatabase ( $domain=false) | |
getSectionForDomain ( $domain=false) | |
makeServerArray (array $serverTemplate, array $groupLoads) | |
Make a server array as expected by LoadBalancer::__construct() | |
newLoadBalancer ( $serverTemplate, $groupLoads, $readOnlyReason, $owner) | |
Make a new load balancer object based on template and load array. | |
reindexGroupLoads (array $groupLoads) | |
Take a group load array indexed by group then server, and reindex it by server then group. | |
Private Attributes | |
LoadBalancer[] | $externalLBs = [] |
int[][] | $externalLoads = [] |
Map of (cluster => host => load ratio) | |
array | $externalTemplateOverrides = [] |
Server config map overriding "serverTemplate" for external storage. | |
int[][][] | $groupLoadsByDB = [] |
Map of (database => group => host => load ratio) | |
int[][][] | $groupLoadsBySection = [] |
Map of (section => group => host => load ratio) | |
string[] | $hostsByName = [] |
Map of (hostname => IP address) | |
string | $lastDomain |
string | $lastSection |
string | $loadMonitorClass |
An ILoadMonitor class. | |
LoadBalancer[] | $mainLBs = [] |
array | $masterTemplateOverrides = [] |
Server config override map for all main and external master servers. | |
string[] bool[] | $readOnlyBySection = [] |
A map of section name to read-only message. | |
string[] | $sectionsByDB = [] |
Map of (database name => section name) | |
array | $serverTemplate = [] |
Server config map ("host", "hostName", "load", and "groupLoads" are ignored) | |
array[] | $templateOverridesByCluster = [] |
Map of (cluster => server config map overrides) for external storage. | |
array[] | $templateOverridesBySection = [] |
Map of (section => server config map overrides) | |
array[] | $templateOverridesByServer = [] |
Map of (host => server config map overrides) for main and external servers. | |
Additional Inherited Members | |
Static Public Member Functions inherited from Wikimedia\Rdbms\LBFactory | |
static | getCPInfoFromCookieValue ( $value, $minTimestamp) |
static | makeCookieValueFromCPIndex ( $index, $time, $clientId) |
Public Attributes inherited from Wikimedia\Rdbms\LBFactory | |
const | ROUND_BEGINNING = 'within-begin' |
const | ROUND_COMMIT_CALLBACKS = 'within-commit-callbacks' |
const | ROUND_COMMITTING = 'within-commit' |
const | ROUND_CURSORY = 'cursory' |
const | ROUND_ROLLBACK_CALLBACKS = 'within-rollback-callbacks' |
const | ROUND_ROLLING_BACK = 'within-rollback' |
Protected Member Functions inherited from Wikimedia\Rdbms\LBFactory | |
baseLoadBalancerParams ( $owner) | |
Get parameters to ILoadBalancer::__construct() | |
forEachLBCallMethod ( $methodName, array $args=[]) | |
Call a method of each tracked load balancer. | |
getChronologyProtector () | |
getOwnershipId () | |
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 | |
DatabaseDomain | $localDomain |
Local domain. | |
int null | $maxLag |
BagOStuff | $memStash |
string bool | $readOnlyReason = false |
Reason all LBs are read-only or false if not. | |
BagOStuff | $srvCache |
WANObjectCache | $wanCache |
A multi-database, multi-master factory for Wikimedia and similar installations.
Ignores the old configuration globals.
Definition at line 35 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::__construct | ( | array | $conf | ) |
Template override precedence (highest => lowest):
Server config 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).
array | $conf | Additional parameters include:
|
Reimplemented from Wikimedia\Rdbms\LBFactory.
Definition at line 138 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::forEachLB | ( | $callback, | |
array | $params = [] |
||
) |
Execute a function for each currently tracked (instantiated) load balancer.
The callback is called with the load balancer as the first parameter, and $params passed as the subsequent parameters.
callable | $callback | |
array | $params |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 239 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::getAllExternalLBs | ( | ) |
Get cached (tracked) load balancers for all external database clusters.
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 230 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\getExternalLB().
Wikimedia\Rdbms\LBFactoryMulti::getAllMainLBs | ( | ) |
Get cached (tracked) load balancers for all main database clusters.
The default cluster name is ILoadBalancer::CLUSTER_MAIN_DEFAULT
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 219 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\getMainLB().
|
private |
DatabaseDomain | string | bool | $domain | Domain ID, or false for the current domain |
Definition at line 346 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\DatabaseDomain\newFromId().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().
Wikimedia\Rdbms\LBFactoryMulti::getExternalLB | ( | $cluster | ) |
Get a cached (tracked) load balancer for external storage.
string | $cluster | External storage cluster name |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 210 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactory\getOwnershipId(), and Wikimedia\Rdbms\LBFactoryMulti\newExternalLB().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getAllExternalLBs().
Wikimedia\Rdbms\LBFactoryMulti::getMainLB | ( | $domain = false | ) |
Get a cached (tracked) load balancer object.
bool | string | $domain | Domain ID, or false for the current domain |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 183 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactory\getOwnershipId(), Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getAllMainLBs().
|
private |
bool | string | $domain |
Definition at line 252 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\$lastSection, and Wikimedia\Rdbms\LBFactoryMulti\getDomainDatabase().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getMainLB(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().
|
private |
Make a server array as expected by LoadBalancer::__construct()
array | $serverTemplate | Server config map |
int[][] | $groupLoads | Map of (group => host => load) |
Definition at line 295 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\$masterTemplateOverrides, Wikimedia\Rdbms\LBFactoryMulti\$serverTemplate, and Wikimedia\Rdbms\LBFactoryMulti\reindexGroupLoads().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\newLoadBalancer().
Wikimedia\Rdbms\LBFactoryMulti::newExternalLB | ( | $cluster, | |
$owner = null |
|||
) |
Create a new load balancer for external storage.
The resulting object will be untracked, not chronology-protected, and the caller is responsible for cleaning it up.
This method is for only advanced usage and callers should almost always use getExternalLB() instead. This method can be useful when a table is used as a key/value store. In that cases, one might want to query it in autocommit mode (DBO_TRX off) but still use DBO_TRX transaction rounds on other tables.
string | $cluster | External storage cluster name |
int | null | $owner | Owner ID of the new instance (e.g. this LBFactory ID) |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 193 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\newLoadBalancer().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getExternalLB().
|
private |
Make a new load balancer object based on template and load array.
array | $serverTemplate | Server config map |
int[][] | $groupLoads | Map of (group => host => load) |
string | bool | $readOnlyReason | |
int | null | $owner |
Definition at line 274 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactory\$readOnlyReason, Wikimedia\Rdbms\LBFactory\baseLoadBalancerParams(), Wikimedia\Rdbms\LBFactory\initLoadBalancer(), and Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\newExternalLB(), and Wikimedia\Rdbms\LBFactoryMulti\newMainLB().
Wikimedia\Rdbms\LBFactoryMulti::newMainLB | ( | $domain = false , |
|
$owner = null |
|||
) |
Create a new load balancer object.
The resulting object will be untracked, not chronology-protected, and the caller is responsible for cleaning it up.
This method is for only advanced usage and callers should almost always use getMainLB() instead. This method can be useful when a table is used as a key/value store. In that cases, one might want to query it in autocommit mode (DBO_TRX off) but still use DBO_TRX transaction rounds on other tables.
bool | string | $domain | Domain ID, or false for the current domain |
int | null | $owner | Owner ID of the new instance (e.g. this LBFactory ID) |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 160 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\LBFactoryMulti\getDomainDatabase(), Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain(), and Wikimedia\Rdbms\LBFactoryMulti\newLoadBalancer().
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getMainLB().
|
private |
Take a group load array indexed by group then server, and reindex it by server then group.
int[][] | $groupLoads | Map of (group => host => load) |
Definition at line 330 of file LBFactoryMulti.php.
Referenced by Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().
|
private |
Definition at line 39 of file LBFactoryMulti.php.
|
private |
Map of (cluster => host => load ratio)
Definition at line 50 of file LBFactoryMulti.php.
|
private |
Server config map overriding "serverTemplate" for external storage.
Definition at line 54 of file LBFactoryMulti.php.
|
private |
Map of (database => group => host => load ratio)
Definition at line 48 of file LBFactoryMulti.php.
|
private |
Map of (section => group => host => load ratio)
Definition at line 46 of file LBFactoryMulti.php.
|
private |
Map of (hostname => IP address)
Definition at line 42 of file LBFactoryMulti.php.
|
private |
Definition at line 70 of file LBFactoryMulti.php.
|
private |
Definition at line 72 of file LBFactoryMulti.php.
Referenced by Wikimedia\Rdbms\LBFactoryMulti\getSectionForDomain().
|
private |
An ILoadMonitor class.
Definition at line 67 of file LBFactoryMulti.php.
|
private |
Definition at line 37 of file LBFactoryMulti.php.
|
private |
Server config override map for all main and external master servers.
Definition at line 60 of file LBFactoryMulti.php.
Referenced by Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().
|
private |
A map of section name to read-only message.
Definition at line 64 of file LBFactoryMulti.php.
|
private |
Map of (database name => section name)
Definition at line 44 of file LBFactoryMulti.php.
|
private |
Server config map ("host", "hostName", "load", and "groupLoads" are ignored)
Definition at line 52 of file LBFactoryMulti.php.
Referenced by Wikimedia\Rdbms\LBFactoryMulti\makeServerArray().
|
private |
Map of (cluster => server config map overrides) for external storage.
Definition at line 58 of file LBFactoryMulti.php.
|
private |
Map of (section => server config map overrides)
Definition at line 56 of file LBFactoryMulti.php.
|
private |
Map of (host => server config map overrides) for main and external servers.
Definition at line 62 of file LBFactoryMulti.php.