Merge "rdbms: add replica server counting methods to ILoadBalancer"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 21 Jun 2019 20:23:21 +0000 (20:23 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 21 Jun 2019 20:23:21 +0000 (20:23 +0000)
1  2 
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php

@@@ -1959,27 -1969,14 +1969,29 @@@ class LoadBalancer implements ILoadBala
                return $this->getLoadMonitor()->getLagTimes( $indexesWithLag, $domain ) + $knownLagTimes;
        }
  
 +      /**
 +       * Get the lag in seconds for a given connection, or zero if this load
 +       * balancer does not have replication enabled.
 +       *
 +       * This should be used in preference to Database::getLag() in cases where
 +       * replication may not be in use, since there is no way to determine if
 +       * replication is in use at the connection level without running
 +       * potentially restricted queries such as SHOW SLAVE STATUS. Using this
 +       * function instead of Database::getLag() avoids a fatal error in this
 +       * case on many installations.
 +       *
 +       * @param IDatabase $conn
 +       * @return int|bool Returns false on error
 +       * @deprecated Since 1.34 Use IDatabase::getLag() instead
 +       */
        public function safeGetLag( IDatabase $conn ) {
-               if ( $this->getServerCount() <= 1 ) {
-                       return 0;
-               } else {
-                       return $conn->getLag();
+               if ( $conn->getLBInfo( 'is static' ) ) {
+                       return 0; // static dataset
+               } elseif ( $conn->getLBInfo( 'serverIndex' ) == $this->getWriterIndex() ) {
+                       return 0; // this is the master
                }
+               return $conn->getLag();
        }
  
        public function safeWaitForMasterPos( IDatabase $conn, $pos = false, $timeout = null ) {