88 $this->workers = $conf[
'workers'];
89 $this->maxqueue = $conf[
'maxqueue'];
90 $this->timeout = $conf[
'timeout'];
91 if ( isset( $conf[
'slots'] ) ) {
92 $this->slots = $conf[
'slots'];
100 $this->isMightWaitKey = !preg_match(
'/^nowait:/', $this->key );
117 $class = $conf[
'class'];
159 if ( $this->isMightWaitKey ) {
160 if ( self::$acquiredMightWaitKey ) {
169 return Status::newFatal(
'poolcounter-usage-error',
170 'You may only aquire a single non-nowait lock.' );
172 } elseif ( $this->timeout !== 0 ) {
173 return Status::newFatal(
'poolcounter-usage-error',
174 'Locks starting in nowait: must have 0 timeout.' );
176 return Status::newGood();
208 return $type .
':' . ( hexdec( substr( sha1(
$key ), 0, 4 ) ) %
$slots );
$wgPoolCounterConf
Configuration for processing pool control, for use in high-traffic wikis.
A default PoolCounter, which provides no locking.
When you have many workers (threads/servers) giving service, and a cached item expensive to produce e...
int $workers
Maximum number of workers working on tasks with the same key simultaneously.
static factory( $type, $key)
Create a Pool counter.
__construct( $conf, $type, $key)
bool $isMightWaitKey
Whether the key is a "might wait" key.
float $timeout
Maximum time in seconds to wait for the lock.
onAcquire()
Update any lock tracking information when the lock is acquired.
int $maxqueue
If this number of workers are already working/waiting, fail instead of wait.
string $key
All workers with the same key share the lock.
int $slots
Maximum number of workers working on this task type, regardless of key.
hashKeyIntoSlots( $type, $key, $slots)
Given a key (any string) and the number of lots, returns a slot key (a prefix with a suffix integer f...
release()
I have successfully finished my task.
precheckAcquire()
Checks that the lock request is sane.
static bool $acquiredMightWaitKey
Whether this process holds a "might wait" lock key.
acquireForMe()
I want to do this task and I need to do it myself.
acquireForAnyone()
I want to do this task, but if anyone else does it instead, it's also fine for me.
onRelease()
Update any lock tracking information when the lock is released.