From da6d61f8b0137d3ae46d12c69d8b53c98a3c1420 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 18 Mar 2011 07:06:18 +0000 Subject: [PATCH] * Fixed wfIncrStats calls from r83617 (I assume this wants the # of jobs added) * Follow up r83494, r74737: allow for proper db rollback of a user renames (addresses code comments added in r74737) --- includes/job/JobQueue.php | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/includes/job/JobQueue.php b/includes/job/JobQueue.php index 517b94fa5f..34f23b466d 100644 --- a/includes/job/JobQueue.php +++ b/includes/job/JobQueue.php @@ -221,12 +221,12 @@ abstract class Job { * @param $jobs array of Job objects */ static function batchInsert( $jobs ) { - if( !count( $jobs ) ) { + if ( !count( $jobs ) ) { return; } $dbw = wfGetDB( DB_MASTER ); $rows = array(); - foreach( $jobs as $job ) { + foreach ( $jobs as $job ) { $rows[] = $job->insertFields(); if ( count( $rows ) >= 50 ) { # Do a small transaction to avoid slave lag @@ -236,12 +236,40 @@ abstract class Job { $rows = array(); } } - if ( $rows ) { - wfIncrStats( 'job-insert', count( $rows ) ); + if ( $rows ) { // last chunk $dbw->begin(); $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); $dbw->commit(); } + wfIncrStats( 'job-insert', count( $jobs ) ); + } + + /** + * Insert a group of jobs into the queue. + * + * Same as batchInsert() but does not commit and can thus + * be rolled-back as part of a larger transaction. However, + * large batches of jobs can cause slave lag. + * + * @param $jobs array of Job objects + */ + static function safeBatchInsert( $jobs ) { + if ( !count( $jobs ) ) { + return; + } + $dbw = wfGetDB( DB_MASTER ); + $rows = array(); + foreach ( $jobs as $job ) { + $rows[] = $job->insertFields(); + if ( count( $rows ) >= 500 ) { + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + $rows = array(); + } + } + if ( $rows ) { // last chunk + $dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' ); + } + wfIncrStats( 'job-insert', count( $jobs ) ); } /*------------------------------------------------------------------------- -- 2.20.1