Consolidate duplicated code

This commit is contained in:
Ian Barwick
2015-03-04 17:27:51 +09:00
parent 2b6415b339
commit 0f8759d316
3 changed files with 53 additions and 39 deletions

View File

@@ -977,6 +977,7 @@ create_node_record(PGconn *conn, char *action, int node, char *type, int upstrea
{
log_warning(_("Cannot insert node details, %s\n"),
PQerrorMessage(conn));
PQclear(res);
return false;
}
@@ -984,3 +985,34 @@ create_node_record(PGconn *conn, char *action, int node, char *type, int upstrea
return true;
}
bool
delete_node_record(PGconn *conn, int node, char *action)
{
char sqlquery[QUERY_STR_LEN];
PGresult *res;
sqlquery_snprintf(sqlquery,
"DELETE FROM %s.repl_nodes "
" WHERE id = %d",
get_repmgr_schema_quoted(conn),
node);
if(action != NULL)
{
log_debug(_("%s: %s\n"), action, sqlquery);
}
res = PQexec(conn, sqlquery);
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
log_warning(_("Cannot delete node details, %s\n"),
PQerrorMessage(conn));
PQclear(res);
return false;
}
PQclear(res);
return true;
}

View File

@@ -60,5 +60,8 @@ bool stop_backup(PGconn *conn, char *last_wal_segment);
bool set_config_bool(PGconn *conn, const char *config_param, bool state);
bool copy_configuration(PGconn *masterconn, PGconn *witnessconn, char *cluster_name);
bool create_node_record(PGconn *conn, char *action, int node, char *type, int upstream_node, char *cluster_name, char *node_name, char *conninfo, int priority, char *slot_name);
bool delete_node_record(PGconn *conn, int node, char *action);
#endif

View File

@@ -670,8 +670,6 @@ static void
do_master_register(void)
{
PGconn *conn;
PGresult *res;
char sqlquery[QUERY_STR_LEN];
bool schema_exists = false;
int ret;
@@ -721,26 +719,6 @@ do_master_register(void)
{
PGconn *master_conn;
if (runtime_options.force)
{
sqlquery_snprintf(sqlquery,
"DELETE FROM %s.repl_nodes "
" WHERE id = %d ",
get_repmgr_schema_quoted(conn),
options.node);
log_debug(_("master register: %s\n"), sqlquery);
res = PQexec(conn, sqlquery);
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
{
log_warning(_("Cannot delete node details, %s\n"),
PQerrorMessage(conn));
PQfinish(conn);
exit(ERR_BAD_CONFIG);
}
PQclear(res);
}
/* Ensure there isn't any other master already registered */
master_conn = get_master_connection(conn,
options.cluster_name, NULL, NULL);
@@ -751,6 +729,20 @@ do_master_register(void)
options.cluster_name);
exit(ERR_BAD_CONFIG);
}
if (runtime_options.force)
{
bool node_record_deleted = delete_node_record(conn,
options.node,
"master register");
if (node_record_deleted == false)
{
PQfinish(master_conn);
PQfinish(conn);
exit(ERR_BAD_CONFIG);
}
}
}
/* Now register the master */
@@ -783,9 +775,6 @@ do_standby_register(void)
PGconn *master_conn;
int ret;
PGresult *res;
char sqlquery[QUERY_STR_LEN];
char master_version[MAXVERSIONSTR];
int master_version_num = 0;
@@ -794,8 +783,6 @@ do_standby_register(void)
bool node_record_created;
/* XXX: A lot of copied code from do_master_register! Refactor */
log_info(_("%s connecting to standby database\n"), progname);
conn = establish_db_connection(options.conninfo, true);
@@ -856,24 +843,16 @@ do_standby_register(void)
log_info(_("%s registering the standby\n"), progname);
if (runtime_options.force)
{
sqlquery_snprintf(sqlquery,
"DELETE FROM %s.repl_nodes "
" WHERE id = %d",
get_repmgr_schema_quoted(master_conn),
options.node);
bool node_record_deleted = delete_node_record(master_conn,
options.node,
"standby register");
log_debug(_("standby register: %s\n"), sqlquery);
res = PQexec(master_conn, sqlquery);
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
if (node_record_deleted == false)
{
log_err(_("Cannot delete node details, %s\n"),
PQerrorMessage(master_conn));
PQfinish(master_conn);
PQfinish(conn);
exit(ERR_BAD_CONFIG);
}
PQclear(res);
}
node_record_created = create_node_record(master_conn,