From: Tim Starling Date: Sat, 19 Mar 2011 12:55:48 +0000 (+0000) Subject: Don't refuse to do work just because the pool counter server is down. This seemed... X-Git-Tag: 1.31.0-rc.0~31322 X-Git-Url: http://git.cyclocoop.org/clavettes/images/siteon3.jpg?a=commitdiff_plain;h=389125293e3cad99788143c8b3173ef8fe3ca580;p=lhc%2Fweb%2Fwiklou.git Don't refuse to do work just because the pool counter server is down. This seemed like a good idea at the time, but in practice is rather fragile. --- diff --git a/includes/PoolCounter.php b/includes/PoolCounter.php index c24993e835..25bdd2d52a 100644 --- a/includes/PoolCounter.php +++ b/includes/PoolCounter.php @@ -151,44 +151,47 @@ abstract class PoolCounterWork { } else { $status = $this->poolCounter->acquireForMe(); } - - if ( $status->isOK() ) { - switch ( $status->value ) { - case PoolCounter::LOCKED: - $result = $this->doWork(); - $this->poolCounter->release(); - return $result; + + if ( !$status->isOK() ) { + // Respond gracefully to complete server breakage: just log it and do the work + $this->logError( $status ); + return $this->doWork(); + } + + switch ( $status->value ) { + case PoolCounter::LOCKED: + $result = $this->doWork(); + $this->poolCounter->release(); + return $result; + + case PoolCounter::DONE: + $result = $this->getCachedWork(); + if ( $result === false ) { + /* That someone else work didn't serve us. + * Acquire the lock for me + */ + return $this->execute( true ); + } + return $result; + + case PoolCounter::QUEUE_FULL: + case PoolCounter::TIMEOUT: + $result = $this->fallback(); - case PoolCounter::DONE: - $result = $this->getCachedWork(); - if ( $result === false ) { - /* That someone else work didn't serve us. - * Acquire the lock for me - */ - return $this->execute( true ); - } + if ( $result !== false ) { return $result; - - case PoolCounter::QUEUE_FULL: - case PoolCounter::TIMEOUT: - $result = $this->fallback(); - - if ( $result !== false ) { - return $result; - } - /* no break */ + } + /* no break */ + + /* These two cases should never be hit... */ + case PoolCounter::ERROR: + default: + $errors = array( PoolCounter::QUEUE_FULL => 'pool-queuefull', PoolCounter::TIMEOUT => 'pool-timeout' ); - /* These two cases should never be hit... */ - case PoolCounter::ERROR: - default: - $errors = array( PoolCounter::QUEUE_FULL => 'pool-queuefull', PoolCounter::TIMEOUT => 'pool-timeout' ); - - $status = Status::newFatal( isset($errors[$status->value]) ? $errors[$status->value] : 'pool-errorunknown' ); - /* continue to the error */ - } + $status = Status::newFatal( isset($errors[$status->value]) ? $errors[$status->value] : 'pool-errorunknown' ); + $this->logError( $status ); + return $this->error( $status ); } - $this->logError( $status ); - return $this->error( $status ); } function __construct( $type, $key ) {