MediaWiki
1.23.5
|
Version of PoolCounter that uses Redis. More...
Public Member Functions | |
__construct ( $conf, $type, $key) | |
acquireForAnyone () | |
I want to do this task, but if anyone else does it instead, it's also fine for me. More... | |
acquireForMe () | |
I want to do this task and I need to do it myself. More... | |
release () | |
I have successfully finished my task. More... | |
Public Member Functions inherited from PoolCounter | |
getKey () | |
Static Public Member Functions | |
static | releaseAll () |
Try to make sure that locks get released (even with exceptions and fatals) More... | |
Static Public Member Functions inherited from PoolCounter | |
static | factory ( $type, $key) |
Create a Pool counter. More... | |
Public Attributes | |
const | AWAKE_ALL = 2 |
const | AWAKE_ONE = 1 |
Public Attributes inherited from PoolCounter | |
const | DONE = 3 |
const | ERROR = -1 |
const | LOCK_HELD = -5 |
const | LOCKED = 1 |
const | NOT_LOCKED = -2 |
const | QUEUE_FULL = -3 |
const | RELEASED = 2 |
const | TIMEOUT = -4 |
Protected Member Functions | |
getConnection () | |
getSlotListKey () | |
getSlotRTimeSetKey () | |
getWaitSetKey () | |
getWakeupListKey () | |
initAndPopPoolSlotList (RedisConnRef $conn, $now) | |
registerAcquisitionTime (RedisConnRef $conn, $slot, $now) | |
waitForSlotOrNotif ( $doWakeup) | |
Protected Attributes | |
RedisConnRef | $conn |
string | $keySha1 |
SHA-1 of the key *. More... | |
integer | $lockTTL |
TTL for locks to expire (work should finish in this time) *. More... | |
integer | $onRelease |
AWAKE_* constant *. More... | |
RedisConnectionPool | $pool |
HashRing | $ring |
array | $serversByLabel |
(server label => host) map * More... | |
string | $session |
Unique string to identify this process *. More... | |
string | $slot |
Pool slot value *. More... | |
integer | $slotTime |
UNIX timestamp *. More... | |
Protected Attributes inherited from PoolCounter | |
string | $key |
All workers with the same key share the lock *. More... | |
$maxqueue | |
float | $timeout |
Maximum time in seconds to wait for the lock *. More... | |
integer | $workers |
Maximum number of workers doing the task simultaneously *. More... | |
Static Protected Attributes | |
static | $active = null |
Version of PoolCounter that uses Redis.
There are four main redis keys used to track each pool counter key:
This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations. Also this should be on a server plenty of RAM for the working set to avoid evictions. Evictions could temporarily allow wait queues to double in size or temporarily cause pools to appear as full when they are not. Using volatile-ttl and bumping memory-samples and redis.conf can be helpful otherwise.
Definition at line 53 of file PoolCounterRedis.php.
PoolCounterRedis::__construct | ( | $conf, | |
$type, | |||
$key | |||
) |
array | $conf | |
string | $type | |
string | $key |
Reimplemented from PoolCounter.
Definition at line 72 of file PoolCounterRedis.php.
References PoolCounter\$key, $type, array(), key, and RedisConnectionPool\singleton().
PoolCounterRedis::acquireForAnyone | ( | ) |
I want to do this task, but if anyone else does it instead, it's also fine for me.
I will read its cached data.
Reimplemented from PoolCounter.
Definition at line 119 of file PoolCounterRedis.php.
References $section, and waitForSlotOrNotif().
PoolCounterRedis::acquireForMe | ( | ) |
I want to do this task and I need to do it myself.
Reimplemented from PoolCounter.
Definition at line 113 of file PoolCounterRedis.php.
References $section, and waitForSlotOrNotif().
|
protected |
Definition at line 94 of file PoolCounterRedis.php.
References $conn, as, ArrayUtils\consistentHashSort(), key, Status\newFatal(), and Status\newGood().
Referenced by release(), and waitForSlotOrNotif().
|
protected |
Definition at line 365 of file PoolCounterRedis.php.
Referenced by initAndPopPoolSlotList(), registerAcquisitionTime(), release(), and waitForSlotOrNotif().
|
protected |
Definition at line 372 of file PoolCounterRedis.php.
Referenced by initAndPopPoolSlotList(), registerAcquisitionTime(), and release().
|
protected |
Definition at line 379 of file PoolCounterRedis.php.
Referenced by initAndPopPoolSlotList(), registerAcquisitionTime(), release(), and waitForSlotOrNotif().
|
protected |
Definition at line 386 of file PoolCounterRedis.php.
Referenced by release(), and waitForSlotOrNotif().
|
protected |
RedisConnRef | $conn | |
float | $now | UNIX timestamp |
Definition at line 263 of file PoolCounterRedis.php.
References $conn, add, are, array(), as, getSlotListKey(), getSlotRTimeSetKey(), getWaitSetKey(), in, is(), key, later, list, RedisConnRef\luaEval(), network, of, on, that, then, and up.
Referenced by waitForSlotOrNotif().
|
protected |
RedisConnRef | $conn | |
string | $slot | |
float | $now |
Definition at line 331 of file PoolCounterRedis.php.
References $conn, are, array(), as, getSlotListKey(), getSlotRTimeSetKey(), getWaitSetKey(), is(), RedisConnRef\luaEval(), of, on, that, then, and up.
Referenced by waitForSlotOrNotif().
PoolCounterRedis::release | ( | ) |
I have successfully finished my task.
Lets another one grab the lock, and returns the workers waiting on acquireForAnyone()
Reimplemented from PoolCounter.
Definition at line 125 of file PoolCounterRedis.php.
References $conn, $e, $res, $section, are, array(), as, e, from, getConnection(), getSlotListKey(), getSlotRTimeSetKey(), getWaitSetKey(), getWakeupListKey(), is(), list, RedisConnRef\luaEval(), needed(), Status\newFatal(), Status\newGood(), PoolCounter\NOT_LOCKED, of, on, PoolCounter\RELEASED, save, that, then, up, and will.
|
static |
Try to make sure that locks get released (even with exceptions and fatals)
Definition at line 393 of file PoolCounterRedis.php.
|
protected |
int | $doWakeup | AWAKE_* constant |
Definition at line 203 of file PoolCounterRedis.php.
References $conn, $e, $keys, $res, $session, $slot, $slotTime, array(), AWAKE_ALL, PoolCounter\DONE, getConnection(), getSlotListKey(), getWaitSetKey(), getWakeupListKey(), initAndPopPoolSlotList(), PoolCounter\LOCK_HELD, PoolCounter\LOCKED, Status\newFatal(), Status\newGood(), PoolCounter\QUEUE_FULL, registerAcquisitionTime(), and PoolCounter\TIMEOUT.
Referenced by acquireForAnyone(), and acquireForMe().
|
staticprotected |
Definition at line 70 of file PoolCounterRedis.php.
|
protected |
Definition at line 60 of file PoolCounterRedis.php.
Referenced by getConnection(), initAndPopPoolSlotList(), registerAcquisitionTime(), release(), and waitForSlotOrNotif().
|
protected |
SHA-1 of the key *.
Definition at line 57 of file PoolCounterRedis.php.
|
protected |
TTL for locks to expire (work should finish in this time) *.
Definition at line 58 of file PoolCounterRedis.php.
|
protected |
AWAKE_* constant *.
Definition at line 62 of file PoolCounterRedis.php.
|
protected |
Definition at line 55 of file PoolCounterRedis.php.
|
protected |
Definition at line 54 of file PoolCounterRedis.php.
|
protected |
(server label => host) map *
Definition at line 56 of file PoolCounterRedis.php.
|
protected |
Unique string to identify this process *.
Definition at line 63 of file PoolCounterRedis.php.
Referenced by waitForSlotOrNotif().
|
protected |
Pool slot value *.
Definition at line 61 of file PoolCounterRedis.php.
Referenced by waitForSlotOrNotif().
|
protected |
UNIX timestamp *.
Definition at line 64 of file PoolCounterRedis.php.
Referenced by waitForSlotOrNotif().
const PoolCounterRedis::AWAKE_ALL = 2 |
Definition at line 67 of file PoolCounterRedis.php.
Referenced by waitForSlotOrNotif().
const PoolCounterRedis::AWAKE_ONE = 1 |
Definition at line 66 of file PoolCounterRedis.php.