summaryrefslogtreecommitdiff
path: root/includes/db/LoadBalancer.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/db/LoadBalancer.php')
-rw-r--r--includes/db/LoadBalancer.php85
1 files changed, 67 insertions, 18 deletions
diff --git a/includes/db/LoadBalancer.php b/includes/db/LoadBalancer.php
index c7210c4c..e96c6720 100644
--- a/includes/db/LoadBalancer.php
+++ b/includes/db/LoadBalancer.php
@@ -90,6 +90,8 @@ class LoadBalancer {
/**
* Get or set arbitrary data used by the parent object, usually an LBFactory
+ * @param $x
+ * @return \Mixed
*/
function parentInfo( $x = null ) {
return wfSetVar( $this->mParentInfo, $x );
@@ -99,7 +101,7 @@ class LoadBalancer {
* Given an array of non-normalised probabilities, this function will select
* an element and return the appropriate key
*
- * @param $weights
+ * @param $weights array
*
* @return int
*/
@@ -117,7 +119,7 @@ class LoadBalancer {
return false;
}
$max = mt_getrandmax();
- $rand = mt_rand(0, $max) / $max * $sum;
+ $rand = mt_rand( 0, $max ) / $max * $sum;
$sum = 0;
foreach ( $weights as $i => $w ) {
@@ -130,7 +132,7 @@ class LoadBalancer {
}
/**
- * @param $loads
+ * @param $loads array
* @param $wiki bool
* @return bool|int|string
*/
@@ -140,10 +142,10 @@ class LoadBalancer {
foreach ( $lags as $i => $lag ) {
if ( $i != 0 ) {
if ( $lag === false ) {
- wfDebug( "Server #$i is not replicating\n" );
+ wfDebugLog( 'replication', "Server #$i is not replicating\n" );
unset( $loads[$i] );
} elseif ( isset( $this->mServers[$i]['max lag'] ) && $lag > $this->mServers[$i]['max lag'] ) {
- wfDebug( "Server #$i is excessively lagged ($lag seconds)\n" );
+ wfDebugLog( 'replication', "Server #$i is excessively lagged ($lag seconds)\n" );
unset( $loads[$i] );
}
}
@@ -241,6 +243,7 @@ class LoadBalancer {
$i = $this->getRandomNonLagged( $currentLoads, $wiki );
if ( $i === false && count( $currentLoads ) != 0 ) {
# All slaves lagged. Switch to read-only mode
+ wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode\n" );
$wgReadOnly = 'The database has been automatically locked ' .
'while the slave database servers catch up to the master';
$i = $this->pickRandom( $currentLoads );
@@ -333,6 +336,8 @@ class LoadBalancer {
/**
* Wait for a specified number of microseconds, and return the period waited
+ * @param $t int
+ * @return int
*/
function sleep( $t ) {
wfProfileIn( __METHOD__ );
@@ -346,6 +351,7 @@ class LoadBalancer {
* Set the master wait position
* If a DB_SLAVE connection has been opened already, waits
* Otherwise sets a variable telling it to wait if such a connection is opened
+ * @param $pos int
*/
public function waitFor( $pos ) {
wfProfileIn( __METHOD__ );
@@ -363,6 +369,7 @@ class LoadBalancer {
/**
* Set the master wait position and wait for ALL slaves to catch up to it
+ * @param $pos int
*/
public function waitForAll( $pos ) {
wfProfileIn( __METHOD__ );
@@ -377,7 +384,8 @@ class LoadBalancer {
* Get any open connection to a given server index, local or foreign
* Returns false if there is no connection open
*
- * @return DatabaseBase
+ * @param $i int
+ * @return DatabaseBase|false
*/
function getAnyOpenConnection( $i ) {
foreach ( $this->mConns as $conns ) {
@@ -390,6 +398,9 @@ class LoadBalancer {
/**
* Wait for a given slave to catch up to the master pos stored in $this
+ * @param $index
+ * @param $open bool
+ * @return bool
*/
function doWait( $index, $open = false ) {
# Find a connection to wait on
@@ -662,12 +673,14 @@ class LoadBalancer {
* Returns a Database object whether or not the connection was successful.
* @access private
*
+ * @param $server
+ * @param $dbNameOverride bool
* @return DatabaseBase
*/
function reallyOpenConnection( $server, $dbNameOverride = false ) {
if( !is_array( $server ) ) {
throw new MWException( 'You must update your load-balancing configuration. ' .
- 'See DefaultSettings.php entry for $wgDBservers.' );
+ 'See DefaultSettings.php entry for $wgDBservers.' );
}
$host = $server['host'];
@@ -702,6 +715,10 @@ class LoadBalancer {
return $db;
}
+ /**
+ * @param $conn
+ * @throws DBConnectionError
+ */
function reportConnectionError( &$conn ) {
wfProfileIn( __METHOD__ );
@@ -719,6 +736,9 @@ class LoadBalancer {
wfProfileOut( __METHOD__ );
}
+ /**
+ * @return int
+ */
function getWriterIndex() {
return 0;
}
@@ -726,6 +746,7 @@ class LoadBalancer {
/**
* Returns true if the specified index is a valid server index
*
+ * @param $i
* @return bool
*/
function haveIndex( $i ) {
@@ -735,6 +756,7 @@ class LoadBalancer {
/**
* Returns true if the specified index is valid and has non-zero load
*
+ * @param $i
* @return bool
*/
function isNonZeroLoad( $i ) {
@@ -753,6 +775,8 @@ class LoadBalancer {
/**
* Get the host name or IP address of the server with the specified index
* Prefer a readable name if available.
+ * @param $i
+ * @return string
*/
function getServerName( $i ) {
if ( isset( $this->mServers[$i]['hostName'] ) ) {
@@ -766,6 +790,8 @@ class LoadBalancer {
/**
* Return the server info structure for a given index, or false if the index is invalid.
+ * @param $i
+ * @return bool
*/
function getServerInfo( $i ) {
if ( isset( $this->mServers[$i] ) ) {
@@ -777,6 +803,8 @@ class LoadBalancer {
/**
* Sets the server info structure for the given index. Entry at index $i is created if it doesn't exist
+ * @param $i
+ * @param $serverInfo
*/
function setServerInfo( $i, $serverInfo ) {
$this->mServers[$i] = $serverInfo;
@@ -827,8 +855,10 @@ class LoadBalancer {
* Deprecated function, typo in function name
*
* @deprecated in 1.18
+ * @param $conn
*/
function closeConnecton( $conn ) {
+ wfDeprecated( __METHOD__, '1.18' );
$this->closeConnection( $conn );
}
@@ -836,8 +866,7 @@ class LoadBalancer {
* Close a connection
* Using this function makes sure the LoadBalancer knows the connection is closed.
* If you use $conn->close() directly, the load balancer won't update its state.
- * @param $conn
- * @return void
+ * @param $conn DatabaseBase
*/
function closeConnection( $conn ) {
$done = false;
@@ -883,21 +912,32 @@ class LoadBalancer {
}
foreach ( $conns2[$masterIndex] as $conn ) {
if ( $conn->doneWrites() ) {
- $conn->commit();
+ $conn->commit( __METHOD__ );
}
}
}
}
+ /**
+ * @param $value null
+ * @return Mixed
+ */
function waitTimeout( $value = null ) {
return wfSetVar( $this->mWaitTimeout, $value );
}
+ /**
+ * @return bool
+ */
function getLaggedSlaveMode() {
return $this->mLaggedSlaveMode;
}
- /* Disables/enables lag checks */
+ /**
+ * Disables/enables lag checks
+ * @param $mode null
+ * @return bool
+ */
function allowLagged( $mode = null ) {
if ( $mode === null) {
return $this->mAllowLagged;
@@ -905,6 +945,9 @@ class LoadBalancer {
$this->mAllowLagged = $mode;
}
+ /**
+ * @return bool
+ */
function pingAll() {
$success = true;
foreach ( $this->mConns as $conns2 ) {
@@ -921,6 +964,8 @@ class LoadBalancer {
/**
* Call a function with each open connection object
+ * @param $callback
+ * @param array $params
*/
function forEachOpenConnection( $callback, $params = array() ) {
foreach ( $this->mConns as $conns2 ) {
@@ -936,7 +981,7 @@ class LoadBalancer {
/**
* Get the hostname and lag time of the most-lagged slave.
* This is useful for maintenance scripts that need to throttle their updates.
- * May attempt to open connections to slaves on the default DB. If there is
+ * May attempt to open connections to slaves on the default DB. If there is
* no lag, the maximum lag will be reported as -1.
*
* @param $wiki string Wiki ID, or false for the default database
@@ -988,22 +1033,26 @@ class LoadBalancer {
$this->mLagTimes = array( 0 => 0 );
} else {
# Send the request to the load monitor
- $this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
+ $this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
array_keys( $this->mServers ), $wiki );
}
return $this->mLagTimes;
}
/**
- * Get the lag in seconds for a given connection, or zero if this load
- * balancer does not have replication enabled.
+ * 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
+ * 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 $conn DatabaseBase
+ *
+ * @return int
*/
function safeGetLag( $conn ) {
if ( $this->getServerCount() == 1 ) {