From 4c8b037a780580fb4cabda217bbb326f562e3ff4 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 20 Feb 2013 10:49:10 -0800 Subject: [PATCH] Cleanups for runJobs.php. * Handle exceptions in run() better. * Made the profiling more accurate. * Simplified the code to handle non-boolean results of run(). wfWarn() was removed, and bugs reports were already filed. Change-Id: Ic702319420efbdf12c17d51494255a64a6212d99 --- maintenance/runJobs.php | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index d582f5157a..f9557ce65e 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -87,33 +87,37 @@ class RunJobs extends Maintenance { ? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE ) : $group->pop( $type ); // job from a single queue if ( $job ) { // found a job - // Perform the job (logging success/failure and runtime)... - $t = microtime( true ); $this->runJobsLog( $job->toString() . " STARTING" ); - $status = $job->run(); - if ( !is_bool( $status ) ) { - wfWarn( $job->getType() . " job failed to return a boolean." ); - $status = true; // sanity + // Run the job... + $t = microtime( true ); + try { + $status = $job->run(); + $error = $job->getLastError(); + } catch ( MWException $e ) { + $status = false; + $error = get_class( $e ) . ': ' . $e->getMessage(); } - if ( $status || !$job->allowRetries() ) { + $timeMs = intval( ( microtime( true ) - $t ) * 1000 ); + + // Mark the job as done on success or when the job cannot be retried + if ( $status !== false || !$job->allowRetries() ) { $group->ack( $job ); // done } - $t = microtime( true ) - $t; - $timeMs = intval( $t * 1000 ); if ( !$status ) { - $this->runJobsLog( $job->toString() . " t=$timeMs error={$job->error}" ); + $this->runJobsLog( $job->toString() . " t=$timeMs error={$error}" ); } else { $this->runJobsLog( $job->toString() . " t=$timeMs good" ); } + // Break out if we hit the job count or wall time limits... if ( $maxJobs && ++$n >= $maxJobs ) { break; - } - if ( $maxTime && ( time() - $startTime ) > $maxTime ) { + } elseif ( $maxTime && ( time() - $startTime ) > $maxTime ) { break; } + // Don't let any slaves/backups fall behind... $group->get( $job->getType() )->waitForBackups(); } -- 2.20.1