[JobQueue] Re-try jobs that fail normally.
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 31 Jan 2013 04:14:56 +0000 (20:14 -0800)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 31 Jan 2013 06:26:20 +0000 (06:26 +0000)
* 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

includes/job/JobQueue.php
includes/job/JobQueueDB.php
maintenance/runJobs.php

index 17f6648..6cdc948 100644 (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.
         *
index 1c9c8a7..99a517e 100644 (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
 
index 85b0993..0cf0217 100644 (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 ) {