X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FrunJobs.php;h=c3c239154563fc4946b77967c1dacefcde7fab52;hb=eeffd593b87742427c8dd0bb0d89773afd000f66;hp=3c5d28be9f0d22a68de54f6f7cf435f4094c57fc;hpb=f838e8c432704031cf4c56b848ac11ef83fbc676;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index 3c5d28be9f..c3c2391545 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -33,13 +33,14 @@ use MediaWiki\Logger\LoggerFactory; class RunJobs extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Run pending jobs"; + $this->addDescription( 'Run pending jobs' ); $this->addOption( 'maxjobs', 'Maximum number of jobs to run', false, true ); $this->addOption( 'maxtime', 'Maximum amount of wall-clock time', false, true ); $this->addOption( 'type', 'Type of job to run', false, true ); $this->addOption( 'procs', 'Number of processes to use', false, true ); $this->addOption( 'nothrottle', 'Ignore job throttling configuration', false, false ); $this->addOption( 'result', 'Set to JSON to print only a JSON response', false, true ); + $this->addOption( 'wait', 'Wait for new jobs instead of exiting', false, false ); } public function memoryLimit() { @@ -67,6 +68,7 @@ class RunJobs extends Maintenance { } $outputJSON = ( $this->getOption( 'result' ) === 'json' ); + $wait = $this->hasOption( 'wait' ); // Enable DBO_TRX for atomicity; JobRunner manages transactions // and works well in web server mode already (@TODO: this is a hack) @@ -74,18 +76,40 @@ class RunJobs extends Maintenance { $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) ); if ( !$outputJSON ) { - $runner->setDebugHandler( array( $this, 'debugInternal' ) ); + $runner->setDebugHandler( [ $this, 'debugInternal' ] ); } - $response = $runner->run( array( - 'type' => $this->getOption( 'type', false ), - 'maxJobs' => $this->getOption( 'maxjobs', false ), - 'maxTime' => $this->getOption( 'maxtime', false ), - 'throttle' => $this->hasOption( 'nothrottle' ) ? false : true, - ) ); + $type = $this->getOption( 'type', false ); + $maxJobs = $this->getOption( 'maxjobs', false ); + $maxTime = $this->getOption( 'maxtime', false ); + $throttle = !$this->hasOption( 'nothrottle' ); - if ( $outputJSON ) { - $this->output( FormatJson::encode( $response, true ) ); + while ( true ) { + $response = $runner->run( [ + 'type' => $type, + 'maxJobs' => $maxJobs, + 'maxTime' => $maxTime, + 'throttle' => $throttle, + ] ); + + if ( $outputJSON ) { + $this->output( FormatJson::encode( $response, true ) ); + } + + if ( + !$wait || + $response['reached'] === 'time-limit' || + $response['reached'] === 'job-limit' || + $response['reached'] === 'memory-limit' + ) { + break; + } + + if ( $maxJobs !== false ) { + $maxJobs -= count( $response['jobs'] ); + } + + sleep( 1 ); } $wgCommandLineMode = true;