jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/404060 )
Change subject: rdbms: add LoadBalancer::getLocalDomainId() method
......................................................................
rdbms: add LoadBalancer::getLocalDomainId() method
This returns the default domain without getting a connection
Also avoid assuming that LoadBalancerTest has the same DB handle
as other tests even though it makes its own LB object. That breaks
if temporary tables are used.
Change-Id: I351d42de38b3126222c5a40627a2a12f76a60939
---
M includes/libs/rdbms/loadbalancer/LoadBalancer.php
M tests/phpunit/includes/db/LoadBalancerTest.php
2 files changed, 43 insertions(+), 7 deletions(-)
Approvals:
Daniel Kinzler: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index a75dc4d..e80b952 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -243,6 +243,17 @@
}
/**
+ * Get the local (and default) database domain ID of connection handles
+ *
+ * @see DatabaseDomain
+ * @return string Database domain ID; this specifies DB name, schema,
and table prefix
+ * @since 1.31
+ */
+ public function getLocalDomainID() {
+ return $this->localDomain->getId();
+ }
+
+ /**
* Get a LoadMonitor instance
*
* @return ILoadMonitor
diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php
b/tests/phpunit/includes/db/LoadBalancerTest.php
index 5fd33dc..54aa2ac 100644
--- a/tests/phpunit/includes/db/LoadBalancerTest.php
+++ b/tests/phpunit/includes/db/LoadBalancerTest.php
@@ -1,8 +1,9 @@
<?php
use Wikimedia\Rdbms\DBError;
-use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\DatabaseDomain;
+use Wikimedia\Rdbms\Database;
/**
* Holds tests for LoadBalancer MediaWiki class.
@@ -35,6 +36,7 @@
[
'host' => $wgDBserver,
'dbname' => $wgDBname,
+ 'tablePrefix' => $this->dbPrefix(),
'user' => $wgDBuser,
'password' => $wgDBpassword,
'type' => $wgDBtype,
@@ -46,8 +48,12 @@
$lb = new LoadBalancer( [
'servers' => $servers,
- 'localDomain' => wfWikiID()
+ 'localDomain' => new DatabaseDomain( $wgDBname, null,
$this->dbPrefix() )
] );
+
+ $ld = DatabaseDomain::newFromId( $lb->getLocalDomainID() );
+ $this->assertEquals( $wgDBname, $ld->getDatabase(), 'local
domain DB set' );
+ $this->assertEquals( $this->dbPrefix(), $ld->getTablePrefix(),
'local domain prefix set' );
$dbw = $lb->getConnection( DB_MASTER );
$this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows
as master' );
@@ -81,6 +87,7 @@
[ // master
'host' => $wgDBserver,
'dbname' => $wgDBname,
+ 'tablePrefix' => $this->dbPrefix(),
'user' => $wgDBuser,
'password' => $wgDBpassword,
'type' => $wgDBtype,
@@ -91,6 +98,7 @@
[ // emulated replica
'host' => $wgDBserver,
'dbname' => $wgDBname,
+ 'tablePrefix' => $this->dbPrefix(),
'user' => $wgDBuser,
'password' => $wgDBpassword,
'type' => $wgDBtype,
@@ -102,7 +110,7 @@
$lb = new LoadBalancer( [
'servers' => $servers,
- 'localDomain' => wfWikiID(),
+ 'localDomain' => new DatabaseDomain( $wgDBname, null,
$this->dbPrefix() ),
'loadMonitorClass' => 'LoadMonitorNull'
] );
@@ -140,9 +148,9 @@
$lb->closeAll();
}
- private function assertWriteForbidden( IDatabase $db ) {
+ private function assertWriteForbidden( Database $db ) {
try {
- $db->delete( 'user', [ 'user_id' => 57634126 ], 'TEST'
);
+ $db->delete( 'some_table', [ 'id' => 57634126 ],
__METHOD__ );
$this->fail( 'Write operation should have failed!' );
} catch ( DBError $ex ) {
// check that the exception message contains "Write
operation"
@@ -157,9 +165,26 @@
}
}
- private function assertWriteAllowed( IDatabase $db ) {
+ private function assertWriteAllowed( Database $db ) {
+ $table = $db->tableName( 'some_table' );
try {
- $this->assertNotSame( false, $db->delete( 'user', [
'user_id' => 57634126 ] ) );
+ $db->dropTable( 'some_table' ); // clear for sanity
+ // Use only basic SQL and trivial types for these
queries for compatibility
+ $this->assertNotSame(
+ false,
+ $db->query( "CREATE TABLE $table (id INT, time
INT)", __METHOD__ ),
+ "table created"
+ );
+ $this->assertNotSame(
+ false,
+ $db->query( "DELETE FROM $table WHERE
id=57634126", __METHOD__ ),
+ "delete query"
+ );
+ $this->assertNotSame(
+ false,
+ $db->query( "DROP TABLE $table", __METHOD__ ),
+ "table dropped"
+ );
} finally {
$db->rollback( __METHOD__, 'flush' );
}
--
To view, visit https://gerrit.wikimedia.org/r/404060
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I351d42de38b3126222c5a40627a2a12f76a60939
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits