MediaWiki REL1_33
|
Class for ensuring a consistent ordering of events as seen by the user, despite replication. More...
Public Member Functions | |
__construct (BagOStuff $store, array $client, $posIndex=null) | |
getClientId () | |
getTouched ( $dbName) | |
initLB (ILoadBalancer $lb) | |
Initialise a ILoadBalancer to give it appropriate chronology protection. | |
setEnabled ( $enabled) | |
setLogger (LoggerInterface $logger) | |
setWaitEnabled ( $enabled) | |
shutdown (callable $workCallback=null, $mode='sync', &$cpIndex=null) | |
Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now. | |
shutdownLB (ILoadBalancer $lb) | |
Notify the ChronologyProtector that the ILoadBalancer is about to shut down. | |
Protected Member Functions | |
initPositions () | |
Load in previous master positions for the client. | |
mergePositions ( $curValue, array $shutdownPositions, &$cpIndex=null) | |
Protected Attributes | |
string | $clientId |
Hash of client parameters. | |
string[] | $clientLogInfo |
Map of client information fields for logging. | |
bool | $enabled = true |
Whether to no-op all method calls. | |
bool | $initialized = false |
Whether the client data was loaded. | |
string | $key |
Storage key name. | |
LoggerInterface | $logger |
DBMasterPos[] | $shutdownPositions = [] |
Map of (DB master name => position) | |
float[] | $shutdownTouchDBs = [] |
Map of (DB master name => 1) | |
DBMasterPos[] | $startupPositions = [] |
Map of (DB master name => position) | |
BagOStuff | $store |
bool | $wait = true |
Whether to check and wait on positions. | |
int null | $waitForPosIndex |
Expected minimum index of the last write to the position store. | |
int | $waitForPosStoreTimeout = self::POS_STORE_WAIT_TIMEOUT |
Max seconds to wait on positions to appear. | |
Private Member Functions | |
getTouchedKey (BagOStuff $store, $dbName) | |
Class for ensuring a consistent ordering of events as seen by the user, despite replication.
Kind of like Hawking's [[Chronology Protection Agency]].
Definition at line 36 of file ChronologyProtector.php.
Wikimedia\Rdbms\ChronologyProtector::__construct | ( | BagOStuff | $store, |
array | $client, | ||
$posIndex = null ) |
BagOStuff | $store | |
array | $client | Map of (ip: <IP>, agent: <user-agent> [, clientId: <hash>] ) |
int | null | $posIndex | Write counter index [optional] |
Definition at line 79 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$store, and(), key, BagOStuff\makeGlobalKey(), and null.
Wikimedia\Rdbms\ChronologyProtector::getClientId | ( | ) |
Definition at line 103 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$clientId.
Referenced by Wikimedia\Rdbms\LBFactory\shutdown().
Wikimedia\Rdbms\ChronologyProtector::getTouched | ( | $dbName | ) |
string | $dbName | DB master name (e.g. "db1052") |
Definition at line 263 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\getTouchedKey().
|
private |
BagOStuff | $store | |
string | $dbName |
Definition at line 272 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$store, and BagOStuff\makeGlobalKey().
Referenced by Wikimedia\Rdbms\ChronologyProtector\getTouched(), and Wikimedia\Rdbms\ChronologyProtector\shutdown().
Wikimedia\Rdbms\ChronologyProtector::initLB | ( | ILoadBalancer | $lb | ) |
Initialise a ILoadBalancer to give it appropriate chronology protection.
If the stash has a previous master position recorded, this will try to make sure that the next query to a replica DB of that master will see changes up to that position by delaying execution. The delay may timeout and allow stale data if no non-lagged replica DBs are available.
ILoadBalancer | $lb |
Definition at line 134 of file ChronologyProtector.php.
References and(), Wikimedia\Rdbms\ILoadBalancer\getServerCount(), Wikimedia\Rdbms\ILoadBalancer\getServerName(), Wikimedia\Rdbms\ILoadBalancer\getWriterIndex(), Wikimedia\Rdbms\ChronologyProtector\initPositions(), and Wikimedia\Rdbms\ILoadBalancer\waitFor().
|
protected |
Load in previous master positions for the client.
Definition at line 279 of file ChronologyProtector.php.
References $data, Wikimedia\Rdbms\ChronologyProtector\$waitForPosStoreTimeout, and(), and key.
Referenced by Wikimedia\Rdbms\ChronologyProtector\initLB().
|
protected |
array | bool | $curValue | |
DBMasterPos[] | $shutdownPositions | |
int | null | &$cpIndex |
Definition at line 349 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$shutdownPositions, and and().
Referenced by Wikimedia\Rdbms\ChronologyProtector\shutdown().
Wikimedia\Rdbms\ChronologyProtector::setEnabled | ( | $enabled | ) |
bool | $enabled | Whether to no-op all method calls |
Definition at line 111 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$enabled.
Wikimedia\Rdbms\ChronologyProtector::setLogger | ( | LoggerInterface | $logger | ) |
Definition at line 95 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$logger.
Wikimedia\Rdbms\ChronologyProtector::setWaitEnabled | ( | $enabled | ) |
bool | $enabled | Whether to check and wait on positions |
Definition at line 119 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$enabled.
Wikimedia\Rdbms\ChronologyProtector::shutdown | ( | callable | $workCallback = null, |
$mode = 'sync', | |||
& | $cpIndex = null ) |
Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now.
May commit chronology data to persistent storage.
callable | null | $workCallback | Work to do instead of waiting on syncing positions |
string | $mode | One of (sync, async); whether to wait on remote datacenters |
int | null | &$cpIndex | DB position key write counter; incremented on update |
Definition at line 189 of file ChronologyProtector.php.
References Wikimedia\Rdbms\ChronologyProtector\$shutdownPositions, Wikimedia\Rdbms\ChronologyProtector\$store, BagOStuff\addBusyCallback(), and(), BagOStuff\get(), BagOStuff\getQoS(), Wikimedia\Rdbms\ChronologyProtector\getTouchedKey(), key, BagOStuff\lock(), Wikimedia\Rdbms\ChronologyProtector\mergePositions(), BagOStuff\set(), and BagOStuff\unlock().
Wikimedia\Rdbms\ChronologyProtector::shutdownLB | ( | ILoadBalancer | $lb | ) |
Notify the ChronologyProtector that the ILoadBalancer is about to shut down.
Saves replication positions.
ILoadBalancer | $lb |
Definition at line 159 of file ChronologyProtector.php.
References and(), Wikimedia\Rdbms\ILoadBalancer\getMasterPos(), Wikimedia\Rdbms\ILoadBalancer\getServerCount(), Wikimedia\Rdbms\ILoadBalancer\getServerName(), Wikimedia\Rdbms\ILoadBalancer\getWriterIndex(), and Wikimedia\Rdbms\ILoadBalancer\hasOrMadeRecentMasterChanges().
|
protected |
Hash of client parameters.
Definition at line 45 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\getClientId().
|
protected |
Map of client information fields for logging.
Definition at line 47 of file ChronologyProtector.php.
|
protected |
Whether to no-op all method calls.
Definition at line 53 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\setEnabled(), and Wikimedia\Rdbms\ChronologyProtector\setWaitEnabled().
|
protected |
Whether the client data was loaded.
Definition at line 58 of file ChronologyProtector.php.
|
protected |
Storage key name.
Definition at line 43 of file ChronologyProtector.php.
|
protected |
Definition at line 40 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\setLogger().
|
protected |
Map of (DB master name => position)
Definition at line 62 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\mergePositions(), and Wikimedia\Rdbms\ChronologyProtector\shutdown().
|
protected |
Map of (DB master name => 1)
Definition at line 64 of file ChronologyProtector.php.
|
protected |
Map of (DB master name => position)
Definition at line 60 of file ChronologyProtector.php.
|
protected |
Definition at line 38 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\__construct(), Wikimedia\Rdbms\ChronologyProtector\getTouchedKey(), and Wikimedia\Rdbms\ChronologyProtector\shutdown().
|
protected |
Whether to check and wait on positions.
Definition at line 55 of file ChronologyProtector.php.
|
protected |
Expected minimum index of the last write to the position store.
Definition at line 49 of file ChronologyProtector.php.
|
protected |
Max seconds to wait on positions to appear.
Definition at line 51 of file ChronologyProtector.php.
Referenced by Wikimedia\Rdbms\ChronologyProtector\initPositions().