From e2fde0fe45184fd74c95a2760434da9d6aa192c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Sat, 20 Feb 2016 21:22:58 +0100 Subject: [PATCH] Add --wait option for runJobs.php It is now very easy to implement a simple low delay job runner: while true; do php runJobs.php --wait; sleep 1; done; Change-Id: I50cf00aed4b15d90384a2cc12bddd64d96d5a1ad --- maintenance/runJobs.php | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php index 0ac81a44d3..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) @@ -77,15 +79,37 @@ class RunJobs extends Maintenance { $runner->setDebugHandler( [ $this, 'debugInternal' ] ); } - $response = $runner->run( [ - '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; -- 2.20.1