Wait for slaves in RecentChangesUpdateJob
authorMarius Hoch <hoo@online.de>
Sun, 22 Feb 2015 21:08:48 +0000 (22:08 +0100)
committerMarius Hoch <hoo@online.de>
Sun, 22 Feb 2015 21:21:38 +0000 (22:21 +0100)
Change-Id: Iba8dca2f92d1c9ba2e5ab064aae828e4d88779bb

includes/jobqueue/jobs/RecentChangesUpdateJob.php

index b54ecfd..fb10c15 100644 (file)
@@ -64,6 +64,7 @@ class RecentChangesUpdateJob extends Job {
                if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
                        return; // already in progress
                }
+               $batchSize = 100; // Avoid slave lag
 
                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                do {
@@ -71,13 +72,21 @@ class RecentChangesUpdateJob extends Job {
                                'rc_id',
                                array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
                                __METHOD__,
-                               array( 'LIMIT' => 100 ) // avoid slave lag
+                               array( 'LIMIT' => $batchSize )
                        );
                        if ( $rcIds ) {
                                $dbw->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
                        }
                        // No need for this to be in a transaction.
                        $dbw->commit( __METHOD__, 'flush' );
+
+                       if ( count( $rcIds ) === $batchSize ) {
+                               // There might be more, so try waiting for slaves
+                               if ( !wfWaitForSlaves( null, false, false, /* $timeout = */ 3 ) ) {
+                                       // Another job will continue anyway
+                                       break;
+                               }
+                       }
                } while ( $rcIds );
 
                $dbw->unlock( $lockKey, __METHOD__ );