$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)
// Commit all outstanding connections that are in a transaction
// to get a fresh repeatable read snapshot on every connection.
// Note that jobs are still responsible for handling slave lag.
- wfGetLBFactory()->commitAll();
+ wfGetLBFactory()->commitAll( __METHOD__ );
// Clear out title cache data from prior snapshots
LinkCache::singleton()->clear();
$timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
// 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
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 {
) {
// 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;
}
} );
// Actually commit the DB master changes
- wfGetLBFactory()->commitMasterChanges();
+ wfGetLBFactory()->commitMasterChanges( __METHOD__ );
// Release the lock
$dbwSerial->unlock( 'jobrunner-serial-commit', __METHOD__ );