MediaWiki  1.23.13
QuorumLockManager Class Reference

Version of LockManager that uses a quorum from peer servers for locks. More...

Inheritance diagram for QuorumLockManager:
Collaboration diagram for QuorumLockManager:

Protected Member Functions

 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)
 
 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
 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

array $degradedBuckets = array()
 Map of degraded buckets *. More...
 
array $srvsByBucket = array()
 Map of bucket indexes to peer server lists *. More...
 
- Protected Attributes inherited from LockManager
 $domain
 
array $locksHeld = array()
 Map of (resource path => lock type => count) *. More...
 
 $lockTTL
 
array $lockTypeMap
 Mapping of lock types to the type actually used *. More...
 

Additional Inherited Members

- 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...
 
- 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 that uses a quorum from peer servers for locks.

The resource space can also be sharded into separate peer groups.

Since
1.20

Definition at line 31 of file QuorumLockManager.php.

Member Function Documentation

◆ doLock()

QuorumLockManager::doLock ( array  $paths,
  $type 
)
finalprotected

Lock resources with the given keys and lock type.

Parameters
array$pathsList of paths
int$typeLockManager::LOCK_* constant
Returns
Status

Reimplemented from LockManager.

Definition at line 36 of file QuorumLockManager.php.

References $type, array(), and doLockByType().

◆ doLockByType()

QuorumLockManager::doLockByType ( array  $pathsByType)
protected
See also
LockManager::lockByType()
Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
Status
Since
1.22

Reimplemented from LockManager.

Definition at line 44 of file QuorumLockManager.php.

References $path, $type, array(), as, doLockingRequestBucket(), doUnlockByType(), getBucketFromPath(), and Status\newGood().

Referenced by doLock().

◆ doLockingRequestBucket()

QuorumLockManager::doLockingRequestBucket (   $bucket,
array  $pathsByType 
)
finalprotected

Attempt to acquire locks with the peers for a bucket.

This is all or nothing; if any key is locked then this totally fails.

Parameters
int$bucket
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
Status

Definition at line 127 of file QuorumLockManager.php.

References as, getLocksOnServer(), isServerUp(), and Status\newGood().

Referenced by doLockByType().

◆ doUnlock()

QuorumLockManager::doUnlock ( array  $paths,
  $type 
)
finalprotected

Unlock resources with the given keys and lock type.

Parameters
array$pathsList of paths
int$typeLockManager::LOCK_* constant
Returns
Status

Reimplemented from LockManager.

Definition at line 40 of file QuorumLockManager.php.

References $type, array(), and doUnlockByType().

Referenced by MemcLockManager\__destruct().

◆ doUnlockByType()

QuorumLockManager::doUnlockByType ( array  $pathsByType)
protected
See also
LockManager::unlockByType()
Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
Status
Since
1.22

Reimplemented from LockManager.

Definition at line 83 of file QuorumLockManager.php.

References $path, $type, array(), as, doUnlockingRequestBucket(), getBucketFromPath(), Status\newGood(), and releaseAllLocks().

Referenced by doLockByType(), and doUnlock().

◆ doUnlockingRequestBucket()

QuorumLockManager::doUnlockingRequestBucket (   $bucket,
array  $pathsByType 
)
finalprotected

Attempt to release locks with the peers for a bucket.

Parameters
int$bucket
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
Status

Definition at line 169 of file QuorumLockManager.php.

References as, freeLocksOnServer(), isServerUp(), and Status\newGood().

Referenced by doUnlockByType().

◆ freeLocksOnServer()

QuorumLockManager::freeLocksOnServer (   $lockSrv,
array  $pathsByType 
)
abstractprotected

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
Status

Reimplemented in RedisLockManager, DBLockManager, and MemcLockManager.

Referenced by doUnlockingRequestBucket().

◆ getBucketFromPath()

QuorumLockManager::getBucketFromPath (   $path)
protected

Get the bucket for resource path.

This should avoid throwing any exceptions.

Parameters
string$path
Returns
int

Definition at line 204 of file QuorumLockManager.php.

References $path.

Referenced by doLockByType(), and doUnlockByType().

◆ getLocksOnServer()

QuorumLockManager::getLocksOnServer (   $lockSrv,
array  $pathsByType 
)
abstractprotected

Get a connection to a lock server and acquire locks.

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

Reimplemented in DBLockManager, MemcLockManager, and RedisLockManager.

Referenced by doLockingRequestBucket().

◆ isServerUp()

QuorumLockManager::isServerUp (   $lockSrv)
abstractprotected

Check if a lock server is up.

This should process cache results to reduce RTT.

Parameters
string$lockSrv
Returns
bool

Reimplemented in MemcLockManager, RedisLockManager, and DBLockManager.

Referenced by doLockingRequestBucket(), and doUnlockingRequestBucket().

◆ releaseAllLocks()

QuorumLockManager::releaseAllLocks ( )
abstractprotected

Release all locks that this session is holding.

Subclasses must effectively implement this or freeLocksOnServer().

Returns
Status

Reimplemented in PostgreSqlLockManager, MySqlLockManager, MemcLockManager, and RedisLockManager.

Referenced by DBLockManager\__destruct(), and doUnlockByType().

Member Data Documentation

◆ $degradedBuckets

array QuorumLockManager::$degradedBuckets = array()
protected

Map of degraded buckets *.

Definition at line 34 of file QuorumLockManager.php.

◆ $srvsByBucket

array QuorumLockManager::$srvsByBucket = array()
protected

Map of bucket indexes to peer server lists *.

Definition at line 32 of file QuorumLockManager.php.


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