MediaWiki  REL1_24
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

 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, $type)
 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
 *
string $session = ''
 Random UUID *.

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.

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

Reimplemented from LockManager.

Definition at line 64 of file RedisLockManager.php.

Make sure remaining locks get cleared for sanity.

Definition at line 258 of file RedisLockManager.php.


Member Function Documentation

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

Reimplemented from QuorumLockManager.

Definition at line 169 of file RedisLockManager.php.

RedisLockManager::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 78 of file RedisLockManager.php.

RedisLockManager::isServerUp ( lockSrv) [protected]

Check if a lock server is up.

This should process cache results to reduce RTT.

Parameters:
string$lockSrv
Returns:
bool

Reimplemented from QuorumLockManager.

Definition at line 241 of file RedisLockManager.php.

RedisLockManager::recordKeyForPath ( path,
type 
) [protected]
Parameters:
string$path
string$typeOne of (EX,SH)
Returns:
string

Definition at line 250 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 237 of file RedisLockManager.php.


Member Data Documentation

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

Definition at line 50 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.

string RedisLockManager::$session = '' [protected]

Random UUID *.

Definition at line 52 of file RedisLockManager.php.


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