MediaWiki  REL1_22
RedisLockManager Class Reference

Manage locks using redis servers. More...

Inheritance diagram for RedisLockManager:
Collaboration diagram for RedisLockManager:

List of all members.

Public Member Functions

 __construct (array $config)
 Construct a new instance from configuration.
 __destruct ()
 Make sure remaining locks get cleared for sanity.

Protected Member Functions

 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.
 getLocksOnServer ($lockSrv, array $pathsByType)
 Get a connection to a lock server and acquire locks.
 isServerUp ($lockSrv)
 Check if a lock server is up.
 recordKeyForPath ($path)
 releaseAllLocks ()
 Release all locks that this session is holding.

Protected Attributes

 $lockServers = array()
Array $lockTypeMap
 Mapping of lock types to the type actually used *.
RedisConnectionPool $redisPool
 *
 $session = ''

Detailed Description

Manage locks using redis servers.

Version of LockManager based on using redis 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 redis. A majority of peers must agree for a lock to be acquired.

This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.

Since:
1.22

Definition at line 40 of file RedisLockManager.php.


Constructor & Destructor Documentation

Construct a new instance from configuration.

$config paramaters 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.
  • redisConfig : Configuration for RedisConnectionPool::__construct().
Parameters:
Array$config
Exceptions:
MWException

Reimplemented from LockManager.

Definition at line 65 of file RedisLockManager.php.

Make sure remaining locks get cleared for sanity.

Definition at line 278 of file RedisLockManager.php.


Member Function Documentation

RedisLockManager::doFreeLocksOnServer ( lockSrv,
array paths,
type 
) [protected]

Definition at line 196 of file RedisLockManager.php.

Referenced by freeLocksOnServer(), and getLocksOnServer().

RedisLockManager::doGetLocksOnServer ( lockSrv,
array paths,
type 
) [protected]

Definition at line 112 of file RedisLockManager.php.

Referenced by getLocksOnServer().

RedisLockManager::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:
$lockSrvstring
array$pathsByTypeMap of LockManager::LOCK_* constants to lists of paths
Returns:
Status

Reimplemented from QuorumLockManager.

Definition at line 102 of file RedisLockManager.php.

References as, doFreeLocksOnServer(), and Status\newGood().

RedisLockManager::getLocksOnServer ( lockSrv,
array pathsByType 
) [protected]

Get a connection to a lock server and acquire locks.

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

Reimplemented from QuorumLockManager.

Definition at line 80 of file RedisLockManager.php.

References array(), as, doFreeLocksOnServer(), doGetLocksOnServer(), and Status\newGood().

RedisLockManager::isServerUp ( lockSrv) [protected]

Check if a lock server is up.

This should process cache results to reduce RTT.

Parameters:
$lockSrvstring
Returns:
bool

Reimplemented from QuorumLockManager.

Definition at line 263 of file RedisLockManager.php.

RedisLockManager::recordKeyForPath ( path) [protected]
Parameters:
$pathstring
Returns:
string

Definition at line 271 of file RedisLockManager.php.

Release all locks that this session is holding.

Subclasses must effectively implement this or freeLocksOnServer().

Returns:
Status

Reimplemented from QuorumLockManager.

Definition at line 259 of file RedisLockManager.php.


Member Data Documentation

RedisLockManager::$lockServers = array() [protected]

Definition at line 49 of file RedisLockManager.php.

Array RedisLockManager::$lockTypeMap [protected]
Initial value:
 array(
        self::LOCK_SH => self::LOCK_SH,
        self::LOCK_UW => self::LOCK_SH,
        self::LOCK_EX => self::LOCK_EX
    )

Mapping of lock types to the type actually used *.

Reimplemented from LockManager.

Definition at line 41 of file RedisLockManager.php.

RedisConnectionPool RedisLockManager::$redisPool [protected]

*

Definition at line 47 of file RedisLockManager.php.

RedisLockManager::$session = '' [protected]

Definition at line 51 of file RedisLockManager.php.


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