MediaWiki
master
|
A multi-database, multi-primary DB factory for Wikimedia and similar installations. More...
Public Member Functions | |
__construct (array $conf) | |
Template override precedence (highest => lowest): More... | |
forEachLB ( $callback, array $params=[]) | |
Execute a function for each instantiated tracked load balancer instance. More... | |
getAllExternalLBs () | |
Get the tracked load balancer instances for all external clusters. More... | |
getAllMainLBs () | |
Get the tracked load balancer instances for all main clusters. More... | |
getExternalLB ( $cluster) | |
Get the tracked load balancer instance for an external cluster. More... | |
getMainLB ( $domain=false) | |
Get the tracked load balancer instance for the main cluster that handles the given domain. More... | |
newExternalLB ( $cluster) | |
Create a new load balancer instance for an external cluster. More... | |
newMainLB ( $domain=false) | |
Create a new load balancer instance for the main cluster that handles the given domain. More... | |
![]() | |
__destruct () | |
appendShutdownCPIndexAsQuery ( $url, $index) | |
Append ?cpPosIndex parameter to a URL for ChronologyProtector purposes if needed. More... | |
beginPrimaryChanges ( $fname=__METHOD__) | |
Flush any primary transaction snapshots and set DBO_TRX (if DBO_DEFAULT is set) More... | |
closeAll ( $fname=__METHOD__) | |
Close all connections on instantiated tracked load balancer instances. More... | |
commitAll ( $fname=__METHOD__, array $options=[]) | |
Commit open transactions on all connections. More... | |
commitAndWaitForReplication ( $fname, $ticket, array $opts=[]) | |
Call commitPrimaryChanges() and waitForReplication() if $ticket indicates it is safe. More... | |
commitPrimaryChanges ( $fname=__METHOD__, array $options=[]) | |
Commit changes and clear view snapshots on all primary connections. More... | |
destroy () | |
Close all connections and make further attempts to open connections result in DBAccessError. More... | |
disableChronologyProtection () | |
Disable the ChronologyProtector on all instantiated tracked load balancer instances. More... | |
flushPrimarySessions ( $fname=__METHOD__) | |
Release important session-level state (named lock, table locks) as post-rollback cleanup. More... | |
flushReplicaSnapshots ( $fname=__METHOD__) | |
Commit all replica DB transactions so as to flush any REPEATABLE-READ or SSI snapshot. More... | |
getAllLBs () | |
Get all tracked load balancer instances (generator) More... | |
getChronologyProtectorClientId () | |
Get the client ID of the ChronologyProtector instance. More... | |
getChronologyProtectorTouched ( $domain=false) | |
Get the UNIX timestamp when the client last touched the DB, if they did so recently. More... | |
getEmptyTransactionTicket ( $fname) | |
Get a token asserting that no transaction writes are active on tracked load balancers. More... | |
getLocalDomainID () | |
Get the local (and default) database domain ID of connection handles. More... | |
getTransactionProfiler () | |
Get the TransactionProfiler used by this instance. More... | |
hasOrMadeRecentPrimaryChanges ( $age=null) | |
Determine if any primary connection has pending/written changes from this request. More... | |
hasPrimaryChanges () | |
Determine if any primary connection has pending changes. More... | |
hasTransactionRound () | |
Check if an explicit transaction round is active. More... | |
isReadyForRoundOperations () | |
Check if transaction rounds can be started, committed, or rolled back right now. More... | |
laggedReplicaUsed () | |
Determine if any lagged replica DB connection was used. More... | |
redefineLocalDomain ( $domain) | |
Close all connections and redefine the local database domain. More... | |
resolveDomainID ( $domain) | |
rollbackPrimaryChanges ( $fname=__METHOD__) | |
Rollback changes on all primary connections. More... | |
setAgentName ( $agent) | |
setDefaultReplicationWaitTimeout ( $seconds) | |
Set the default timeout for replication wait checks. More... | |
setDomainAliases (array $aliases) | |
Convert certain database domains to alternative ones. More... | |
setIndexAliases (array $aliases) | |
Convert certain index names to alternative names before querying the DB. More... | |
setLocalDomainPrefix ( $prefix) | |
Set a new table prefix for the existing local domain ID for testing. More... | |
setMockTime (&$time) | |
setRequestInfo (array $info) | |
Inject HTTP request header/cookie information during setup of this instance. More... | |
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. More... | |
setWaitForReplicationListener ( $name, callable $callback=null) | |
Add a callback to be run in every call to waitForReplication() before waiting. More... | |
shutdown ( $flags=self::SHUTDOWN_NORMAL, callable $workCallback=null, &$cpIndex=null, &$cpClientId=null) | |
Prepare all instantiated tracked load balancer instances for shutdown. More... | |
waitForReplication (array $opts=[]) | |
Waits for the replica DBs to catch up to the current primary position. More... | |
Protected Member Functions | |
getLBsForOwner () | |
Get all tracked load balancers with the internal "for owner" interface. More... | |
![]() | |
baseLoadBalancerParams () | |
Get parameters to ILoadBalancer::__construct() More... | |
getChronologyProtector () | |
initLoadBalancer (ILoadBalancerForOwner $lb) | |
resolveDomainInstance ( $domain) | |
shutdownChronologyProtector (ChronologyProtector $cp, $workCallback, &$cpIndex=null) | |
Get and record all of the staged DB positions into persistent memory storage. More... | |
Private Member Functions | |
getSectionFromDatabase ( $database) | |
makeServerConfigArrays (array $serverTemplate, array $groupLoads) | |
Make a server array as expected by LoadBalancer::__construct() More... | |
newLoadBalancer (string $clusterName, array $serverTemplate, array $groupLoads, $readOnlyReason) | |
Make a new load balancer object based on template and load array. More... | |
reindexGroupLoadsByServerName (array $groupLoads) | |
Take a group load array indexed by (group,server) and reindex it by (server,group) More... | |
Private Attributes | |
array< string, LoadBalancer > | $externalLBs = [] |
Map of (external cluster => tracked LoadBalancer) More... | |
int[][] | $externalLoadsByCluster |
Map of (external cluster => server name => load ratio) More... | |
array | $externalTemplateOverrides |
Server config map overriding "serverTemplate" for all external servers. More... | |
int[][][] | $groupLoadsBySection |
Map of (main section => group => server name => load ratio) More... | |
string[] | $hostsByServerName |
Map of (server name => IP address) More... | |
array | $loadMonitorConfig |
Configuration for the LoadMonitor to use within LoadBalancer instances. More... | |
array< string, LoadBalancer > | $mainLBs = [] |
Map of (main section => tracked LoadBalancer) More... | |
array | $masterTemplateOverrides |
Server config override map for all main/external primary DB servers. More... | |
string[] bool[] | $readOnlyBySection |
A map of (main section => read-only message) More... | |
string[] | $sectionsByDB |
Map of (database name => main section) More... | |
array | $serverTemplate |
Server config map ("host", "serverName", "load", and "groupLoads" ignored) More... | |
array[] | $templateOverridesByCluster |
Map of (external cluster => server config map overrides) More... | |
array[] | $templateOverridesBySection |
Map of (main section => server config map overrides) More... | |
array[] | $templateOverridesByServer |
Map of (server name => server config map overrides) for all servers. More... | |
Additional Inherited Members | |
![]() | |
static | getCPInfoFromCookieValue (?string $value, int $minTimestamp) |
Parse a string conveying the client and write index of the chronology protector data. More... | |
static | makeCookieValueFromCPIndex (int $writeIndex, int $time, string $clientId) |
Build a string conveying the client and write index of the chronology protector data. More... | |
![]() | |
const | SHUTDOWN_NO_CHRONPROT = 1 |
Do not save "session consistency" DB replication positions. More... | |
const | SHUTDOWN_NORMAL = 0 |
Idiom for "no special shutdown flags". More... | |
![]() | |
BagOStuff | $cpStash |
DatabaseDomain | $localDomain |
Local domain. More... | |
int null | $maxLag |
string bool | $readOnlyReason = false |
Reason all LBs are read-only or false if not. More... | |
BagOStuff | $srvCache |
WANObjectCache | $wanCache |
A multi-database, multi-primary DB factory for Wikimedia and similar installations.
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 110 of file LBFactoryMulti.php.
References Wikimedia\Rdbms\ILoadBalancer\GROUP_GENERIC.
Wikimedia\Rdbms\LBFactoryMulti::forEachLB | ( | $callback, | |
array | $params = [] |
||
) |
Execute a function for each instantiated tracked load balancer instance.
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 225 of file LBFactoryMulti.php.
References wfDeprecated().
Wikimedia\Rdbms\LBFactoryMulti::getAllExternalLBs | ( | ) |
Get the tracked load balancer instances for all external clusters.
If no tracked instance exists for a cluster, then one will be instantiated
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 216 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::getAllMainLBs | ( | ) |
Get the tracked load balancer instances for all main clusters.
If no tracked instance exists for a cluster, then one will be instantiated
Note that default main cluster name is ILoadBalancer::CLUSTER_MAIN_DEFAULT
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 205 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::getExternalLB | ( | $cluster | ) |
Get the tracked load balancer instance for an external cluster.
If no tracked instances exists, then one will be instantiated
string | $cluster | External cluster name |
InvalidArgumentException | If $cluster is not recognized |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 195 of file LBFactoryMulti.php.
|
protected |
Get all tracked load balancers with the internal "for owner" interface.
Most subclasses override this, we just provide an implementation here for the benefit of Wikibase's FakeLBFactory.
Reimplemented from Wikimedia\Rdbms\LBFactory.
Definition at line 235 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::getMainLB | ( | $domain = false | ) |
Get the tracked load balancer instance for the main cluster that handles the given domain.
If no tracked instances exists, then one will be instantiated
bool | string | $domain | Domain ID, or false for the current domain |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 168 of file LBFactoryMulti.php.
|
private |
string | $database |
Definition at line 329 of file LBFactoryMulti.php.
|
private |
Make a server array as expected by LoadBalancer::__construct()
array | $serverTemplate | Server config map |
int[][] | $groupLoads | Map of (group => server name => load) |
Definition at line 280 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::newExternalLB | ( | $cluster | ) |
Create a new load balancer instance for an external cluster.
The resulting object will be untracked and the caller is responsible for cleaning it up. Database replication positions will not be saved by ChronologyProtector.
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 cluster name |
InvalidArgumentException | If $cluster is not recognized |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 179 of file LBFactoryMulti.php.
|
private |
Make a new load balancer object based on template and load array.
string | $clusterName | |
array | $serverTemplate | |
array | $groupLoads | |
string | bool | $readOnlyReason |
Definition at line 253 of file LBFactoryMulti.php.
Wikimedia\Rdbms\LBFactoryMulti::newMainLB | ( | $domain = false | ) |
Create a new load balancer instance for the main cluster that handles the given domain.
The resulting object will be untracked and the caller is responsible for cleaning it up. Database replication positions will not be saved by ChronologyProtector.
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 |
Implements Wikimedia\Rdbms\ILBFactory.
Definition at line 145 of file LBFactoryMulti.php.
|
private |
Take a group load array indexed by (group,server) and reindex it by (server,group)
int[][] | $groupLoads | Map of (group => server name => load) |
Definition at line 314 of file LBFactoryMulti.php.
|
private |
Map of (external cluster => tracked LoadBalancer)
Definition at line 39 of file LBFactoryMulti.php.
|
private |
Map of (external cluster => server name => load ratio)
Definition at line 48 of file LBFactoryMulti.php.
|
private |
Server config map overriding "serverTemplate" for all external servers.
Definition at line 52 of file LBFactoryMulti.php.
|
private |
Map of (main section => group => server name => load ratio)
Definition at line 46 of file LBFactoryMulti.php.
|
private |
Map of (server name => IP address)
Definition at line 42 of file LBFactoryMulti.php.
|
private |
Configuration for the LoadMonitor to use within LoadBalancer instances.
Definition at line 64 of file LBFactoryMulti.php.
|
private |
Map of (main section => tracked LoadBalancer)
Definition at line 37 of file LBFactoryMulti.php.
|
private |
Server config override map for all main/external primary DB servers.
Definition at line 58 of file LBFactoryMulti.php.
|
private |
A map of (main section => read-only message)
Definition at line 62 of file LBFactoryMulti.php.
|
private |
Map of (database name => main section)
Definition at line 44 of file LBFactoryMulti.php.
|
private |
Server config map ("host", "serverName", "load", and "groupLoads" ignored)
Definition at line 50 of file LBFactoryMulti.php.
|
private |
Map of (external cluster => server config map overrides)
Definition at line 56 of file LBFactoryMulti.php.
|
private |
Map of (main section => server config map overrides)
Definition at line 54 of file LBFactoryMulti.php.
|
private |
Map of (server name => server config map overrides) for all servers.
Definition at line 60 of file LBFactoryMulti.php.