MediaWiki master
QuorumLockManager Class Reference

Base class for lock managers that use a quorum of peer servers for locks. More...

Inherits LockManager.

Inherited by MemcLockManager, and RedisLockManager.

Collaboration diagram for QuorumLockManager:

Protected Member Functions

 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.
 
 freeLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and release locks on $paths.
 
 getBucketFromPath ( $path)
 Get the bucket for resource path.
 
 getLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and acquire locks.
 
 isServerUp ( $lockSrv)
 Check if a lock server is up.
 
 releaseAllLocks ()
 Release all locks that this session is holding.
 
 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.
 
 sha1Base36Absolute ( $path)
 Get the base 36 SHA-1 of a string, padded to 31 digits.
 

Protected Attributes

array $degradedBuckets = []
 Map of degraded buckets.
 
array $srvsByBucket = []
 Map of bucket indexes to peer server lists.
 
- Protected Attributes inherited from LockManager
string $domain
 domain (usually wiki ID)
 
array $locksHeld = []
 Map of (resource path => lock type => count)
 
int $lockTTL
 maximum time locks can be held
 
array $lockTypeMap
 Mapping of lock types to the type actually used.
 
LoggerInterface $logger
 
string $session
 Random 32-char hex number.
 
const CLI_LOCK_TTL = 3600
 Default lock TTL in CLI mode.
 
const MAX_LOCK_TTL = 2 * 3600
 Max expected lock expiry in any context.
 
const MIN_GUESSED_LOCK_TTL = 5 * 60
 The minimum lock TTL if it is guessed from max_execution_time rather than configured.
 
const MIN_LOCK_TTL = 5
 Minimum lock TTL.
 

Additional Inherited Members

- Public Member Functions inherited from LockManager
 __construct (array $config)
 Construct a new instance from configuration.
 
 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.
 
- Public Attributes inherited from LockManager
const LOCK_EX = 3
 
const LOCK_SH = 1
 Lock types; stronger locks have higher values.
 
const LOCK_UW = 2
 

Detailed Description

Base class for lock managers that use a quorum of peer servers for locks.

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

See MemcLockManager and RedisLockManager.

Stability: 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().

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()
Stability: 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, doLockingRequestBucket(), doUnlockByType(), and getBucketFromPath().

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

◆ doUnlockByType()

QuorumLockManager::doUnlockByType ( array $pathsByType)
protected
Stability: stable
to override
Parameters
array$pathsByType
Returns
StatusValue

Reimplemented from LockManager.

Definition at line 89 of file QuorumLockManager.php.

References $path, doUnlockingRequestBucket(), getBucketFromPath(), 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 MemcLockManager, and RedisLockManager.

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

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

Referenced by 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().

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: