Page MenuHomePhabricator

Reduce complexity of LB and LBF (introducing IConnectionProvider)
Closed, ResolvedPublic

Description

This is to track this quarter's OKR on removign at least 10% complexity score of these two classes. They are overly large without apparent benefit.

Internal clean ups: Remove unused code, Remove functions that bring no actual value, simplify the logic in data attributes. DRY the code, etc.

Work:

Details

SubjectRepoBranchLines +/-
mediawiki/coremaster+73 -95
mediawiki/coremaster+20 -16
mediawiki/coremaster+17 -15
mediawiki/extensions/EntitySchemamaster+0 -2
mediawiki/extensions/PropertySuggestermaster+0 -4
mediawiki/extensions/SecurePollmaster+0 -4
mediawiki/extensions/WikimediaMaintenancemaster+0 -6
mediawiki/coremaster+9 -19
mediawiki/coremaster+0 -9
mediawiki/coremaster+19 -19
mediawiki/coremaster+40 -95
mediawiki/coremaster+94 -182
mediawiki/coremaster+118 -119
mediawiki/coremaster+12 -50
mediawiki/coremaster+48 -49
mediawiki/coremaster+66 -97
mediawiki/coremaster+0 -1
mediawiki/coremaster+17 -22
mediawiki/coremaster+426 -175
mediawiki/coremaster+0 -7
mediawiki/coremaster+19 -15
mediawiki/extensions/DiscussionToolsmaster+24 -18
mediawiki/coremaster+806 -701
mediawiki/coremaster+20 -6
mediawiki/coremaster+16 -16
mediawiki/coremaster+53 -53
mediawiki/coremaster+183 -130
mediawiki/coremaster+21 -37
mediawiki/coremaster+41 -93
mediawiki/coremaster+0 -31
mediawiki/extensions/Wikibasemaster+0 -4
mediawiki/coremaster+3 -23
mediawiki/coremaster+5 -46
mediawiki/extensions/TimedMediaHandlermaster+6 -2
mediawiki/coremaster+9 -13
mediawiki/extensions/EventBusmaster+7 -2
mediawiki/extensions/EventBusmaster+2 -7
mediawiki/coremaster+7 -23
mediawiki/extensions/ArticleFeedbackv5master+1 -1
mediawiki/coremaster+1 -40
mediawiki/coremaster+5 -5
mediawiki/coremaster+20 -25
mediawiki/coremaster+2 -3
mediawiki/coremaster+1 -23
mediawiki/coremaster+4 -14
mediawiki/extensions/Echomaster+6 -55
mediawiki/coremaster+3 -20
Show related patches Customize query in gerrit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Change 885379 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/extensions/TimedMediaHandler@master] Stop using $lbf->commitAll()

https://gerrit.wikimedia.org/r/885379

Change 885379 merged by jenkins-bot:

[mediawiki/extensions/TimedMediaHandler@master] Stop using $lbf->commitAll()

https://gerrit.wikimedia.org/r/885379

Change 885622 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Drop ::commitAll from LB/LBF

https://gerrit.wikimedia.org/r/885622

Change 885622 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Drop ::commitAll from LB/LBF

https://gerrit.wikimedia.org/r/885622

Change 885946 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Make LoadBalancer::getServerConnection() private

https://gerrit.wikimedia.org/r/885946

Change 885987 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/extensions/Wikibase@master] lib: Drop use of forEachOpenPrimaryConnection in FakeLoadBalancer

https://gerrit.wikimedia.org/r/885987

Change 885988 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Drop LB::forEachOpenConnection and forEachOpenPrimaryConnection

https://gerrit.wikimedia.org/r/885988

Change 885946 abandoned by Ladsgroup:

[mediawiki/core@master] rdbms: Make LoadBalancer::getServerConnection() private

Reason:

can't be done now

https://gerrit.wikimedia.org/r/885946

Change 886011 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Delegate Database object creation to DatabaseFactory out of LB

https://gerrit.wikimedia.org/r/886011

Change 886045 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Drop simple only-once-used private functions

https://gerrit.wikimedia.org/r/886045

Change 886054 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Introduce ServerInfoHolder to limit access to servers in LB

https://gerrit.wikimedia.org/r/886054

Change 886045 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Drop simple only-once-used private functions

https://gerrit.wikimedia.org/r/886045

Change 885987 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] lib: Drop use of forEachOpenPrimaryConnection in FakeLoadBalancer

https://gerrit.wikimedia.org/r/885987

Change 885988 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Drop LB::forEachOpenConnection and forEachOpenPrimaryConnection

https://gerrit.wikimedia.org/r/885988

Change 887801 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Introduce IConnectionProvider

https://gerrit.wikimedia.org/r/887801

I noticed that LoadBalancer::getConnectionRef() is currently an array internally, and while the signature allows a single string, it is generally used in its array form. I suggest that when we move this method to LBFactory that we make it string-only. e.g. LBFactory::getConnection( $type, $domain = false, $group = null );. Or, if we embrace @Ladsgroup 's idea for a "readable" IDatabase subset, it could become LBFactory::getReadConnection( $domain = false, $group = null ); paired with ::getWriteConnection().

Change 889576 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] Remove obsolete Rdbms query groups from getConnection calls

https://gerrit.wikimedia.org/r/889576

Change 889576 merged by jenkins-bot:

[mediawiki/core@master] Remove obsolete Rdbms query groups from getConnection calls

https://gerrit.wikimedia.org/r/889576

I noticed that LoadBalancer::getConnectionRef() is currently an array internally, and while the signature allows a single string, it is generally used in its array form. I suggest that when we move this method to LBFactory that we make it string-only. e.g. LBFactory::getConnection( $type, $domain = false, $group = null );. Or, if we embrace @Ladsgroup 's idea for a "readable" IDatabase subset, it could become LBFactory::getReadConnection( $domain = false, $group = null ); paired with ::getWriteConnection().

FWIW, it's this patch: https://gerrit.wikimedia.org/r/c/mediawiki/core/+/887801 I will do the interface split ASAP.

Change 890469 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/extensions/DiscussionTools@master] [POC] Switch to using IConnectionProvider

https://gerrit.wikimedia.org/r/890469

Change 886054 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Introduce ServerInfoHolder to limit access to servers in LB

https://gerrit.wikimedia.org/r/886054

Change 887801 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Introduce IConnectionProvider and IReadableDatabase

https://gerrit.wikimedia.org/r/887801

Change 890896 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Move back general purpose ::query() from IReadableDatabase to IDatabase

https://gerrit.wikimedia.org/r/890896

Change 890904 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] [WIP] rdbms: Introduce ConnectionTracker

https://gerrit.wikimedia.org/r/890904

Change 890896 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Move back ::query() from IReadableDatabase to IDatabase

https://gerrit.wikimedia.org/r/890896

Change 891356 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] [DNM] rdbms: Add $externalCluster argument to IConnectionProvider

https://gerrit.wikimedia.org/r/891356

Change 891357 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] Switch some simple usages of LoadBalancer to use the new methods

https://gerrit.wikimedia.org/r/891357

Change 891357 merged by jenkins-bot:

[mediawiki/core@master] Switch some simple use of LoadBalancer to use new LBFactory methods

https://gerrit.wikimedia.org/r/891357

Change 891356 abandoned by Ladsgroup:

[mediawiki/core@master] [DNM] rdbms: Add $externalCluster argument to IConnectionProvider

Reason:

Proposed a way to hide this from devs: T330590

https://gerrit.wikimedia.org/r/891356

Change 890469 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@master] Use the new method of getting database object

https://gerrit.wikimedia.org/r/890469

Change 892043 had a related patch set uploaded (by Krinkle; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Switch LBFactory::getReplicaDatabase to narrow IReadableDatabase

https://gerrit.wikimedia.org/r/892043

Change 892043 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Switch LBFactory::getReplicaDatabase to narrow IReadableDatabase

https://gerrit.wikimedia.org/r/892043

Change 893488 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Drop LBF::$currentConfig

https://gerrit.wikimedia.org/r/893488

Change 893488 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Drop LBF::$currentConfig

https://gerrit.wikimedia.org/r/893488

Change 906058 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Make IConnectionProvider stable

https://gerrit.wikimedia.org/r/906058

Change 906058 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Make IConnectionProvider stable

https://gerrit.wikimedia.org/r/906058

Change 886011 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Delegate Database object creation to DatabaseFactory out of LB

https://gerrit.wikimedia.org/r/886011

Change 923371 had a related patch set uploaded (by Thiemo Kreuz (WMDE); author: Thiemo Kreuz (WMDE)):

[mediawiki/core@master] rdbms: Use more narrow IReadableDatabase in SelectQueryBuilder

https://gerrit.wikimedia.org/r/923371

Change 923371 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Use more narrow IReadableDatabase in SelectQueryBuilder

https://gerrit.wikimedia.org/r/923371

Change 943630 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Move two static methods of LBFactory to ChronologyProtector

https://gerrit.wikimedia.org/r/943630

Change 943625 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Remove LB::getReplicaResumePos

https://gerrit.wikimedia.org/r/943625

Change 943628 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Remove or move unused public methods of ILB/ILBF

https://gerrit.wikimedia.org/r/943628

Change 943625 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Remove LB::getReplicaResumePos

https://gerrit.wikimedia.org/r/943625

Change 943628 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Remove or move unused public methods of ILB/ILBF

https://gerrit.wikimedia.org/r/943628

Change 943630 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Move two static methods of LBFactory to ChronologyProtector

https://gerrit.wikimedia.org/r/943630

Change 945675 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Roll up once-used small private/protected methods to the caller

https://gerrit.wikimedia.org/r/945675

Change 945675 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Roll up once-used small private/protected methods to the caller

https://gerrit.wikimedia.org/r/945675

Krinkle renamed this task from Reduce complexity of LB and LBF to Reduce complexity of LB and LBF (introducing IConnectionProvider).Nov 15 2023, 5:54 PM

Change 975083 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Move two methods from ILB to ILBForOwner

https://gerrit.wikimedia.org/r/975083

Change 975083 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Move two methods from ILB to ILBForOwner

https://gerrit.wikimedia.org/r/975083

::hasReplicaServers() and hasStreamingReplicaServers() probably can be merged, I have a feeling that almost all calls to hasReplicaServers() was meant to actually call hasStreamingReplicaServers instead.

::hasReplicaServers() and hasStreamingReplicaServers() probably can be merged, I have a feeling that almost all calls to hasReplicaServers() was meant to actually call hasStreamingReplicaServers instead.

Obviously can be another dedicated ticket and we could close this instead.

Change 976841 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] tests: Remove DummyServicesTrait::getDummyDBLoadBalancer

https://gerrit.wikimedia.org/r/976841

Change 976841 merged by jenkins-bot:

[mediawiki/core@master] tests: Remove DummyServicesTrait::getDummyDBLoadBalancer

https://gerrit.wikimedia.org/r/976841

Ladsgroup moved this task from In progress to Done on the DBA board.

::hasReplicaServers() and hasStreamingReplicaServers() probably can be merged, I have a feeling that almost all calls to hasReplicaServers() was meant to actually call hasStreamingReplicaServers instead.

Obviously can be another dedicated ticket and we could close this instead.

T352191: Merge or simplify ILoadBalancer::hasReplicaServers() and ::hasStreamingReplicaServers()

Change #1020822 had a related patch set uploaded (by Ladsgroup; author: Amir Sarabadani):

[mediawiki/core@master] rdbms: Hard-deprecate LoadBalancer::getConnectionRef()

https://gerrit.wikimedia.org/r/1020822

Change #1020711 had a related patch set uploaded (by Gerrit maintenance bot; author: Gerrit maintenance bot):

[mediawiki/extensions/EntitySchema@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020711

Change #1020712 had a related patch set uploaded (by Gerrit maintenance bot; author: Gerrit maintenance bot):

[mediawiki/extensions/PropertySuggester@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020712

Change #1020713 had a related patch set uploaded (by Gerrit maintenance bot; author: Gerrit maintenance bot):

[mediawiki/extensions/SecurePoll@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020713

Change #1020714 had a related patch set uploaded (by Gerrit maintenance bot; author: Gerrit maintenance bot):

[mediawiki/extensions/WikimediaMaintenance@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020714

Change #1020714 merged by jenkins-bot:

[mediawiki/extensions/WikimediaMaintenance@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020714

Change #1020713 merged by jenkins-bot:

[mediawiki/extensions/SecurePoll@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020713

Change #1020712 merged by jenkins-bot:

[mediawiki/extensions/PropertySuggester@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020712

Change #1020711 merged by jenkins-bot:

[mediawiki/extensions/EntitySchema@master] Remove call to LoadBalancer::reuseConnection()

https://gerrit.wikimedia.org/r/1020711

Change #1020859 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] rdbms: Update outdated docs around deprecated reuseConnection()

https://gerrit.wikimedia.org/r/1020859

Change #1020859 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Update outdated docs around deprecated reuseConnection()

https://gerrit.wikimedia.org/r/1020859

Change #1025744 had a related patch set uploaded (by Jforrester; author: Amir Sarabadani):

[mediawiki/core@master] Stop using LoadBalancer::getConnectionRef() so it can be hard-deprecated

https://gerrit.wikimedia.org/r/1025744

Change #1025744 merged by jenkins-bot:

[mediawiki/core@master] Stop using LoadBalancer::getConnectionRef() so it can be hard-deprecated

https://gerrit.wikimedia.org/r/1025744

Change #1020822 merged by jenkins-bot:

[mediawiki/core@master] rdbms: Hard-deprecate LoadBalancer::getConnectionRef()

https://gerrit.wikimedia.org/r/1020822