MediaWiki REL1_27
MemcLockManager Class Reference

Manage locks using memcached servers. More...

Inheritance diagram for MemcLockManager:
Collaboration diagram for MemcLockManager:

Public Member Functions

 __construct (array $config)
 Construct a new instance from configuration.
 
 __destruct ()
 Make sure remaining locks get cleared for sanity.
 
- Public Member Functions inherited from 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)
 
 doFreeLocksOnServer ( $lockSrv, array $paths, $type)
 
 doGetLocksOnServer ( $lockSrv, array $paths, $type)
 
 freeLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and release locks on $paths.
 
 getCache ( $lockSrv)
 Get the MemcachedBagOStuff object for a $lockSrv.
 
 getLocksOnServer ( $lockSrv, array $pathsByType)
 Get a connection to a lock server and acquire locks.
 
 isServerUp ( $lockSrv)
 
 recordKeyForPath ( $path)
 
 releaseAllLocks ()
 
 releaseMutexes (MemcachedBagOStuff $memc, array $keys)
 
- Protected Member Functions inherited from QuorumLockManager
 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.
 
 getBucketFromPath ( $path)
 Get the bucket for resource path.
 
- 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.
 
 sha1Base16Absolute ( $path)
 Get the base 16 SHA-1 of a string, padded to 31 digits.
 
 sha1Base36Absolute ( $path)
 Get the base 36 SHA-1 of a string, padded to 31 digits.
 

Static Protected Member Functions

static newLockArray ()
 
static sanitizeLockArray ( $a)
 

Protected Attributes

array $bagOStuffs = []
 Map server names to MemcachedBagOStuff objects.
 
array $lockTypeMap
 Mapping of lock types to the type actually used.
 
array $serversUp = []
 (server name => bool)
 
string $session = ''
 Random UUID.
 
- Protected Attributes inherited from QuorumLockManager
array $degradedBuckets = []
 Map of degraded buckets.
 
array $srvsByBucket = []
 Map of bucket indexes to peer server lists.
 
- Protected Attributes inherited from LockManager
 $domain
 
array $locksHeld = []
 Map of (resource path => lock type => count)
 
 $lockTTL
 
array $lockTypeMap
 Mapping of lock types to the type actually used.
 

Additional Inherited Members

- 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

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 38 of file MemcLockManager.php.

Constructor & Destructor Documentation

◆ __construct()

MemcLockManager::__construct ( array  $config)

Construct a new instance from configuration.

Parameters
array$configParameters include:
  • lockServers : Associative array of server names to "<IP>:<port>" strings.
  • srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0, each having an odd-numbered list of server names (peers) as values.
  • memcConfig : Configuration array for ObjectCache::newFromParams. [optional] If set, this must use one of the memcached classes.
Exceptions
Exception

Reimplemented from LockManager.

Definition at line 66 of file MemcLockManager.php.

References $cache, $name, $params, as, ObjectCache\newFromParams(), and wfRandomString().

◆ __destruct()

MemcLockManager::__destruct ( )

Make sure remaining locks get cleared for sanity.

Definition at line 376 of file MemcLockManager.php.

References $path, as, and QuorumLockManager\doUnlock().

Member Function Documentation

◆ acquireMutexes()

MemcLockManager::acquireMutexes ( MemcachedBagOStuff  $memc,
array  $keys 
)
protected
Parameters
MemcachedBagOStuff$memc
array$keysList of keys to acquire
Returns
bool

Definition at line 330 of file MemcLockManager.php.

References $keys, MemcachedBagOStuff\add(), as, and releaseMutexes().

Referenced by doFreeLocksOnServer(), and doGetLocksOnServer().

◆ doFreeLocksOnServer()

MemcLockManager::doFreeLocksOnServer (   $lockSrv,
array  $paths,
  $type 
)
protected
See also
QuorumLockManager::freeLocksOnServer()
Parameters
string$lockSrv
array$paths
string$type
Returns
Status

Definition at line 207 of file MemcLockManager.php.

References $keys, LockManager\$locksHeld, $path, $status, $type, acquireMutexes(), as, getCache(), recordKeyForPath(), releaseMutexes(), sanitizeLockArray(), and wfDebug().

Referenced by freeLocksOnServer(), and getLocksOnServer().

◆ doGetLocksOnServer()

MemcLockManager::doGetLocksOnServer (   $lockSrv,
array  $paths,
  $type 
)
protected

◆ freeLocksOnServer()

MemcLockManager::freeLocksOnServer (   $lockSrv,
array  $pathsByType 
)
protected

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
Status

Reimplemented from QuorumLockManager.

Definition at line 114 of file MemcLockManager.php.

References $status, $type, as, and doFreeLocksOnServer().

◆ getCache()

MemcLockManager::getCache (   $lockSrv)
protected

Get the MemcachedBagOStuff object for a $lockSrv.

Parameters
string$lockSrvServer name
Returns
MemcachedBagOStuff|null

Definition at line 278 of file MemcLockManager.php.

Referenced by doFreeLocksOnServer(), doGetLocksOnServer(), and isServerUp().

◆ getLocksOnServer()

MemcLockManager::getLocksOnServer (   $lockSrv,
array  $pathsByType 
)
protected

Get a connection to a lock server and acquire locks.

Parameters
string$lockSrv
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns
Status

Reimplemented from QuorumLockManager.

Definition at line 92 of file MemcLockManager.php.

References $status, $type, as, doFreeLocksOnServer(), and doGetLocksOnServer().

◆ isServerUp()

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

Reimplemented from QuorumLockManager.

Definition at line 268 of file MemcLockManager.php.

References getCache().

◆ newLockArray()

static MemcLockManager::newLockArray ( )
staticprotected
Returns
array An empty lock structure for a key

Definition at line 307 of file MemcLockManager.php.

Referenced by doGetLocksOnServer(), and sanitizeLockArray().

◆ recordKeyForPath()

MemcLockManager::recordKeyForPath (   $path)
protected
Parameters
string$path
Returns
string

Definition at line 300 of file MemcLockManager.php.

References $path, and LockManager\sha1Base36Absolute().

Referenced by doFreeLocksOnServer(), and doGetLocksOnServer().

◆ releaseAllLocks()

MemcLockManager::releaseAllLocks ( )
protected
See also
QuorumLockManager::releaseAllLocks()
Returns
Status

Reimplemented from QuorumLockManager.

Definition at line 259 of file MemcLockManager.php.

◆ releaseMutexes()

MemcLockManager::releaseMutexes ( MemcachedBagOStuff  $memc,
array  $keys 
)
protected
Parameters
MemcachedBagOStuff$memc
array$keysList of acquired keys

Definition at line 367 of file MemcLockManager.php.

References $keys, as, and MemcachedBagOStuff\delete().

Referenced by acquireMutexes(), doFreeLocksOnServer(), and doGetLocksOnServer().

◆ sanitizeLockArray()

static MemcLockManager::sanitizeLockArray (   $a)
staticprotected
Parameters
array$a
Returns
array An empty lock structure for a key

Definition at line 315 of file MemcLockManager.php.

References newLockArray().

Referenced by doFreeLocksOnServer(), and doGetLocksOnServer().

Member Data Documentation

◆ $bagOStuffs

array MemcLockManager::$bagOStuffs = []
protected

Map server names to MemcachedBagOStuff objects.

Definition at line 47 of file MemcLockManager.php.

◆ $lockTypeMap

array 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 40 of file MemcLockManager.php.

◆ $serversUp

array MemcLockManager::$serversUp = []
protected

(server name => bool)

Definition at line 50 of file MemcLockManager.php.

◆ $session

string MemcLockManager::$session = ''
protected

Random UUID.

Definition at line 53 of file MemcLockManager.php.

Referenced by doGetLocksOnServer().


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