MediaWiki  1.30.0
Wikimedia\Rdbms\ChronologyProtector Class Reference

Class for ensuring a consistent ordering of events as seen by the user, despite replication. More...

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

Public Member Functions

 __construct (BagOStuff $store, array $client, $posTime=null)
 
 getTouched ( $dbName)
 
 initLB (ILoadBalancer $lb)
 Initialise a ILoadBalancer to give it appropriate chronology protection. More...
 
 setEnabled ( $enabled)
 
 setLogger (LoggerInterface $logger)
 
 setWaitEnabled ( $enabled)
 
 shutdown (callable $workCallback=null, $mode='sync')
 Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now. More...
 
 shutdownLB (ILoadBalancer $lb)
 Notify the ChronologyProtector that the ILoadBalancer is about to shut down. More...
 

Protected Member Functions

 initPositions ()
 Load in previous master positions for the client. More...
 

Protected Attributes

string $clientId
 Hash of client parameters. More...
 
bool $enabled = true
 Whether to no-op all method calls. More...
 
bool $initialized = false
 Whether the client data was loaded. More...
 
string $key
 Storage key name. More...
 
LoggerInterface $logger
 
DBMasterPos[] $shutdownPositions = []
 Map of (DB master name => position) More...
 
float[] $shutdownTouchDBs = []
 Map of (DB master name => 1) More...
 
DBMasterPos[] $startupPositions = []
 Map of (DB master name => position) More...
 
BagOStuff $store
 
bool $wait = true
 Whether to check and wait on positions. More...
 
float null $waitForPosTime
 Minimum UNIX timestamp of 1+ expected startup positions. More...
 
int $waitForPosTimeout = self::POS_WAIT_TIMEOUT
 Max seconds to wait on positions to appear. More...
 

Private Member Functions

 getTouchedKey (BagOStuff $store, $dbName)
 

Static Private Member Functions

static mergePositions ( $curValue, array $shutdownPositions)
 
static minPosTime ( $data)
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ __construct()

Wikimedia\Rdbms\ChronologyProtector::__construct ( BagOStuff  $store,
array  $client,
  $posTime = null 
)
Parameters
BagOStuff$store
array$clientMap of (ip: <IP>, agent: <user-agent>)
float$posTimeUNIX timestamp
Since
1.27

Definition at line 75 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$store, key, BagOStuff\makeGlobalKey(), and store.

Member Function Documentation

◆ getTouched()

Wikimedia\Rdbms\ChronologyProtector::getTouched (   $dbName)
Parameters
string$dbNameDB master name (e.g. "db1052")
Returns
float|bool UNIX timestamp when client last touched the DB; false if not on record
Since
1.28

Definition at line 234 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\getTouchedKey(), and store.

◆ getTouchedKey()

Wikimedia\Rdbms\ChronologyProtector::getTouchedKey ( BagOStuff  $store,
  $dbName 
)
private

◆ initLB()

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.

Parameters
ILoadBalancer$lb
Returns
void

Definition at line 114 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ILoadBalancer\getServerCount(), Wikimedia\Rdbms\ILoadBalancer\getServerName(), Wikimedia\Rdbms\ILoadBalancer\getWriterIndex(), Wikimedia\Rdbms\ChronologyProtector\initPositions(), and Wikimedia\Rdbms\ILoadBalancer\waitFor().

◆ initPositions()

Wikimedia\Rdbms\ChronologyProtector::initPositions ( )
protected

Load in previous master positions for the client.

Definition at line 250 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$waitForPosTimeout, key, store, and use.

Referenced by Wikimedia\Rdbms\ChronologyProtector\initLB().

◆ mergePositions()

static Wikimedia\Rdbms\ChronologyProtector::mergePositions (   $curValue,
array  $shutdownPositions 
)
staticprivate
Parameters
array | bool$curValue
DBMasterPos[]$shutdownPositions
Returns
array

Definition at line 317 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$shutdownPositions, and as.

◆ minPosTime()

static Wikimedia\Rdbms\ChronologyProtector::minPosTime (   $data)
staticprivate
Parameters
array | bool$data
Returns
float|null

Definition at line 297 of file ChronologyProtector.php.

References as.

◆ setEnabled()

Wikimedia\Rdbms\ChronologyProtector::setEnabled (   $enabled)
Parameters
bool$enabledWhether to no-op all method calls
Since
1.27

Definition at line 91 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$enabled.

◆ setLogger()

Wikimedia\Rdbms\ChronologyProtector::setLogger ( LoggerInterface  $logger)

◆ setWaitEnabled()

Wikimedia\Rdbms\ChronologyProtector::setWaitEnabled (   $enabled)
Parameters
bool$enabledWhether to check and wait on positions
Since
1.27

Definition at line 99 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$enabled.

◆ shutdown()

Wikimedia\Rdbms\ChronologyProtector::shutdown ( callable  $workCallback = null,
  $mode = 'sync' 
)

Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now.

May commit chronology data to persistent storage.

Parameters
callable | null$workCallbackWork to do instead of waiting on syncing positions
string$modeOne of (sync, async); whether to wait on remote datacenters
Returns
DBMasterPos[] Empty on success; returns the (db name => position) map on failure

Definition at line 166 of file ChronologyProtector.php.

References Wikimedia\Rdbms\ChronologyProtector\$shutdownPositions, Wikimedia\Rdbms\ChronologyProtector\$store, BagOStuff\addBusyCallback(), as, captcha-old\count, BagOStuff\get(), BagOStuff\getQoS(), Wikimedia\Rdbms\ChronologyProtector\getTouchedKey(), key, BagOStuff\lock(), BagOStuff\set(), store, and BagOStuff\unlock().

Referenced by Wikimedia\Rdbms\LBFactory\shutdownChronologyProtector().

◆ shutdownLB()

Member Data Documentation

◆ $clientId

string Wikimedia\Rdbms\ChronologyProtector::$clientId
protected

Hash of client parameters.

Definition at line 45 of file ChronologyProtector.php.

◆ $enabled

bool Wikimedia\Rdbms\ChronologyProtector::$enabled = true
protected

Whether to no-op all method calls.

Definition at line 51 of file ChronologyProtector.php.

Referenced by Wikimedia\Rdbms\ChronologyProtector\setEnabled(), and Wikimedia\Rdbms\ChronologyProtector\setWaitEnabled().

◆ $initialized

bool Wikimedia\Rdbms\ChronologyProtector::$initialized = false
protected

Whether the client data was loaded.

Definition at line 56 of file ChronologyProtector.php.

◆ $key

string Wikimedia\Rdbms\ChronologyProtector::$key
protected

Storage key name.

Definition at line 43 of file ChronologyProtector.php.

◆ $logger

LoggerInterface Wikimedia\Rdbms\ChronologyProtector::$logger
protected

◆ $shutdownPositions

DBMasterPos [] Wikimedia\Rdbms\ChronologyProtector::$shutdownPositions = []
protected

Map of (DB master name => position)

Definition at line 60 of file ChronologyProtector.php.

Referenced by Wikimedia\Rdbms\ChronologyProtector\mergePositions(), and Wikimedia\Rdbms\ChronologyProtector\shutdown().

◆ $shutdownTouchDBs

float [] Wikimedia\Rdbms\ChronologyProtector::$shutdownTouchDBs = []
protected

Map of (DB master name => 1)

Definition at line 62 of file ChronologyProtector.php.

◆ $startupPositions

DBMasterPos [] Wikimedia\Rdbms\ChronologyProtector::$startupPositions = []
protected

Map of (DB master name => position)

Definition at line 58 of file ChronologyProtector.php.

◆ $store

◆ $wait

bool Wikimedia\Rdbms\ChronologyProtector::$wait = true
protected

Whether to check and wait on positions.

Definition at line 53 of file ChronologyProtector.php.

◆ $waitForPosTime

float null Wikimedia\Rdbms\ChronologyProtector::$waitForPosTime
protected

Minimum UNIX timestamp of 1+ expected startup positions.

Definition at line 47 of file ChronologyProtector.php.

◆ $waitForPosTimeout

int Wikimedia\Rdbms\ChronologyProtector::$waitForPosTimeout = self::POS_WAIT_TIMEOUT
protected

Max seconds to wait on positions to appear.

Definition at line 49 of file ChronologyProtector.php.

Referenced by Wikimedia\Rdbms\ChronologyProtector\initPositions().


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