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 $errorno = 0;
|
||||||
private static $affected_rows = 0;
|
private static $affected_rows = 0;
|
||||||
private static $in_transaction = false;
|
private static $in_transaction = false;
|
||||||
|
private static $in_retrial = false;
|
||||||
private static $relation = [];
|
private static $relation = [];
|
||||||
|
|
||||||
public static function connect($serveraddr, $user, $pass, $db) {
|
public static function connect($serveraddr, $user, $pass, $db) {
|
||||||
|
@ -49,6 +50,7 @@ class dba {
|
||||||
$db = trim($db);
|
$db = trim($db);
|
||||||
|
|
||||||
if (!(strlen($server) && strlen($user))) {
|
if (!(strlen($server) && strlen($user))) {
|
||||||
|
echo "1";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,6 +104,21 @@ class dba {
|
||||||
return self::$connected;
|
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
|
* @brief Returns the MySQL server version string
|
||||||
*
|
*
|
||||||
|
@ -473,10 +490,18 @@ class dba {
|
||||||
logger('DB Error '.self::$errorno.': '.self::$error."\n".
|
logger('DB Error '.self::$errorno.': '.self::$error."\n".
|
||||||
System::callstack(8)."\n".self::replaceParameters($sql, $params));
|
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 ($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);
|
logger('Giving up because of database error '.$errorno.': '.$error);
|
||||||
exit(1);
|
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;
|
self::$error = $error;
|
||||||
|
|
Loading…
Reference in a new issue