MediaWiki  1.34.4
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)
 
 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. 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

◆ 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 158 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 278 of file QuorumLockManager.php.

◆ doLockByType()

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

Reimplemented from LockManager.

Definition at line 38 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 125 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 282 of file QuorumLockManager.php.

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
StatusValue
Since
1.22

Reimplemented from LockManager.

Definition at line 81 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 141 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 235 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 200 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 36 of file QuorumLockManager.php.

◆ $srvsByBucket

array QuorumLockManager::$srvsByBucket = []
protected

Map of bucket indexes to peer server lists.

Definition at line 33 of file QuorumLockManager.php.


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