mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-27 17:06:29 +00:00
fixing PQexec() calls
fixing several calls where we did not check the result status but only the return value; the query may fail nonetheless
This commit is contained in:
54
repmgr.c
54
repmgr.c
@@ -575,13 +575,15 @@ do_master_register(void)
|
|||||||
repmgr_schema, options.node);
|
repmgr_schema, options.node);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
|
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_warning(_("Cannot delete node details, %s\n"),
|
log_warning(_("Cannot delete node details, %s\n"),
|
||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure there isn't any other master already registered */
|
/* Ensure there isn't any other master already registered */
|
||||||
@@ -603,13 +605,15 @@ do_master_register(void)
|
|||||||
options.conninfo, options.priority);
|
options.conninfo, options.priority);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
|
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_warning(_("Cannot insert node details, %s\n"),
|
log_warning(_("Cannot insert node details, %s\n"),
|
||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
log_notice(_("Master node correctly registered for cluster %s with id %d (conninfo: %s)\n"),
|
log_notice(_("Master node correctly registered for cluster %s with id %d (conninfo: %s)\n"),
|
||||||
@@ -735,7 +739,8 @@ do_standby_register(void)
|
|||||||
|
|
||||||
log_debug(_("standby register: %s\n"), sqlquery);
|
log_debug(_("standby register: %s\n"), sqlquery);
|
||||||
|
|
||||||
if (!PQexec(master_conn, sqlquery))
|
res = PQexec(master_conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot delete node details, %s\n"),
|
log_err(_("Cannot delete node details, %s\n"),
|
||||||
PQerrorMessage(master_conn));
|
PQerrorMessage(master_conn));
|
||||||
@@ -743,6 +748,7 @@ do_standby_register(void)
|
|||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery, "INSERT INTO %s.repl_nodes(id, cluster, name, conninfo, priority) "
|
sqlquery_snprintf(sqlquery, "INSERT INTO %s.repl_nodes(id, cluster, name, conninfo, priority) "
|
||||||
@@ -1695,7 +1701,8 @@ do_witness_create(void)
|
|||||||
repmgr_schema, options.node, options.cluster_name, options.node_name, options.conninfo, options.priority);
|
repmgr_schema, options.node, options.cluster_name, options.node_name, options.conninfo, options.priority);
|
||||||
|
|
||||||
log_debug(_("witness create: %s"), sqlquery);
|
log_debug(_("witness create: %s"), sqlquery);
|
||||||
if (!PQexec(masterconn, sqlquery))
|
res = PQexec(masterconn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot insert node details, %s\n"), PQerrorMessage(masterconn));
|
log_err(_("Cannot insert node details, %s\n"), PQerrorMessage(masterconn));
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
@@ -2068,16 +2075,20 @@ static bool
|
|||||||
create_schema(PGconn *conn)
|
create_schema(PGconn *conn)
|
||||||
{
|
{
|
||||||
char sqlquery[QUERY_STR_LEN];
|
char sqlquery[QUERY_STR_LEN];
|
||||||
|
PGresult *res;
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery, "CREATE SCHEMA %s", repmgr_schema);
|
sqlquery_snprintf(sqlquery, "CREATE SCHEMA %s", repmgr_schema);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot create the schema %s: %s\n"),
|
log_err(_("Cannot create the schema %s: %s\n"),
|
||||||
repmgr_schema, PQerrorMessage(conn));
|
repmgr_schema, PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
|
|
||||||
/* ... the tables */
|
/* ... the tables */
|
||||||
sqlquery_snprintf(sqlquery, "CREATE TABLE %s.repl_nodes ( "
|
sqlquery_snprintf(sqlquery, "CREATE TABLE %s.repl_nodes ( "
|
||||||
@@ -2088,13 +2099,15 @@ create_schema(PGconn *conn)
|
|||||||
" priority integer not null, "
|
" priority integer not null, "
|
||||||
" witness boolean not null default false)", repmgr_schema);
|
" witness boolean not null default false)", repmgr_schema);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot create the table %s.repl_nodes: %s\n"),
|
log_err(_("Cannot create the table %s.repl_nodes: %s\n"),
|
||||||
repmgr_schema, PQerrorMessage(conn));
|
repmgr_schema, PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery, "CREATE TABLE %s.repl_monitor ( "
|
sqlquery_snprintf(sqlquery, "CREATE TABLE %s.repl_monitor ( "
|
||||||
" primary_node INTEGER NOT NULL, "
|
" primary_node INTEGER NOT NULL, "
|
||||||
@@ -2105,13 +2118,15 @@ create_schema(PGconn *conn)
|
|||||||
" replication_lag BIGINT NOT NULL, "
|
" replication_lag BIGINT NOT NULL, "
|
||||||
" apply_lag BIGINT NOT NULL) ", repmgr_schema);
|
" apply_lag BIGINT NOT NULL) ", repmgr_schema);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot create the table %s.repl_monitor: %s\n"),
|
log_err(_("Cannot create the table %s.repl_monitor: %s\n"),
|
||||||
repmgr_schema, PQerrorMessage(conn));
|
repmgr_schema, PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
/* a view */
|
/* a view */
|
||||||
sqlquery_snprintf(sqlquery, "CREATE VIEW %s.repl_status AS "
|
sqlquery_snprintf(sqlquery, "CREATE VIEW %s.repl_status AS "
|
||||||
@@ -2125,49 +2140,58 @@ create_schema(PGconn *conn)
|
|||||||
" FROM %s.repl_monitor GROUP BY 1)",
|
" FROM %s.repl_monitor GROUP BY 1)",
|
||||||
repmgr_schema, repmgr_schema, repmgr_schema, repmgr_schema);
|
repmgr_schema, repmgr_schema, repmgr_schema, repmgr_schema);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
if (!PQexec(conn, sqlquery))
|
|
||||||
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot create the view %s.repl_status: %s\n"),
|
log_err(_("Cannot create the view %s.repl_status: %s\n"),
|
||||||
repmgr_schema, PQerrorMessage(conn));
|
repmgr_schema, PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
/* an index to improve performance of the view */
|
/* an index to improve performance of the view */
|
||||||
sqlquery_snprintf(sqlquery, "CREATE INDEX idx_repl_status_sort "
|
sqlquery_snprintf(sqlquery, "CREATE INDEX idx_repl_status_sort "
|
||||||
" ON %s.repl_monitor (last_monitor_time, standby_node) ",
|
" ON %s.repl_monitor (last_monitor_time, standby_node) ",
|
||||||
repmgr_schema);
|
repmgr_schema);
|
||||||
log_debug(_("master register: %s\n"), sqlquery);
|
log_debug(_("master register: %s\n"), sqlquery);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
log_err(_("Cannot indexing table %s.repl_monitor: %s\n"),
|
log_err(_("Can't index table %s.repl_monitor: %s\n"),
|
||||||
repmgr_schema, PQerrorMessage(conn));
|
repmgr_schema, PQerrorMessage(conn));
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
/* XXX Here we MUST try to load the repmgr_function.sql not hardcode it here */
|
/* XXX Here we MUST try to load the repmgr_function.sql not hardcode it here */
|
||||||
sqlquery_snprintf(sqlquery,
|
sqlquery_snprintf(sqlquery,
|
||||||
"CREATE OR REPLACE FUNCTION %s.repmgr_update_standby_location(text) RETURNS boolean "
|
"CREATE OR REPLACE FUNCTION %s.repmgr_update_standby_location(text) RETURNS boolean "
|
||||||
"AS '$libdir/repmgr_funcs', 'repmgr_update_standby_location' "
|
"AS '$libdir/repmgr_funcs', 'repmgr_update_standby_location' "
|
||||||
"LANGUAGE C STRICT ", repmgr_schema);
|
"LANGUAGE C STRICT ", repmgr_schema);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Cannot create the function repmgr_update_standby_location: %s\n",
|
fprintf(stderr, "Cannot create the function repmgr_update_standby_location: %s\n",
|
||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery,
|
sqlquery_snprintf(sqlquery,
|
||||||
"CREATE OR REPLACE FUNCTION %s.repmgr_get_last_standby_location() RETURNS text "
|
"CREATE OR REPLACE FUNCTION %s.repmgr_get_last_standby_location() RETURNS text "
|
||||||
"AS '$libdir/repmgr_funcs', 'repmgr_get_last_standby_location' "
|
"AS '$libdir/repmgr_funcs', 'repmgr_get_last_standby_location' "
|
||||||
"LANGUAGE C STRICT ", repmgr_schema);
|
"LANGUAGE C STRICT ", repmgr_schema);
|
||||||
if (!PQexec(conn, sqlquery))
|
res = PQexec(conn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Cannot create the function repmgr_get_last_standby_location: %s\n",
|
fprintf(stderr, "Cannot create the function repmgr_get_last_standby_location: %s\n",
|
||||||
PQerrorMessage(conn));
|
PQerrorMessage(conn));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
PQclear(res);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2182,7 +2206,8 @@ copy_configuration(PGconn *masterconn, PGconn *witnessconn)
|
|||||||
|
|
||||||
sqlquery_snprintf(sqlquery, "TRUNCATE TABLE %s.repl_nodes", repmgr_schema);
|
sqlquery_snprintf(sqlquery, "TRUNCATE TABLE %s.repl_nodes", repmgr_schema);
|
||||||
log_debug("copy_configuration: %s\n", sqlquery);
|
log_debug("copy_configuration: %s\n", sqlquery);
|
||||||
if (!PQexec(witnessconn, sqlquery))
|
res = PQexec(witnessconn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Cannot clean node details in the witness, %s\n",
|
fprintf(stderr, "Cannot clean node details in the witness, %s\n",
|
||||||
PQerrorMessage(witnessconn));
|
PQerrorMessage(witnessconn));
|
||||||
@@ -2208,7 +2233,8 @@ copy_configuration(PGconn *masterconn, PGconn *witnessconn)
|
|||||||
atoi(PQgetvalue(res, i, 3)),
|
atoi(PQgetvalue(res, i, 3)),
|
||||||
PQgetvalue(res, i, 4));
|
PQgetvalue(res, i, 4));
|
||||||
|
|
||||||
if (!PQexec(witnessconn, sqlquery))
|
res = PQexec(witnessconn, sqlquery);
|
||||||
|
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Cannot copy configuration to witness, %s\n",
|
fprintf(stderr, "Cannot copy configuration to witness, %s\n",
|
||||||
PQerrorMessage(witnessconn));
|
PQerrorMessage(witnessconn));
|
||||||
|
|||||||
Reference in New Issue
Block a user