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