X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=maintenance%2FrunJobs.php;h=f06e6b0eac4f60981935465ab5fce3cc436b34df;hb=289c4079577a676bff59a91d5b6e5bccc7d487d3;hp=e909bc06ae173cc5b0a675f241f9367b495cfa08;hpb=2b3224220d9251fd73c03012465e8470e2a835e1;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index e909bc06ae..f06e6b0eac 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -52,6 +52,7 @@ class RunJobs extends Maintenance { public function execute() { global $wgTitle; + if ( $this->hasOption( 'procs' ) ) { $procs = intval( $this->getOption( 'procs' ) ); if ( $procs < 1 || $procs > 1000 ) { @@ -70,26 +71,17 @@ class RunJobs extends Maintenance { $dbw = wfGetDB( DB_MASTER ); $n = 0; - if ( $type === false ) { - $conds = Job::defaultQueueConditions( ); - } else { - $conds = array( 'job_cmd' => $type ); - } - - while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) { - $offset = 0; - for ( ; ; ) { - $job = !$type ? Job::pop( $offset ) : Job::pop_type( $type ); - - if ( !$job ) { - break; - } - - wfWaitForSlaves(); + $group = JobQueueGroup::singleton(); + do { + $job = ( $type === false ) + ? $group->pop() // job from any queue + : $group->get( $type )->pop(); // job from a single queue + if ( $job ) { // found a job + // Perform the job (logging success/failure and runtime)... $t = microtime( true ); - $offset = $job->id; $this->runJobsLog( $job->toString() . " STARTING" ); $status = $job->run(); + $group->ack( $job ); // done $t = microtime( true ) - $t; $timeMs = intval( $t * 1000 ); if ( !$status ) { @@ -97,15 +89,17 @@ class RunJobs extends Maintenance { } else { $this->runJobsLog( $job->toString() . " t=$timeMs good" ); } - - if ( $maxJobs && ++$n > $maxJobs ) { - break 2; + // Break out if we hit the job count or wall time limits... + if ( $maxJobs && ++$n >= $maxJobs ) { + break; } - if ( $maxTime && time() - $startTime > $maxTime ) { - break 2; + if ( $maxTime && ( time() - $startTime ) > $maxTime ) { + break; } + // Don't let any slaves/backups fall behind... + $group->get( $type )->waitForBackups(); } - } + } while ( $job ); // stop when there are no jobs } /**