Aaron Schulz has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/366509 )

Change subject: Refactor LoadBalancer::setDomainPrefix() to use forEachOpen* 
method
......................................................................

Refactor LoadBalancer::setDomainPrefix() to use forEachOpen* method

This makes the code more consistent with the other class methods
that iterate over connection handles and less fragile.

Change-Id: Ie2d8efb80a66a5c87b5b3edd64cb6bc4268fa911
---
M includes/libs/rdbms/loadbalancer/LoadBalancer.php
1 file changed, 10 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/09/366509/1

diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php 
b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index 0b70010..b281af0 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -1621,13 +1621,17 @@
        }
 
        public function setDomainPrefix( $prefix ) {
-               if ( $this->mConns['foreignUsed'] ) {
-                       // Do not switch connections to explicit foreign 
domains unless marked as free
-                       $domains = [];
-                       foreach ( $this->mConns['foreignUsed'] as $i => 
$connsByDomain ) {
-                               $domains = array_merge( $domains, array_keys( 
$connsByDomain ) );
+               // Find connections to explicit foreign domains still marked as 
in-use...
+               $domainsInUse = [];
+               $this->forEachOpenConnection( function ( IDatabase $conn ) use 
( &$domainsInUse ) {
+                       if ( $conn->getLBInfo( 'foreignPoolRefCount' ) > 0 ) {
+                               $domainsInUse[] = $conn->getDomainID(); // 
reuseConnection() not called yet
                        }
-                       $domains = implode( ', ', $domains );
+               } );
+
+               // Do not switch connections to explicit foreign domains unless 
marked as safe
+               if ( $domainsInUse ) {
+                       $domains = implode( ', ', $domainsInUse );
                        throw new DBUnexpectedError( null,
                                "Foreign domain connections are still in use 
($domains)." );
                }

-- 
To view, visit https://gerrit.wikimedia.org/r/366509
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie2d8efb80a66a5c87b5b3edd64cb6bc4268fa911
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to