]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blobdiff - includes/job/JobQueue.php
MediaWiki 1.17.0
[autoinstalls/mediawiki.git] / includes / job / JobQueue.php
similarity index 88%
rename from includes/JobQueue.php
rename to includes/job/JobQueue.php
index 4ab5eac6402186aee554fe289f525076bc1b8fec..8eec8215264f8470bab1471f98b6c7c8f8799224 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 /**
+ * Job queue base code
+ *
+ * @file
  * @defgroup JobQueue JobQueue
  */
 
@@ -34,13 +37,6 @@ abstract class Job {
         * Static functions
         *------------------------------------------------------------------------*/
 
-       /**
-        * @deprecated use LinksUpdate::queueRecursiveJobs()
-        */
-       /**
-        * static function queueLinksJobs( $titles ) {}
-        */
-
        /**
         * Pop a job of a certain type.  This tries less hard than pop() to
         * actually find a job; it may be adversely affected by concurrent job
@@ -76,7 +72,8 @@ abstract class Job {
                $namespace = $row->job_namespace;
                $dbkey = $row->job_title;
                $title = Title::makeTitleSafe( $namespace, $dbkey );
-               $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), $row->job_id );
+               $job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ),
+                       $row->job_id );
 
                $dbw->delete( 'job', $job->insertFields(), __METHOD__ );
                $dbw->commit();
@@ -120,7 +117,6 @@ abstract class Job {
                                return false;
                        }
                }
-               $offset = $row->job_id;
 
                // Try to delete it from the master
                $dbw = wfGetDB( DB_MASTER );
@@ -221,12 +217,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,11 +232,40 @@ abstract class Job {
                                $rows = array();
                        }
                }
-               if ( $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 ) );
        }
 
        /*-------------------------------------------------------------------------
@@ -260,6 +285,7 @@ abstract class Job {
 
        /**
         * Insert a single job into the queue.
+        * @return bool true on success
         */
        function insert() {
                $fields = $this->insertFields();
@@ -272,7 +298,7 @@ abstract class Job {
                                return;
                        }
                }
-               $dbw->insert( 'job', $fields, __METHOD__ );
+               return $dbw->insert( 'job', $fields, __METHOD__ );
        }
 
        protected function insertFields() {