Daniel Kinzler has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/401594 )

Change subject: Simplify logic for replica selection with groups
......................................................................

Simplify logic for replica selection with groups

Change-Id: I835a25235b88f54eb5e8d4f0afb0df5d55bcc8b9
---
M includes/libs/rdbms/loadbalancer/LoadBalancer.php
1 file changed, 18 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/94/401594/1

diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php 
b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
index daa70a4..716a660 100644
--- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php
+++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php
@@ -627,6 +627,15 @@
                return $ok;
        }
 
+       /**
+        * @param int $i
+        * @param array $groups
+        * @param bool $domain
+        * @param int $flags
+        *
+        * @return bool|null|Database|DBNoWriteWrapper|IDatabase
+        * @throws DBConnectionError
+        */
        public function getConnection( $i, $groups = [], $domain = false, 
$flags = 0 ) {
                $requestedIndex = $i;
 
@@ -639,17 +648,18 @@
                        $domain = false; // local connection requested
                }
 
-               $groups = ( $groups === false || $groups === [] )
-                       ? [ false ] // check one "group": the generic pool
-                       : (array)$groups;
-
                $masterOnly = ( $i == self::DB_MASTER || $i == 
$this->getWriterIndex() );
                $oldConnsOpened = $this->connsOpened; // connections open now
+
+               $this->mLastError = 'Unknown error'; // reset error string
 
                if ( $i == self::DB_MASTER ) {
                        $i = $this->getWriterIndex();
                } elseif ( $i == self::DB_REPLICA ) {
-                       # Try to find an available server in any the query 
groups (in order)
+                       $groups = (array)$groups;
+                       $groups[] = false; // always check the default group.
+
+                       // Try to find an available server in any the query 
groups (in order)
                        foreach ( $groups as $group ) {
                                $groupIndex = $this->getReaderIndex( $group, 
$domain );
                                if ( $groupIndex !== false ) {
@@ -657,18 +667,11 @@
                                        break;
                                }
                        }
-               }
 
-               # Operation-based index
-               if ( $i == self::DB_REPLICA ) {
-                       $this->mLastError = 'Unknown error'; // reset error 
string
-                       # Try the general server pool if $groups are 
unavailable.
-                       $i = ( $groups === [ false ] )
-                               ? false // don't bother with this if that is 
what was tried above
-                               : $this->getReaderIndex( false, $domain );
-                       # Couldn't find a working server in getReaderIndex()?
-                       if ( $i === false ) {
+                       // nothing found!
+                       if ( $i == self::DB_REPLICA ) {
                                $this->mLastError = 'No working replica DB 
server: ' . $this->mLastError;
+
                                // Throw an exception
                                $this->reportConnectionError();
                                return null; // not reached

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I835a25235b88f54eb5e8d4f0afb0df5d55bcc8b9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <daniel.kinz...@wikimedia.de>

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

Reply via email to