Merge "rdbms: add type hint to reuseConnection()"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 22 Feb 2018 08:02:47 +0000 (08:02 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 22 Feb 2018 08:02:47 +0000 (08:02 +0000)
1  2 
includes/libs/rdbms/loadbalancer/LoadBalancer.php

@@@ -298,13 -298,11 +298,13 @@@ class LoadBalancer implements ILoadBala
                                $host = $this->getServerName( $i );
                                if ( $lag === false && !is_infinite( $maxServerLag ) ) {
                                        $this->replLogger->error(
 -                                              "Server {host} is not replicating?", [ 'host' => $host ] );
 +                                              __METHOD__ .
 +                                              ": server {host} is not replicating?", [ 'host' => $host ] );
                                        unset( $loads[$i] );
                                } elseif ( $lag > $maxServerLag ) {
                                        $this->replLogger->info(
 -                                              "Server {host} has {lag} seconds of lag (>= {maxlag})",
 +                                              __METHOD__ .
 +                                              ": server {host} has {lag} seconds of lag (>= {maxlag})",
                                                [ 'host' => $host, 'lag' => $lag, 'maxlag' => $maxServerLag ]
                                        );
                                        unset( $loads[$i] );
                                }
                                if ( $i === false && count( $currentLoads ) != 0 ) {
                                        // All replica DBs lagged. Switch to read-only mode
 -                                      $this->replLogger->error( "All replica DBs lagged. Switch to read-only mode" );
 +                                      $this->replLogger->error(
 +                                              __METHOD__ . ": all replica DBs lagged. Switch to read-only mode" );
                                        $i = ArrayUtils::pickRandom( $currentLoads );
                                        $laggedReplicaMode = true;
                                }
  
                // If all servers were down, quit now
                if ( !count( $currentLoads ) ) {
 -                      $this->connLogger->error( "All servers down" );
 +                      $this->connLogger->error( __METHOD__ . ": all servers down" );
                }
  
                return [ $i, $laggedReplicaMode ];
  
                $this->replLogger->info(
                        __METHOD__ .
 -                      ': Waiting for replica DB {dbserver} to catch up...',
 +                      ': waiting for replica DB {dbserver} to catch up...',
                        [ 'dbserver' => $server ]
                );
  
                        );
                        $ok = false;
                } else {
 -                      $this->replLogger->info( __METHOD__ . ": Done" );
 +                      $this->replLogger->debug( __METHOD__ . ": done waiting" );
                        $ok = true;
                        // Remember that the DB reached this point
                        $this->srvCache->set( $key, $this->waitForPos, BagOStuff::TTL_DAY );
                return $conn;
        }
  
-       public function reuseConnection( $conn ) {
+       public function reuseConnection( IDatabase $conn ) {
                $serverIndex = $conn->getLBInfo( 'serverIndex' );
                $refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
                if ( $serverIndex === null || $refCount === null ) {
                } elseif ( $conn instanceof DBConnRef ) {
                        // DBConnRef already handles calling reuseConnection() and only passes the live
                        // Database instance to this method. Any caller passing in a DBConnRef is broken.
 -                      $this->connLogger->error( __METHOD__ . ": got DBConnRef instance.\n" .
 +                      $this->connLogger->error(
 +                              __METHOD__ . ": got DBConnRef instance.\n" .
                                ( new RuntimeException() )->getTraceAsString() );
  
                        return;
                                $conn = $this->reallyOpenConnection( $server, $this->localDomain );
                                $host = $this->getServerName( $i );
                                if ( $conn->isOpen() ) {
 -                                      $this->connLogger->debug( "Connected to database $i at '$host'." );
 +                                      $this->connLogger->debug(
 +                                              __METHOD__ . ": connected to database $i at '$host'." );
                                        $this->conns[$connKey][$i][0] = $conn;
                                } else {
 -                                      $this->connLogger->warning( "Failed to connect to database $i at '$host'." );
 +                                      $this->connLogger->warning(
 +                                              __METHOD__ . ": failed to connect to database $i at '$host'." );
                                        $this->errorConnection = $conn;
                                        $conn = false;
                                }
                if ( $conn instanceof IDatabase ) {
                        $context['db_server'] = $conn->getServer();
                        $this->connLogger->warning(
 -                              "Connection error: {last_error} ({db_server})",
 +                              __METHOD__ . ": connection error: {last_error} ({db_server})",
                                $context
                        );
  
                } else {
                        // No last connection, probably due to all servers being too busy
                        $this->connLogger->error(
 -                              "LB failure with no last connection. Connection error: {last_error}",
 +                              __METHOD__ .
 +                              ": LB failure with no last connection. Connection error: {last_error}",
                                $context
                        );
  
        public function closeAll() {
                $this->forEachOpenConnection( function ( IDatabase $conn ) {
                        $host = $conn->getServer();
 -                      $this->connLogger->debug( "Closing connection to database '$host'." );
 +                      $this->connLogger->debug(
 +                              __METHOD__ . ": closing connection to database '$host'." );
                        $conn->close();
                } );
  
                        foreach ( $connsByServer[$serverIndex] as $i => $trackedConn ) {
                                if ( $conn === $trackedConn ) {
                                        $host = $this->getServerName( $i );
 -                                      $this->connLogger->debug( "Closing connection to database $i at '$host'." );
 +                                      $this->connLogger->debug(
 +                                              __METHOD__ . ": closing connection to database $i at '$host'." );
                                        unset( $this->conns[$type][$serverIndex][$i] );
                                        --$this->connsOpened;
                                        break 2;
                if ( $pos instanceof DBMasterPos ) {
                        $result = $conn->masterPosWait( $pos, $timeout );
                        if ( $result == -1 || is_null( $result ) ) {
 -                              $msg = __METHOD__ . ': Timed out waiting on {host} pos {pos}';
 +                              $msg = __METHOD__ . ': timed out waiting on {host} pos {pos}';
                                $this->replLogger->warning( $msg, [
                                        'host' => $conn->getServer(),
                                        'pos' => $pos,
                                ] );
                                $ok = false;
                        } else {
 -                              $this->replLogger->info( __METHOD__ . ': Done' );
 +                              $this->replLogger->debug( __METHOD__ . ': done waiting' );
                                $ok = true;
                        }
                } else {