From 368cbdecddc740edf71ef1d9c90a351391c1aa4a Mon Sep 17 00:00:00 2001 From: addshore Date: Fri, 29 Jan 2016 11:10:52 +0100 Subject: [PATCH] Use slave for selects in CategoryMembershipJob This patch switches to using a slave but imediatly waits for the slave to catch up with master (so as not to miss things). This may result in more delay between an edit and category changes being inserted. It may be possible to instead wait for the timestamp that is passed in $this->params['revTimestamp'] which could result in slightly less delay. I can't see any uses of waitForReplication in quite this way but see no imediate reason this would not work. Bug: T125147 Change-Id: Ia0aa722c97f41a3959bcd3cb4210b39db0c3bc45 --- .../jobs/CategoryMembershipChangeJob.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php index a6869c1e11..d34ea41bfb 100644 --- a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php +++ b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php @@ -63,13 +63,21 @@ class CategoryMembershipChangeJob extends Job { // between COMMIT and actual enqueueing of the CategoryMembershipChangeJob job. $cutoffUnix -= self::ENQUEUE_FUDGE_SEC; + $dbr = wfGetDB( DB_SLAVE, array( 'recentchanges' ) ); + if ( !wfGetLB()->safeWaitForPos( $dbr ) ) { + $this->setLastError( "Timed out while waiting for slave to catch up" ); + return false; + } + + $dbr->commit( __METHOD__, 'flush' ); + // Get the newest revision that has a SRC_CATEGORIZE row... - $row = $dbw->selectRow( + $row = $dbr->selectRow( array( 'revision', 'recentchanges' ), array( 'rev_timestamp', 'rev_id' ), array( 'rev_page' => $page->getId(), - 'rev_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) ) + 'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) ) ), __METHOD__, array( 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ), @@ -96,8 +104,8 @@ class CategoryMembershipChangeJob extends Job { // Find revisions to this page made around and after this revision which lack category // notifications in recent changes. This lets jobs pick up were the last one left off. - $encCutoff = $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) ); - $res = $dbw->select( + $encCutoff = $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) ); + $res = $dbr->select( 'revision', Revision::selectFields(), array( -- 2.20.1