Wrap use of PQconnectdbParams, add proper error

checking and logging when the connection fails.
This commit is contained in:
Greg Smith
2011-02-23 06:44:10 -05:00
parent 18ef5b3cf3
commit 02daccd6e7
3 changed files with 33 additions and 16 deletions

View File

@@ -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)

View File

@@ -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,

View File

@@ -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);