Merge "Made Revision::newFromPageId avoid master queries like newFromTitle does"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 5 Feb 2015 01:24:53 +0000 (01:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 5 Feb 2015 01:24:53 +0000 (01:24 +0000)
1  2 
includes/Revision.php

diff --combined includes/Revision.php
@@@ -121,7 -121,9 +121,9 @@@ class Revision implements IDBAccessObje
                if ( $id ) {
                        // Use the specified ID
                        $conds['rev_id'] = $id;
-                       return self::newFromConds( $conds, (int)$flags );
+                       // This uses slave->master fallback with READ_NORMAL. Assuming revdelete,
+                       // moves, and merges are rare, callers can use this to reduce master queries.
+                       return self::newFromConds( $conds, $flags );
                } else {
                        // Use a join to get the latest revision
                        $conds[] = 'rev_id=page_latest';
                $conds = array( 'page_id' => $pageId );
                if ( $revId ) {
                        $conds['rev_id'] = $revId;
+                       // This uses slave->master fallback with READ_NORMAL. Assuming revdelete
+                       // and merges are rare, callers can use this to reduce master queries.
+                       return self::newFromConds( $conds, $flags );
                } else {
                        // Use a join to get the latest revision
                        $conds[] = 'rev_id = page_latest';
+                       $db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER : DB_SLAVE );
+                       return self::loadFromConds( $db, $conds, $flags );
                }
-               return self::newFromConds( $conds, (int)$flags );
        }
  
        /**
         * Fetch revision's user id without regard for the current user's permissions
         *
         * @return string
 +       * @deprecated since 1.25, use getUser( Revision::RAW )
         */
        public function getRawUser() {
 -              return $this->mUser;
 +              wfDeprecated( __METHOD__, '1.25' );
 +              return $this->getUser( self::RAW );
        }
  
        /**
                } elseif ( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER, $user ) ) {
                        return '';
                } else {
 -                      return $this->getRawUserText();
 +                      if ( $this->mUserText === null ) {
 +                              $this->mUserText = User::whoIs( $this->mUser ); // load on demand
 +                              if ( $this->mUserText === false ) {
 +                                      # This shouldn't happen, but it can if the wiki was recovered
 +                                      # via importing revs and there is no user table entry yet.
 +                                      $this->mUserText = $this->mOrigUserText;
 +                              }
 +                      }
 +                      return $this->mUserText;
                }
        }
  
         * Fetch revision's username without regard for view restrictions
         *
         * @return string
 +       * @deprecated since 1.25, use getUserText( Revision::RAW )
         */
        public function getRawUserText() {
 -              if ( $this->mUserText === null ) {
 -                      $this->mUserText = User::whoIs( $this->mUser ); // load on demand
 -                      if ( $this->mUserText === false ) {
 -                              # This shouldn't happen, but it can if the wiki was recovered
 -                              # via importing revs and there is no user table entry yet.
 -                              $this->mUserText = $this->mOrigUserText;
 -                      }
 -              }
 -              return $this->mUserText;
 +              wfDeprecated( __METHOD__, '1.25' );
 +              return $this->getUserText( self::RAW );
        }
  
        /**
         * Fetch revision comment without regard for the current user's permissions
         *
         * @return string
 +       * @deprecated since 1.25, use getComment( Revision::RAW )
         */
        public function getRawComment() {
 -              return $this->mComment;
 +              wfDeprecated( __METHOD__, '1.25' );
 +              return $this->getComment( self::RAW );
        }
  
        /**
                $dbr = wfGetDB( DB_SLAVE );
                return RecentChange::newFromConds(
                        array(
 -                              'rc_user_text' => $this->getRawUserText(),
 +                              'rc_user_text' => $this->getUserText( Revision::RAW ),
                                'rc_timestamp' => $dbr->timestamp( $this->getTimestamp() ),
                                'rc_this_oldid' => $this->getId()
                        ),