mErrorConnection. * * @note If disable() was called on this LoadBalancer, this method will throw a DBAccessError. * * @param int $i Server index * @param string|bool $domain Domain ID, or false for the current domain * @return IDatabase|bool Returns false on errors * @throws DBAccessError */ public function openConnection( $i, $domain = false ); /** * @return int */ public function getWriterIndex(); /** * Returns true if the specified index is a valid server index * * @param string $i * @return bool */ public function haveIndex( $i ); /** * Returns true if the specified index is valid and has non-zero load * * @param string $i * @return bool */ public function isNonZeroLoad( $i ); /** * Get the number of defined servers (not the number of open connections) * * @return int */ public function getServerCount(); /** * Get the host name or IP address of the server with the specified index * Prefer a readable name if available. * @param string $i * @return string */ public function getServerName( $i ); /** * Return the server info structure for a given index, or false if the index is invalid. * @param int $i * @return array|bool */ public function getServerInfo( $i ); /** * Sets the server info structure for the given index. Entry at index $i * is created if it doesn't exist * @param int $i * @param array $serverInfo */ public function setServerInfo( $i, array $serverInfo ); /** * Get the current master position for chronology control purposes * @return DBMasterPos|bool Returns false if not applicable */ public function getMasterPos(); /** * Disable this load balancer. All connections are closed, and any attempt to * open a new connection will result in a DBAccessError. */ public function disable(); /** * Close all open connections */ public function closeAll(); /** * 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 IDatabase $conn */ public function closeConnection( IDatabase $conn ); /** * Commit transactions on all open connections * @param string $fname Caller name * @throws DBExpectedError */ public function commitAll( $fname = __METHOD__ ); /** * Perform all pre-commit callbacks that remain part of the atomic transactions * and disable any post-commit callbacks until runMasterPostTrxCallbacks() * * Use this only for mutli-database commits */ public function finalizeMasterChanges(); /** * Perform all pre-commit checks for things like replication safety * * Use this only for mutli-database commits * * @param array $options Includes: * - maxWriteDuration : max write query duration time in seconds * @throws DBTransactionError */ public function approveMasterChanges( array $options ); /** * Flush any master transaction snapshots and set DBO_TRX (if DBO_DEFAULT is set) * * The DBO_TRX setting will be reverted to the default in each of these methods: * - commitMasterChanges() * - rollbackMasterChanges() * - commitAll() * This allows for custom transaction rounds from any outer transaction scope. * * @param string $fname * @throws DBExpectedError */ public function beginMasterChanges( $fname = __METHOD__ ); /** * Issue COMMIT on all master connections where writes where done * @param string $fname Caller name * @throws DBExpectedError */ public function commitMasterChanges( $fname = __METHOD__ ); /** * Issue all pending post-COMMIT/ROLLBACK callbacks * * Use this only for mutli-database commits * * @param integer $type IDatabase::TRIGGER_* constant * @return Exception|null The first exception or null if there were none */ public function runMasterPostTrxCallbacks( $type ); /** * Issue ROLLBACK only on master, only if queries were done on connection * @param string $fname Caller name * @throws DBExpectedError */ public function rollbackMasterChanges( $fname = __METHOD__ ); /** * Suppress all pending post-COMMIT/ROLLBACK callbacks * * Use this only for mutli-database commits * * @return Exception|null The first exception or null if there were none */ public function suppressTransactionEndCallbacks(); /** * Commit all replica DB transactions so as to flush any REPEATABLE-READ or SSI snapshot * * @param string $fname Caller name */ public function flushReplicaSnapshots( $fname = __METHOD__ ); /** * @return bool Whether a master connection is already open */ public function hasMasterConnection(); /** * Determine if there are pending changes in a transaction by this thread * @return bool */ public function hasMasterChanges(); /** * Get the timestamp of the latest write query done by this thread * @return float|bool UNIX timestamp or false */ public function lastMasterChangeTimestamp(); /** * Check if this load balancer object had any recent or still * pending writes issued against it by this PHP thread * * @param float $age How many seconds ago is "recent" [defaults to mWaitTimeout] * @return bool */ public function hasOrMadeRecentMasterChanges( $age = null ); /** * Get the list of callers that have pending master changes * * @return string[] List of method names */ public function pendingMasterChangeCallers(); /** * @note This method will trigger a DB connection if not yet done * @param string|bool $domain Domain ID, or false for the current domain * @return bool Whether the generic connection for reads is highly "lagged" */ public function getLaggedReplicaMode( $domain = false ); /** * @note This method will never cause a new DB connection * @return bool Whether any generic connection used for reads was highly "lagged" */ public function laggedReplicaUsed(); /** * @note This method may trigger a DB connection if not yet done * @param string|bool $domain Domain ID, or false for the current domain * @param IDatabase|null DB master connection; used to avoid loops [optional] * @return string|bool Reason the master is read-only or false if it is not */ public function getReadOnlyReason( $domain = false, IDatabase $conn = null ); /** * Disables/enables lag checks * @param null|bool $mode * @return bool */ public function allowLagged( $mode = null ); /** * @return bool */ public function pingAll(); /** * Call a function with each open connection object * @param callable $callback * @param array $params */ public function forEachOpenConnection( $callback, array $params = [] ); /** * Call a function with each open connection object to a master * @param callable $callback * @param array $params */ public function forEachOpenMasterConnection( $callback, array $params = [] ); /** * Call a function with each open replica DB connection object * @param callable $callback * @param array $params */ public function forEachOpenReplicaConnection( $callback, array $params = [] ); /** * Get the hostname and lag time of the most-lagged replica DB * * This is useful for maintenance scripts that need to throttle their updates. * May attempt to open connections to replica DBs on the default DB. If there is * no lag, the maximum lag will be reported as -1. * * @param bool|string $domain Domain ID, or false for the default database * @return array ( host, max lag, index of max lagged host ) */ public function getMaxLag( $domain = false ); /** * Get an estimate of replication lag (in seconds) for each server * * Results are cached for a short time in memcached/process cache * * Values may be "false" if replication is too broken to estimate * * @param string|bool $domain * @return int[] Map of (server index => float|int|bool) */ public function getLagTimes( $domain = false ); /** * 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 */ public function safeGetLag( IDatabase $conn ); /** * Wait for a replica DB to reach a specified master position * * This will connect to the master to get an accurate position if $pos is not given * * @param IDatabase $conn Replica DB * @param DBMasterPos|bool $pos Master position; default: current position * @param integer|null $timeout Timeout in seconds [optional] * @return bool Success */ public function safeWaitForMasterPos( IDatabase $conn, $pos = false, $timeout = null ); /** * Set a callback via IDatabase::setTransactionListener() on * all current and future master connections of this load balancer * * @param string $name Callback name * @param callable|null $callback */ public function setTransactionListener( $name, callable $callback = null ); /** * Set a new table prefix for the existing local domain ID for testing * * @param string $prefix */ public function setDomainPrefix( $prefix ); /** * Make certain table names use their own database, schema, and table prefix * when passed into SQL queries pre-escaped and without a qualified database name * * For example, "user" can be converted to "myschema.mydbname.user" for convenience. * Appearances like `user`, somedb.user, somedb.someschema.user will used literally. * * Calling this twice will completely clear any old table aliases. Also, note that * callers are responsible for making sure the schemas and databases actually exist. * * @param array[] $aliases Map of (table => (dbname, schema, prefix) map) */ public function setTableAliases( array $aliases ); }