diff options
Diffstat (limited to 'controller/PostgreSQL.cpp')
-rw-r--r-- | controller/PostgreSQL.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 4182e0f8..5c9b1579 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -510,7 +510,7 @@ void PostgreSQL::heartbeat() const char *publicIdentity = publicId; const char *hostname = hostnameTmp; - PGconn *conn = PQconnectdb(_connString.c_str()); + PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); @@ -519,7 +519,7 @@ void PostgreSQL::heartbeat() while (_run == 1) { if(PQstatus(conn) != CONNECTION_OK) { PQfinish(conn); - conn = PQconnectdb(_connString.c_str()); + conn = getPgConn(); } if (conn) { std::string major = std::to_string(ZEROTIER_ONE_VERSION_MAJOR); @@ -566,7 +566,7 @@ void PostgreSQL::heartbeat() void PostgreSQL::membersDbWatcher() { - PGconn *conn = PQconnectdb(_connString.c_str()); + PGconn *conn = getPgConn(NO_OVERRIDE); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); @@ -619,7 +619,7 @@ void PostgreSQL::membersDbWatcher() void PostgreSQL::networksDbWatcher() { - PGconn *conn = PQconnectdb(_connString.c_str()); + PGconn *conn = getPgConn(NO_OVERRIDE); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); @@ -670,7 +670,7 @@ void PostgreSQL::networksDbWatcher() void PostgreSQL::commitThread() { - PGconn *conn = PQconnectdb(_connString.c_str()); + PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "ERROR: Connection to database failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); @@ -1146,7 +1146,7 @@ void PostgreSQL::commitThread() void PostgreSQL::onlineNotificationThread() { - PGconn *conn = PQconnectdb(_connString.c_str()); + PGconn *conn = getPgConn(); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); @@ -1161,7 +1161,7 @@ void PostgreSQL::onlineNotificationThread() if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "ERROR: Online Notification thread lost connection to Postgres."); PQfinish(conn); - conn = PQconnectdb(_connString.c_str()); + conn = getPgConn(); continue; } @@ -1328,4 +1328,15 @@ void PostgreSQL::onlineNotificationThread() PQfinish(conn); exit(5); } + +PGconn *PostgreSQL::getPgConn(OverrideMode m) { + if (m == ALLOW_PGBOUNCER_OVERRIDE) { + char *connStr = getenv("PGBOUNCER_CONNSTR"); + if (connStr != NULL) { + return PQconnectdb(connStr); + } + } + + return PQconnectdb(_connString.c_str()); +} #endif //ZT_CONTROLLER_USE_LIBPQ |