X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fjobqueue%2FJobRunner.php;h=6d2ce0eff960d4d11402681394c611ab1a9dd571;hb=e5b598c0cf93f5ffa540c8581cc2942a601105a5;hp=318330e0861b09991cf60d1172fd35a6daec577a;hpb=3a5e0dc01659ef62d15d6de2325d3886984ccb4e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php index 318330e086..6d2ce0eff9 100644 --- a/includes/jobqueue/JobRunner.php +++ b/includes/jobqueue/JobRunner.php @@ -126,7 +126,7 @@ class JobRunner implements LoggerAwareInterface { $group = JobQueueGroup::singleton(); // Flush any pending DB writes for sanity - wfGetLBFactory()->commitAll(); + wfGetLBFactory()->commitAll( __METHOD__ ); // Some jobs types should not run until a certain timestamp $backoffs = array(); // map of (type => UNIX expiry) @@ -191,21 +191,24 @@ class JobRunner implements LoggerAwareInterface { } // Commit all outstanding connections that are in a transaction // to get a fresh repeatable read snapshot on every connection. - wfGetLBFactory()->commitAll(); + // Note that jobs are still responsible for handling slave lag. + wfGetLBFactory()->commitAll( __METHOD__ ); + // Clear out title cache data from prior snapshots + LinkCache::singleton()->clear(); $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 ); $timeMsTotal += $timeMs; // Record how long jobs wait before getting popped $readyTs = $job->getReadyTimestamp(); if ( $readyTs ) { - $pickupDelay = $popTime - $readyTs; + $pickupDelay = max( 0, $popTime - $readyTs ); $stats->timing( 'jobqueue.pickup_delay.all', 1000 * $pickupDelay ); $stats->timing( "jobqueue.pickup_delay.$jType", 1000 * $pickupDelay ); } // Record root job age for jobs being run $root = $job->getRootJobParams(); if ( $root['rootJobTimestamp'] ) { - $age = $popTime - wfTimestamp( TS_UNIX, $root['rootJobTimestamp'] ); + $age = max( 0, $popTime - wfTimestamp( TS_UNIX, $root['rootJobTimestamp'] ) ); $stats->timing( "jobqueue.pickup_root_age.$jType", 1000 * $age ); } // Track the execution time for jobs @@ -448,7 +451,7 @@ class JobRunner implements LoggerAwareInterface { global $wgJobSerialCommitThreshold; $lb = wfGetLB( wfWikiID() ); - if ( $wgJobSerialCommitThreshold !== false ) { + if ( $wgJobSerialCommitThreshold !== false && $lb->getServerCount() > 1 ) { // Generally, there is one master connection to the local DB $dbwSerial = $lb->getAnyOpenConnection( $lb->getWriterIndex() ); } else { @@ -461,7 +464,7 @@ class JobRunner implements LoggerAwareInterface { ) { // Writes are all to foreign DBs, named locks don't form queues, // or $wgJobSerialCommitThreshold is not reached; commit changes now - wfGetLBFactory()->commitMasterChanges(); + wfGetLBFactory()->commitMasterChanges( __METHOD__ ); return; } @@ -493,7 +496,7 @@ class JobRunner implements LoggerAwareInterface { } ); // Actually commit the DB master changes - wfGetLBFactory()->commitMasterChanges(); + wfGetLBFactory()->commitMasterChanges( __METHOD__ ); // Release the lock $dbwSerial->unlock( 'jobrunner-serial-commit', __METHOD__ );