From b6d8421ab62231c6de53ac71a1bfc0937695ecb3 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 6 Oct 2016 09:52:17 -0700 Subject: [PATCH] Minor LoadBalancer cleanups * Close the master connection in safeWaitForMasterPos() if created. * Remove unnecessary reuseConnection() calls. * Add DOMAIN_ANY constant for readability. Change-Id: I9e64a7405e0eedc50e7b93d05d65cf00d5544a77 --- .../libs/rdbms/loadbalancer/ILoadBalancer.php | 3 +++ .../libs/rdbms/loadbalancer/LoadBalancer.php | 22 ++++++++++--------- includes/site/DBSiteStore.php | 6 ----- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php index e5ed2f1e84..8854479a63 100644 --- a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php @@ -78,6 +78,9 @@ interface ILoadBalancer { /** @var integer Request a master DB connection */ const DB_MASTER = -2; + /** @var string Domain specifier when no specific database needs to be selected */ + const DOMAIN_ANY = ''; + /** * Construct a manager of IDatabase connection objects * diff --git a/includes/libs/rdbms/loadbalancer/LoadBalancer.php b/includes/libs/rdbms/loadbalancer/LoadBalancer.php index 73aa23c683..33f3561557 100644 --- a/includes/libs/rdbms/loadbalancer/LoadBalancer.php +++ b/includes/libs/rdbms/loadbalancer/LoadBalancer.php @@ -105,10 +105,9 @@ class LoadBalancer implements ILoadBalancer { /** @var integer Warn when this many connection are held */ const CONN_HELD_WARN_THRESHOLD = 10; + /** @var integer Default 'max lag' when unspecified */ const MAX_LAG_DEFAULT = 10; - /** @var integer Max time to wait for a replica DB to catch up (e.g. ChronologyProtector) */ - const POS_WAIT_TIMEOUT = 10; /** @var integer Seconds to cache master server read-only status */ const TTL_CACHE_READONLY = 5; @@ -130,9 +129,7 @@ class LoadBalancer implements ILoadBalancer { $this->localDomainIdAlias = $this->localDomain->getDatabase(); } - $this->mWaitTimeout = isset( $params['waitTimeout'] ) - ? $params['waitTimeout'] - : self::POS_WAIT_TIMEOUT; + $this->mWaitTimeout = isset( $params['waitTimeout'] ) ? $params['waitTimeout'] : 10; $this->mReadIndex = -1; $this->mConns = [ @@ -477,7 +474,7 @@ class LoadBalancer implements ILoadBalancer { return false; } else { - $conn = $this->openConnection( $index, '' ); + $conn = $this->openConnection( $index, self::DOMAIN_ANY ); if ( !$conn ) { $this->replLogger->warning( __METHOD__ . ": failed to connect to $server" ); @@ -1454,10 +1451,15 @@ class LoadBalancer implements ILoadBalancer { } if ( !$pos ) { - // Get the current master position - $dbw = $this->getConnection( self::DB_MASTER ); - $pos = $dbw->getMasterPos(); - $this->reuseConnection( $dbw ); + // Get the current master position, opening a connection if needed + $masterConn = $this->getAnyOpenConnection( $this->getWriterIndex() ); + if ( $masterConn ) { + $pos = $masterConn->getMasterPos(); + } else { + $masterConn = $this->openConnection( $this->getWriterIndex(), self::DOMAIN_ANY ); + $pos = $masterConn->getMasterPos(); + $this->closeConnection( $masterConn ); + } } if ( $pos instanceof DBMasterPos ) { diff --git a/includes/site/DBSiteStore.php b/includes/site/DBSiteStore.php index 432d5ce1da..e5247f2fc1 100644 --- a/includes/site/DBSiteStore.php +++ b/includes/site/DBSiteStore.php @@ -130,8 +130,6 @@ class DBSiteStore implements SiteStore { $this->sites->setSite( $site ); } } - - $this->dbLoadBalancer->reuseConnection( $dbr ); } /** @@ -249,8 +247,6 @@ class DBSiteStore implements SiteStore { $dbw->endAtomic( __METHOD__ ); - $this->dbLoadBalancer->reuseConnection( $dbw ); - $this->reset(); return $success; @@ -280,8 +276,6 @@ class DBSiteStore implements SiteStore { $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok; $dbw->endAtomic( __METHOD__ ); - $this->dbLoadBalancer->reuseConnection( $dbw ); - $this->reset(); return $ok; -- 2.20.1