return $response;
}
- $profiler = Profiler::instance();
-
// Catch huge single updates that lead to slave lag
- $trxProfiler = $profiler->getTransactionProfiler();
+ $trxProfiler = Profiler::instance()->getTransactionProfiler();
$trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
$trxProfiler->setExpectations( $wgTrxProfilerLimits['JobRunner'], __METHOD__ );
$this->debugCallback( $msg );
// Run the job...
- $psection = $profiler->scopedProfileIn( __METHOD__ . '-' . $jType );
$jobStartTime = microtime( true );
try {
++$jobsPopped;
wfGetLBFactory()->commitAll();
$timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
$timeMsTotal += $timeMs;
- $profiler->scopedProfileOut( $psection );
+ // Record how long jobs wait before getting popped
$readyTs = $job->getReadyTimestamp();
if ( $readyTs ) {
- // Record time to run for the job type
$pickupDelay = $popTime - $readyTs;
- $stats->timing( 'jobqueue.pickup_delay.all', $pickupDelay );
- $stats->timing( "jobqueue.pickup_delay.$jType", $pickupDelay );
+ $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'] );
+ $stats->timing( "jobqueue.pickup_root_age.$jType", 1000 * $age );
}
+ // Track the execution time for jobs
+ $stats->timing( "jobqueue.run.$jType", $timeMs );
// Mark the job as done on success or when the job cannot be retried
if ( $status !== false || !$job->allowRetries() ) {
// Re-ping all masters with transactions. This throws DBError if some
// connection died while waiting on locks/slaves, triggering a rollback.
wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( $fname ) {
- $lb->forEachOpenConnection( function( DatabaseBase $conn ) use ( $fname ) {
+ $lb->forEachOpenConnection( function( IDatabase $conn ) use ( $fname ) {
if ( $conn->writesOrCallbacksPending() ) {
$conn->query( "SELECT 1", $fname );
}