From 4a177b34ef0f7d5ea12f1e8e51b9a4ae4892edf8 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 26 Jan 2017 10:27:37 -0800 Subject: [PATCH] Move LBFactory to Rdbms namespace Change-Id: I5ae10783228d0252284807c9562bc8e328d4becb --- autoload.php | 10 +++++----- includes/GlobalFunctions.php | 1 + includes/MediaWiki.php | 1 + includes/MediaWikiServices.php | 2 +- includes/db/MWLBFactory.php | 11 +++++++++++ includes/deferred/DeferredUpdates.php | 1 + includes/installer/DatabaseInstaller.php | 1 + includes/jobqueue/JobRunner.php | 1 + .../jobqueue/jobs/CategoryMembershipChangeJob.php | 1 + includes/libs/rdbms/lbfactory/ILBFactory.php | 10 +++++++++- includes/libs/rdbms/lbfactory/LBFactory.php | 15 +++++++++++++-- includes/libs/rdbms/lbfactory/LBFactoryMulti.php | 7 +++++++ includes/libs/rdbms/lbfactory/LBFactorySimple.php | 5 +++++ includes/libs/rdbms/lbfactory/LBFactorySingle.php | 7 +++++++ maintenance/Maintenance.php | 1 + maintenance/wrapOldPasswords.php | 6 +++++- tests/phpunit/includes/MediaWikiServicesTest.php | 3 ++- tests/phpunit/includes/db/LBFactoryTest.php | 11 ++++++++--- 18 files changed, 80 insertions(+), 14 deletions(-) diff --git a/autoload.php b/autoload.php index 40aa7a3ce8..970dff0f9f 100644 --- a/autoload.php +++ b/autoload.php @@ -597,7 +597,6 @@ $wgAutoloadLocalClasses = [ 'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php', 'IExpiringStore' => __DIR__ . '/includes/libs/objectcache/IExpiringStore.php', 'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php', - 'ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php', 'ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php', 'ILocalizedException' => __DIR__ . '/includes/exception/LocalizedException.php', 'IMaintainableDatabase' => __DIR__ . '/includes/libs/rdbms/database/IMaintainableDatabase.php', @@ -672,10 +671,6 @@ $wgAutoloadLocalClasses = [ 'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php', 'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php', 'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php', - 'LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.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', 'LCStore' => __DIR__ . '/includes/cache/localisation/LCStore.php', 'LCStoreCDB' => __DIR__ . '/includes/cache/localisation/LCStoreCDB.php', 'LCStoreDB' => __DIR__ . '/includes/cache/localisation/LCStoreDB.php', @@ -1592,7 +1587,12 @@ $wgAutoloadLocalClasses = [ 'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php', 'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php', 'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php', + 'Wikimedia\\Rdbms\\ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php', 'Wikimedia\\Rdbms\\ILoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/ILoadMonitor.php', + 'Wikimedia\\Rdbms\\LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php', + 'Wikimedia\\Rdbms\\LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php', + 'Wikimedia\\Rdbms\\LBFactorySimple' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySimple.php', + 'Wikimedia\\Rdbms\\LBFactorySingle' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactorySingle.php', 'Wikimedia\\Rdbms\\LoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitor.php', 'Wikimedia\\Rdbms\\LoadMonitorMySQL' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php', 'Wikimedia\\Rdbms\\LoadMonitorNull' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorNull.php', diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 5343248a9c..46def53e0e 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -28,6 +28,7 @@ use Liuggio\StatsdClient\Sender\SocketSender; use MediaWiki\Logger\LoggerFactory; use MediaWiki\Session\SessionManager; use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\LBFactory; // Hide compatibility functions from Doxygen /// @cond diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index 3e72d54100..cfe4965932 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -23,6 +23,7 @@ use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\ChronologyProtector; +use Wikimedia\Rdbms\LBFactory; /** * The MediaWiki class is the helper class for the index.php entry point. diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 7c9363ca19..ac151e25ca 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -9,7 +9,7 @@ use EventRelayerGroup; use GenderCache; use GlobalVarConfig; use Hooks; -use LBFactory; +use Wikimedia\Rdbms\LBFactory; use LinkCache; use Liuggio\StatsdClient\Factory\StatsdDataFactory; use LoadBalancer; diff --git a/includes/db/MWLBFactory.php b/includes/db/MWLBFactory.php index 40418fd479..b215acd0ef 100644 --- a/includes/db/MWLBFactory.php +++ b/includes/db/MWLBFactory.php @@ -171,6 +171,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; } } diff --git a/includes/deferred/DeferredUpdates.php b/includes/deferred/DeferredUpdates.php index 1ba6c1febd..05256aeff0 100644 --- a/includes/deferred/DeferredUpdates.php +++ b/includes/deferred/DeferredUpdates.php @@ -20,6 +20,7 @@ * @file */ use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\LBFactory; /** * Class for managing the deferred updates diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php index 50d73de4c8..030553599f 100644 --- a/includes/installer/DatabaseInstaller.php +++ b/includes/installer/DatabaseInstaller.php @@ -20,6 +20,7 @@ * @file * @ingroup Deployment */ +use Wikimedia\Rdbms\LBFactorySingle; /** * Base class for DBMS-specific installation helper classes. diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php index cacccbec08..baff288e85 100644 --- a/includes/jobqueue/JobRunner.php +++ b/includes/jobqueue/JobRunner.php @@ -27,6 +27,7 @@ use Liuggio\StatsdClient\Factory\StatsdDataFactory; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerInterface; use Wikimedia\ScopedCallback; +use Wikimedia\Rdbms\LBFactory; /** * Job queue runner utility methods diff --git a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php index a52ff065b0..3a0063c3ed 100644 --- a/includes/jobqueue/jobs/CategoryMembershipChangeJob.php +++ b/includes/jobqueue/jobs/CategoryMembershipChangeJob.php @@ -20,6 +20,7 @@ * @file */ use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\LBFactory; /** * Job to add recent change entries mentioning category membership changes diff --git a/includes/libs/rdbms/lbfactory/ILBFactory.php b/includes/libs/rdbms/lbfactory/ILBFactory.php index 5288c24908..3e0800a4ca 100644 --- a/includes/libs/rdbms/lbfactory/ILBFactory.php +++ b/includes/libs/rdbms/lbfactory/ILBFactory.php @@ -21,6 +21,14 @@ * @ingroup Database */ +namespace Wikimedia\Rdbms; + +use InvalidArgumentException; +use ILoadBalancer; +use LoadBalancer; +use DBTransactionError; +use DBReplicationWaitError; + /** * An interface for generating database load balancers * @ingroup Database @@ -178,7 +186,7 @@ interface ILBFactory { * @param string $fname Caller name * @param array $options Options map: * - maxWriteDuration: abort if more than this much time was spent in write queries - * @throws Exception + * @throws DBTransactionError */ public function commitMasterChanges( $fname = __METHOD__, array $options = [] ); diff --git a/includes/libs/rdbms/lbfactory/LBFactory.php b/includes/libs/rdbms/lbfactory/LBFactory.php index f580eeb006..7a2ad3fc71 100644 --- a/includes/libs/rdbms/lbfactory/LBFactory.php +++ b/includes/libs/rdbms/lbfactory/LBFactory.php @@ -21,10 +21,21 @@ * @ingroup Database */ +namespace Wikimedia\Rdbms; + use Psr\Log\LoggerInterface; use Wikimedia\ScopedCallback; -use Wikimedia\Rdbms\TransactionProfiler; -use Wikimedia\Rdbms\ChronologyProtector; +use BagOStuff; +use EmptyBagOStuff; +use WANObjectCache; +use DatabaseDomain; +use Exception; +use RuntimeException; +use ILoadBalancer; +use IDatabase; +use LoadBalancer; +use DBTransactionError; +use DBReplicationWaitError; /** * An interface for generating database load balancers diff --git a/includes/libs/rdbms/lbfactory/LBFactoryMulti.php b/includes/libs/rdbms/lbfactory/LBFactoryMulti.php index 4158e616bd..643b110482 100644 --- a/includes/libs/rdbms/lbfactory/LBFactoryMulti.php +++ b/includes/libs/rdbms/lbfactory/LBFactoryMulti.php @@ -21,6 +21,13 @@ * @ingroup Database */ +namespace Wikimedia\Rdbms; + +use LoadBalancer; +use IDatabase; +use DatabaseDomain; +use InvalidArgumentException; + /** * A multi-database, multi-master factory for Wikimedia and similar installations. * Ignores the old configuration globals. diff --git a/includes/libs/rdbms/lbfactory/LBFactorySimple.php b/includes/libs/rdbms/lbfactory/LBFactorySimple.php index 5bf50323df..1f5f93fc4b 100644 --- a/includes/libs/rdbms/lbfactory/LBFactorySimple.php +++ b/includes/libs/rdbms/lbfactory/LBFactorySimple.php @@ -21,6 +21,11 @@ * @ingroup Database */ +namespace Wikimedia\Rdbms; + +use LoadBalancer; +use InvalidArgumentException; + /** * A simple single-master LBFactory that gets its configuration from the b/c globals */ diff --git a/includes/libs/rdbms/lbfactory/LBFactorySingle.php b/includes/libs/rdbms/lbfactory/LBFactorySingle.php index 819375d797..f9926437e6 100644 --- a/includes/libs/rdbms/lbfactory/LBFactorySingle.php +++ b/includes/libs/rdbms/lbfactory/LBFactorySingle.php @@ -21,6 +21,13 @@ * @ingroup Database */ +namespace Wikimedia\Rdbms; + +use LoadBalancerSingle; +use IDatabase; +use InvalidArgumentException; +use BadMethodCallException; + /** * An LBFactory class that always returns a single database object. */ diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php index 3925efe8de..62dc36c18d 100644 --- a/maintenance/Maintenance.php +++ b/maintenance/Maintenance.php @@ -38,6 +38,7 @@ $maintClass = false; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use Wikimedia\Rdbms\LBFactory; /** * Abstract maintenance class for quickly writing and churning out diff --git a/maintenance/wrapOldPasswords.php b/maintenance/wrapOldPasswords.php index 0a859c0ef4..85fa7805e6 100644 --- a/maintenance/wrapOldPasswords.php +++ b/maintenance/wrapOldPasswords.php @@ -1,4 +1,7 @@ buildLike( ":$firstType:", $dbw->anyString() ); $minUserId = 0; + $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); do { $this->beginTransaction( $dbw, __METHOD__ ); @@ -113,7 +117,7 @@ class WrapOldPasswords extends Maintenance { } $this->commitTransaction( $dbw, __METHOD__ ); - LBFactory::waitForReplication(); + $lbFactory->waitForReplication(); // Clear memcached so old passwords are wiped out foreach ( $updateUsers as $user ) { diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index dc0c64c4f6..cc95e383dd 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -7,6 +7,7 @@ use MediaWiki\MediaWikiServices; use MediaWiki\Services\DestructibleService; use MediaWiki\Services\SalvageableService; use MediaWiki\Services\ServiceDisabledException; +use Wikimedia\Rdbms\LBFactory; /** * @covers MediaWiki\MediaWikiServices @@ -308,7 +309,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { 'SearchEngineFactory' => [ 'SearchEngineFactory', SearchEngineFactory::class ], 'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ], 'SkinFactory' => [ 'SkinFactory', SkinFactory::class ], - 'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', 'LBFactory' ], + 'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', Wikimedia\Rdbms\LBFactory::class ], 'DBLoadBalancer' => [ 'DBLoadBalancer', 'LoadBalancer' ], 'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ], 'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ], diff --git a/tests/phpunit/includes/db/LBFactoryTest.php b/tests/phpunit/includes/db/LBFactoryTest.php index 1a52dde82e..92c8add51e 100644 --- a/tests/phpunit/includes/db/LBFactoryTest.php +++ b/tests/phpunit/includes/db/LBFactoryTest.php @@ -1,5 +1,7 @@