MediaWiki master
Wikimedia\LockManager\MemcLockManager Class Reference

Manage locks using memcached servers. More...

Inherits Wikimedia\LockManager\QuorumLockManager.

Collaboration diagram for Wikimedia\LockManager\MemcLockManager:

Public Member Functions

 __construct (array $config)
 Construct a new instance from configuration.
 
 __destruct ()
 Make sure remaining locks get cleared.
 
- Public Member Functions inherited from Wikimedia\LockManager\LockManager
 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.
 

Protected Member Functions

 acquireMutexes (MemcachedBagOStuff $memc, array $keys)
 
 freeLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and release locks on $paths.Subclasses must effectively implement this or releaseAllLocks().
Parameters
string$lockServer
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue

 
 getCache ( $lockSrv)
 Get the MemcachedBagOStuff object for a $lockSrv.
 
 getLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and acquire locks.
Parameters
string$lockServer
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue

 
 isServerUp ( $lockSrv)
 
 newLockArray ()
 
 recordKeyForPath ( $path)
 
 releaseAllLocks ()
 
 releaseMutexes (MemcachedBagOStuff $memc, array $keys)
 
 sanitizeLockArray ( $a)
 
- Protected Member Functions inherited from Wikimedia\LockManager\QuorumLockManager
 doLockByType (array $pathsByType)
 
See also
LockManager::lockByType()
Parameters
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
StatusValue

 
 doLockingRequest (string $path, string $type)
 Attempt to acquire locks with the peers.
 
 doUnlockByType (array $pathsByType)
 
 doUnlockingRequest (string $path, string $type)
 Attempt to release locks with the peers.
 
- 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

MemcachedBagOStuff[] $lockServers = []
 Map of (server name => MemcachedBagOStuff)
 
array $lockTypeMap
 Mapping of lock types to the type actually used.
 
MapCacheLRU $statusCache
 Server status cache.
 
- Protected Attributes inherited from Wikimedia\LockManager\QuorumLockManager
array $downServers = []
 list of down server names
 
array $lockServers = []
 Map server names to data used by subclasses.
 
int $minVotes = 2
 Minimum number of success to consider lock/unlock successful.
 
- 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 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

Manage locks using memcached servers.

Version of LockManager based on using memcached servers. This is meant for multi-wiki systems that may share files. All locks are non-blocking, which avoids deadlocks.

All lock requests for a resource, identified by a hash string, will map to one bucket. Each bucket maps to one or several peer servers, each running memcached. A majority of peers must agree for a lock to be acquired.

Since
1.20

Definition at line 30 of file MemcLockManager.php.

Constructor & Destructor Documentation

◆ __construct()

Wikimedia\LockManager\MemcLockManager::__construct ( array $config)

Construct a new instance from configuration.

Parameters
array$configParameters include:
  • lockServers : Associative array of server names to "<IP>:<port>" strings.
  • memcConfig : [optional] Configuration array for MemcachedBagOStuff::construct() with an additional 'class' parameter specifying which MemcachedBagOStuff subclass to use. The server names will be injected.
  • minVotes : Minimum number of votes to consider lock valid. The higher, the stronger (and slower). Default: 2
Exceptions
Exception

Reimplemented from Wikimedia\LockManager\LockManager.

Definition at line 55 of file MemcLockManager.php.

◆ __destruct()

Wikimedia\LockManager\MemcLockManager::__destruct ( )

Make sure remaining locks get cleared.

Definition at line 334 of file MemcLockManager.php.

References $path, and Wikimedia\LockManager\LockManager\unlockByType().

Member Function Documentation

◆ acquireMutexes()

Wikimedia\LockManager\MemcLockManager::acquireMutexes ( MemcachedBagOStuff $memc,
array $keys )
protected

◆ freeLocksOnServer()

Wikimedia\LockManager\MemcLockManager::freeLocksOnServer ( $lockSrv,
array $pathsByType )
protected

◆ getCache()

Wikimedia\LockManager\MemcLockManager::getCache ( $lockSrv)
protected

Get the MemcachedBagOStuff object for a $lockSrv.

Parameters
string$lockSrvServer name
Returns
MemcachedBagOStuff|null

Definition at line 236 of file MemcLockManager.php.

Referenced by Wikimedia\LockManager\MemcLockManager\freeLocksOnServer(), Wikimedia\LockManager\MemcLockManager\getLocksOnServer(), and Wikimedia\LockManager\MemcLockManager\isServerUp().

◆ getLocksOnServer()

◆ isServerUp()

Wikimedia\LockManager\MemcLockManager::isServerUp ( $lockSrv)
protected
See also
QuorumLockManager::isServerUp()
Parameters
string$lockSrv
Returns
bool

Reimplemented from Wikimedia\LockManager\QuorumLockManager.

Definition at line 226 of file MemcLockManager.php.

References Wikimedia\LockManager\MemcLockManager\getCache().

◆ newLockArray()

Wikimedia\LockManager\MemcLockManager::newLockArray ( )
protected

◆ recordKeyForPath()

Wikimedia\LockManager\MemcLockManager::recordKeyForPath ( $path)
protected

◆ releaseAllLocks()

Wikimedia\LockManager\MemcLockManager::releaseAllLocks ( )
protected
See also
QuorumLockManager::releaseAllLocks()
Returns
StatusValue

Reimplemented from Wikimedia\LockManager\QuorumLockManager.

Definition at line 217 of file MemcLockManager.php.

◆ releaseMutexes()

Wikimedia\LockManager\MemcLockManager::releaseMutexes ( MemcachedBagOStuff $memc,
array $keys )
protected

◆ sanitizeLockArray()

Wikimedia\LockManager\MemcLockManager::sanitizeLockArray ( $a)
protected
Parameters
array$a
Returns
array An empty lock structure for a key

Definition at line 272 of file MemcLockManager.php.

References Wikimedia\LockManager\MemcLockManager\newLockArray().

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

Member Data Documentation

◆ $lockServers

MemcachedBagOStuff [] Wikimedia\LockManager\MemcLockManager::$lockServers = []
protected

Map of (server name => MemcachedBagOStuff)

Definition at line 39 of file MemcLockManager.php.

◆ $lockTypeMap

array Wikimedia\LockManager\MemcLockManager::$lockTypeMap
protected
Initial value:
= [
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
self::LOCK_EX => self::LOCK_EX
]
const LOCK_SH
Lock types; stronger locks have higher values.

Mapping of lock types to the type actually used.

Definition at line 32 of file MemcLockManager.php.

◆ $statusCache

MapCacheLRU Wikimedia\LockManager\MemcLockManager::$statusCache
protected

Server status cache.

Definition at line 41 of file MemcLockManager.php.


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