Clean up create_recovery_file() function

Caller is responsible for providing a t_conninfo_param_list from which
the value for "primary_conninfo" is created.
This commit is contained in:
Ian Barwick
2016-08-31 13:03:59 +09:00
parent 1d05345aa3
commit e87399afc1

View File

@@ -96,7 +96,7 @@ static int copy_remote_files(char *host, char *remote_user, char *remote_path,
static int run_basebackup(const char *data_dir, int server_version); static int run_basebackup(const char *data_dir, int server_version);
static void check_parameters_for_action(const int action); static void check_parameters_for_action(const int action);
static bool create_schema(PGconn *conn); static bool create_schema(PGconn *conn);
static bool create_recovery_file(const char *data_dir, t_conninfo_param_list *upstream_conninfo, const char *barmans_conninfo); static bool create_recovery_file(const char *data_dir, t_conninfo_param_list *upstream_conninfo);
static void write_primary_conninfo(char *line, t_conninfo_param_list *param_list); static void write_primary_conninfo(char *line, t_conninfo_param_list *param_list);
static bool write_recovery_file_line(FILE *recovery_file, char *recovery_file_path, char *line); static bool write_recovery_file_line(FILE *recovery_file, char *recovery_file_path, char *line);
static void check_master_standby_version_match(PGconn *conn, PGconn *master_conn); static void check_master_standby_version_match(PGconn *conn, PGconn *master_conn);
@@ -148,6 +148,7 @@ static bool read_backup_label(const char *local_data_directory, struct BackupLab
static void initialize_conninfo_params(t_conninfo_param_list *param_list, bool set_defaults); static void initialize_conninfo_params(t_conninfo_param_list *param_list, bool set_defaults);
static void param_set(t_conninfo_param_list *param_list, const char *param, const char *value); static void param_set(t_conninfo_param_list *param_list, const char *param, const char *value);
static bool parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_list, char *errmsg); static bool parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_list, char *errmsg);
static void conn_to_param_list(PGconn *conn, t_conninfo_param_list *param_list);
static void parse_pg_basebackup_options(const char *pg_basebackup_options, t_basebackup_options *backup_options); static void parse_pg_basebackup_options(const char *pg_basebackup_options, t_basebackup_options *backup_options);
/* Global variables */ /* Global variables */
@@ -1847,7 +1848,7 @@ do_standby_clone(void)
initialize_conninfo_params(&upstream_conninfo, true); initialize_conninfo_params(&upstream_conninfo, true);
/* Sanity check barman connection and installation, */ /* Sanity-check barman connection and installation */
if (mode == barman) if (mode == barman)
{ {
char command[MAXLEN]; char command[MAXLEN];
@@ -1933,9 +1934,6 @@ do_standby_clone(void)
* If a connection was established, perform some sanity checks on the * If a connection was established, perform some sanity checks on the
* provided upstream connection * provided upstream connection
*/ */
PQconninfoOption *connOptions;
PQconninfoOption *option;
t_node_info upstream_node_record = T_NODE_INFO_INITIALIZER; t_node_info upstream_node_record = T_NODE_INFO_INITIALIZER;
int query_result; int query_result;
@@ -1987,17 +1985,7 @@ do_standby_clone(void)
* particularly stuff like passwords extracted from PGPASSFILE; * particularly stuff like passwords extracted from PGPASSFILE;
* these will be overridden from the upstream conninfo, if provided * these will be overridden from the upstream conninfo, if provided
*/ */
conn_to_param_list(source_conn, &upstream_conninfo);
connOptions = PQconninfo(source_conn);
for (option = connOptions; option && option->keyword; option++)
{
/* Ignore non-set or blank parameter values*/
if((option->val == NULL) ||
(option->val != NULL && option->val[0] == '\0'))
continue;
param_set(&upstream_conninfo, option->keyword, option->val);
}
// now set up conninfo params for the actual upstream, as we may be cloning from a different node // now set up conninfo params for the actual upstream, as we may be cloning from a different node
// if upstream conn // if upstream conn
@@ -3034,18 +3022,13 @@ stop_backup:
/* Finally, write the recovery.conf file */ /* Finally, write the recovery.conf file */
create_recovery_file(local_data_directory, &upstream_conninfo, NULL); create_recovery_file(local_data_directory, &upstream_conninfo);
if (mode == barman && source_conn == NULL) if (mode == barman)
{ {
/* In Barman mode, remove local_repmgr_directory */ /* In Barman mode, remove local_repmgr_directory */
rmdir(local_repmgr_directory); rmdir(local_repmgr_directory);
} }
else
{
}
switch(mode) switch(mode)
{ {
@@ -3476,6 +3459,7 @@ do_standby_follow(void)
char master_conninfo[MAXLEN]; char master_conninfo[MAXLEN];
PGconn *master_conn; PGconn *master_conn;
int master_id = 0; int master_id = 0;
t_conninfo_param_list upstream_conninfo;
int r, int r,
retval; retval;
@@ -3609,8 +3593,11 @@ do_standby_follow(void)
log_info(_("changing standby's master\n")); log_info(_("changing standby's master\n"));
/* write the recovery.conf file */ /* write the recovery.conf file */
// if (!create_recovery_file(data_dir, master_conn, NULL)) initialize_conninfo_params(&upstream_conninfo, false);
// exit(ERR_BAD_CONFIG); conn_to_param_list(master_conn, &upstream_conninfo);
if (!create_recovery_file(data_dir, &upstream_conninfo))
exit(ERR_BAD_CONFIG);
/* Finally, restart the service */ /* Finally, restart the service */
if (*options.restart_command) if (*options.restart_command)
@@ -5290,8 +5277,6 @@ do_witness_unregister(void)
} }
// XXX + --no-upstream-connection
static void static void
do_help(void) do_help(void)
{ {
@@ -5375,10 +5360,10 @@ do_help(void)
/* /*
* Creates a recovery file for a standby. * Creates a recovery.conf file for a standby
*/ */
static bool static bool
create_recovery_file(const char *data_dir, t_conninfo_param_list *upstream_conninfo, const char *conninfo_on_barman) create_recovery_file(const char *data_dir, t_conninfo_param_list *upstream_conninfo)
{ {
FILE *recovery_file; FILE *recovery_file;
char recovery_file_path[MAXLEN]; char recovery_file_path[MAXLEN];
@@ -7057,6 +7042,7 @@ param_set(t_conninfo_param_list *param_list, const char *param, const char *valu
*/ */
} }
static bool static bool
parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_list, char *errmsg) parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_list, char *errmsg)
{ {
@@ -7082,6 +7068,25 @@ parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_lis
} }
static void
conn_to_param_list(PGconn *conn, t_conninfo_param_list *param_list)
{
PQconninfoOption *connOptions;
PQconninfoOption *option;
connOptions = PQconninfo(conn);
for (option = connOptions; option && option->keyword; option++)
{
/* Ignore non-set or blank parameter values*/
if((option->val == NULL) ||
(option->val != NULL && option->val[0] == '\0'))
continue;
param_set(param_list, option->keyword, option->val);
}
}
static void static void
parse_pg_basebackup_options(const char *pg_basebackup_options, t_basebackup_options *backup_options) parse_pg_basebackup_options(const char *pg_basebackup_options, t_basebackup_options *backup_options)
{ {