mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-25 16:16:29 +00:00
Remove experimental event logging code
Needs more bikeshedding.
This commit is contained in:
52
dbutils.c
52
dbutils.c
@@ -1101,55 +1101,3 @@ delete_node_record(PGconn *conn, int node, char *action)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
create_event_record(PGconn *conn, int node_id, char *event, bool successful, char *details)
|
|
||||||
{
|
|
||||||
char sqlquery[QUERY_STR_LEN];
|
|
||||||
PGresult *res;
|
|
||||||
|
|
||||||
int n_node_id = htonl(node_id);
|
|
||||||
char *t_successful = successful ? "TRUE" : "FALSE";
|
|
||||||
|
|
||||||
const char *values[4] = { (char *)&n_node_id,
|
|
||||||
event,
|
|
||||||
t_successful,
|
|
||||||
details
|
|
||||||
};
|
|
||||||
|
|
||||||
int lengths[4] = { sizeof(n_node_id),
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
int binary[4] = {1, 0, 0, 0};
|
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery,
|
|
||||||
" INSERT INTO %s.repl_events ( "
|
|
||||||
" node_id, "
|
|
||||||
" event, "
|
|
||||||
" successful, "
|
|
||||||
" details "
|
|
||||||
" ) "
|
|
||||||
" VALUES ($1, $2, $3, $4) ",
|
|
||||||
get_repmgr_schema_quoted(conn));
|
|
||||||
|
|
||||||
res = PQexecParams(conn,
|
|
||||||
sqlquery,
|
|
||||||
4,
|
|
||||||
NULL,
|
|
||||||
values,
|
|
||||||
lengths,
|
|
||||||
binary,
|
|
||||||
0);
|
|
||||||
|
|
||||||
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
|
|
||||||
{
|
|
||||||
log_warning(_("Cannot insert event details, %s\n"),
|
|
||||||
PQerrorMessage(conn));
|
|
||||||
PQclear(res);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -64,7 +64,5 @@ bool set_config_bool(PGconn *conn, const char *config_param, bool state);
|
|||||||
bool copy_configuration(PGconn *masterconn, PGconn *witnessconn, char *cluster_name);
|
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 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);
|
bool delete_node_record(PGconn *conn, int node, char *action);
|
||||||
bool create_event_record(PGconn *conn, int node_id, char *event, bool successful, char *details);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
250
repmgr.c
250
repmgr.c
@@ -79,7 +79,6 @@ static int check_server_version(PGconn *conn, char *server_type, bool exit_on_er
|
|||||||
static bool check_upstream_config(PGconn *conn, int server_version_num, bool exit_on_error);
|
static bool check_upstream_config(PGconn *conn, int server_version_num, bool exit_on_error);
|
||||||
|
|
||||||
static char *make_pg_path(char *file);
|
static char *make_pg_path(char *file);
|
||||||
static bool log_event(PGconn *standby_conn, bool success, char *details);
|
|
||||||
|
|
||||||
static void do_master_register(void);
|
static void do_master_register(void);
|
||||||
static void do_standby_register(void);
|
static void do_standby_register(void);
|
||||||
@@ -776,19 +775,6 @@ do_master_register(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Log the event */
|
|
||||||
record_created = create_event_record(conn,
|
|
||||||
options.node,
|
|
||||||
"master_register",
|
|
||||||
true,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if(record_created == false)
|
|
||||||
{
|
|
||||||
PQfinish(conn);
|
|
||||||
exit(ERR_DB_QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
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"),
|
||||||
@@ -882,20 +868,6 @@ do_standby_register(void)
|
|||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log the event */
|
|
||||||
record_created = create_event_record(master_conn,
|
|
||||||
options.node,
|
|
||||||
"standby_register",
|
|
||||||
true,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if(record_created == false)
|
|
||||||
{
|
|
||||||
PQfinish(master_conn);
|
|
||||||
PQfinish(conn);
|
|
||||||
exit(ERR_DB_QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
PQfinish(master_conn);
|
PQfinish(master_conn);
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
|
|
||||||
@@ -946,9 +918,6 @@ do_standby_clone(void)
|
|||||||
char *first_wal_segment = NULL;
|
char *first_wal_segment = NULL;
|
||||||
char *last_wal_segment = NULL;
|
char *last_wal_segment = NULL;
|
||||||
|
|
||||||
bool record_created = FALSE;
|
|
||||||
PQExpBufferData event_details;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If dest_dir (-D/--pgdata) was provided, this will become the new data
|
* If dest_dir (-D/--pgdata) was provided, this will become the new data
|
||||||
* directory (otherwise repmgr will default to the same directory as on the
|
* directory (otherwise repmgr will default to the same directory as on the
|
||||||
@@ -1495,59 +1464,11 @@ stop_backup:
|
|||||||
log_notice(_("for example : /etc/init.d/postgresql start\n"));
|
log_notice(_("for example : /etc/init.d/postgresql start\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log the event */
|
|
||||||
initPQExpBuffer(&event_details);
|
|
||||||
|
|
||||||
/* Add details about relevant runtime options used */
|
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("Cloned from host '%s', port %s"),
|
|
||||||
runtime_options.host,
|
|
||||||
runtime_options.masterport);
|
|
||||||
|
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("; backup method: %s"),
|
|
||||||
runtime_options.rsync_only ? "rsync" : "pg_basebackup");
|
|
||||||
|
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("; --force: %s"),
|
|
||||||
runtime_options.force ? "Y" : "N");
|
|
||||||
|
|
||||||
record_created = log_event(upstream_conn,
|
|
||||||
true,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
if(record_created == false)
|
|
||||||
{
|
|
||||||
PQfinish(upstream_conn);
|
|
||||||
exit(ERR_DB_QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
PQfinish(upstream_conn);
|
PQfinish(upstream_conn);
|
||||||
exit(retval);
|
exit(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool
|
|
||||||
log_event(PGconn *standby_conn, bool success, char *details)
|
|
||||||
{
|
|
||||||
PGconn *primary_conn;
|
|
||||||
bool retval;
|
|
||||||
|
|
||||||
primary_conn = get_primary_connection(standby_conn,
|
|
||||||
options.cluster_name,
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
retval = create_event_record(primary_conn,
|
|
||||||
options.node,
|
|
||||||
"standby_clone",
|
|
||||||
success,
|
|
||||||
details);
|
|
||||||
PQfinish(primary_conn);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_standby_promote(void)
|
do_standby_promote(void)
|
||||||
{
|
{
|
||||||
@@ -1566,7 +1487,6 @@ do_standby_promote(void)
|
|||||||
promote_check_interval = 2;
|
promote_check_interval = 2;
|
||||||
bool promote_sucess = false;
|
bool promote_sucess = false;
|
||||||
bool success;
|
bool success;
|
||||||
bool record_created;
|
|
||||||
|
|
||||||
/* We need to connect to check configuration */
|
/* We need to connect to check configuration */
|
||||||
log_info(_("connecting to standby database\n"));
|
log_info(_("connecting to standby database\n"));
|
||||||
@@ -1648,17 +1568,6 @@ do_standby_promote(void)
|
|||||||
|
|
||||||
if (promote_sucess == false)
|
if (promote_sucess == false)
|
||||||
{
|
{
|
||||||
PQExpBufferData details;
|
|
||||||
initPQExpBuffer(&details);
|
|
||||||
appendPQExpBuffer(&details,
|
|
||||||
"Node %i could not be promoted to master",
|
|
||||||
options.node);
|
|
||||||
|
|
||||||
record_created = create_event_record(old_master_conn,
|
|
||||||
options.node,
|
|
||||||
"standby_promote",
|
|
||||||
false,
|
|
||||||
details.data);
|
|
||||||
/* XXX exit with error? */
|
/* XXX exit with error? */
|
||||||
log_err(_(retval == 1 ?
|
log_err(_(retval == 1 ?
|
||||||
"STANDBY PROMOTE failed, this is still a standby node.\n" :
|
"STANDBY PROMOTE failed, this is still a standby node.\n" :
|
||||||
@@ -1666,28 +1575,12 @@ do_standby_promote(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PQExpBufferData details;
|
|
||||||
initPQExpBuffer(&details);
|
|
||||||
appendPQExpBuffer(&details,
|
|
||||||
"Node %i was successfully promoted to master",
|
|
||||||
options.node);
|
|
||||||
|
|
||||||
log_notice(_("STANDBY PROMOTE successful. You should REINDEX any hash indexes you have.\n"));
|
log_notice(_("STANDBY PROMOTE successful. You should REINDEX any hash indexes you have.\n"));
|
||||||
/* Log the event */
|
|
||||||
record_created = create_event_record(conn,
|
|
||||||
options.node,
|
|
||||||
"standby_promote",
|
|
||||||
true,
|
|
||||||
details.data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PQfinish(old_master_conn);
|
PQfinish(old_master_conn);
|
||||||
PQfinish(conn);
|
PQfinish(conn);
|
||||||
|
|
||||||
if(record_created == false)
|
|
||||||
{
|
|
||||||
exit(ERR_DB_QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1853,21 +1746,10 @@ do_witness_create(void)
|
|||||||
retval = is_standby(masterconn);
|
retval = is_standby(masterconn);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
PQExpBufferData errmsg;
|
log_err("%s\n", _(retval == 1 ?
|
||||||
initPQExpBuffer(&errmsg);
|
|
||||||
appendPQExpBuffer(&errmsg,
|
|
||||||
"%s",
|
|
||||||
_(retval == 1 ?
|
|
||||||
"provided upstream node is not a master" :
|
"provided upstream node is not a master" :
|
||||||
"connection to upstream node lost"));
|
"connection to upstream node lost"));
|
||||||
|
|
||||||
log_err("%s\n", errmsg.data);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg.data);
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
@@ -1877,18 +1759,8 @@ do_witness_create(void)
|
|||||||
r = test_ssh_connection(runtime_options.host, runtime_options.remote_user);
|
r = test_ssh_connection(runtime_options.host, runtime_options.remote_user);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
PQExpBufferData errmsg;
|
log_err(_("unable to connect to remote host '%s' via SSH\n"), runtime_options.host);
|
||||||
initPQExpBuffer(&errmsg);
|
|
||||||
appendPQExpBuffer(&errmsg,
|
|
||||||
_("unable to connect to remote host '%s' via SSH"),
|
|
||||||
runtime_options.host);
|
|
||||||
log_err("%s\n", errmsg.data);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg.data);
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_SSH);
|
exit(ERR_BAD_SSH);
|
||||||
}
|
}
|
||||||
@@ -1896,17 +1768,7 @@ do_witness_create(void)
|
|||||||
/* Check this directory could be used as a PGDATA dir */
|
/* Check this directory could be used as a PGDATA dir */
|
||||||
if (!create_pg_dir(runtime_options.dest_dir, runtime_options.force))
|
if (!create_pg_dir(runtime_options.dest_dir, runtime_options.force))
|
||||||
{
|
{
|
||||||
PQExpBufferData errmsg;
|
log_err(_("unable to create witness server data directory (\"%s\")\n"), runtime_options.host);
|
||||||
initPQExpBuffer(&errmsg);
|
|
||||||
appendPQExpBuffer(&errmsg,
|
|
||||||
_("unable to create witness server data directory (\"%s\")"),
|
|
||||||
runtime_options.host);
|
|
||||||
log_err("%s\n", errmsg.data);
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg.data);
|
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1930,13 +1792,8 @@ do_witness_create(void)
|
|||||||
r = system(script);
|
r = system(script);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to initialize cluster for witness server");
|
log_err(_("unable to initialize cluster for witness server\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
@@ -1949,19 +1806,8 @@ do_witness_create(void)
|
|||||||
pg_conf = fopen(buf, "a");
|
pg_conf = fopen(buf, "a");
|
||||||
if (pg_conf == NULL)
|
if (pg_conf == NULL)
|
||||||
{
|
{
|
||||||
PQExpBufferData errmsg;
|
log_err(_("unable to open \"%s\" to add additional configuration items: %s\n"),
|
||||||
initPQExpBuffer(&errmsg);
|
buf, strerror(errno));
|
||||||
appendPQExpBuffer(&errmsg,
|
|
||||||
_("unable to open \"%s\" to add additional configuration items: %s\n"),
|
|
||||||
buf,
|
|
||||||
strerror(errno));
|
|
||||||
log_err("%s\n", errmsg.data);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg.data);
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -1992,14 +1838,7 @@ do_witness_create(void)
|
|||||||
r = system(script);
|
r = system(script);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to start witness server");
|
log_err(_("unable to start witness server\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2017,14 +1856,8 @@ do_witness_create(void)
|
|||||||
r = system(script);
|
r = system(script);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to create user for witness server");
|
log_err(_("unable to create user for witness server\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
@@ -2042,14 +1875,7 @@ do_witness_create(void)
|
|||||||
r = system(script);
|
r = system(script);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("Unable to create database for witness server");
|
log_err(_("Unable to create database for witness server\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2061,14 +1887,7 @@ do_witness_create(void)
|
|||||||
|
|
||||||
if (success == false)
|
if (success == false)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to retrieve location of pg_hba.conf");
|
log_err(_("unable to retrieve location of pg_hba.conf\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
|
|
||||||
exit(ERR_DB_QUERY);
|
exit(ERR_DB_QUERY);
|
||||||
}
|
}
|
||||||
@@ -2077,14 +1896,7 @@ do_witness_create(void)
|
|||||||
master_hba_file, runtime_options.dest_dir, false, -1);
|
master_hba_file, runtime_options.dest_dir, false, -1);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to copy pg_hba.conf from master");
|
log_err(_("unable to copy pg_hba.conf from master\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2098,14 +1910,7 @@ do_witness_create(void)
|
|||||||
r = system(script);
|
r = system(script);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
{
|
{
|
||||||
char *errmsg = _("unable to reload witness server");
|
log_err( _("unable to reload witness server\n"));
|
||||||
log_err("%s\n", errmsg);
|
|
||||||
|
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
errmsg);
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2126,12 +1931,6 @@ do_witness_create(void)
|
|||||||
|
|
||||||
if(record_created == false)
|
if(record_created == false)
|
||||||
{
|
{
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
"Unable to create witness node record on master");
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
exit(ERR_DB_QUERY);
|
exit(ERR_DB_QUERY);
|
||||||
}
|
}
|
||||||
@@ -2143,11 +1942,6 @@ do_witness_create(void)
|
|||||||
|
|
||||||
if (!create_schema(witnessconn))
|
if (!create_schema(witnessconn))
|
||||||
{
|
{
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
_("unable to create schema on witness"));
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
PQfinish(witnessconn);
|
PQfinish(witnessconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2156,11 +1950,6 @@ do_witness_create(void)
|
|||||||
/* copy configuration from master, only repl_nodes is needed */
|
/* copy configuration from master, only repl_nodes is needed */
|
||||||
if (!copy_configuration(masterconn, witnessconn, options.cluster_name))
|
if (!copy_configuration(masterconn, witnessconn, options.cluster_name))
|
||||||
{
|
{
|
||||||
create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
false,
|
|
||||||
_("Unable to copy configuration from master"));
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
PQfinish(witnessconn);
|
PQfinish(witnessconn);
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
@@ -2186,19 +1975,6 @@ do_witness_create(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log the event */
|
|
||||||
record_created = create_event_record(masterconn,
|
|
||||||
options.node,
|
|
||||||
"witness_create",
|
|
||||||
true,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if(record_created == false)
|
|
||||||
{
|
|
||||||
PQfinish(masterconn);
|
|
||||||
exit(ERR_DB_QUERY);
|
|
||||||
}
|
|
||||||
|
|
||||||
PQfinish(masterconn);
|
PQfinish(masterconn);
|
||||||
PQfinish(witnessconn);
|
PQfinish(witnessconn);
|
||||||
|
|
||||||
|
|||||||
89
repmgrd.c
89
repmgrd.c
@@ -156,7 +156,6 @@ main(int argc, char **argv)
|
|||||||
int optindex;
|
int optindex;
|
||||||
int c;
|
int c;
|
||||||
bool daemonize = false;
|
bool daemonize = false;
|
||||||
bool startup_event_logged = false;
|
|
||||||
|
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
|
|
||||||
@@ -321,17 +320,6 @@ main(int argc, char **argv)
|
|||||||
update_registration();
|
update_registration();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log startup event */
|
|
||||||
if(startup_event_logged == false)
|
|
||||||
{
|
|
||||||
create_event_record(primary_conn,
|
|
||||||
local_options.node,
|
|
||||||
"repmgrd_start",
|
|
||||||
true,
|
|
||||||
NULL);
|
|
||||||
startup_event_logged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info(_("starting continuous primary connection check\n"));
|
log_info(_("starting continuous primary connection check\n"));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -419,16 +407,6 @@ main(int argc, char **argv)
|
|||||||
my_local_conn = establish_db_connection(local_options.conninfo, true);
|
my_local_conn = establish_db_connection(local_options.conninfo, true);
|
||||||
update_registration();
|
update_registration();
|
||||||
}
|
}
|
||||||
/* Log startup event */
|
|
||||||
if(startup_event_logged == false)
|
|
||||||
{
|
|
||||||
create_event_record(primary_conn,
|
|
||||||
local_options.node,
|
|
||||||
"repmgrd_start",
|
|
||||||
true,
|
|
||||||
NULL);
|
|
||||||
startup_event_logged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Every local_options.monitor_interval_secs seconds, do
|
* Every local_options.monitor_interval_secs seconds, do
|
||||||
@@ -1337,9 +1315,6 @@ do_primary_failover(void)
|
|||||||
/* if local node is the best candidate, promote it */
|
/* if local node is the best candidate, promote it */
|
||||||
if (best_candidate.node_id == local_options.node)
|
if (best_candidate.node_id == local_options.node)
|
||||||
{
|
{
|
||||||
PQExpBufferData event_details;
|
|
||||||
|
|
||||||
initPQExpBuffer(&event_details);
|
|
||||||
/* wait */
|
/* wait */
|
||||||
sleep(5);
|
sleep(5);
|
||||||
|
|
||||||
@@ -1373,42 +1348,17 @@ do_primary_failover(void)
|
|||||||
/* update node information to reflect new status */
|
/* update node information to reflect new status */
|
||||||
if(update_node_record_set_primary(my_local_conn, node_info.node_id, failed_primary.node_id) == false)
|
if(update_node_record_set_primary(my_local_conn, node_info.node_id, failed_primary.node_id) == false)
|
||||||
{
|
{
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("unable to update node record for node %i (promoted to master following failure of node %i)"),
|
|
||||||
node_info.node_id,
|
|
||||||
failed_primary.node_id);
|
|
||||||
|
|
||||||
create_event_record(my_local_conn,
|
|
||||||
node_info.node_id,
|
|
||||||
"repmgrd_failover_promote",
|
|
||||||
false,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
terminate(ERR_DB_QUERY);
|
terminate(ERR_DB_QUERY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update internal record for this node*/
|
/* update internal record for this node*/
|
||||||
node_info = get_node_info(my_local_conn, local_options.cluster_name, local_options.node);
|
node_info = get_node_info(my_local_conn, local_options.cluster_name, local_options.node);
|
||||||
|
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("node %i promoted to master; old master %i marked as failed"),
|
|
||||||
node_info.node_id,
|
|
||||||
failed_primary.node_id);
|
|
||||||
|
|
||||||
create_event_record(my_local_conn,
|
|
||||||
node_info.node_id,
|
|
||||||
"repmgrd_failover_promote",
|
|
||||||
true,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/* local node not promotion candidate - find the new primary */
|
/* local node not promotion candidate - find the new primary */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PGconn *new_primary_conn;
|
PGconn *new_primary_conn;
|
||||||
PQExpBufferData event_details;
|
|
||||||
|
|
||||||
initPQExpBuffer(&event_details);
|
|
||||||
/* wait */
|
/* wait */
|
||||||
sleep(10);
|
sleep(10);
|
||||||
|
|
||||||
@@ -1436,19 +1386,10 @@ do_primary_failover(void)
|
|||||||
{
|
{
|
||||||
if(create_replication_slot(new_primary_conn, node_info.slot_name) == false)
|
if(create_replication_slot(new_primary_conn, node_info.slot_name) == false)
|
||||||
{
|
{
|
||||||
|
log_err(("Unable to create slot '%s' on the primary node: %s\n"),
|
||||||
appendPQExpBuffer(&event_details,
|
node_info.slot_name,
|
||||||
_("Unable to create slot '%s' on the primary node: %s"),
|
PQerrorMessage(new_primary_conn)
|
||||||
node_info.slot_name,
|
);
|
||||||
PQerrorMessage(new_primary_conn));
|
|
||||||
|
|
||||||
create_event_record(new_primary_conn,
|
|
||||||
node_info.node_id,
|
|
||||||
"repmgrd_failover_follow",
|
|
||||||
false,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
log_err("%s\n", event_details.data);
|
|
||||||
|
|
||||||
PQfinish(new_primary_conn);
|
PQfinish(new_primary_conn);
|
||||||
terminate(ERR_DB_QUERY);
|
terminate(ERR_DB_QUERY);
|
||||||
@@ -1468,35 +1409,13 @@ do_primary_failover(void)
|
|||||||
/* update node information to reflect new status */
|
/* update node information to reflect new status */
|
||||||
if(update_node_record_set_upstream(new_primary_conn, node_info.node_id, best_candidate.node_id) == false)
|
if(update_node_record_set_upstream(new_primary_conn, node_info.node_id, best_candidate.node_id) == false)
|
||||||
{
|
{
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("Unable to update node record for node %i (following new upstream node %i)"),
|
|
||||||
node_info.node_id,
|
|
||||||
best_candidate.node_id);
|
|
||||||
|
|
||||||
create_event_record(new_primary_conn,
|
|
||||||
node_info.node_id,
|
|
||||||
"repmgrd_failover_follow",
|
|
||||||
false,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
terminate(ERR_BAD_CONFIG);
|
terminate(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update internal record for this node*/
|
/* update internal record for this node*/
|
||||||
node_info = get_node_info(new_primary_conn, local_options.cluster_name, local_options.node);
|
node_info = get_node_info(new_primary_conn, local_options.cluster_name, local_options.node);
|
||||||
appendPQExpBuffer(&event_details,
|
|
||||||
_("Node %i now following new upstream node %i"),
|
|
||||||
node_info.node_id,
|
|
||||||
best_candidate.node_id);
|
|
||||||
|
|
||||||
create_event_record(new_primary_conn,
|
|
||||||
node_info.node_id,
|
|
||||||
"repmgrd_failover_follow",
|
|
||||||
true,
|
|
||||||
event_details.data);
|
|
||||||
|
|
||||||
PQfinish(new_primary_conn);
|
PQfinish(new_primary_conn);
|
||||||
destroyPQExpBuffer(&event_details);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log_debug("failover done\n"); // ZZZ
|
log_debug("failover done\n"); // ZZZ
|
||||||
|
|||||||
Reference in New Issue
Block a user