MediaWiki  master
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

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

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 Member Functions inherited from LockManager
 __construct (array $config)
 Construct a new instance from configuration Stable to call. 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.

Stable to extend

Since
1.20

Definition at line 32 of file QuorumLockManager.php.

Member Function Documentation

◆ collectPledgeQuorum()

QuorumLockManager::collectPledgeQuorum (   $bucket,
callable  $callback 
)
finalprotected

Attempt to acquire pledges with the peers for a bucket.

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

Parameters
int$bucket
callable$callbackPledge method taking a server name and yielding a StatusValue
Returns
StatusValue

Definition at line 166 of file QuorumLockManager.php.

References isServerUp(), and StatusValue\newGood().

Referenced by doLockingRequestBucket().

◆ 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
StatusValue

Reimplemented from LockManager.

Definition at line 286 of file QuorumLockManager.php.

◆ doLockByType()

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

Reimplemented from LockManager.

Definition at line 39 of file QuorumLockManager.php.

References $path, $type, doLockingRequestBucket(), doUnlockByType(), getBucketFromPath(), and StatusValue\newGood().

◆ 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
StatusValue

Definition at line 133 of file QuorumLockManager.php.

References collectPledgeQuorum(), and getLocksOnServer().

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
StatusValue

Reimplemented from LockManager.

Definition at line 290 of file QuorumLockManager.php.

Referenced by MemcLockManager\__destruct().

◆ doUnlockByType()

QuorumLockManager::doUnlockByType ( array  $pathsByType)
protected

Stable to override.

Parameters
array$pathsByType
Returns
StatusValue

Reimplemented from LockManager.

Definition at line 89 of file QuorumLockManager.php.

References $path, $type, doUnlockingRequestBucket(), getBucketFromPath(), StatusValue\newGood(), and releaseAllLocks().

Referenced by doLockByType().

◆ 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
StatusValue

Definition at line 149 of file QuorumLockManager.php.

References freeLocksOnServer(), and releasePledges().

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
StatusValue

Reimplemented in RedisLockManager, MemcLockManager, and DBLockManager.

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 243 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
StatusValue

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 RedisLockManager, MemcLockManager, and DBLockManager.

Referenced by collectPledgeQuorum(), and releasePledges().

◆ releaseAllLocks()

QuorumLockManager::releaseAllLocks ( )
abstractprotected

Release all locks that this session is holding.

Subclasses must effectively implement this or freeLocksOnServer().

Returns
StatusValue

Reimplemented in RedisLockManager, MemcLockManager, MySqlLockManager, and PostgreSqlLockManager.

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

◆ releasePledges()

QuorumLockManager::releasePledges (   $bucket,
callable  $callback 
)
finalprotected

Attempt to release pledges with the peers for a bucket.

Parameters
int$bucket
callable$callbackPledge method taking a server name and yielding a StatusValue
Returns
StatusValue

Definition at line 208 of file QuorumLockManager.php.

References isServerUp(), and StatusValue\newGood().

Referenced by doUnlockingRequestBucket().

Member Data Documentation

◆ $degradedBuckets

array QuorumLockManager::$degradedBuckets = []
protected

Map of degraded buckets.

Definition at line 37 of file QuorumLockManager.php.

◆ $srvsByBucket

array QuorumLockManager::$srvsByBucket = []
protected

Map of bucket indexes to peer server lists.

Definition at line 34 of file QuorumLockManager.php.


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