Add "location" column

This commit is contained in:
Ian Barwick
2017-07-06 01:17:00 +09:00
parent 9351e532b4
commit 0d226867b4
9 changed files with 48 additions and 30 deletions

View File

@@ -235,6 +235,8 @@ _parse_config(t_configuration_options *options, ItemList *error_list, ItemList *
* ---------------- */
options->failover_mode = FAILOVER_MANUAL;
options->priority = DEFAULT_PRIORITY;
memset(options->location, 0, sizeof(options->location));
strncpy(options->location, DEFAULT_LOCATION, MAXLEN);
memset(options->promote_command, 0, sizeof(options->promote_command));
memset(options->follow_command, 0, sizeof(options->follow_command));
options->monitor_interval_secs = 2;
@@ -399,6 +401,8 @@ _parse_config(t_configuration_options *options, ItemList *error_list, ItemList *
}
else if (strcmp(name, "priority") == 0)
options->priority = repmgr_atoi(value, name, error_list, 0);
else if (strcmp(name, "location") == 0)
strncpy(options->location, value, MAXLEN);
else if (strcmp(name, "promote_command") == 0)
strncpy(options->promote_command, value, MAXLEN);
else if (strcmp(name, "follow_command") == 0)

View File

@@ -73,6 +73,7 @@ typedef struct
/* repmgrd settings */
failover_mode_opt failover_mode;
char location[MAXLEN];
int priority;
char promote_command[MAXLEN];
char follow_command[MAXLEN];
@@ -123,7 +124,7 @@ typedef struct
/* standby clone settings */ \
false, "", "", "", "", { NULL, NULL }, \
/* repmgrd settings */ \
FAILOVER_MANUAL, DEFAULT_PRIORITY, "", "", 2, 60, 6, 10, 300, false, \
FAILOVER_MANUAL, DEFAULT_LOCATION, DEFAULT_PRIORITY, "", "", 2, 60, 6, 10, 300, false, \
/* witness settings */ \
30, \
/* service settings */ \

View File

@@ -1204,8 +1204,9 @@ _populate_node_record(PGresult *res, t_node_info *node_info, int row)
strncpy(node_info->conninfo, PQgetvalue(res, row, 4), MAXLEN);
strncpy(node_info->repluser, PQgetvalue(res, row, 5), MAXLEN);
strncpy(node_info->slot_name, PQgetvalue(res, row, 6), MAXLEN);
node_info->priority = atoi(PQgetvalue(res, row, 7));
node_info->active = atobool(PQgetvalue(res, row, 8));
strncpy(node_info->location, PQgetvalue(res, row, 7), MAXLEN);
node_info->priority = atoi(PQgetvalue(res, row, 8));
node_info->active = atobool(PQgetvalue(res, row, 9));
/* Set remaining struct fields with default values */
node_info->is_ready = false;
@@ -1267,7 +1268,7 @@ get_node_record(PGconn *conn, int node_id, t_node_info *node_info)
initPQExpBuffer(&query);
appendPQExpBuffer(&query,
"SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, priority, active"
"SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, location, priority, active"
" FROM repmgr.nodes "
" WHERE node_id = %i",
node_id);
@@ -1295,7 +1296,7 @@ get_node_record_by_name(PGconn *conn, const char *node_name, t_node_info *node_i
initPQExpBuffer(&query);
appendPQExpBuffer(&query,
"SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, priority, active"
"SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, location, priority, active"
" FROM repmgr.nodes "
" WHERE node_name = '%s' ",
node_name);
@@ -1405,7 +1406,7 @@ get_downstream_node_records(PGconn *conn, int node_id, NodeInfoList *node_list)
initPQExpBuffer(&query);
appendPQExpBuffer(&query,
" SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, priority, active"
" SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, location, priority, active"
" FROM repmgr.nodes "
" WHERE upstream_node_id = %i "
"ORDER BY node_id ",
@@ -1432,7 +1433,7 @@ get_active_sibling_node_records(PGconn *conn, int node_id, int upstream_node_id,
initPQExpBuffer(&query);
appendPQExpBuffer(&query,
" SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, priority, active"
" SELECT node_id, type, upstream_node_id, node_name, conninfo, repluser, slot_name, location, priority, active"
" FROM repmgr.nodes "
" WHERE upstream_node_id = %i "
" AND node_id != %i "
@@ -1484,7 +1485,7 @@ _create_update_node_record(PGconn *conn, char *action, t_node_info *node_info)
char slot_name[MAXLEN];
char *slot_name_ptr = NULL;
int param_count = 9;
int param_count = 10;
const char *param_values[param_count];
PGresult *res;
@@ -1518,9 +1519,10 @@ _create_update_node_record(PGconn *conn, char *action, t_node_info *node_info)
param_values[3] = node_info->conninfo;
param_values[4] = node_info->repluser;
param_values[5] = slot_name_ptr;
param_values[6] = priority;
param_values[7] = node_info->active == true ? "TRUE" : "FALSE";
param_values[8] = node_id;
param_values[6] = node_info->location;
param_values[7] = priority;
param_values[8] = node_info->active == true ? "TRUE" : "FALSE";
param_values[9] = node_id;
initPQExpBuffer(&query);
@@ -1530,8 +1532,8 @@ _create_update_node_record(PGconn *conn, char *action, t_node_info *node_info)
"INSERT INTO repmgr.nodes "
" (node_id, type, upstream_node_id, "
" node_name, conninfo, repluser, slot_name, "
" priority, active) "
"VALUES ($9, $1, $2, $3, $4, $5, $6, $7, $8) ");
" location, priority, active) "
"VALUES ($10, $1, $2, $3, $4, $5, $6, $7, $8, $9) ");
}
else
{
@@ -1543,9 +1545,10 @@ _create_update_node_record(PGconn *conn, char *action, t_node_info *node_info)
" conninfo = $4, "
" repluser = $5, "
" slot_name = $6, "
" priority = $7, "
" active = $8 "
" WHERE node_id = $9 ");
" location = $7, "
" priority = $8, "
" active = $9 "
" WHERE node_id = $10 ");
}

View File

@@ -55,9 +55,10 @@ typedef struct s_node_info
char node_name[MAXLEN];
char conninfo[MAXLEN];
char repluser[NAMEDATALEN];
char slot_name[MAXLEN];
char location[MAXLEN];
int priority;
bool active;
char slot_name[MAXLEN];
/* used during failover to track node status */
bool is_ready;
bool is_visible;
@@ -73,9 +74,10 @@ typedef struct s_node_info
"", \
"", \
"", \
"", \
DEFAULT_LOCATION, \
DEFAULT_PRIORITY, \
true, \
"", \
false, \
false, \
InvalidXLogRecPtr, \

View File

@@ -22,6 +22,7 @@ Changed command line options
The value (defaults to the user in the conninfo string) will be stored in
the repmgr metadata for use by standby clone/follow..
### repmgrd
- `--monitoring-history` is deprecated and has been replaced by the

View File

@@ -7,6 +7,7 @@ CREATE TABLE nodes (
active BOOLEAN NOT NULL DEFAULT TRUE,
node_name TEXT NOT NULL,
type TEXT NOT NULL CHECK (type IN('primary','standby','witness','bdr')),
location TEXT NOT NULL DEFAULT 'default',
priority INT NOT NULL DEFAULT 100,
conninfo TEXT NOT NULL,
repluser VARCHAR(63) NOT NULL,

View File

@@ -150,7 +150,7 @@ do_primary_register(void)
if (config_file_options.replication_user[0] != '\0')
{
strncpy(node_info.repluser, config_file_options.replication_user, MAXLEN);
strncpy(node_info.repluser, config_file_options.replication_user, NAMEDATALEN);
}
else
{
@@ -160,6 +160,7 @@ do_primary_register(void)
if (repmgr_slot_name_ptr != NULL)
strncpy(node_info.slot_name, repmgr_slot_name_ptr, MAXLEN);
strncpy(node_info.location, config_file_options.location, MAXLEN);
node_info.priority = config_file_options.priority;
initPQExpBuffer(&event_description);

View File

@@ -781,13 +781,17 @@ do_standby_register(void)
node_record.priority = config_file_options.priority;
node_record.active = true;
strncpy(node_record.location, config_file_options.location, MAXLEN);
printf("XXX %s %s\n", node_record.location, config_file_options.location);
strncpy(node_record.node_name, config_file_options.node_name, MAXLEN);
strncpy(node_record.conninfo, config_file_options.conninfo, MAXLEN);
if (config_file_options.replication_user[0] != '\0')
{
/* Replication user explicitly provided */
strncpy(node_record.repluser, config_file_options.replication_user, MAXLEN);
strncpy(node_record.repluser, config_file_options.replication_user, NAMEDATALEN);
}
else
{
@@ -820,11 +824,11 @@ do_standby_register(void)
/* XXX add event description */
create_event_notification(primary_conn,
&config_file_options,
config_file_options.node_id,
"standby_register",
false,
NULL);
&config_file_options,
config_file_options.node_id,
"standby_register",
false,
NULL);
PQfinish(primary_conn);
@@ -835,11 +839,11 @@ do_standby_register(void)
/* Log the event */
create_event_notification(primary_conn,
&config_file_options,
config_file_options.node_id,
"standby_register",
true,
NULL);
&config_file_options,
config_file_options.node_id,
"standby_register",
true,
NULL);
/* if --wait-sync option set, wait for the records to synchronise */

View File

@@ -33,6 +33,7 @@
#define BDR_MONITORING_LOCAL 1
#define BDR_MONITORING_PRIORITY 2
#define DEFAULT_LOCATION "default"
#define DEFAULT_PRIORITY 100
#define FAILOVER_NODES_MAX_CHECK 50