*/
class RedisLockManager extends QuorumLockManager {
/** @var array Mapping of lock types to the type actually used */
*/
class RedisLockManager extends QuorumLockManager {
/** @var array Mapping of lock types to the type actually used */
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
self::LOCK_EX => self::LOCK_EX
self::LOCK_SH => self::LOCK_SH,
self::LOCK_UW => self::LOCK_SH,
self::LOCK_EX => self::LOCK_EX
* - 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().
* - 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().
foreach ( $pathsByType as $type => $paths ) {
$typeString = ( $type == LockManager::LOCK_SH ) ? 'SH' : 'EX';
foreach ( $paths as $path ) {
foreach ( $pathsByType as $type => $paths ) {
$typeString = ( $type == LockManager::LOCK_SH ) ? 'SH' : 'EX';
foreach ( $paths as $path ) {
$res = $conn->luaEval( $script,
array_merge(
array_keys( $pathsByKey ), // KEYS[0], KEYS[1],...,KEYS[N]
$res = $conn->luaEval( $script,
array_merge(
array_keys( $pathsByKey ), // KEYS[0], KEYS[1],...,KEYS[N]
$this->session, // ARGV[1]
$this->lockTTL, // ARGV[2]
time() // ARGV[3]
$this->session, // ARGV[1]
$this->lockTTL, // ARGV[2]
time() // ARGV[3]
foreach ( $pathsByType as $type => $paths ) {
$typeString = ( $type == LockManager::LOCK_SH ) ? 'SH' : 'EX';
foreach ( $paths as $path ) {
foreach ( $pathsByType as $type => $paths ) {
$typeString = ( $type == LockManager::LOCK_SH ) ? 'SH' : 'EX';
foreach ( $paths as $path ) {
$res = $conn->luaEval( $script,
array_merge(
array_keys( $pathsByKey ), // KEYS[0], KEYS[1],...,KEYS[N]
$res = $conn->luaEval( $script,
array_merge(
array_keys( $pathsByKey ), // KEYS[0], KEYS[1],...,KEYS[N]
foreach ( $this->locksHeld as $path => $locks ) {
foreach ( $locks as $type => $count ) {
$pathsByType[$type][] = $path;
foreach ( $this->locksHeld as $path => $locks ) {
foreach ( $locks as $type => $count ) {
$pathsByType[$type][] = $path;