X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fdb%2FMWLBFactory.php;h=fe063f20b15f37d1e75cd4b01be6f664fa50ffb8;hb=4c5e3357f16be0d2e05bbd27d6cdcae148581b8b;hp=5a5c46c0bdc0b6a355e8b5958277cd8f7699f457;hpb=86448ece43db70f21d591b7d0ce52447664a2600;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/db/MWLBFactory.php b/includes/db/MWLBFactory.php index 5a5c46c0bd..fe063f20b1 100644 --- a/includes/db/MWLBFactory.php +++ b/includes/db/MWLBFactory.php @@ -23,6 +23,7 @@ use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\DatabaseDomain; /** * MediaWiki-specific class for generating database load balancers @@ -37,6 +38,8 @@ abstract class MWLBFactory { public static function applyDefaultConfig( array $lbConf, Config $mainConfig ) { global $wgCommandLineMode; + static $typesWithSchema = [ 'postgres', 'msssql' ]; + $lbConf += [ 'localDomain' => new DatabaseDomain( $mainConfig->get( 'DBname' ), @@ -56,6 +59,9 @@ abstract class MWLBFactory { 'readOnlyReason' => wfConfiguredReadOnlyReason(), ]; + // When making changes here, remember to also specify MediaWiki-specific options + // for Database classes in the relevant Installer subclass. + // Such as MysqlInstaller::openConnection and PostgresInstaller::openConnectionWithParams. if ( $lbConf['class'] === 'LBFactorySimple' ) { if ( isset( $lbConf['servers'] ) ) { // Server array is already explicitly configured; leave alone @@ -69,14 +75,25 @@ abstract class MWLBFactory { // Work around the reserved word usage in MediaWiki schema 'keywordTableMap' => [ 'user' => 'mwuser', 'text' => 'pagecontent' ] ]; + } elseif ( $server['type'] === 'mssql' ) { + $server += [ + 'port' => $mainConfig->get( 'DBport' ), + 'useWindowsAuth' => $mainConfig->get( 'DBWindowsAuthentication' ) + ]; + } + + if ( in_array( $server['type'], $typesWithSchema, true ) ) { + $server += [ 'schema' => $mainConfig->get( 'DBmwschema' ) ]; } - $lbConf['servers'][$i] = $server + [ - 'schema' => $mainConfig->get( 'DBmwschema' ), + + $server += [ 'tablePrefix' => $mainConfig->get( 'DBprefix' ), 'flags' => DBO_DEFAULT, 'sqlMode' => $mainConfig->get( 'SQLMode' ), 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) ]; + + $lbConf['servers'][$i] = $server; } } else { $flags = DBO_DEFAULT; @@ -88,7 +105,6 @@ abstract class MWLBFactory { '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, @@ -96,12 +112,18 @@ abstract class MWLBFactory { 'sqlMode' => $mainConfig->get( 'SQLMode' ), 'utf8Mode' => $mainConfig->get( 'DBmysql5' ) ]; + if ( in_array( $server['type'], $typesWithSchema, true ) ) { + $server += [ 'schema' => $mainConfig->get( 'DBmwschema' ) ]; + } if ( $server['type'] === 'sqlite' ) { $server[ 'dbDirectory'] = $mainConfig->get( 'SQLiteDataDir' ); } elseif ( $server['type'] === 'postgres' ) { $server['port'] = $mainConfig->get( 'DBport' ); // Work around the reserved word usage in MediaWiki schema $server['keywordTableMap'] = [ 'user' => 'mwuser', 'text' => 'pagecontent' ]; + } elseif ( $server['type'] === 'mssql' ) { + $server['port'] = $mainConfig->get( 'DBport' ); + $server['useWindowsAuth'] = $mainConfig->get( 'DBWindowsAuthentication' ); } $lbConf['servers'] = [ $server ]; } @@ -110,7 +132,9 @@ abstract class MWLBFactory { } } elseif ( $lbConf['class'] === 'LBFactoryMulti' ) { if ( isset( $lbConf['serverTemplate'] ) ) { - $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' ); + if ( in_array( $lbConf['serverTemplate']['type'], $typesWithSchema, true ) ) { + $lbConf['serverTemplate']['schema'] = $mainConfig->get( 'DBmwschema' ); + } $lbConf['serverTemplate']['sqlMode'] = $mainConfig->get( 'SQLMode' ); $lbConf['serverTemplate']['utf8Mode'] = $mainConfig->get( 'DBmysql5' ); } @@ -133,25 +157,6 @@ abstract class MWLBFactory { return $lbConf; } - /** - * @param LBFactory $lbf New LBFactory instance that will be bound to $services - * @param MediaWikiServices $services - */ - public static function setCacheUsageCallbacks( LBFactory $lbf, MediaWikiServices $services ) { - // Account for lag and pending updates by default in cache generator callbacks - $wCache = $services->getMainWANObjectCache(); - $wCache->setDefaultCacheSetOptionCallbacks( - function () use ( $lbf ) { - return $lbf->declareUsageSectionStart(); - }, - function ( $id ) use ( $lbf ) { - $info = $lbf->declareUsageSectionEnd( $id ); - - return $info['cacheSetOptions'] ?: []; - } - ); - } - /** * Returns the LBFactory class to use and the load balancer configuration. * @@ -179,6 +184,17 @@ abstract class MWLBFactory { ); } + // For configuration backward compatibility after moving classes to namespaces (1.29) + $compat = [ + 'LBFactorySingle' => Wikimedia\Rdbms\LBFactorySingle::class, + 'LBFactorySimple' => Wikimedia\Rdbms\LBFactorySimple::class, + 'LBFactoryMulti' => Wikimedia\Rdbms\LBFactoryMulti::class + ]; + + if ( isset( $compat[$class] ) ) { + $class = $compat[$class]; + } + return $class; } }