mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-26 08:36:30 +00:00
Check SSH and create data dir early
so we can init the barman stuff, which we want to verify the upstream conninfo
This commit is contained in:
146
repmgr.c
146
repmgr.c
@@ -1768,6 +1768,21 @@ do_standby_clone(void)
|
|||||||
else
|
else
|
||||||
mode = pg_basebackup;
|
mode = pg_basebackup;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In rsync mode, we need to check the SSH connection early
|
||||||
|
*/
|
||||||
|
if (mode == rsync)
|
||||||
|
{
|
||||||
|
r = test_ssh_connection(runtime_options.host, runtime_options.remote_user);
|
||||||
|
if (r != 0)
|
||||||
|
{
|
||||||
|
log_err(_("aborting, remote host %s is not reachable.\n"),
|
||||||
|
runtime_options.host);
|
||||||
|
exit(ERR_BAD_SSH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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
|
||||||
@@ -1780,8 +1795,53 @@ do_standby_clone(void)
|
|||||||
runtime_options.dest_dir);
|
runtime_options.dest_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX merge above
|
||||||
|
|
||||||
|
/*
|
||||||
|
* target directory (-D/--pgdata) provided - use that as new data directory
|
||||||
|
* (useful when executing backup on local machine only or creating the backup
|
||||||
|
* in a different local directory when backup source is a remote host)
|
||||||
|
*/
|
||||||
|
if (target_directory_provided)
|
||||||
|
{
|
||||||
|
strncpy(local_data_directory, runtime_options.dest_dir, MAXPGPATH);
|
||||||
|
strncpy(local_config_file, runtime_options.dest_dir, MAXPGPATH);
|
||||||
|
strncpy(local_hba_file, runtime_options.dest_dir, MAXPGPATH);
|
||||||
|
strncpy(local_ident_file, runtime_options.dest_dir, MAXPGPATH);
|
||||||
|
}
|
||||||
|
else if (mode == barman)
|
||||||
|
{
|
||||||
|
log_err(_("Barman mode requires a destination directory\n"));
|
||||||
|
log_hint(_("use -D/--data-dir to explicitly specify a data directory\n"));
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Otherwise use the same data directory as on the remote host
|
||||||
|
*/
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strncpy(local_data_directory, master_data_directory, MAXPGPATH);
|
||||||
|
strncpy(local_config_file, master_config_file, MAXPGPATH);
|
||||||
|
strncpy(local_hba_file, master_hba_file, MAXPGPATH);
|
||||||
|
strncpy(local_ident_file, master_ident_file, MAXPGPATH);
|
||||||
|
|
||||||
|
log_notice(_("setting data directory to: %s\n"), local_data_directory);
|
||||||
|
log_hint(_("use -D/--data-dir to explicitly specify a data directory\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check the local data directory can be used */
|
||||||
|
|
||||||
|
if (!create_pg_dir(local_data_directory, runtime_options.force))
|
||||||
|
{
|
||||||
|
log_err(_("unable to use directory %s ...\n"),
|
||||||
|
local_data_directory);
|
||||||
|
log_hint(_("use -F/--force option to force this directory to be overwritten\n"));
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// XXX set this to "repmgr ?
|
// XXX set this to "repmgr ?
|
||||||
param_set(&source_conninfo, "application_name", options.node_name);
|
//param_set(&source_conninfo, "application_name", options.node_name);
|
||||||
|
|
||||||
/* Attempt to connect to the upstream server to verify its configuration */
|
/* Attempt to connect to the upstream server to verify its configuration */
|
||||||
log_info(_("connecting to upstream node\n"));
|
log_info(_("connecting to upstream node\n"));
|
||||||
@@ -1883,6 +1943,17 @@ do_standby_clone(void)
|
|||||||
// - get barman connstr
|
// - get barman connstr
|
||||||
// - parse to list (no set defaults)
|
// - parse to list (no set defaults)
|
||||||
// - set dbname to the one provided by the user
|
// - set dbname to the one provided by the user
|
||||||
|
|
||||||
|
char conninfo_on_barman[MAXLEN];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't have an upstream connection - attempt to connect
|
||||||
|
* to the upstream via the barman server to fetch the upstream's conninfo
|
||||||
|
*/
|
||||||
|
get_barman_property(conninfo_on_barman, "conninfo", local_repmgr_directory);
|
||||||
|
|
||||||
|
create_recovery_file(local_data_directory, &upstream_conninfo, conninfo_on_barman);
|
||||||
|
|
||||||
/*char buf[MAXLEN];
|
/*char buf[MAXLEN];
|
||||||
char where_condition[MAXLEN];
|
char where_condition[MAXLEN];
|
||||||
PQExpBufferData command_output;
|
PQExpBufferData command_output;
|
||||||
@@ -2126,65 +2197,6 @@ do_standby_clone(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* target directory (-D/--pgdata) provided - use that as new data directory
|
|
||||||
* (useful when executing backup on local machine only or creating the backup
|
|
||||||
* in a different local directory when backup source is a remote host)
|
|
||||||
*/
|
|
||||||
if (target_directory_provided)
|
|
||||||
{
|
|
||||||
strncpy(local_data_directory, runtime_options.dest_dir, MAXPGPATH);
|
|
||||||
strncpy(local_config_file, runtime_options.dest_dir, MAXPGPATH);
|
|
||||||
strncpy(local_hba_file, runtime_options.dest_dir, MAXPGPATH);
|
|
||||||
strncpy(local_ident_file, runtime_options.dest_dir, MAXPGPATH);
|
|
||||||
}
|
|
||||||
else if (mode == barman)
|
|
||||||
{
|
|
||||||
log_err(_("Barman mode requires a destination directory\n"));
|
|
||||||
log_hint(_("use -D/--data-dir to explicitly specify a data directory\n"));
|
|
||||||
exit(ERR_BAD_CONFIG);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Otherwise use the same data directory as on the remote host
|
|
||||||
*/
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strncpy(local_data_directory, master_data_directory, MAXPGPATH);
|
|
||||||
strncpy(local_config_file, master_config_file, MAXPGPATH);
|
|
||||||
strncpy(local_hba_file, master_hba_file, MAXPGPATH);
|
|
||||||
strncpy(local_ident_file, master_ident_file, MAXPGPATH);
|
|
||||||
|
|
||||||
log_notice(_("setting data directory to: %s\n"), local_data_directory);
|
|
||||||
log_hint(_("use -D/--data-dir to explicitly specify a data directory\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* In rsync mode, we need to check the SSH connection early
|
|
||||||
*/
|
|
||||||
if (mode == rsync)
|
|
||||||
{
|
|
||||||
r = test_ssh_connection(runtime_options.host, runtime_options.remote_user);
|
|
||||||
if (r != 0)
|
|
||||||
{
|
|
||||||
log_err(_("aborting, remote host %s is not reachable.\n"),
|
|
||||||
runtime_options.host);
|
|
||||||
retval = ERR_BAD_SSH;
|
|
||||||
goto stop_backup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check the local data directory can be used */
|
|
||||||
|
|
||||||
if (!create_pg_dir(local_data_directory, runtime_options.force))
|
|
||||||
{
|
|
||||||
log_err(_("unable to use directory %s ...\n"),
|
|
||||||
local_data_directory);
|
|
||||||
log_hint(_("use -F/--force option to force this directory to be overwritten\n"));
|
|
||||||
r = ERR_BAD_CONFIG;
|
|
||||||
retval = ERR_BAD_CONFIG;
|
|
||||||
goto stop_backup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If replication slots requested, create appropriate slot on
|
* If replication slots requested, create appropriate slot on
|
||||||
* the primary; this must be done before pg_start_backup() is
|
* the primary; this must be done before pg_start_backup() is
|
||||||
@@ -2962,24 +2974,18 @@ stop_backup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Finally, write the recovery.conf file */
|
/* Finally, write the recovery.conf file */
|
||||||
|
|
||||||
|
create_recovery_file(local_data_directory, &upstream_conninfo, NULL);
|
||||||
|
|
||||||
if (mode == barman && source_conn == NULL)
|
if (mode == barman && source_conn == NULL)
|
||||||
{
|
{
|
||||||
char conninfo_on_barman[MAXLEN];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We don't have an upstream connection - attempt to connect
|
|
||||||
* to the upstream via the barman server to fetch the upstream's conninfo
|
|
||||||
*/
|
|
||||||
get_barman_property(conninfo_on_barman, "conninfo", local_repmgr_directory);
|
|
||||||
|
|
||||||
create_recovery_file(local_data_directory, &upstream_conninfo, conninfo_on_barman);
|
|
||||||
|
|
||||||
/* In Barman mode, remove local_repmgr_directory */
|
/* In Barman mode, remove local_repmgr_directory */
|
||||||
rmdir(local_repmgr_directory);
|
rmdir(local_repmgr_directory);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
create_recovery_file(local_data_directory, &upstream_conninfo, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(mode)
|
switch(mode)
|
||||||
|
|||||||
Reference in New Issue
Block a user