X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FrunJobs.php;h=c3c239154563fc4946b77967c1dacefcde7fab52;hb=7a7277ce98481b65fda799186521d2fdc336455c;hp=86cade293dcbfb990d76af7fa0429429911117c1;hpb=59db24e90bc6027cb8bf2756eb8cb52230d24966;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index 86cade293d..c3c2391545 100644 --- a/maintenance/runJobs.php +++ b/maintenance/runJobs.php @@ -40,6 +40,7 @@ class RunJobs extends Maintenance { $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;