X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fdb%2FDatabaseMysqlBase.php;h=7b903d68266d3a2399e6eaaba27bbc5ed26c4358;hb=b29425e0b4bd90588fee46efafb58b5f41729033;hp=2008f4d73cfd52f391019ed2b53acf2696e3eab5;hpb=0ec17d739f1df9c00044d67b9ed830df4b2db872;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/db/DatabaseMysqlBase.php b/includes/db/DatabaseMysqlBase.php index 2008f4d73c..7b903d6826 100644 --- a/includes/db/DatabaseMysqlBase.php +++ b/includes/db/DatabaseMysqlBase.php @@ -58,7 +58,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase { */ function open( $server, $user, $password, $dbName ) { global $wgAllDBsAreLocalhost, $wgSQLMode; - wfProfileIn( __METHOD__ ); # Debugging hack -- fake cluster if ( $wgAllDBsAreLocalhost ) { @@ -72,8 +71,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase { $this->mPassword = $password; $this->mDBname = $dbName; - wfProfileIn( "dbconnect-$server" ); - # The kernel's default SYN retransmission period is far too slow for us, # so we use a short timeout plus a manual retry. Retrying means that a small # but finite rate of SYN packet loss won't cause user-visible errors. @@ -82,27 +79,27 @@ abstract class DatabaseMysqlBase extends DatabaseBase { try { $this->mConn = $this->mysqlConnect( $realServer ); } catch ( Exception $ex ) { - wfProfileOut( "dbconnect-$server" ); - wfProfileOut( __METHOD__ ); $this->restoreErrorHandler(); throw $ex; } $error = $this->restoreErrorHandler(); - wfProfileOut( "dbconnect-$server" ); - # Always log connection errors if ( !$this->mConn ) { if ( !$error ) { $error = $this->lastError(); } - wfLogDBError( "Error connecting to {$this->mServer}: $error" ); + wfLogDBError( + "Error connecting to {db_server}: {error}", + $this->getLogContext( array( + 'method' => __METHOD__, + 'error' => $error, + ) ) + ); wfDebug( "DB connection error\n" . "Server: $server, User: $user, Password: " . substr( $password, 0, 3 ) . "..., error: " . $error . "\n" ); - wfProfileOut( __METHOD__ ); - $this->reportConnectionError( $error ); } @@ -111,12 +108,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase { $success = $this->selectDB( $dbName ); wfRestoreWarnings(); if ( !$success ) { - wfLogDBError( "Error selecting database $dbName on server {$this->mServer}" ); + wfLogDBError( + "Error selecting database {db_name} on server {db_server}", + $this->getLogContext( array( + 'method' => __METHOD__, + ) ) + ); wfDebug( "Error selecting database $dbName on server {$this->mServer} " . "from client host " . wfHostname() . "\n" ); - wfProfileOut( __METHOD__ ); - $this->reportConnectionError( "Error selecting database $dbName" ); } } @@ -126,20 +126,29 @@ abstract class DatabaseMysqlBase extends DatabaseBase { $this->reportConnectionError( "Error setting character set" ); } + // Abstract over any insane MySQL defaults + $set = array( 'group_concat_max_len = 262144' ); // Set SQL mode, default is turning them all off, can be overridden or skipped with null if ( is_string( $wgSQLMode ) ) { - $mode = $this->addQuotes( $wgSQLMode ); + $set[] = 'sql_mode = ' . $this->addQuotes( $wgSQLMode ); + } + + if ( $set ) { // Use doQuery() to avoid opening implicit transactions (DBO_TRX) - $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ ); + $success = $this->doQuery( 'SET ' . implode( ', ', $set ), __METHOD__ ); if ( !$success ) { - wfLogDBError( "Error setting sql_mode to $mode on server {$this->mServer}" ); - wfProfileOut( __METHOD__ ); - $this->reportConnectionError( "Error setting sql_mode to $mode" ); + wfLogDBError( + 'Error setting MySQL variables on server {db_server} (check $wgSQLMode)', + $this->getLogContext( array( + 'method' => __METHOD__, + ) ) + ); + $this->reportConnectionError( + 'Error setting MySQL variables on server {db_server} (check $wgSQLMode)' ); } } $this->mOpened = true; - wfProfileOut( __METHOD__ ); return true; } @@ -655,7 +664,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase { return '0'; // http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html } - wfProfileIn( __METHOD__ ); # Commit any open transactions $this->commit( __METHOD__, 'flush' ); @@ -664,18 +672,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase { if ( $wait > $timeout * 1e6 ) { wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" ); - wfProfileOut( __METHOD__ ); return -1; } elseif ( $wait > 0 ) { wfDebug( "Fake slave waiting $wait us\n" ); usleep( $wait ); - wfProfileOut( __METHOD__ ); return 1; } else { wfDebug( "Fake slave up to date ($wait us)\n" ); - wfProfileOut( __METHOD__ ); return 0; } @@ -695,8 +700,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase { } } - wfProfileOut( __METHOD__ ); - return $status; } @@ -1255,13 +1258,15 @@ class MySQLField implements Field { class MySQLMasterPos implements DBMasterPos { /** @var string */ public $file; - - /** @var int Timestamp */ + /** @var int Position */ public $pos; + /** @var float UNIX timestamp */ + public $asOfTime = 0.0; function __construct( $file, $pos ) { $this->file = $file; $this->pos = $pos; + $this->asOfTime = microtime( true ); } function __toString() { @@ -1287,4 +1292,8 @@ class MySQLMasterPos implements DBMasterPos { return ( $thisPos && $thatPos && $thisPos >= $thatPos ); } + + function asOfTime() { + return $this->asOfTime; + } }