From da5f1240b0fdbdfea73764fb7248ea8279a4683a Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Tue, 9 Jul 2019 23:51:24 -0700 Subject: [PATCH] rdbms: make IDatabase::isReadOnly() return true for replica DBs managed by LoadBalancer Change-Id: I25b70fe0ea113c6741601cf0366a0fe9dc5cc3ef --- includes/libs/rdbms/database/Database.php | 7 ++++++- tests/phpunit/includes/db/LoadBalancerTest.php | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index e3c15fb35a..894a262306 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -4780,8 +4780,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware */ protected function getReadOnlyReason() { $reason = $this->getLBInfo( 'readOnlyReason' ); + if ( is_string( $reason ) ) { + return $reason; + } elseif ( $this->getLBInfo( 'replica' ) ) { + return "Server is configured in the role of a read-only replica database."; + } - return is_string( $reason ) ? $reason : false; + return false; } public function setTableAliases( array $aliases ) { diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php b/tests/phpunit/includes/db/LoadBalancerTest.php index 0c0b82b595..f1bcd9898f 100644 --- a/tests/phpunit/includes/db/LoadBalancerTest.php +++ b/tests/phpunit/includes/db/LoadBalancerTest.php @@ -129,6 +129,7 @@ class LoadBalancerTest extends MediaWikiTestCase { $dbr = $lb->getConnection( DB_REPLICA ); $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'replica shows as replica' ); + $this->assertTrue( $dbr->isReadOnly(), 'replica shows as replica' ); $this->assertEquals( ( $wgDBserver != '' ) ? $wgDBserver : 'localhost', $dbr->getLBInfo( 'clusterMasterHost' ), -- 2.20.1