MediaWiki  1.28.0
LockManager Class Reference

Class for handling resource locking. More...

Inheritance diagram for LockManager:
Collaboration diagram for LockManager:

Public Member Functions

 __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

const LOCK_EX = 3
 
const LOCK_SH = 1
 Lock types; stronger locks have higher values. More...
 
const LOCK_UW = 2
 

Protected Member Functions

 doLock (array $paths, $type)
 Lock resources with the given keys and lock type. More...
 
 doLockByType (array $pathsByType)
 
 doUnlock (array $paths, $type)
 Unlock resources with the given keys and lock type. More...
 
 doUnlockByType (array $pathsByType)
 
 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

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

Detailed Description

Class for handling resource locking.

Locks on resource keys can either be shared or exclusive.

Implementations must keep track of what is locked by this proccess in-memory and support nested locking calls (using reference counting). At least LOCK_UW and LOCK_EX must be implemented. LOCK_SH can be a no-op. Locks should either be non-blocking or have low wait timeouts.

Subclasses should avoid throwing exceptions at all costs.

Since
1.19

Definition at line 47 of file LockManager.php.

Constructor & Destructor Documentation

LockManager::__construct ( array  $config)

Construct a new instance from configuration.

Parameters
array$configParameters include:
  • domain : Domain (usually wiki ID) that all resources are relative to [optional]
  • lockTTL : Age (in seconds) at which resource locks should expire. This only applies if locks are not tied to a connection/process.

Definition at line 83 of file LockManager.php.

Member Function Documentation

LockManager::doLock ( array  $paths,
  $type 
)
abstractprotected

Lock resources with the given keys and lock type.

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

Referenced by doLockByType().

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

Definition at line 217 of file LockManager.php.

References $status, $type, as, doLock(), doUnlock(), and StatusValue\newGood().

Referenced by lockByType().

LockManager::doUnlock ( array  $paths,
  $type 
)
abstractprotected

Unlock resources with the given keys and lock type.

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

Referenced by doLockByType(), and doUnlockByType().

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

Definition at line 251 of file LockManager.php.

References $status, $type, as, doUnlock(), and StatusValue\newGood().

Referenced by unlockByType().

LockManager::lock ( array  $paths,
  $type = self::LOCK_EX,
  $timeout = 0 
)
final

Lock the resources at the given abstract paths.

Parameters
array$pathsList of resource names
int$typeLockManager::LOCK_* constant
int$timeoutTimeout in seconds (0 means non-blocking) (since 1.21)
Returns
StatusValue

Definition at line 116 of file LockManager.php.

References $type, and lockByType().

Referenced by RedisLockManager\getLocksOnServer().

LockManager::lockByType ( array  $pathsByType,
  $timeout = 0 
)
final

Lock the resources at the given abstract paths.

Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
int$timeoutTimeout in seconds (0 means non-blocking) (since 1.21)
Returns
StatusValue
Since
1.22

Definition at line 128 of file LockManager.php.

References $status, doLockByType(), normalizePathsByType(), and use.

Referenced by ScopedLock\factory(), and lock().

LockManager::normalizePathsByType ( array  $pathsByType)
finalprotected

Normalize the $paths array by converting LOCK_UW locks into the appropriate type and removing any duplicated paths for each lock type.

Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
array
Since
1.22

Definition at line 202 of file LockManager.php.

References $res, $type, and as.

Referenced by lockByType(), and unlockByType().

LockManager::sha1Base16Absolute (   $path)
finalprotected

Get the base 16 SHA-1 of a string, padded to 31 digits.

Before hashing, the path will be prefixed with the domain ID. This should be used interally for lock key or file names.

Parameters
string$path
Returns
string

Definition at line 190 of file LockManager.php.

LockManager::sha1Base36Absolute (   $path)
finalprotected

Get the base 36 SHA-1 of a string, padded to 31 digits.

Before hashing, the path will be prefixed with the domain ID. This should be used interally for lock key or file names.

Parameters
string$path
Returns
string

Definition at line 178 of file LockManager.php.

Referenced by MySqlLockManager\doGetLocksOnServer(), RedisLockManager\recordKeyForPath(), and MemcLockManager\recordKeyForPath().

LockManager::unlock ( array  $paths,
  $type = self::LOCK_EX 
)
final

Unlock the resources at the given abstract paths.

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

Definition at line 152 of file LockManager.php.

References $type, and unlockByType().

LockManager::unlockByType ( array  $pathsByType)
final

Unlock the resources at the given abstract paths.

Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue
Since
1.22

Definition at line 163 of file LockManager.php.

References $status, doUnlockByType(), and normalizePathsByType().

Referenced by RedisLockManager\__destruct(), and unlock().

Member Data Documentation

LockManager::$domain
protected

Definition at line 61 of file LockManager.php.

array LockManager::$locksHeld = []
protected

Map of (resource path => lock type => count)

Definition at line 59 of file LockManager.php.

Referenced by MemcLockManager\freeLocksOnServer(), and MemcLockManager\getLocksOnServer().

LockManager::$lockTTL
protected

Definition at line 62 of file LockManager.php.

Referenced by MemcLockManager\getLocksOnServer().

array LockManager::$lockTypeMap
protected
Initial value:
= [
self::LOCK_SH => self::LOCK_SH

Mapping of lock types to the type actually used.

Definition at line 52 of file LockManager.php.

LoggerInterface LockManager::$logger
protected

Definition at line 49 of file LockManager.php.

string LockManager::$session
protected

Random 32-char hex number.

Definition at line 65 of file LockManager.php.

Referenced by MySqlLockManager\doGetLocksOnServer(), and MemcLockManager\getLocksOnServer().

const LockManager::LOCK_SH = 1

Lock types; stronger locks have higher values.

Definition at line 68 of file LockManager.php.

Referenced by FSLockManager\doSingleLock(), FileBackendTest\doTestLockCalls(), RedisLockManager\freeLocksOnServer(), and RedisLockManager\getLocksOnServer().


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