Made Revision::newFromPageId avoid master queries like newFromTitle does
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 16 Jan 2015 01:55:39 +0000 (17:55 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 16 Jan 2015 01:55:39 +0000 (17:55 -0800)
Change-Id: I8b8092467d2e6ef7755b5e9aa1986f73fbd1d324

includes/Revision.php

index c8015e6..e9ac424 100644 (file)
@@ -121,7 +121,9 @@ class Revision implements IDBAccessObject {
                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';
@@ -148,11 +150,15 @@ class Revision implements IDBAccessObject {
                $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 );
        }
 
        /**