use repmgr db connection with barman

This commit is contained in:
Ian Barwick
2016-08-31 09:53:18 +09:00
parent d7456d879d
commit f8fe801225

View File

@@ -1708,7 +1708,7 @@ do_standby_clone(void)
char upstream_conninfo_str[MAXLEN]; char upstream_conninfo_str[MAXLEN];
bool upstream_record_found = false; bool upstream_record_found = false;
int upstream_node_id; int upstream_node_id = UNKNOWN_NODE_ID;
char datadir_list_filename[MAXLEN]; char datadir_list_filename[MAXLEN];
@@ -2012,32 +2012,16 @@ do_standby_clone(void)
* name with the repmgr one (they could well be different) and remotely execute * name with the repmgr one (they could well be different) and remotely execute
* psql. * psql.
*/ */
char buf[MAXLEN];
<<<<<<< HEAD
create_recovery_file(local_data_directory, &upstream_conninfo, conninfo_on_barman);
/*char buf[MAXLEN];
char where_condition[MAXLEN];
PQExpBufferData command_output;
switch(options.upstream_node)
{
case NO_UPSTREAM_NODE:
maxlen_snprintf(where_condition, "type='master'");
break;
default:
maxlen_snprintf(where_condition, "id=%d", options.upstream_node);
break;
}
=======
char barman_conninfo_str[MAXLEN]; char barman_conninfo_str[MAXLEN];
t_conninfo_param_list barman_conninfo; t_conninfo_param_list barman_conninfo;
char *errmsg = NULL; char *errmsg = NULL;
bool parse_success; bool parse_success;
char where_condition[MAXLEN];
PQExpBufferData command_output; PQExpBufferData command_output;
PQExpBufferData repmgr_conninfo_buf;
char buf[MAXLEN]; int c;
// XXX barman also returns "streaming_conninfo" - what's the difference? // XXX barman also returns "streaming_conninfo" - what's the difference?
get_barman_property(barman_conninfo_str, "conninfo", local_repmgr_directory); get_barman_property(barman_conninfo_str, "conninfo", local_repmgr_directory);
@@ -2054,24 +2038,38 @@ do_standby_clone(void)
exit(ERR_BAD_CONFIG); exit(ERR_BAD_CONFIG);
} }
/* Overwrite database name */ /* Overwrite database name in the parsed parameter list */
param_set(&barman_conninfo, "database", runtime_options.dbname); param_set(&barman_conninfo, "dbname", runtime_options.dbname);
/* Rebuild the Barman conninfo string */
initPQExpBuffer(&repmgr_conninfo_buf);
for (c = 0; c < barman_conninfo.size && barman_conninfo.keywords[c] != NULL; c++)
{ {
int c; printf("%s: %s\n", barman_conninfo.keywords[c], barman_conninfo.values[c]);
printf("conninfo str: %s; size: %i\n", barman_conninfo_str, barman_conninfo.size); if (repmgr_conninfo_buf.len != 0)
for (c = 0; c < barman_conninfo.size && barman_conninfo.keywords[c] != NULL; c++) appendPQExpBufferChar(&repmgr_conninfo_buf, ' ');
{
printf("%s: %s\n", barman_conninfo.keywords[c], barman_conninfo.values[c]); /* XXX escape option->values */
} appendPQExpBuffer(&repmgr_conninfo_buf, "%s=%s",
// barman_conninfo.keywords[c],
barman_conninfo.values[c]);
} }
log_verbose(LOG_DEBUG,
"repmgr database conninfo string on barman server: %s\n",
repmgr_conninfo_buf.data);
if (options.upstream_node == NO_UPSTREAM_NODE) switch(options.upstream_node)
upstream_node_id = get_master_node_id(source_conn, options.cluster_name); {
else case NO_UPSTREAM_NODE:
upstream_node_id = options.upstream_node; maxlen_snprintf(where_condition, "type='master'");
break;
default:
maxlen_snprintf(where_condition, "id=%d", options.upstream_node);
break;
}
initPQExpBuffer(&command_output); initPQExpBuffer(&command_output);
maxlen_snprintf(buf, maxlen_snprintf(buf,
@@ -2080,12 +2078,22 @@ do_standby_clone(void)
" FROM repmgr_%s.repl_nodes" " FROM repmgr_%s.repl_nodes"
" WHERE %s" " WHERE %s"
" AND active" " AND active"
"\\\"\"", options.barman_server, conninfo_on_barman, "\\\"\"", options.barman_server, repmgr_conninfo_buf.data,
options.cluster_name, where_condition); options.cluster_name, where_condition);
termPQExpBuffer(&repmgr_conninfo_buf);
// XXX check success
(void)local_command(buf, &command_output); (void)local_command(buf, &command_output);
maxlen_snprintf(buf, "%s", command_output.data); maxlen_snprintf(upstream_conninfo_str, "%s", command_output.data);
string_remove_trailing_newlines(buf); string_remove_trailing_newlines(upstream_conninfo_str);
maxlen_snprintf(line, "primary_conninfo = '%s'\n", buf);
upstream_record_found = true;
log_verbose(LOG_DEBUG,
"upstream node conninfo string extracted via barman server: %s\n",
upstream_conninfo_str);
termPQExpBuffer(&command_output);
} }
printf("upstream found? %c\n", upstream_record_found == true ? 'y' : 'n'); printf("upstream found? %c\n", upstream_record_found == true ? 'y' : 'n');
@@ -2126,7 +2134,7 @@ do_standby_clone(void)
// exit with error // exit with error
if (!runtime_options.force) if (!runtime_options.force)
{ {
log_err(_("No record found for upstream node with id %i\n"), upstream_node_id); log_err(_("No record found for upstream node\n"));
PQfinish(source_conn); PQfinish(source_conn);
exit(ERR_BAD_CONFIG); exit(ERR_BAD_CONFIG);
} }
@@ -2149,8 +2157,9 @@ do_standby_clone(void)
parse_success = parse_conninfo_string(upstream_conninfo_str, &upstream_conninfo, errmsg); parse_success = parse_conninfo_string(upstream_conninfo_str, &upstream_conninfo, errmsg);
if (parse_success == false) if (parse_success == false)
{ {
log_err(_("Unable to parse conninfo string \"%s\" for upstream node %i:\n%s\n"), log_err(_("Unable to parse conninfo string \"%s\" for upstream node:\n%s\n"),
upstream_conninfo_str, upstream_node_id, errmsg); upstream_conninfo_str, errmsg);
PQfinish(source_conn); PQfinish(source_conn);
exit(ERR_BAD_CONFIG); exit(ERR_BAD_CONFIG);
} }