Aaron Schulz has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/311097

Change subject: Make LoadBalancer domain handling more robust
......................................................................

Make LoadBalancer domain handling more robust

* Fix regression from 789a54a5f1 where "read" mode of
  tablePrefix()/dbSchema() still set the field.
* Make getConnectionRef() always have the domain set.
* Add a check in openConnection() for explicit local
  connections, treating $domain as false and avoiding
  openForeignConnection(.)

Bug: T145840
Change-Id: Idf392bd9992a215c4fa3bddf275562f3916596aa
---
M includes/db/Database.php
M includes/libs/rdbms/loadbalancer/LoadBalancer.php
M tests/phpunit/includes/db/DatabaseTest.php
3 files changed, 31 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/97/311097/1

diff --git a/includes/db/Database.php b/includes/db/Database.php
index e908824..de8fc9d 100644
--- a/includes/db/Database.php
+++ b/includes/db/Database.php
@@ -466,14 +466,18 @@
 
        public function tablePrefix( $prefix = null ) {
                $old = $this->mTablePrefix;
-               $this->mTablePrefix = $prefix;
+               if ( $prefix !== null ) {
+                       $this->mTablePrefix = $prefix;
+               }
 
                return $old;
        }
 
        public function dbSchema( $schema = null ) {
                $old = $this->mSchema;
-               $this->mSchema = $schema;
+               if ( $schema !== null ) {
+                       $this->mSchema = $schema;
+               }
 
                return $old;
        }
diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php 
b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index db69de1..e399ffa 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -515,7 +515,7 @@
                }
 
                if ( $domain === $this->localDomain ) {
-                       $domain = false;
+                       $domain = false; // local connection requested
                }
 
                $groups = ( $groups === false || $groups === [] )
@@ -627,6 +627,8 @@
         * @since 1.22
         */
        public function getConnectionRef( $db, $groups = [], $domain = false ) {
+               $domain = ( $domain !== false ) ? $domain : $this->localDomain;
+
                return new DBConnRef( $this, $this->getConnection( $db, 
$groups, $domain ) );
        }
 
@@ -650,6 +652,10 @@
        }
 
        public function openConnection( $i, $domain = false ) {
+               if ( $domain === $this->localDomain ) {
+                       $domain = false; // local connection requested
+               }
+
                if ( $domain !== false ) {
                        $conn = $this->openForeignConnection( $i, $domain );
                } elseif ( isset( $this->mConns['local'][$i][0] ) ) {
diff --git a/tests/phpunit/includes/db/DatabaseTest.php 
b/tests/phpunit/includes/db/DatabaseTest.php
index d4be6e4..2c06c43 100644
--- a/tests/phpunit/includes/db/DatabaseTest.php
+++ b/tests/phpunit/includes/db/DatabaseTest.php
@@ -427,4 +427,22 @@
                $this->assertEquals( $origSsl, $db->getFlag( DBO_SSL ) );
                $this->assertEquals( $origTrx, $db->getFlag( DBO_TRX ) );
        }
+
+       /**
+        * @covers DatabaseBase::tablePrefix()
+        * @covers DatabaseBase::dbSchema()
+        */
+       public function testMutators() {
+               $old = $this->db->tablePrefix();
+               $this->assertEquals( $old, $this->db->tablePrefix(), "Prefix 
unchanged" );
+               $this->assertEquals( $old, $this->db->tablePrefix( 'xxx' ) );
+               $this->assertEquals( 'xxx', $this->db->tablePrefix(), "Prefix 
set" );
+               $this->db->tablePrefix( $old );
+
+               $old = $this->db->dbSchema();
+               $this->assertEquals( $old, $this->db->dbSchema(), "Schema 
unchanged" );
+               $this->assertEquals( $old, $this->db->dbSchema( 'xxx' ) );
+               $this->assertEquals( 'xxx', $this->db->dbSchema(), "Schema set" 
);
+               $this->db->dbSchema( $old );
+       }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/311097
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idf392bd9992a215c4fa3bddf275562f3916596aa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to