Commit d7427fc9 authored by louiz’'s avatar louiz’

Re-connect to postgresql when the connection is lost

fix #3336
parent 8f74d4dd
Pipeline #1218 passed with stages
in 27 minutes and 39 seconds
......@@ -8,6 +8,9 @@ Version 8.0
the user customize the address to use when connecting to a server.
See https://lab.louiz.org/louiz/biboumi/issues/3273 for more details.
- Messages id are properly reflected to the sender
- We now properly deal with a PostgreSQL server restart: whenever the
connection is lost with the server, we try to reconnect and re-execute the
query once.
Version 7.2 - 2018-01-24
========================
......
......@@ -92,7 +92,7 @@ class PostgresqlStatement: public Statement
private:
private:
bool execute()
bool execute(const bool second_attempt=false)
{
std::vector<const char*> params;
params.reserve(this->params.size());
......@@ -113,7 +113,17 @@ private:
const char* original = PQerrorMessage(this->conn);
if (original && std::strlen(original) > 0)
log_error("Failed to execute command: ", std::string{original, std::strlen(original) - 1});
return false;
if (PQstatus(this->conn) != CONNECTION_OK && !second_attempt)
{
log_info("Trying to reconnect to PostgreSQL server and execute the query again.");
PQreset(this->conn);
return this->execute(true);
}
else
{
log_error("Givin up.");
return false;
}
}
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment