[JobQueue] Re-try jobs that fail normally.

* Jobs will be re-attempted if run() returns false.
  This means that claimTTL is useful beyond just the case
  where runners get killed in the middle of a job or an
  uncaught exception is thrown.
* Moved MAX_ATTEMPTS constant up to base class.
* Clarified docs a bit.

Change-Id: Id7f970e82a63aa563e9a7a023ce32e5d6680433a
This commit is contained in:
Aaron Schulz 2013-01-30 20:14:56 -08:00 committed by Gerrit Code Review
parent e4ff0c7567
commit 77ae02cebf
3 changed files with 8 additions and 3 deletions

View file

@ -36,6 +36,8 @@ abstract class JobQueue {
const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
const MAX_ATTEMPTS = 3; // integer; number of times to try a job
/**
* @param $params array
*/
@ -61,7 +63,9 @@ abstract class JobQueue {
* If "random" is used, pop() will pick jobs in random order. This might be
* useful for improving concurrency depending on the queue storage medium.
* - claimTTL : If supported, the queue will recycle jobs that have been popped
* but not acknowledged as completed after this many seconds.
* but not acknowledged as completed after this many seconds. Recycling
* of jobs simple means re-inserting them into the queue. Jobs can be
* attempted up to three times before being discarded.
*
* Queue classes should throw an exception if they do not support the options given.
*

View file

@ -31,7 +31,6 @@ class JobQueueDB extends JobQueue {
const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed
const MAX_ATTEMPTS = 3; // integer; number of times to try a job
const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
const MAX_OFFSET = 255; // integer; maximum number of rows to skip

View file

@ -85,7 +85,9 @@ class RunJobs extends Maintenance {
$t = microtime( true );
$this->runJobsLog( $job->toString() . " STARTING" );
$status = $job->run();
$group->ack( $job ); // done
if ( $status ) {
$group->ack( $job ); // done
}
$t = microtime( true ) - $t;
$timeMs = intval( $t * 1000 );
if ( !$status ) {