From 222b01f5169f1c7e69762e0e8904c24f78f71882 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 28 Jul 2010 11:52:48 +0200 Subject: update to MediaWiki 1.16.0 --- maintenance/runJobs.php | 141 ++++++++++++++++++++++++++++-------------------- 1 file changed, 82 insertions(+), 59 deletions(-) (limited to 'maintenance/runJobs.php') diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index 1340a857..e03bf5d1 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -6,75 +6,98 @@ * --maxjobs (default 10000) * --type * - * @file + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @ingroup Maintenance */ -$optionsWithArgs = array( 'maxjobs', 'type', 'procs' ); -$wgUseNormalUser = true; -require_once( 'commandLine.inc' ); +require_once( dirname(__FILE__) . '/Maintenance.php' ); -if ( isset( $options['procs'] ) ) { - $procs = intval( $options['procs'] ); - if ( $procs < 1 || $procs > 1000 ) { - echo "Invalid argument to --procs\n"; - exit( 1 ); +class RunJobs extends Maintenance { + public function __construct() { + parent::__construct(); + $this->mDescription = "Run pending jobs"; + $this->addOption( 'maxjobs', 'Maximum number of jobs to run', false, true ); + $this->addOption( 'type', 'Type of job to run', false, true ); + $this->addOption( 'procs', 'Number of processes to use', false, true ); } - $fc = new ForkController( $procs ); - if ( $fc->start( $procs ) != 'child' ) { - exit( 0 ); + + public function memoryLimit() { + // Don't eat all memory on the machine if we get a bad job. + return "150M"; } -} - -if ( isset( $options['maxjobs'] ) ) { - $maxJobs = $options['maxjobs']; -} else { - $maxJobs = 10000; -} - -$type = false; -if ( isset( $options['type'] ) ) - $type = $options['type']; - -$wgTitle = Title::newFromText( 'RunJobs.php' ); -$dbw = wfGetDB( DB_MASTER ); -$n = 0; -$conds = ''; -if ($type !== false) - $conds = "job_cmd = " . $dbw->addQuotes($type); - -while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) { - $offset=0; - for (;;) { - $job = ($type == false) ? - Job::pop($offset) - : Job::pop_type($type); - - if ($job == false) - break; - - wfWaitForSlaves( 5 ); - $t = microtime( true ); - $offset=$job->id; - $status = $job->run(); - $t = microtime( true ) - $t; - $timeMs = intval( $t * 1000 ); - if ( !$status ) { - runJobsLog( $job->toString() . " t=$timeMs error={$job->error}" ); - } else { - runJobsLog( $job->toString() . " t=$timeMs good" ); + public function execute() { + global $wgTitle; + if ( $this->hasOption( 'procs' ) ) { + $procs = intval( $this->getOption('procs') ); + if ( $procs < 1 || $procs > 1000 ) { + $this->error( "Invalid argument to --procs", true ); + } + $fc = new ForkController( $procs ); + if ( $fc->start( $procs ) != 'child' ) { + exit( 0 ); + } } - if ( $maxJobs && ++$n > $maxJobs ) { - break 2; + $maxJobs = $this->getOption( 'maxjobs', 10000 ); + $type = $this->getOption( 'type', false ); + $wgTitle = Title::newFromText( 'RunJobs.php' ); + $dbw = wfGetDB( DB_MASTER ); + $n = 0; + $conds = ''; + if ($type !== false) + $conds = "job_cmd = " . $dbw->addQuotes($type); + + while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) { + $offset=0; + for (;;) { + $job = ($type == false) ? + Job::pop($offset) + : Job::pop_type($type); + + if ($job == false) + break; + + wfWaitForSlaves( 5 ); + $t = microtime( true ); + $offset=$job->id; + $status = $job->run(); + $t = microtime( true ) - $t; + $timeMs = intval( $t * 1000 ); + if ( !$status ) { + $this->runJobsLog( $job->toString() . " t=$timeMs error={$job->error}" ); + } else { + $this->runJobsLog( $job->toString() . " t=$timeMs good" ); + } + if ( $maxJobs && ++$n > $maxJobs ) { + break 2; + } + } } } -} - -function runJobsLog( $msg ) { - print wfTimestamp( TS_DB ) . " $msg\n"; - wfDebugLog( 'runJobs', $msg ); + /** + * Log the job message + * @param $msg String The message to log + */ + private function runJobsLog( $msg ) { + $this->output( wfTimestamp( TS_DB ) . " $msg\n" ); + wfDebugLog( 'runJobs', $msg ); + } } - +$maintClass = "RunJobs"; +require_once( DO_MAINTENANCE ); -- cgit v1.2.3-54-g00ecf