MediaWiki REL1_31
|
MySQL version of DBLockManager that supports shared locks. More...
Public Member Functions | |
__construct (array $config) | |
Construct a new instance from configuration. | |
Public Member Functions inherited from DBLockManager | |
__destruct () | |
Make sure remaining locks get cleared for sanity. | |
Public Member Functions inherited from LockManager | |
lock (array $paths, $type=self::LOCK_EX, $timeout=0) | |
Lock the resources at the given abstract paths. | |
lockByType (array $pathsByType, $timeout=0) | |
Lock the resources at the given abstract paths. | |
unlock (array $paths, $type=self::LOCK_EX) | |
Unlock the resources at the given abstract paths. | |
unlockByType (array $pathsByType) | |
Unlock the resources at the given abstract paths. | |
Protected Member Functions | |
doGetLocksOnServer ( $lockSrv, array $paths, $type) | |
Get a connection to a lock DB and acquire locks on $paths. | |
initConnection ( $lockDb, IDatabase $db) | |
Do additional initialization for new lock DB connection. | |
releaseAllLocks () | |
Protected Member Functions inherited from DBLockManager | |
cacheCheckFailures ( $lockDb) | |
Checks if the DB has not recently had connection/query errors. | |
cacheRecordFailure ( $lockDb) | |
Log a lock request failure to the cache. | |
freeLocksOnServer ( $lockSrv, array $pathsByType) | |
Get a connection to a lock server and release locks on $paths. | |
getConnection ( $lockDb) | |
Get (or reuse) a connection to a lock DB. | |
getLocksOnServer ( $lockSrv, array $pathsByType) | |
@TODO change this code to work in one batch | |
getMissKey ( $lockDb) | |
Get a cache key for recent query misses for a DB. | |
isServerUp ( $lockSrv) | |
Protected Member Functions inherited from QuorumLockManager | |
collectPledgeQuorum ( $bucket, callable $callback) | |
Attempt to acquire pledges with the peers for a bucket. | |
doLock (array $paths, $type) | |
Lock resources with the given keys and lock type. | |
doLockByType (array $pathsByType) | |
doLockingRequestBucket ( $bucket, array $pathsByType) | |
Attempt to acquire locks with the peers for a bucket. | |
doUnlock (array $paths, $type) | |
Unlock resources with the given keys and lock type. | |
doUnlockByType (array $pathsByType) | |
doUnlockingRequestBucket ( $bucket, array $pathsByType) | |
Attempt to release locks with the peers for a bucket. | |
getBucketFromPath ( $path) | |
Get the bucket for resource path. | |
releasePledges ( $bucket, callable $callback) | |
Attempt to release pledges with the peers for a bucket. | |
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. | |
sha1Base16Absolute ( $path) | |
Get the base 16 SHA-1 of a string, padded to 31 digits. | |
sha1Base36Absolute ( $path) | |
Get the base 36 SHA-1 of a string, padded to 31 digits. | |
Protected Attributes | |
array | $lockTypeMap |
Mapping of lock types to the type actually used. | |
Protected Attributes inherited from DBLockManager | |
IDatabase[] | $conns = [] |
Map Database connections (DB name => Database) | |
array[] IDatabase[] | $dbServers |
Map of (DB names => server config or IDatabase) | |
$lockExpiry | |
$safeDelay | |
BagOStuff | $statusCache |
Protected Attributes inherited from QuorumLockManager | |
array | $degradedBuckets = [] |
Map of degraded buckets. | |
array | $srvsByBucket = [] |
Map of bucket indexes to peer server lists. | |
Protected Attributes inherited from LockManager | |
$domain | |
array | $locksHeld = [] |
Map of (resource path => lock type => count) | |
$lockTTL | |
array | $lockTypeMap |
Mapping of lock types to the type actually used. | |
LoggerInterface | $logger |
string | $session |
Random 32-char hex number. | |
Additional Inherited Members | |
Public Attributes inherited from LockManager | |
const | LOCK_EX = 3 |
const | LOCK_SH = 1 |
Lock types; stronger locks have higher values. | |
const | LOCK_UW = 2 |
MySQL version of DBLockManager that supports shared locks.
Do NOT use this on connection handles that are also being used for anything else as the transaction isolation will be wrong and all the other changes will get rolled back when the locks release!
All lock servers must have the innodb table defined in maintenance/locking/filelocks.sql. All locks are non-blocking, which avoids deadlocks.
Definition at line 18 of file MySqlLockManager.php.
MySqlLockManager::__construct | ( | array | $config | ) |
Construct a new instance from configuration.
array | $config | Parameters include:
|
Reimplemented from DBLockManager.
Definition at line 26 of file MySqlLockManager.php.
|
protected |
Get a connection to a lock DB and acquire locks on $paths.
This does not use GET_LOCK() per https://bugs.mysql.com/bug.php?id=1118.
string | $lockSrv | |
array | $paths | |
string | $type |
Reimplemented from DBLockManager.
Definition at line 49 of file MySqlLockManager.php.
References $keys, LockManager\$session, $type, DBLockManager\getConnection(), and LockManager\sha1Base36Absolute().
|
protected |
Do additional initialization for new lock DB connection.
string | $lockDb | |
IDatabase | $db |
DBError |
Reimplemented from DBLockManager.
Definition at line 32 of file MySqlLockManager.php.
References Wikimedia\Rdbms\IDatabase\query(), and Wikimedia\Rdbms\IDatabase\startAtomic().
|
protected |
Reimplemented from QuorumLockManager.
Definition at line 126 of file MySqlLockManager.php.
References $e.
|
protected |
Mapping of lock types to the type actually used.
Definition at line 20 of file MySqlLockManager.php.