MediaWiki master
Wikimedia\LockManager\QuorumLockManager Class Reference

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

Inherits Wikimedia\LockManager\LockManager.

Inherited by Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.

Collaboration diagram for Wikimedia\LockManager\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.
Parameters
array$pathsList of paths
int$typeLockManager::LOCK_* constant
Returns
StatusValue

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

 
 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.
Parameters
array$pathsList of paths
int$typeLockManager::LOCK_* constant
Returns
StatusValue

 
 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 Wikimedia\LockManager\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 Wikimedia\LockManager\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 MAX_LOCK_TTL = 2 * 3600
 Max expected lock expiry in any context.
 
const MIN_LOCK_TTL = 5
 Minimum lock TTL.
 

Additional Inherited Members

- Public Member Functions inherited from Wikimedia\LockManager\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 Wikimedia\LockManager\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 22 of file QuorumLockManager.php.

Member Function Documentation

◆ collectPledgeQuorum()

Wikimedia\LockManager\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 157 of file QuorumLockManager.php.

References Wikimedia\LockManager\QuorumLockManager\isServerUp().

Referenced by Wikimedia\LockManager\QuorumLockManager\doLockingRequestBucket().

◆ doLock()

Wikimedia\LockManager\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 Wikimedia\LockManager\LockManager.

Definition at line 278 of file QuorumLockManager.php.

◆ doLockByType()

Wikimedia\LockManager\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 Wikimedia\LockManager\LockManager.

Definition at line 30 of file QuorumLockManager.php.

References $path, Wikimedia\LockManager\QuorumLockManager\doLockingRequestBucket(), Wikimedia\LockManager\QuorumLockManager\doUnlockByType(), and Wikimedia\LockManager\QuorumLockManager\getBucketFromPath().

◆ doLockingRequestBucket()

Wikimedia\LockManager\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 124 of file QuorumLockManager.php.

References Wikimedia\LockManager\QuorumLockManager\collectPledgeQuorum(), and Wikimedia\LockManager\QuorumLockManager\getLocksOnServer().

Referenced by Wikimedia\LockManager\QuorumLockManager\doLockByType().

◆ doUnlock()

Wikimedia\LockManager\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 Wikimedia\LockManager\LockManager.

Definition at line 284 of file QuorumLockManager.php.

◆ doUnlockByType()

Wikimedia\LockManager\QuorumLockManager::doUnlockByType ( array $pathsByType)
protected

◆ doUnlockingRequestBucket()

Wikimedia\LockManager\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 140 of file QuorumLockManager.php.

References Wikimedia\LockManager\QuorumLockManager\freeLocksOnServer(), and Wikimedia\LockManager\QuorumLockManager\releasePledges().

Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockByType().

◆ freeLocksOnServer()

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

Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockingRequestBucket().

◆ getBucketFromPath()

Wikimedia\LockManager\QuorumLockManager::getBucketFromPath ( $path)
protected

Get the bucket for resource path.

This should avoid throwing any exceptions.

Parameters
string$path
Returns
int

Definition at line 234 of file QuorumLockManager.php.

References $path.

Referenced by Wikimedia\LockManager\QuorumLockManager\doLockByType(), and Wikimedia\LockManager\QuorumLockManager\doUnlockByType().

◆ getLocksOnServer()

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

Referenced by Wikimedia\LockManager\QuorumLockManager\doLockingRequestBucket().

◆ isServerUp()

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

Referenced by Wikimedia\LockManager\QuorumLockManager\collectPledgeQuorum(), and Wikimedia\LockManager\QuorumLockManager\releasePledges().

◆ releaseAllLocks()

Wikimedia\LockManager\QuorumLockManager::releaseAllLocks ( )
abstractprotected

Release all locks that this session is holding.

Subclasses must effectively implement this or freeLocksOnServer().

Returns
StatusValue

Reimplemented in Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.

Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockByType().

◆ releasePledges()

Wikimedia\LockManager\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 199 of file QuorumLockManager.php.

References Wikimedia\LockManager\QuorumLockManager\isServerUp().

Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockingRequestBucket().

Member Data Documentation

◆ $degradedBuckets

array Wikimedia\LockManager\QuorumLockManager::$degradedBuckets = []
protected

Map of degraded buckets.

Definition at line 27 of file QuorumLockManager.php.

◆ $srvsByBucket

array Wikimedia\LockManager\QuorumLockManager::$srvsByBucket = []
protected

Map of bucket indexes to peer server lists.

Definition at line 24 of file QuorumLockManager.php.


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