aboutsummaryrefslogtreecommitdiffstats
path: root/includes
diff options
context:
space:
mode:
authorAaron Schulz <aschulz@wikimedia.org>2016-10-06 09:52:17 -0700
committerAaron Schulz <aschulz@wikimedia.org>2016-10-06 19:07:27 -0700
commitb6d8421ab62231c6de53ac71a1bfc0937695ecb3 (patch)
tree06e5768437dde853bf632c24364ff780812a2171 /includes
parentee1f1c06d7bf8f4634989f9a3f270dd68b293276 (diff)
downloadmediawikicore-b6d8421ab62231c6de53ac71a1bfc0937695ecb3.tar.gz
mediawikicore-b6d8421ab62231c6de53ac71a1bfc0937695ecb3.zip
Minor LoadBalancer cleanups
* Close the master connection in safeWaitForMasterPos() if created. * Remove unnecessary reuseConnection() calls. * Add DOMAIN_ANY constant for readability. Change-Id: I9e64a7405e0eedc50e7b93d05d65cf00d5544a77
Diffstat (limited to 'includes')
-rw-r--r--includes/libs/rdbms/loadbalancer/ILoadBalancer.php3
-rw-r--r--includes/libs/rdbms/loadbalancer/LoadBalancer.php22
-rw-r--r--includes/site/DBSiteStore.php6
3 files changed, 15 insertions, 16 deletions
diff --git a/includes/libs/rdbms/loadbalancer/ILoadBalancer.php b/includes/libs/rdbms/loadbalancer/ILoadBalancer.php
index e5ed2f1e840e..8854479a636e 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 73aa23c683c1..33f35615570f 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 432d5ce1dafc..e5247f2fc1ca 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;