Reconnect after the connection had been lost.
This commit is contained in:
parent
87b5e26063
commit
1bce39120d
1 changed files with 28 additions and 3 deletions
|
@ -23,6 +23,7 @@ class dba {
|
|||
private static $errorno = 0;
|
||||
private static $affected_rows = 0;
|
||||
private static $in_transaction = false;
|
||||
private static $in_retrial = false;
|
||||
private static $relation = [];
|
||||
|
||||
public static function connect($serveraddr, $user, $pass, $db) {
|
||||
|
@ -49,6 +50,7 @@ class dba {
|
|||
$db = trim($db);
|
||||
|
||||
if (!(strlen($server) && strlen($user))) {
|
||||
echo "1";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -102,6 +104,21 @@ class dba {
|
|||
return self::$connected;
|
||||
}
|
||||
|
||||
public static function reconnect() {
|
||||
// This variable is only defined here again to prevent warning messages
|
||||
// It is a local variable and should hopefully not interfere with the global one.
|
||||
$a = new App(dirname(__DIR__));
|
||||
|
||||
// We have to the the variable to "null" to force a new connection
|
||||
self::$db = null;
|
||||
include '.htconfig.php';
|
||||
|
||||
$ret = self::connect($db_host, $db_user, $db_pass, $db_data);
|
||||
unset($db_host, $db_user, $db_pass, $db_data);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the MySQL server version string
|
||||
*
|
||||
|
@ -473,10 +490,18 @@ class dba {
|
|||
logger('DB Error '.self::$errorno.': '.self::$error."\n".
|
||||
System::callstack(8)."\n".self::replaceParameters($sql, $params));
|
||||
|
||||
// It doesn't make sense to continue when the database connection was lost
|
||||
// On a lost connection we try to reconnect - but only once.
|
||||
if ($errorno == 2006) {
|
||||
if (self::$in_retrial || !self::reconnect()) {
|
||||
// It doesn't make sense to continue when the database connection was lost
|
||||
logger('Giving up because of database error '.$errorno.': '.$error);
|
||||
exit(1);
|
||||
} else {
|
||||
// We try it again
|
||||
logger('Reconnected after database error '.$errorno.': '.$error);
|
||||
self::$in_retrial = true;
|
||||
return self::p($sql, $params);
|
||||
}
|
||||
}
|
||||
|
||||
self::$error = $error;
|
||||
|
|
Loading…
Reference in a new issue