MediaWiki  master
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
 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)
 Get a connection to a lock server and release locks on $paths.Subclasses must effectively implement this or releaseAllLocks().
Parameters
string$lockSrv
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue
Stable to override More...
 
 getConnection ( $lockDb)
 Get (or reuse) a connection to a lock DB. More...
 
 getLocksOnServer ( $lockSrv, array $pathsByType)
 
 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 @stable to override. More...
 
 isServerUp ( $lockSrv)
 
- Protected Member Functions inherited from QuorumLockManager
 collectPledgeQuorum ( $bucket, callable $callback)
 Attempt to acquire pledges with the peers for a bucket. More...
 
 doLock (array $paths, $type)
 Lock resources with the given keys and lock type. More...
 
 doLockByType (array $pathsByType)
 
 doLockingRequestBucket ( $bucket, array $pathsByType)
 Attempt to acquire locks with the peers for a bucket. More...
 
 doUnlock (array $paths, $type)
 Unlock resources with the given keys and lock type. More...
 
 doUnlockByType (array $pathsByType)
 Stable to override. More...
 
 doUnlockingRequestBucket ( $bucket, array $pathsByType)
 Attempt to release locks with the peers for a bucket. More...
 
 getBucketFromPath ( $path)
 Get the bucket for resource path. More...
 
 releaseAllLocks ()
 Release all locks that this session is holding. More...
 
 releasePledges ( $bucket, callable $callback)
 Attempt to release pledges with the peers for a bucket. More...
 
- Protected Member Functions inherited from LockManager
 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.

Stable to extend

Since
1.19

Definition at line 43 of file DBLockManager.php.

Constructor & Destructor Documentation

◆ __construct()

DBLockManager::__construct ( array  $config)

Construct a new instance from configuration.

Stable to call

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.

Reimplemented from LockManager.

Reimplemented in MySqlLockManager.

Definition at line 75 of file DBLockManager.php.

◆ __destruct()

DBLockManager::__destruct ( )

Make sure remaining locks get cleared for sanity.

Definition at line 231 of file DBLockManager.php.

References QuorumLockManager\releaseAllLocks().

Member Function Documentation

◆ cacheCheckFailures()

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 200 of file DBLockManager.php.

References getMissKey().

Referenced by isServerUp().

◆ cacheRecordFailure()

DBLockManager::cacheRecordFailure (   $lockDb)
protected

Log a lock request failure to the cache.

Parameters
string$lockDb
Returns
bool Success

Definition at line 212 of file DBLockManager.php.

References getMissKey().

Referenced by isServerUp().

◆ doGetLocksOnServer()

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

Reimplemented in MySqlLockManager, and PostgreSqlLockManager.

Referenced by getLocksOnServer().

◆ freeLocksOnServer()

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

Get a connection to a lock server and release locks on $paths.Subclasses must effectively implement this or releaseAllLocks().

Parameters
string$lockSrv
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue
Stable to override

Reimplemented from QuorumLockManager.

Definition at line 120 of file DBLockManager.php.

References StatusValue\newGood().

◆ getConnection()

DBLockManager::getConnection (   $lockDb)
protected

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

Parameters
string$lockDb
Returns
IDatabase
Exceptions
DBError
UnexpectedValueException

Definition at line 152 of file DBLockManager.php.

References $lockExpiry, DBO_DEFAULT, DBO_TRX, and initConnection().

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

◆ getLocksOnServer()

DBLockManager::getLocksOnServer (   $lockSrv,
array  $pathsByType 
)
protected
Todo:
change this code to work in one batch Stable to override
Parameters
string$lockSrv
array$pathsByType
Returns
StatusValue

Reimplemented from QuorumLockManager.

Definition at line 105 of file DBLockManager.php.

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

◆ getMissKey()

DBLockManager::getMissKey (   $lockDb)
protected

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

Parameters
string$lockDb
Returns
string

Definition at line 224 of file DBLockManager.php.

Referenced by cacheCheckFailures(), and cacheRecordFailure().

◆ initConnection()

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

Do additional initialization for new lock DB connection @stable to override.

Parameters
string$lockDb
IDatabase$db
Exceptions
DBError

Reimplemented in MySqlLockManager.

Definition at line 190 of file DBLockManager.php.

Referenced by getConnection().

◆ isServerUp()

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

Reimplemented from QuorumLockManager.

Definition at line 129 of file DBLockManager.php.

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

Member Data Documentation

◆ $conns

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

Map Database connections (DB name => Database)

Definition at line 52 of file DBLockManager.php.

◆ $dbServers

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

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

Definition at line 45 of file DBLockManager.php.

◆ $lockExpiry

DBLockManager::$lockExpiry
protected

Definition at line 49 of file DBLockManager.php.

Referenced by getConnection().

◆ $safeDelay

DBLockManager::$safeDelay
protected

Definition at line 50 of file DBLockManager.php.

◆ $statusCache

BagOStuff DBLockManager::$statusCache
protected

Definition at line 47 of file DBLockManager.php.


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