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 ) {