jenkins-bot has submitted this change and it was merged. ( 
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, 12 insertions(+), 6 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php 
b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index 677a69f..72217da 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -1625,13 +1625,19 @@
        }
 
        public function setDomainPrefix( $prefix ) {
-               if ( $this->mConns[self::KEY_FOREIGN_INUSE] ) {
-                       // Do not switch connections to explicit foreign 
domains unless marked as free
-                       $domains = [];
-                       foreach ( $this->mConns[self::KEY_FOREIGN_INUSE] 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 ) {
+                       // Once reuseConnection() is called on a handle, its 
reference count goes from 1 to 0.
+                       // Until then, it is still in use by the caller 
(explicitly or via DBConnRef scope).
+                       if ( $conn->getLBInfo( 'foreignPoolRefCount' ) > 0 ) {
+                               $domainsInUse[] = $conn->getDomainID();
                        }
-                       $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: merged
Gerrit-Change-Id: Ie2d8efb80a66a5c87b5b3edd64cb6bc4268fa911
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <asch...@wikimedia.org>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to