] );
}
- private function newMultiServerLocalLoadBalancer( $lbExtra = [], $srvExtra = [] ) {
+ private function newMultiServerLocalLoadBalancer(
+ $lbExtra = [], $srvExtra = [], $masterOnly = false
+ ) {
global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir;
$servers = [
'password' => $wgDBpassword,
'type' => $wgDBtype,
'dbDirectory' => $wgSQLiteDataDir,
- 'load' => 0,
+ 'load' => $masterOnly ? 100 : 0,
],
// Main replica DBs
1 => $srvExtra + [
'password' => $wgDBpassword,
'type' => $wgDBtype,
'dbDirectory' => $wgSQLiteDataDir,
- 'load' => 100,
+ 'load' => $masterOnly ? 0 : 100,
],
2 => $srvExtra + [
'host' => $wgDBserver,
'password' => $wgDBpassword,
'type' => $wgDBtype,
'dbDirectory' => $wgSQLiteDataDir,
- 'load' => 100,
+ 'load' => $masterOnly ? 0 : 100,
],
// RC replica DBs
3 => $srvExtra + [
$this->assertEquals( $vslowIndexPicked, $lbWrapper->getExistingReaderIndex( 'vslow' ) );
$this->assertEquals( 6, $vslowIndexPicked );
}
+
+ public function testNonZeroMasterLoad() {
+ $lb = $this->newMultiServerLocalLoadBalancer( [], [ 'flags' => DBO_DEFAULT ], true );
+ // Make sure that no infinite loop occurs (T226678)
+ $rGeneric = $lb->getConnectionRef( DB_REPLICA );
+ $this->assertEquals( $lb->getWriterIndex(), $rGeneric->getLBInfo( 'serverIndex' ) );
+ }
}