Avoid DB_MASTER queries in User::newSystemUser() when possible
authorAaron Schulz <aschulz@wikimedia.org>
Sun, 14 May 2017 23:56:04 +0000 (16:56 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Sun, 14 May 2017 23:56:04 +0000 (16:56 -0700)
Bug: T92357
Change-Id: I1c90fef9b4f3acc658f4911a8db6f985e7cc7c83

includes/user/User.php

index 5dd4be1..ce6bbc3 100644 (file)
@@ -693,19 +693,31 @@ class User implements IDBAccessObject {
                        return null;
                }
 
-               $fields = self::selectFields();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $row = $dbw->selectRow(
+               $dbr = wfGetDB( DB_REPLICA );
+               $row = $dbr->selectRow(
                        'user',
-                       $fields,
+                       self::selectFields(),
                        [ 'user_name' => $name ],
                        __METHOD__
                );
+               if ( !$row ) {
+                       // Try the master database...
+                       $dbw = wfGetDB( DB_MASTER );
+                       $row = $dbw->selectRow(
+                               'user',
+                               self::selectFields(),
+                               [ 'user_name' => $name ],
+                               __METHOD__
+                       );
+               }
+
                if ( !$row ) {
                        // No user. Create it?
-                       return $options['create'] ? self::createNew( $name, [ 'token' => self::INVALID_TOKEN ] ) : null;
+                       return $options['create']
+                               ? self::createNew( $name, [ 'token' => self::INVALID_TOKEN ] )
+                               : null;
                }
+
                $user = self::newFromRow( $row );
 
                // A user is considered to exist as a non-system user if it can