From: Aaron Schulz Date: Tue, 21 Nov 2017 02:43:40 +0000 (-0800) Subject: Make CategoryMembershipChangeJob query more readable X-Git-Tag: 1.31.0-rc.0~1443^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_aide%28?a=commitdiff_plain;h=7ec76945e334ab9797efa6c479edd9a21a6438c9;p=lhc%2Fweb%2Fwiklou.git Make CategoryMembershipChangeJob query more readable Previously, the INNER JOIN had "rc_timestamp >= rev_timestamp" which complicates query planning. Even with "equals" it still was techinally ambiguous. Instead, just use EXISTS and an exact equality operator. Bug: T180793 Change-Id: I1e9ae7c2ce0f95484e09e867550283d816d151f0 --- diff --git a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php index 55c1367c23..4251a25e06 100644 --- a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php +++ b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php @@ -25,6 +25,8 @@ use Wikimedia\Rdbms\LBFactory; /** * Job to add recent change entries mentioning category membership changes * + * This allows users to easily scan categories for recent page membership changes + * * Parameters include: * - pageId : page ID * - revTimestamp : timestamp of the triggering revision @@ -81,28 +83,28 @@ class CategoryMembershipChangeJob extends Job { // between COMMIT and actual enqueueing of the CategoryMembershipChangeJob job. $cutoffUnix -= self::ENQUEUE_FUDGE_SEC; - // Get the newest revision that has a SRC_CATEGORIZE row... + // Get the newest page revision that has a SRC_CATEGORIZE row. + // Assume that category changes before it were already handled. $row = $dbr->selectRow( - [ 'revision', 'recentchanges' ], + 'revision', [ 'rev_timestamp', 'rev_id' ], [ 'rev_page' => $page->getId(), - 'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) ) - ], - __METHOD__, - [ 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ], - [ - 'recentchanges' => [ - 'INNER JOIN', + 'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) ), + 'EXISTS (' . $dbr->selectSQLText( + 'recentchanges', + '1', [ 'rc_this_oldid = rev_id', 'rc_source' => RecentChange::SRC_CATEGORIZE, // Allow rc_cur_id or rc_timestamp index usage 'rc_cur_id = rev_page', - 'rc_timestamp >= rev_timestamp' + 'rc_timestamp = rev_timestamp' ] - ] - ] + ) . ')' + ], + __METHOD__, + [ 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ] ); // Only consider revisions newer than any such revision if ( $row ) {