From a1094b42db069a1cf05a00301e5a4e52bb545741 Mon Sep 17 00:00:00 2001 From: addshore Date: Mon, 28 Sep 2015 19:34:05 +0100 Subject: [PATCH] Retry getting CatChange RC from master This adds optional flags to Revision::getRecentChange And uses them in CategoryMembershipChange Bug: T109700 Change-Id: I197ebccf1f62cdcb03ce4daa2527b973e495236c --- includes/Revision.php | 11 +++++++++-- includes/changes/CategoryMembershipChange.php | 4 +++- includes/changes/RecentChange.php | 12 +++++++++--- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/includes/Revision.php b/includes/Revision.php index 658420702a..90d6265823 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -948,18 +948,25 @@ class Revision implements IDBAccessObject { /** * Get the RC object belonging to the current revision, if there's one * + * @param int $flags (optional) $flags include: + * Revision::READ_LATEST : Select the data from the master + * * @since 1.22 * @return RecentChange|null */ - public function getRecentChange() { + public function getRecentChange( $flags = 0 ) { $dbr = wfGetDB( DB_SLAVE ); + + list( $dbType, ) = DBAccessObjectUtils::getDBOptions( $flags ); + return RecentChange::newFromConds( array( 'rc_user_text' => $this->getUserText( Revision::RAW ), 'rc_timestamp' => $dbr->timestamp( $this->getTimestamp() ), 'rc_this_oldid' => $this->getId() ), - __METHOD__ + __METHOD__, + $dbType ); } diff --git a/includes/changes/CategoryMembershipChange.php b/includes/changes/CategoryMembershipChange.php index 2533a5bb3a..a12a1d870f 100644 --- a/includes/changes/CategoryMembershipChange.php +++ b/includes/changes/CategoryMembershipChange.php @@ -166,8 +166,10 @@ class CategoryMembershipChange { # If no revision is given, the change was probably triggered by parser functions if ( $revision !== null ) { - // TODO if no RC try again from the master DB? $correspondingRc = $this->revision->getRecentChange(); + if ( $correspondingRc === null ) { + $correspondingRc = $this->revision->getRecentChange( Revision::READ_LATEST ); + } if ( $correspondingRc !== null ) { $bot = $correspondingRc->getAttribute( 'rc_bot' ) ?: 0; $ip = $correspondingRc->getAttribute( 'rc_ip' ) ?: ''; diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php index b681f7fc3f..2ccc24b5e9 100644 --- a/includes/changes/RecentChange.php +++ b/includes/changes/RecentChange.php @@ -173,11 +173,17 @@ class RecentChange { * * @param array $conds Array of conditions * @param mixed $fname Override the method name in profiling/logs + * @param int $dbType DB_* constant + * * @return RecentChange|null */ - public static function newFromConds( $conds, $fname = __METHOD__ ) { - $dbr = wfGetDB( DB_SLAVE ); - $row = $dbr->selectRow( 'recentchanges', self::selectFields(), $conds, $fname ); + public static function newFromConds( + $conds, + $fname = __METHOD__, + $dbType = DB_SLAVE + ) { + $db = wfGetDB( $dbType ); + $row = $db->selectRow( 'recentchanges', self::selectFields(), $conds, $fname ); if ( $row !== false ) { return self::newFromRow( $row ); } else { -- 2.20.1