MediaWiki  1.28.0
DBLockManager Class Reference

Version of LockManager based on using named/row DB locks. More...

Inheritance diagram for DBLockManager:
Collaboration diagram for DBLockManager:

Public Member Functions

 __construct (array $config)
 Construct a new instance from configuration. More...
 
 __destruct ()
 Make sure remaining locks get cleared for sanity. More...
 
- Public Member Functions inherited from LockManager
 __construct (array $config)
 Construct a new instance from configuration. More...
 
 lock (array $paths, $type=self::LOCK_EX, $timeout=0)
 Lock the resources at the given abstract paths. More...
 
 lockByType (array $pathsByType, $timeout=0)
 Lock the resources at the given abstract paths. More...
 
 unlock (array $paths, $type=self::LOCK_EX)
 Unlock the resources at the given abstract paths. More...
 
 unlockByType (array $pathsByType)
 Unlock the resources at the given abstract paths. More...
 

Protected Member Functions

 cacheCheckFailures ($lockDb)
 Checks if the DB has not recently had connection/query errors. More...
 
 cacheRecordFailure ($lockDb)
 Log a lock request failure to the cache. More...
 
 doGetLocksOnServer ($lockSrv, array $paths, $type)
 
 freeLocksOnServer ($lockSrv, array $pathsByType)
 
 getConnection ($lockDb)
 Get (or reuse) a connection to a lock DB. More...
 
 getLocksOnServer ($lockSrv, array $pathsByType)
 change this code to work in one batch More...
 
 getMissKey ($lockDb)
 Get a cache key for recent query misses for a DB. More...
 
 initConnection ($lockDb, IDatabase $db)
 Do additional initialization for new lock DB connection. More...
 
 isServerUp ($lockSrv)
 
- Protected Member Functions inherited from QuorumLockManager
 doLock (array $paths, $type)
 
 doLockByType (array $pathsByType)
 
 doLockingRequestBucket ($bucket, array $pathsByType)
 Attempt to acquire locks with the peers for a bucket. More...
 
 doUnlock (array $paths, $type)
 
 doUnlockByType (array $pathsByType)
 
 doUnlockingRequestBucket ($bucket, array $pathsByType)
 Attempt to release locks with the peers for a bucket. More...
 
 freeLocksOnServer ($lockSrv, array $pathsByType)
 Get a connection to a lock server and release locks on $paths. More...
 
 getBucketFromPath ($path)
 Get the bucket for resource path. More...
 
 getLocksOnServer ($lockSrv, array $pathsByType)
 Get a connection to a lock server and acquire locks. More...
 
 isServerUp ($lockSrv)
 Check if a lock server is up. More...
 
 releaseAllLocks ()
 Release all locks that this session is holding. More...
 
- Protected Member Functions inherited from LockManager
 doLock (array $paths, $type)
 Lock resources with the given keys and lock type. More...
 
 doLockByType (array $pathsByType)
 
 doUnlock (array $paths, $type)
 Unlock resources with the given keys and lock type. More...
 
 doUnlockByType (array $pathsByType)
 
 normalizePathsByType (array $pathsByType)
 Normalize the $paths array by converting LOCK_UW locks into the appropriate type and removing any duplicated paths for each lock type. More...
 
 sha1Base16Absolute ($path)
 Get the base 16 SHA-1 of a string, padded to 31 digits. More...
 
 sha1Base36Absolute ($path)
 Get the base 36 SHA-1 of a string, padded to 31 digits. More...
 

Protected Attributes

IDatabase[] $conns = []
 Map Database connections (DB name => Database) More...
 
array[] IDatabase[] $dbServers
 Map of (DB names => server config or IDatabase) More...
 
 $lockExpiry
 
 $safeDelay
 
BagOStuff $statusCache
 
- Protected Attributes inherited from QuorumLockManager
array $degradedBuckets = []
 Map of degraded buckets. More...
 
array $srvsByBucket = []
 Map of bucket indexes to peer server lists. More...
 
- Protected Attributes inherited from LockManager
 $domain
 
array $locksHeld = []
 Map of (resource path => lock type => count) More...
 
 $lockTTL
 
array $lockTypeMap
 Mapping of lock types to the type actually used. More...
 
LoggerInterface $logger
 
string $session
 Random 32-char hex number. More...
 

Additional Inherited Members

- Public Attributes inherited from LockManager
const LOCK_EX = 3
 
const LOCK_SH = 1
 Lock types; stronger locks have higher values. More...
 
const LOCK_UW = 2
 

Detailed Description

Version of LockManager based on using named/row DB locks.

This is meant for multi-wiki systems that may share files.

All lock requests for a resource, identified by a hash string, will map to one bucket. Each bucket maps to one or several peer DBs, each on their own server. A majority of peer DBs must agree for a lock to be acquired.

Caching is used to avoid hitting servers that are down.

Since
1.19

Definition at line 38 of file DBLockManager.php.

Constructor & Destructor Documentation

DBLockManager::__construct ( array  $config)

Construct a new instance from configuration.

Parameters
array$configParameters include:
  • dbServers : Associative array of DB names to server configuration. Configuration is an associative array that includes:
    • host : DB server name
    • dbname : DB name
    • type : DB type (mysql,postgres,...)
    • user : DB user
    • password : DB user password
    • tablePrefix : DB table prefix
    • flags : DB flags; bitfield of IDatabase::DBO_* constants
  • dbsByBucket : Array of 1-16 consecutive integer keys, starting from 0, each having an odd-numbered list of DB names (peers) as values.
  • lockExpiry : Lock timeout (seconds) for dropped connections. [optional] This tells the DB server how long to wait before assuming connection failure and releasing all the locks for a session.
  • srvCache : A BagOStuff instance using APC or the like.

Definition at line 69 of file DBLockManager.php.

DBLockManager::__destruct ( )

Make sure remaining locks get cleared for sanity.

Definition at line 221 of file DBLockManager.php.

References as, and QuorumLockManager\releaseAllLocks().

Member Function Documentation

DBLockManager::cacheCheckFailures (   $lockDb)
protected

Checks if the DB has not recently had connection/query errors.

This just avoids wasting time on doomed connection attempts.

Parameters
string$lockDb
Returns
bool

Definition at line 190 of file DBLockManager.php.

References getMissKey().

Referenced by isServerUp().

DBLockManager::cacheRecordFailure (   $lockDb)
protected

Log a lock request failure to the cache.

Parameters
string$lockDb
Returns
bool Success

Definition at line 202 of file DBLockManager.php.

References getMissKey().

Referenced by isServerUp().

DBLockManager::doGetLocksOnServer (   $lockSrv,
array  $paths,
  $type 
)
abstractprotected

Referenced by getLocksOnServer().

DBLockManager::freeLocksOnServer (   $lockSrv,
array  $pathsByType 
)
protected

Definition at line 111 of file DBLockManager.php.

References StatusValue\newGood().

DBLockManager::getConnection (   $lockDb)
protected

Get (or reuse) a connection to a lock DB.

Parameters
string$lockDb
Returns
IDatabase
Exceptions
DBError
UnexpectedValueException

Definition at line 143 of file DBLockManager.php.

References $lockExpiry, $options, DBO_TRX, Database\factory(), and initConnection().

Referenced by PostgreSqlLockManager\doGetLocksOnServer(), MySqlLockManager\doGetLocksOnServer(), and isServerUp().

DBLockManager::getLocksOnServer (   $lockSrv,
array  $pathsByType 
)
protected

change this code to work in one batch

Parameters
string$lockSrv
array$pathsByType
Returns
StatusValue

Definition at line 100 of file DBLockManager.php.

References $status, $type, as, doGetLocksOnServer(), and StatusValue\newGood().

DBLockManager::getMissKey (   $lockDb)
protected

Get a cache key for recent query misses for a DB.

Parameters
string$lockDb
Returns
string

Definition at line 214 of file DBLockManager.php.

Referenced by cacheCheckFailures(), and cacheRecordFailure().

DBLockManager::initConnection (   $lockDb,
IDatabase  $db 
)
protected

Do additional initialization for new lock DB connection.

Parameters
string$lockDb
IDatabase$db
Exceptions
DBError

Definition at line 180 of file DBLockManager.php.

Referenced by getConnection().

DBLockManager::isServerUp (   $lockSrv)
protected
See also
QuorumLockManager::isServerUp()
Parameters
string$lockSrv
Returns
bool

Definition at line 120 of file DBLockManager.php.

References $e, cacheCheckFailures(), cacheRecordFailure(), and getConnection().

Member Data Documentation

IDatabase [] DBLockManager::$conns = []
protected

Map Database connections (DB name => Database)

Definition at line 47 of file DBLockManager.php.

array [] IDatabase [] DBLockManager::$dbServers
protected

Map of (DB names => server config or IDatabase)

Definition at line 40 of file DBLockManager.php.

DBLockManager::$lockExpiry
protected

Definition at line 44 of file DBLockManager.php.

Referenced by getConnection().

DBLockManager::$safeDelay
protected

Definition at line 45 of file DBLockManager.php.

BagOStuff DBLockManager::$statusCache
protected

Definition at line 42 of file DBLockManager.php.


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