From: Timo Tijhof Date: Fri, 30 Sep 2016 21:06:02 +0000 (+0100) Subject: database: Rename LBFactoryMW to MWLBFactory X-Git-Tag: 1.31.0-rc.0~5256^2 X-Git-Url: https://git.cyclocoop.org/%7B%7B%20url_for%28?a=commitdiff_plain;h=6191314e58facc3d67d14b52fce8614e62aee84d;p=lhc%2Fweb%2Fwiklou.git database: Rename LBFactoryMW to MWLBFactory It's no longer an LBFactory subclass (since 5d4b009cf), and the MW-prefix seems more natural for this class. The class has only existed since for about 2 weeks (since 0e5cd18b7) and is not used outside MediaWiki core across Wikimedia Git. Change-Id: I34be982b5d10ad03e062033da9c40b4a01665289 --- diff --git a/autoload.php b/autoload.php index 5b99fac347..323a01d34c 100644 --- a/autoload.php +++ b/autoload.php @@ -663,7 +663,6 @@ $wgAutoloadLocalClasses = [ 'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php', 'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php', 'LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php', - 'LBFactoryMW' => __DIR__ . '/includes/db/loadbalancer/LBFactoryMW.php', 'LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php', 'LBFactorySimple' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySimple.php', 'LBFactorySingle' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySingle.php', @@ -781,6 +780,7 @@ $wgAutoloadLocalClasses = [ 'MWFileProps' => __DIR__ . '/includes/utils/MWFileProps.php', 'MWGrants' => __DIR__ . '/includes/utils/MWGrants.php', 'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php', + 'MWLBFactory' => __DIR__ . '/includes/db/MWLBFactory.php', 'MWMemcached' => __DIR__ . '/includes/compat/MemcachedClientCompat.php', 'MWMessagePack' => __DIR__ . '/includes/libs/MWMessagePack.php', 'MWNamespace' => __DIR__ . '/includes/MWNamespace.php', diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 604491192a..11ee616344 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -45,11 +45,11 @@ return [ 'DBLoadBalancerFactory' => function( MediaWikiServices $services ) { $mainConfig = $services->getMainConfig(); - $lbConf = LBFactoryMW::applyDefaultConfig( + $lbConf = MWLBFactory::applyDefaultConfig( $mainConfig->get( 'LBFactoryConf' ), $mainConfig ); - $class = LBFactoryMW::getLBFactoryClass( $lbConf ); + $class = MWLBFactory::getLBFactoryClass( $lbConf ); return new $class( $lbConf ); }, diff --git a/includes/db/MWLBFactory.php b/includes/db/MWLBFactory.php new file mode 100644 index 0000000000..96c6e9f8d3 --- /dev/null +++ b/includes/db/MWLBFactory.php @@ -0,0 +1,158 @@ + new DatabaseDomain( + $mainConfig->get( 'DBname' ), + null, + $mainConfig->get( 'DBprefix' ) + ), + 'profiler' => Profiler::instance(), + 'trxProfiler' => Profiler::instance()->getTransactionProfiler(), + 'replLogger' => LoggerFactory::getInstance( 'DBReplication' ), + 'queryLogger' => LoggerFactory::getInstance( 'DBQuery' ), + 'connLogger' => LoggerFactory::getInstance( 'DBConnection' ), + 'perfLogger' => LoggerFactory::getInstance( 'DBPerformance' ), + 'errorLogger' => [ MWExceptionHandler::class, 'logException' ], + 'cliMode' => $wgCommandLineMode, + 'hostname' => wfHostname(), + // TODO: replace the global wfConfiguredReadOnlyReason() with a service. + 'readOnlyReason' => wfConfiguredReadOnlyReason(), + ]; + + if ( $lbConf['class'] === 'LBFactorySimple' ) { + if ( isset( $lbConf['servers'] ) ) { + // Server array is already explicitly configured; leave alone + } elseif ( is_array( $mainConfig->get( 'DBservers' ) ) ) { + foreach ( $mainConfig->get( 'DBservers' ) as $i => $server ) { + if ( $server['type'] === 'sqlite' ) { + $server += [ 'dbDirectory' => $mainConfig->get( 'SQLiteDataDir' ) ]; + } elseif ( $server['type'] === 'postgres' ) { + $server += [ 'port' => $mainConfig->get( 'DBport' ) ]; + } + $lbConf['servers'][$i] = $server + [ + 'schema' => $mainConfig->get( 'DBmwschema' ), + 'tablePrefix' => $mainConfig->get( 'DBprefix' ), + 'flags' => DBO_DEFAULT, + 'sqlMode' => $mainConfig->get( 'SQLMode' ), + 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) + ]; + } + } else { + $flags = DBO_DEFAULT; + $flags |= $mainConfig->get( 'DebugDumpSql' ) ? DBO_DEBUG : 0; + $flags |= $mainConfig->get( 'DBssl' ) ? DBO_SSL : 0; + $flags |= $mainConfig->get( 'DBcompress' ) ? DBO_COMPRESS : 0; + $server = [ + 'host' => $mainConfig->get( 'DBserver' ), + 'user' => $mainConfig->get( 'DBuser' ), + 'password' => $mainConfig->get( 'DBpassword' ), + 'dbname' => $mainConfig->get( 'DBname' ), + 'schema' => $mainConfig->get( 'DBmwschema' ), + 'tablePrefix' => $mainConfig->get( 'DBprefix' ), + 'type' => $mainConfig->get( 'DBtype' ), + 'load' => 1, + 'flags' => $flags, + 'sqlMode' => $mainConfig->get( 'SQLMode' ), + 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) + ]; + if ( $server['type'] === 'sqlite' ) { + $server[ 'dbDirectory'] = $mainConfig->get( 'SQLiteDataDir' ); + } elseif ( $server['type'] === 'postgres' ) { + $server['port'] = $mainConfig->get( 'DBport' ); + } + $lbConf['servers'] = [ $server ]; + } + if ( !isset( $lbConf['externalClusters'] ) ) { + $lbConf['externalClusters'] = $mainConfig->get( 'ExternalServers' ); + } + } elseif ( $lbConf['class'] === 'LBFactoryMulti' ) { + if ( isset( $lbConf['serverTemplate'] ) ) { + $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' ); + $lbConf['serverTemplate']['sqlMode'] = $mainConfig->get( 'SQLMode' ); + $lbConf['serverTemplate']['utf8Mode'] = $mainConfig->get( 'DBmysql5' ); + } + } + + // Use APC/memcached style caching, but avoids loops with CACHE_DB (T141804) + $sCache = ObjectCache::getLocalServerInstance(); + if ( $sCache->getQoS( $sCache::ATTR_EMULATION ) > $sCache::QOS_EMULATION_SQL ) { + $lbConf['srvCache'] = $sCache; + } + $cCache = ObjectCache::getLocalClusterInstance(); + if ( $cCache->getQoS( $cCache::ATTR_EMULATION ) > $cCache::QOS_EMULATION_SQL ) { + $lbConf['memCache'] = $cCache; + } + $wCache = ObjectCache::getMainWANInstance(); + if ( $wCache->getQoS( $wCache::ATTR_EMULATION ) > $wCache::QOS_EMULATION_SQL ) { + $lbConf['wanCache'] = $wCache; + } + + return $lbConf; + } + + /** + * Returns the LBFactory class to use and the load balancer configuration. + * + * @todo instead of this, use a ServiceContainer for managing the different implementations. + * + * @param array $config (e.g. $wgLBFactoryConf) + * @return string Class name + */ + public static function getLBFactoryClass( array $config ) { + // For configuration backward compatibility after removing + // underscores from class names in MediaWiki 1.23. + $bcClasses = [ + 'LBFactory_Simple' => 'LBFactorySimple', + 'LBFactory_Single' => 'LBFactorySingle', + 'LBFactory_Multi' => 'LBFactoryMulti' + ]; + + $class = $config['class']; + + if ( isset( $bcClasses[$class] ) ) { + $class = $bcClasses[$class]; + wfDeprecated( + '$wgLBFactoryConf must be updated. See RELEASE-NOTES for details', + '1.23' + ); + } + + return $class; + } +} diff --git a/includes/db/loadbalancer/LBFactoryMW.php b/includes/db/loadbalancer/LBFactoryMW.php deleted file mode 100644 index 9821da1139..0000000000 --- a/includes/db/loadbalancer/LBFactoryMW.php +++ /dev/null @@ -1,158 +0,0 @@ - new DatabaseDomain( - $mainConfig->get( 'DBname' ), - null, - $mainConfig->get( 'DBprefix' ) - ), - 'profiler' => Profiler::instance(), - 'trxProfiler' => Profiler::instance()->getTransactionProfiler(), - 'replLogger' => LoggerFactory::getInstance( 'DBReplication' ), - 'queryLogger' => LoggerFactory::getInstance( 'DBQuery' ), - 'connLogger' => LoggerFactory::getInstance( 'DBConnection' ), - 'perfLogger' => LoggerFactory::getInstance( 'DBPerformance' ), - 'errorLogger' => [ MWExceptionHandler::class, 'logException' ], - 'cliMode' => $wgCommandLineMode, - 'hostname' => wfHostname(), - // TODO: replace the global wfConfiguredReadOnlyReason() with a service. - 'readOnlyReason' => wfConfiguredReadOnlyReason(), - ]; - - if ( $lbConf['class'] === 'LBFactorySimple' ) { - if ( isset( $lbConf['servers'] ) ) { - // Server array is already explicitly configured; leave alone - } elseif ( is_array( $mainConfig->get( 'DBservers' ) ) ) { - foreach ( $mainConfig->get( 'DBservers' ) as $i => $server ) { - if ( $server['type'] === 'sqlite' ) { - $server += [ 'dbDirectory' => $mainConfig->get( 'SQLiteDataDir' ) ]; - } elseif ( $server['type'] === 'postgres' ) { - $server += [ 'port' => $mainConfig->get( 'DBport' ) ]; - } - $lbConf['servers'][$i] = $server + [ - 'schema' => $mainConfig->get( 'DBmwschema' ), - 'tablePrefix' => $mainConfig->get( 'DBprefix' ), - 'flags' => DBO_DEFAULT, - 'sqlMode' => $mainConfig->get( 'SQLMode' ), - 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) - ]; - } - } else { - $flags = DBO_DEFAULT; - $flags |= $mainConfig->get( 'DebugDumpSql' ) ? DBO_DEBUG : 0; - $flags |= $mainConfig->get( 'DBssl' ) ? DBO_SSL : 0; - $flags |= $mainConfig->get( 'DBcompress' ) ? DBO_COMPRESS : 0; - $server = [ - 'host' => $mainConfig->get( 'DBserver' ), - 'user' => $mainConfig->get( 'DBuser' ), - 'password' => $mainConfig->get( 'DBpassword' ), - 'dbname' => $mainConfig->get( 'DBname' ), - 'schema' => $mainConfig->get( 'DBmwschema' ), - 'tablePrefix' => $mainConfig->get( 'DBprefix' ), - 'type' => $mainConfig->get( 'DBtype' ), - 'load' => 1, - 'flags' => $flags, - 'sqlMode' => $mainConfig->get( 'SQLMode' ), - 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) - ]; - if ( $server['type'] === 'sqlite' ) { - $server[ 'dbDirectory'] = $mainConfig->get( 'SQLiteDataDir' ); - } elseif ( $server['type'] === 'postgres' ) { - $server['port'] = $mainConfig->get( 'DBport' ); - } - $lbConf['servers'] = [ $server ]; - } - if ( !isset( $lbConf['externalClusters'] ) ) { - $lbConf['externalClusters'] = $mainConfig->get( 'ExternalServers' ); - } - } elseif ( $lbConf['class'] === 'LBFactoryMulti' ) { - if ( isset( $lbConf['serverTemplate'] ) ) { - $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' ); - $lbConf['serverTemplate']['sqlMode'] = $mainConfig->get( 'SQLMode' ); - $lbConf['serverTemplate']['utf8Mode'] = $mainConfig->get( 'DBmysql5' ); - } - } - - // Use APC/memcached style caching, but avoids loops with CACHE_DB (T141804) - $sCache = ObjectCache::getLocalServerInstance(); - if ( $sCache->getQoS( $sCache::ATTR_EMULATION ) > $sCache::QOS_EMULATION_SQL ) { - $lbConf['srvCache'] = $sCache; - } - $cCache = ObjectCache::getLocalClusterInstance(); - if ( $cCache->getQoS( $cCache::ATTR_EMULATION ) > $cCache::QOS_EMULATION_SQL ) { - $lbConf['memCache'] = $cCache; - } - $wCache = ObjectCache::getMainWANInstance(); - if ( $wCache->getQoS( $wCache::ATTR_EMULATION ) > $wCache::QOS_EMULATION_SQL ) { - $lbConf['wanCache'] = $wCache; - } - - return $lbConf; - } - - /** - * Returns the LBFactory class to use and the load balancer configuration. - * - * @todo instead of this, use a ServiceContainer for managing the different implementations. - * - * @param array $config (e.g. $wgLBFactoryConf) - * @return string Class name - */ - public static function getLBFactoryClass( array $config ) { - // For configuration backward compatibility after removing - // underscores from class names in MediaWiki 1.23. - $bcClasses = [ - 'LBFactory_Simple' => 'LBFactorySimple', - 'LBFactory_Single' => 'LBFactorySingle', - 'LBFactory_Multi' => 'LBFactoryMulti' - ]; - - $class = $config['class']; - - if ( isset( $bcClasses[$class] ) ) { - $class = $bcClasses[$class]; - wfDeprecated( - '$wgLBFactoryConf must be updated. See RELEASE-NOTES for details', - '1.23' - ); - } - - return $class; - } -} diff --git a/tests/phpunit/includes/db/LBFactoryTest.php b/tests/phpunit/includes/db/LBFactoryTest.php index 0f4484e7b6..aed2d83a7d 100644 --- a/tests/phpunit/includes/db/LBFactoryTest.php +++ b/tests/phpunit/includes/db/LBFactoryTest.php @@ -43,7 +43,7 @@ class LBFactoryTest extends MediaWikiTestCase { ]; $this->hideDeprecated( '$wgLBFactoryConf must be updated. See RELEASE-NOTES for details' ); - $result = LBFactoryMW::getLBFactoryClass( $config ); + $result = MWLBFactory::getLBFactoryClass( $config ); $this->assertEquals( $expected, $result ); }