Commit d7427fc9 authored by louiz’'s avatar louiz’

Re-connect to postgresql when the connection is lost

fix #3336
parent 8f74d4dd
...@@ -8,6 +8,9 @@ Version 8.0 ...@@ -8,6 +8,9 @@ Version 8.0
the user customize the address to use when connecting to a server. the user customize the address to use when connecting to a server.
See https://lab.louiz.org/louiz/biboumi/issues/3273 for more details. See https://lab.louiz.org/louiz/biboumi/issues/3273 for more details.
- Messages id are properly reflected to the sender - 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 Version 7.2 - 2018-01-24
======================== ========================
......
...@@ -92,7 +92,7 @@ class PostgresqlStatement: public Statement ...@@ -92,7 +92,7 @@ class PostgresqlStatement: public Statement
private: private:
private: private:
bool execute() bool execute(const bool second_attempt=false)
{ {
std::vector<const char*> params; std::vector<const char*> params;
params.reserve(this->params.size()); params.reserve(this->params.size());
...@@ -113,7 +113,17 @@ private: ...@@ -113,7 +113,17 @@ private:
const char* original = PQerrorMessage(this->conn); const char* original = PQerrorMessage(this->conn);
if (original && std::strlen(original) > 0) if (original && std::strlen(original) > 0)
log_error("Failed to execute command: ", std::string{original, std::strlen(original) - 1}); 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; 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