|
MediaWiki master
|
Base class for lock managers that use a quorum of peer servers for locks. More...
Inherits Wikimedia\LockManager\LockManager.
Inherited by Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.

Protected Member Functions | ||||
| doLockByType (array $pathsByType) | ||||
Acquire a set of locks without blocking.If some locks could not be acquired, then the other locks should be released. This must set the "lockmanager-fail-conflict" error if there are any lock conflicts.
| ||||
| 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. | ||||
| freeLocksOnServer ( $lockServer, array $pathsByType) | ||||
| Get a connection to a lock server and release locks on $paths. | ||||
| getLocksOnServer ( $lockServer, array $pathsByType) | ||||
| Get a connection to a lock server and acquire locks. | ||||
| isServerUp ( $lockServer) | ||||
| Check if a lock server is up. | ||||
| releaseAllLocks () | ||||
| Release all locks that this session is holding. | ||||
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 | |
| 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 Member Functions inherited from Wikimedia\LockManager\LockManager | |||||||
| __construct (array $config) | |||||||
| Construct a new instance from configuration. | |||||||
| 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. | |||||||
| lockKey (string $key, int $timeout=0) | |||||||
Provide a mutex of the key.
| |||||||
| scopedLock (string $key, int $timeout=0) | |||||||
Lock a key and unlock it automatically when the object is destructed.
| |||||||
| 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. | |||||||
| unlockKey (string $key) | |||||||
| |||||||
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 | ||||||
Base class for lock managers that use a quorum of peer servers for locks.
The resource space can also be sharded into separate peer groups.
See MemcLockManager and RedisLockManager.
Definition at line 22 of file QuorumLockManager.php.
|
finalprotected |
Acquire a set of locks without blocking.If some locks could not be acquired, then the other locks should be released. This must set the "lockmanager-fail-conflict" error if there are any lock conflicts.
| array | $pathsByType | Map of LockManager::LOCK_* constants to lists of paths |
Reimplemented from Wikimedia\LockManager\LockManager.
Definition at line 31 of file QuorumLockManager.php.
References $path, Wikimedia\LockManager\QuorumLockManager\doLockingRequest(), and Wikimedia\LockManager\QuorumLockManager\doUnlockByType().
|
finalprotected |
Attempt to acquire locks with the peers.
This is all or nothing; if any key is locked then this totally fails.
| string | $path | path to be locked |
| string | $type | type of lock to be passed to ::getLocksOnServer() |
Definition at line 97 of file QuorumLockManager.php.
References Wikimedia\LockManager\QuorumLockManager\$minVotes, $path, Wikimedia\LockManager\QuorumLockManager\getLocksOnServer(), and Wikimedia\LockManager\QuorumLockManager\isServerUp().
Referenced by Wikimedia\LockManager\QuorumLockManager\doLockByType().
|
protected |
| array | $pathsByType |
Reimplemented from Wikimedia\LockManager\LockManager.
Definition at line 61 of file QuorumLockManager.php.
References $path, Wikimedia\LockManager\QuorumLockManager\doUnlockingRequest(), and Wikimedia\LockManager\QuorumLockManager\releaseAllLocks().
Referenced by Wikimedia\LockManager\QuorumLockManager\doLockByType().
|
finalprotected |
Attempt to release locks with the peers.
| string | $path | the path to be unlocked |
| string | $type | the type to be passed to ::freeLocksOnServer() |
Definition at line 139 of file QuorumLockManager.php.
References Wikimedia\LockManager\QuorumLockManager\$minVotes, $path, Wikimedia\LockManager\QuorumLockManager\freeLocksOnServer(), and Wikimedia\LockManager\QuorumLockManager\isServerUp().
Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockByType().
|
abstractprotected |
Get a connection to a lock server and release locks on $paths.
Subclasses must effectively implement this or releaseAllLocks().
| string | $lockServer | |
| array | $pathsByType | Map of LockManager::LOCK_* constants to lists of paths |
Reimplemented in Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.
Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockingRequest().
|
abstractprotected |
Get a connection to a lock server and acquire locks.
| string | $lockServer | |
| array | $pathsByType | Map of LockManager::LOCK_* constants to lists of paths |
Reimplemented in Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.
Referenced by Wikimedia\LockManager\QuorumLockManager\doLockingRequest().
|
abstractprotected |
Check if a lock server is up.
This should process cache results to reduce RTT.
| string | $lockServer |
Reimplemented in Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.
Referenced by Wikimedia\LockManager\QuorumLockManager\doLockingRequest(), and Wikimedia\LockManager\QuorumLockManager\doUnlockingRequest().
|
abstractprotected |
Release all locks that this session is holding.
Subclasses must effectively implement this or freeLocksOnServer().
Reimplemented in Wikimedia\LockManager\MemcLockManager, and Wikimedia\LockManager\RedisLockManager.
Referenced by Wikimedia\LockManager\QuorumLockManager\doUnlockByType().
|
protected |
list of down server names
Definition at line 26 of file QuorumLockManager.php.
|
protected |
Map server names to data used by subclasses.
Definition at line 24 of file QuorumLockManager.php.
|
protected |
Minimum number of success to consider lock/unlock successful.
Definition at line 28 of file QuorumLockManager.php.
Referenced by Wikimedia\LockManager\QuorumLockManager\doLockingRequest(), and Wikimedia\LockManager\QuorumLockManager\doUnlockingRequest().