Avoid update.php suggestion on DB connection errors
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 6 Aug 2015 22:09:54 +0000 (15:09 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 7 Aug 2015 07:31:46 +0000 (00:31 -0700)
Bug: T98788
Change-Id: I21974d6b775f13c33055f76c30142e937eb0e965

includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMysqlBase.php

index 2ee4545..c58bdcd 100644 (file)
@@ -3189,6 +3189,17 @@ abstract class DatabaseBase implements IDatabase {
                return false;
        }
 
+       /**
+        * Determines if the given query error was a connection drop
+        * STUB
+        *
+        * @param integer|string $errno
+        * @return bool
+        */
+       public function wasConnectionError( $errno ) {
+               return false;
+       }
+
        /**
         * Perform a deadlock-prone transaction.
         *
index 86950a8..928de61 100644 (file)
@@ -329,12 +329,19 @@ class DBQueryError extends DBExpectedError {
         * @param string $fname
         */
        function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
-               $message = "A database error has occurred. Did you forget to run " .
-                       "maintenance/update.php after upgrading?  See: " .
-                       "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
-                       "Query: $sql\n" .
-                       "Function: $fname\n" .
-                       "Error: $errno $error\n";
+               if ( $db->wasConnectionError( $errno ) ) {
+                       $message = "A connection error occured. \n" .
+                               "Query: $sql\n" .
+                               "Function: $fname\n" .
+                               "Error: $errno $error\n";
+               } else {
+                       $message = "A database error has occurred. Did you forget to run " .
+                               "maintenance/update.php after upgrading?  See: " .
+                               "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+                               "Query: $sql\n" .
+                               "Function: $fname\n" .
+                               "Error: $errno $error\n";
+               }
                parent::__construct( $db, $message );
 
                $this->error = $error;
index 846da1c..be34242 100644 (file)
@@ -1055,6 +1055,10 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        ( $this->lastErrno() == 1290 && strpos( $this->lastError(), '--read-only' ) !== false );
        }
 
+       function wasConnectionError( $errno ) {
+               return $errno == 2013 || $errno == 2006;
+       }
+
        /**
         * Get the underlying binding handle, mConn
         *