Merge "rdbms: Replace reportConnectionError() with direct throws"

This commit is contained in:
jenkins-bot 2018-04-26 20:00:12 +00:00 committed by Gerrit Code Review
commit 878c986f3a
3 changed files with 24 additions and 23 deletions

View file

@ -991,17 +991,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
abstract protected function closeConnection();
/**
* @param string $error Fallback error message, used if none is given by DB
* @deprecated since 1.32
* @param string $error Fallback message, if none is given by DB
* @throws DBConnectionError
*/
public function reportConnectionError( $error = 'Unknown error' ) {
$myError = $this->lastError();
if ( $myError ) {
$error = $myError;
}
# New method
throw new DBConnectionError( $this, $error );
call_user_func( $this->deprecationLogger, 'Use of ' . __METHOD__ . ' is deprecated.' );
throw new DBConnectionError( $this, $this->lastError() ?: $error );
}
/**

View file

@ -152,9 +152,7 @@ abstract class DatabaseMysqlBase extends Database {
# Always log connection errors
if ( !$this->conn ) {
if ( !$error ) {
$error = $this->lastError();
}
$error = $error ?: $this->lastError();
$this->connLogger->error(
"Error connecting to {db_server}: {error}",
$this->getLogContext( [
@ -166,7 +164,7 @@ abstract class DatabaseMysqlBase extends Database {
"Server: $server, User: $user, Password: " .
substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
$this->reportConnectionError( $error );
throw new DBConnectionError( $this, $error );
}
if ( strlen( $dbName ) ) {
@ -174,22 +172,29 @@ abstract class DatabaseMysqlBase extends Database {
$success = $this->selectDB( $dbName );
Wikimedia\restoreWarnings();
if ( !$success ) {
$error = $this->lastError();
$this->queryLogger->error(
"Error selecting database {db_name} on server {db_server}",
"Error selecting database {db_name} on server {db_server}: {error}",
$this->getLogContext( [
'method' => __METHOD__,
'error' => $error,
] )
);
$this->queryLogger->debug(
"Error selecting database $dbName on server {$this->server}" );
$this->reportConnectionError( "Error selecting database $dbName" );
throw new DBConnectionError( $this, "Error selecting database $dbName: $error" );
}
}
// Tell the server what we're communicating with
if ( !$this->connectInitCharset() ) {
$this->reportConnectionError( "Error setting character set" );
$error = $this->lastError();
$this->queryLogger->error(
"Error setting character set: {error}",
$this->getLogContext( [
'method' => __METHOD__,
'error' => $this->lastError(),
] )
);
throw new DBConnectionError( $this, "Error setting character set: $error" );
}
// Abstract over any insane MySQL defaults
@ -212,14 +217,15 @@ abstract class DatabaseMysqlBase extends Database {
// Use doQuery() to avoid opening implicit transactions (DBO_TRX)
$success = $this->doQuery( 'SET ' . implode( ', ', $set ) );
if ( !$success ) {
$error = $this->lastError();
$this->queryLogger->error(
'Error setting MySQL variables on server {db_server} (check $wgSQLMode)',
'Error setting MySQL variables on server {db_server}: {error}',
$this->getLogContext( [
'method' => __METHOD__,
'error' => $error,
] )
);
$this->reportConnectionError(
'Error setting MySQL variables on server {db_server} (check $wgSQLMode)' );
throw new DBConnectionError( $this, "Error setting MySQL variables: $error" );
}
}

View file

@ -1130,8 +1130,7 @@ class LoadBalancer implements ILoadBalancer {
$context
);
// throws DBConnectionError
$conn->reportConnectionError( "{$this->lastError} ({$context['db_server']})" );
throw new DBConnectionError( $conn, "{$this->lastError} ({$context['db_server']})" );
} else {
// No last connection, probably due to all servers being too busy
$this->connLogger->error(