MediaWiki  REL1_24
PoolCounterRedis Class Reference

Version of PoolCounter that uses Redis. More...

Inheritance diagram for PoolCounterRedis:
Collaboration diagram for PoolCounterRedis:

List of all members.

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.
 acquireForMe ()
 I want to do this task and I need to do it myself.
 release ()
 I have successfully finished my task.

Static Public Member Functions

static releaseAll ()
 Try to make sure that locks get released (even with exceptions and fatals)

Public Attributes

const AWAKE_ALL = 2
const AWAKE_ONE = 1

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 *.
int $lockTTL
 TTL for locks to expire (work should finish in this time) *.
int $onRelease
 AWAKE_* constant *.
RedisConnectionPool $pool
 *
HashRing $ring
 *
array $serversByLabel
 (server label => host) map *
string $session
 Unique string to identify this process *.
string $slot
 Pool slot value *.
int $slotTime
 UNIX timestamp *.

Static Protected Attributes

static $active = null

Detailed Description

Version of PoolCounter that uses Redis.

There are four main redis keys used to track each pool counter key:

  • poolcounter:l-slots-* : A list of available slot IDs for a pool.
  • poolcounter:z-renewtime-* : A sorted set of (slot ID, UNIX timestamp as score) used for tracking the next time a slot should be released. This is -1 when a slot is created, and is set when released (expired), locked, and unlocked.
  • poolcounter:z-wait-* : A sorted set of (slot ID, UNIX timestamp as score) used for tracking waiting processes (and wait time).
  • poolcounter:l-wakeup-* : A list pushed to for the sake of waking up processes when a any process in the pool finishes (lasts for 1ms). For a given pool key, all the redis keys start off non-existing and are deleted if not used for a while to prevent garbage from building up on the server. They are atomically re-initialized as needed. The "z-renewtime" key is used for detecting sessions which got slots but then disappeared. Stale entries from there have their timestamp updated and the corresponding slots freed up. The "z-wait" key is used for detecting processes registered as waiting but that disappeared. Stale entries from there are deleted and the corresponding slots are freed up. The worker count is included in all the redis key names as it does not vary within each $wgPoolCounterConf type and doing so handles configuration changes.

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 in redis.conf can be helpful otherwise.

Since:
1.23

Definition at line 53 of file PoolCounterRedis.php.


Constructor & Destructor Documentation

PoolCounterRedis::__construct ( conf,
type,
key 
)
Parameters:
array$conf
string$type
string$key

Reimplemented from PoolCounter.

Definition at line 72 of file PoolCounterRedis.php.

References PoolCounter\$key, $type, key, and RedisConnectionPool\singleton().


Member Function Documentation

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.

Returns:
Status Value is one of Locked/Done/Error

Reimplemented from PoolCounter.

Definition at line 119 of file PoolCounterRedis.php.

I want to do this task and I need to do it myself.

Returns:
Status Value is one of Locked/Error

Reimplemented from PoolCounter.

Definition at line 113 of file PoolCounterRedis.php.

Returns:
Status Uses RediConnRef as value on success

Definition at line 94 of file PoolCounterRedis.php.

References array().

Returns:
string

Definition at line 369 of file PoolCounterRedis.php.

Returns:
string

Definition at line 376 of file PoolCounterRedis.php.

Returns:
string

Definition at line 383 of file PoolCounterRedis.php.

Returns:
string

Definition at line 390 of file PoolCounterRedis.php.

PoolCounterRedis::initAndPopPoolSlotList ( RedisConnRef conn,
now 
) [protected]
Parameters:
RedisConnRef$conn
float$nowUNIX timestamp
Returns:
string|bool False on failure

Definition at line 267 of file PoolCounterRedis.php.

PoolCounterRedis::registerAcquisitionTime ( RedisConnRef conn,
slot,
now 
) [protected]
Parameters:
RedisConnRef$conn
string$slot
float$now
Returns:
int|bool False on failure

Definition at line 335 of file PoolCounterRedis.php.

I have successfully finished my task.

Lets another one grab the lock, and returns the workers waiting on acquireForAnyone()

Returns:
Status Value is one of Released/NotLocked/Error

Reimplemented from PoolCounter.

Definition at line 125 of file PoolCounterRedis.php.

static PoolCounterRedis::releaseAll ( ) [static]

Try to make sure that locks get released (even with exceptions and fatals)

Definition at line 397 of file PoolCounterRedis.php.

PoolCounterRedis::waitForSlotOrNotif ( doWakeup) [protected]
Parameters:
int$doWakeupAWAKE_* constant
Returns:
Status

Definition at line 207 of file PoolCounterRedis.php.


Member Data Documentation

PoolCounterRedis::$active = null [static, protected]

Definition at line 70 of file PoolCounterRedis.php.

RedisConnRef PoolCounterRedis::$conn [protected]

*

Definition at line 60 of file PoolCounterRedis.php.

string PoolCounterRedis::$keySha1 [protected]

SHA-1 of the key *.

Definition at line 57 of file PoolCounterRedis.php.

int PoolCounterRedis::$lockTTL [protected]

TTL for locks to expire (work should finish in this time) *.

Definition at line 58 of file PoolCounterRedis.php.

int PoolCounterRedis::$onRelease [protected]

AWAKE_* constant *.

Definition at line 62 of file PoolCounterRedis.php.

RedisConnectionPool PoolCounterRedis::$pool [protected]

*

Definition at line 55 of file PoolCounterRedis.php.

HashRing PoolCounterRedis::$ring [protected]

*

Definition at line 54 of file PoolCounterRedis.php.

array PoolCounterRedis::$serversByLabel [protected]

(server label => host) map *

Definition at line 56 of file PoolCounterRedis.php.

string PoolCounterRedis::$session [protected]

Unique string to identify this process *.

Definition at line 63 of file PoolCounterRedis.php.

string PoolCounterRedis::$slot [protected]

Pool slot value *.

Definition at line 61 of file PoolCounterRedis.php.

int PoolCounterRedis::$slotTime [protected]

UNIX timestamp *.

Definition at line 64 of file PoolCounterRedis.php.

Definition at line 67 of file PoolCounterRedis.php.

Definition at line 66 of file PoolCounterRedis.php.


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