mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-26 08:36:30 +00:00
Store slot name in repl_nodes table
This commit is contained in:
34
repmgr.c
34
repmgr.c
@@ -2083,11 +2083,12 @@ create_schema(PGconn *conn)
|
|||||||
" id INTEGER PRIMARY KEY, "
|
" id INTEGER PRIMARY KEY, "
|
||||||
" type TEXT NOT NULL CHECK (type IN('primary','standby','witness')), "
|
" type TEXT NOT NULL CHECK (type IN('primary','standby','witness')), "
|
||||||
" upstream_node_id INTEGER NULL REFERENCES %s.repl_nodes (id), "
|
" upstream_node_id INTEGER NULL REFERENCES %s.repl_nodes (id), "
|
||||||
" cluster TEXT NOT NULL, "
|
" cluster TEXT NOT NULL, "
|
||||||
" name TEXT NOT NULL, "
|
" name TEXT NOT NULL, "
|
||||||
" conninfo TEXT NOT NULL, "
|
" conninfo TEXT NOT NULL, "
|
||||||
" priority INTEGER NOT NULL, "
|
" slot_name TEXT NULL, "
|
||||||
" active BOOLEAN NOT NULL DEFAULT TRUE) ",
|
" priority INTEGER NOT NULL, "
|
||||||
|
" active BOOLEAN NOT NULL DEFAULT TRUE )",
|
||||||
get_repmgr_schema_quoted(conn),
|
get_repmgr_schema_quoted(conn),
|
||||||
get_repmgr_schema_quoted(conn));
|
get_repmgr_schema_quoted(conn));
|
||||||
|
|
||||||
@@ -2530,7 +2531,8 @@ static 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)
|
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 sqlquery[QUERY_STR_LEN];
|
char sqlquery[QUERY_STR_LEN];
|
||||||
char upstream_node_id[QUERY_STR_LEN];
|
char upstream_node_id[MAXLEN];
|
||||||
|
char slot_name[MAXLEN];
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
|
|
||||||
if(upstream_node == NO_UPSTREAM_NODE)
|
if(upstream_node == NO_UPSTREAM_NODE)
|
||||||
@@ -2542,23 +2544,32 @@ create_node_record(PGconn *conn, char *action, int node, char *type, int upstrea
|
|||||||
if(strcmp(type, "standby") == 0)
|
if(strcmp(type, "standby") == 0)
|
||||||
{
|
{
|
||||||
int primary_node_id = get_primary_node_id(conn, cluster_name);
|
int primary_node_id = get_primary_node_id(conn, cluster_name);
|
||||||
sqlquery_snprintf(upstream_node_id, "%i", primary_node_id);
|
maxlen_snprintf(upstream_node_id, "%i", primary_node_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sqlquery_snprintf(upstream_node_id, "%s", "NULL");
|
maxlen_snprintf(upstream_node_id, "%s", "NULL");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sqlquery_snprintf(upstream_node_id, "%i", upstream_node);
|
maxlen_snprintf(upstream_node_id, "%i", upstream_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(options.use_replication_slots && strcmp(type, "standby") == 0)
|
||||||
|
{
|
||||||
|
maxlen_snprintf(slot_name, "'%s'", repmgr_slot_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maxlen_snprintf(slot_name, "%s", "NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlquery_snprintf(sqlquery,
|
sqlquery_snprintf(sqlquery,
|
||||||
"INSERT INTO %s.repl_nodes "
|
"INSERT INTO %s.repl_nodes "
|
||||||
" (id, type, upstream_node_id, cluster, "
|
" (id, type, upstream_node_id, cluster, "
|
||||||
" name, conninfo, priority) "
|
" name, conninfo, slot_name, priority) "
|
||||||
"VALUES (%i, '%s', %s, '%s', '%s', '%s', %i) ",
|
"VALUES (%i, '%s', %s, '%s', '%s', '%s', %s, %i) ",
|
||||||
get_repmgr_schema_quoted(conn),
|
get_repmgr_schema_quoted(conn),
|
||||||
node,
|
node,
|
||||||
type,
|
type,
|
||||||
@@ -2566,6 +2577,7 @@ create_node_record(PGconn *conn, char *action, int node, char *type, int upstrea
|
|||||||
cluster_name,
|
cluster_name,
|
||||||
node_name,
|
node_name,
|
||||||
conninfo,
|
conninfo,
|
||||||
|
slot_name,
|
||||||
priority);
|
priority);
|
||||||
|
|
||||||
if(action != NULL)
|
if(action != NULL)
|
||||||
|
|||||||
14
repmgrd.c
14
repmgrd.c
@@ -54,6 +54,7 @@ typedef struct s_node_info
|
|||||||
t_server_type type;
|
t_server_type type;
|
||||||
bool is_ready;
|
bool is_ready;
|
||||||
bool is_visible;
|
bool is_visible;
|
||||||
|
char slot_name[MAXLEN];
|
||||||
} t_node_info;
|
} t_node_info;
|
||||||
|
|
||||||
|
|
||||||
@@ -1361,14 +1362,10 @@ do_primary_failover(void)
|
|||||||
|
|
||||||
if(local_options.use_replication_slots)
|
if(local_options.use_replication_slots)
|
||||||
{
|
{
|
||||||
// ZZZ store slot name in `repl_nodes`
|
if(create_replication_slot(new_primary_conn, local_options.slot_name) == false)
|
||||||
char repmgr_slot_name[MAXLEN];
|
|
||||||
maxlen_snprintf(repmgr_slot_name, "repmgr_slot_%i", local_options.node);
|
|
||||||
|
|
||||||
if(create_replication_slot(new_primary_conn, repmgr_slot_name) == false)
|
|
||||||
{
|
{
|
||||||
log_err(_("Unable to create slot '%s' on the primary node: %s\n"),
|
log_err(_("Unable to create slot '%s' on the primary node: %s\n"),
|
||||||
repmgr_slot_name,
|
local_options.slot_name,
|
||||||
PQerrorMessage(new_primary_conn));
|
PQerrorMessage(new_primary_conn));
|
||||||
PQfinish(new_primary_conn);
|
PQfinish(new_primary_conn);
|
||||||
terminate(ERR_DB_QUERY);
|
terminate(ERR_DB_QUERY);
|
||||||
@@ -2038,7 +2035,7 @@ check_and_create_pid_file(const char *pid_file)
|
|||||||
|
|
||||||
|
|
||||||
t_node_info
|
t_node_info
|
||||||
get_node_info(PGconn *conn,char *cluster, int node_id)
|
get_node_info(PGconn *conn, char *cluster, int node_id)
|
||||||
{
|
{
|
||||||
char sqlquery[QUERY_STR_LEN];
|
char sqlquery[QUERY_STR_LEN];
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
@@ -2046,7 +2043,7 @@ get_node_info(PGconn *conn,char *cluster, int node_id)
|
|||||||
t_node_info node_info = {-1, NO_UPSTREAM_NODE, "", InvalidXLogRecPtr, UNKNOWN, false, false};
|
t_node_info node_info = {-1, NO_UPSTREAM_NODE, "", InvalidXLogRecPtr, UNKNOWN, false, false};
|
||||||
|
|
||||||
sprintf(sqlquery,
|
sprintf(sqlquery,
|
||||||
"SELECT id, upstream_node_id, conninfo, type "
|
"SELECT id, upstream_node_id, conninfo, type, slot_name "
|
||||||
" FROM %s.repl_nodes "
|
" FROM %s.repl_nodes "
|
||||||
" WHERE cluster = '%s' "
|
" WHERE cluster = '%s' "
|
||||||
" AND id = %i",
|
" AND id = %i",
|
||||||
@@ -2068,6 +2065,7 @@ get_node_info(PGconn *conn,char *cluster, int node_id)
|
|||||||
node_info.upstream_node_id = atoi(PQgetvalue(res, 0, 1));
|
node_info.upstream_node_id = atoi(PQgetvalue(res, 0, 1));
|
||||||
strncpy(node_info.conninfo_str, PQgetvalue(res, 0, 2), MAXLEN);
|
strncpy(node_info.conninfo_str, PQgetvalue(res, 0, 2), MAXLEN);
|
||||||
node_info.type = parse_node_type(PQgetvalue(res, 0, 3));
|
node_info.type = parse_node_type(PQgetvalue(res, 0, 3));
|
||||||
|
strncpy(node_info.slot_name, PQgetvalue(res, 0, 4), MAXLEN);
|
||||||
|
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user