mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-23 15:16:29 +00:00
Wrap use of PQconnectdbParams, add proper error
checking and logging when the connection fails.
This commit is contained in:
20
dbutils.c
20
dbutils.c
@@ -43,6 +43,26 @@ establishDBConnection(const char *conninfo, const bool exit_on_error)
|
||||
return conn;
|
||||
}
|
||||
|
||||
PGconn *
|
||||
establishDBConnectionByParams(const char *keywords[], const char *values[],const bool exit_on_error)
|
||||
{
|
||||
/* Make a connection to the database */
|
||||
PGconn *conn = PQconnectdbParams(keywords, values, true);
|
||||
|
||||
/* Check to see that the backend connection was successfully made */
|
||||
if ((PQstatus(conn) != CONNECTION_OK))
|
||||
{
|
||||
log_err(_("Connection to database failed: %s\n"),
|
||||
PQerrorMessage(conn));
|
||||
if (exit_on_error)
|
||||
{
|
||||
PQfinish(conn);
|
||||
exit(ERR_DB_CON);
|
||||
}
|
||||
}
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
bool
|
||||
is_standby(PGconn *conn)
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
#define _REPMGR_DBUTILS_H_
|
||||
|
||||
PGconn *establishDBConnection(const char *conninfo, const bool exit_on_error);
|
||||
PGconn *establishDBConnectionByParams(const char *keywords[],
|
||||
const char *values[],
|
||||
const bool exit_on_error);
|
||||
bool is_standby(PGconn *conn);
|
||||
char *pg_version(PGconn *conn, char* major_version);
|
||||
bool guc_setted(PGconn *conn, const char *parameter, const char *op,
|
||||
|
||||
26
repmgr.c
26
repmgr.c
@@ -732,13 +732,7 @@ do_standby_clone(void)
|
||||
|
||||
/* We need to connect to check configuration and start a backup */
|
||||
log_info(_("%s connecting to master database\n"), progname);
|
||||
conn = PQconnectdbParams(keywords, values, true);
|
||||
if (!conn)
|
||||
{
|
||||
log_err(_("%s: could not connect to master\n"),
|
||||
progname);
|
||||
exit(ERR_BAD_CONFIG);
|
||||
}
|
||||
conn=establishDBConnectionByParams(keywords,values,true);
|
||||
|
||||
/* primary should be v9 or better */
|
||||
log_info(_("%s connected to master, checking its state\n"), progname);
|
||||
@@ -1011,17 +1005,17 @@ do_standby_clone(void)
|
||||
}
|
||||
|
||||
stop_backup:
|
||||
/* inform the master that we have finished the backup */
|
||||
conn = PQconnectdbParams(keywords, values, true);
|
||||
if (!conn)
|
||||
{
|
||||
log_err(_("%s: could not connect to master\n"),
|
||||
progname);
|
||||
exit(ERR_BAD_RSYNC);
|
||||
}
|
||||
|
||||
/*
|
||||
* Inform the master that we have finished the backup.
|
||||
*
|
||||
* Don't have this one exit if it fails, so that a more informative
|
||||
* error message will also appear about the backup not being stopped.
|
||||
*/
|
||||
log_info(_("%s connecting to master database to stop backup\n"), progname);
|
||||
conn=establishDBConnectionByParams(keywords,values,false);
|
||||
|
||||
log_notice("Finishing backup...\n");
|
||||
|
||||
sqlquery_snprintf(sqlquery, "SELECT pg_xlogfile_name(pg_stop_backup())");
|
||||
log_debug("standby clone: %s\n", sqlquery);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user