mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-27 17:06:29 +00:00
Improve handling of default connection parameters
This commit is contained in:
97
repmgr.c
97
repmgr.c
@@ -132,6 +132,7 @@ t_runtime_options runtime_options = T_RUNTIME_OPTIONS_INITIALIZER;
|
|||||||
t_configuration_options options = T_CONFIGURATION_OPTIONS_INITIALIZER;
|
t_configuration_options options = T_CONFIGURATION_OPTIONS_INITIALIZER;
|
||||||
|
|
||||||
bool wal_keep_segments_used = false;
|
bool wal_keep_segments_used = false;
|
||||||
|
bool connection_param_provided = false;
|
||||||
bool pg_rewind_supplied = false;
|
bool pg_rewind_supplied = false;
|
||||||
|
|
||||||
static char *server_mode = NULL;
|
static char *server_mode = NULL;
|
||||||
@@ -141,7 +142,6 @@ static char pg_bindir[MAXLEN] = "";
|
|||||||
static char repmgr_slot_name[MAXLEN] = "";
|
static char repmgr_slot_name[MAXLEN] = "";
|
||||||
static char *repmgr_slot_name_ptr = NULL;
|
static char *repmgr_slot_name_ptr = NULL;
|
||||||
static char path_buf[MAXLEN] = "";
|
static char path_buf[MAXLEN] = "";
|
||||||
static char default_db[MAXLEN] = "";
|
|
||||||
|
|
||||||
/* Collate command line errors and warnings here for friendlier reporting */
|
/* Collate command line errors and warnings here for friendlier reporting */
|
||||||
ErrorList cli_errors = { NULL, NULL };
|
ErrorList cli_errors = { NULL, NULL };
|
||||||
@@ -192,24 +192,47 @@ main(int argc, char **argv)
|
|||||||
bool check_upstream_config = false;
|
bool check_upstream_config = false;
|
||||||
bool config_file_parsed = false;
|
bool config_file_parsed = false;
|
||||||
char *ptr = NULL;
|
char *ptr = NULL;
|
||||||
|
const char *env;
|
||||||
|
|
||||||
set_progname(argv[0]);
|
set_progname(argv[0]);
|
||||||
|
|
||||||
/* Initialise some defaults */
|
/* Initialise some defaults */
|
||||||
|
|
||||||
if (getenv("PGDATABASE"))
|
/* set default user */
|
||||||
|
env = getenv("PGUSER");
|
||||||
|
if (!env)
|
||||||
{
|
{
|
||||||
strncpy(default_db, getenv("PGDATABASE"), MAXLEN);
|
struct passwd *pw = NULL;
|
||||||
|
pw = getpwuid(geteuid());
|
||||||
|
if (pw)
|
||||||
|
{
|
||||||
|
env = pw->pw_name;
|
||||||
}
|
}
|
||||||
else if (getenv("PGUSER"))
|
else
|
||||||
{
|
{
|
||||||
strncpy(default_db, getenv("PGUSER"), MAXLEN);
|
fprintf(stderr, "could not get current user name: %s\n", strerror(errno));
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strncpy(runtime_options.username, env, MAXLEN);
|
||||||
|
|
||||||
|
/* set default database */
|
||||||
|
env = getenv("PGDATABASE");
|
||||||
|
if (!env)
|
||||||
|
{
|
||||||
|
env = runtime_options.username;
|
||||||
|
}
|
||||||
|
strncpy(runtime_options.dbname, env, MAXLEN);
|
||||||
|
|
||||||
|
/* set default port */
|
||||||
|
|
||||||
|
env = getenv("PGPORT");
|
||||||
|
if (!env)
|
||||||
|
{
|
||||||
|
env = DEF_PGPORT_STR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strlen(default_db))
|
strncpy(runtime_options.masterport, env, MAXLEN);
|
||||||
{
|
|
||||||
strncpy(default_db, DEFAULT_DBNAME, MAXLEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Prevent getopt_long() from printing an error message */
|
/* Prevent getopt_long() from printing an error message */
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
@@ -233,18 +256,22 @@ main(int argc, char **argv)
|
|||||||
exit(SUCCESS);
|
exit(SUCCESS);
|
||||||
case 'd':
|
case 'd':
|
||||||
strncpy(runtime_options.dbname, optarg, MAXLEN);
|
strncpy(runtime_options.dbname, optarg, MAXLEN);
|
||||||
|
connection_param_provided = true;
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
strncpy(runtime_options.host, optarg, MAXLEN);
|
strncpy(runtime_options.host, optarg, MAXLEN);
|
||||||
|
connection_param_provided = true;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
repmgr_atoi(optarg, "-p/--port", &cli_errors);
|
repmgr_atoi(optarg, "-p/--port", &cli_errors);
|
||||||
strncpy(runtime_options.masterport,
|
strncpy(runtime_options.masterport,
|
||||||
optarg,
|
optarg,
|
||||||
MAXLEN);
|
MAXLEN);
|
||||||
|
connection_param_provided = true;
|
||||||
break;
|
break;
|
||||||
case 'U':
|
case 'U':
|
||||||
strncpy(runtime_options.username, optarg, MAXLEN);
|
strncpy(runtime_options.username, optarg, MAXLEN);
|
||||||
|
connection_param_provided = true;
|
||||||
break;
|
break;
|
||||||
case 'S':
|
case 'S':
|
||||||
strncpy(runtime_options.superuser, optarg, MAXLEN);
|
strncpy(runtime_options.superuser, optarg, MAXLEN);
|
||||||
@@ -528,20 +555,6 @@ main(int argc, char **argv)
|
|||||||
print_error_list(&cli_warnings, LOG_WARNING);
|
print_error_list(&cli_warnings, LOG_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!runtime_options.dbname[0])
|
|
||||||
{
|
|
||||||
strncpy(runtime_options.dbname, default_db, MAXLEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If no primary port (-p/--port) provided, explicitly set the
|
|
||||||
* default PostgreSQL port.
|
|
||||||
*/
|
|
||||||
if (!runtime_options.masterport[0])
|
|
||||||
{
|
|
||||||
strncpy(runtime_options.masterport, DEF_PGPORT_STR, MAXLEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The configuration file is not required for some actions (e.g. 'standby clone'),
|
* The configuration file is not required for some actions (e.g. 'standby clone'),
|
||||||
* however if available we'll parse it anyway for options like 'log_level',
|
* however if available we'll parse it anyway for options like 'log_level',
|
||||||
@@ -3699,6 +3712,8 @@ do_witness_create(void)
|
|||||||
static void
|
static void
|
||||||
do_help(void)
|
do_help(void)
|
||||||
{
|
{
|
||||||
|
const char *host;
|
||||||
|
|
||||||
printf(_("%s: replication management tool for PostgreSQL\n"), progname());
|
printf(_("%s: replication management tool for PostgreSQL\n"), progname());
|
||||||
printf(_("\n"));
|
printf(_("\n"));
|
||||||
printf(_("Usage:\n"));
|
printf(_("Usage:\n"));
|
||||||
@@ -3717,16 +3732,11 @@ do_help(void)
|
|||||||
printf(_(" -t, --terse don't display hints and other non-critical output\n"));
|
printf(_(" -t, --terse don't display hints and other non-critical output\n"));
|
||||||
printf(_("\n"));
|
printf(_("\n"));
|
||||||
printf(_("Connection options:\n"));
|
printf(_("Connection options:\n"));
|
||||||
printf(_(" -d, --dbname=DBNAME database to connect to (default: \"%s\")\n"), default_db);
|
printf(_(" -d, --dbname=DBNAME database to connect to (default: \"%s\")\n"), runtime_options.dbname);
|
||||||
|
host = getenv("PGHOST");
|
||||||
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
|
printf(_(" -h, --host=HOSTNAME database server host or socket directory (default: \"%s\")\n"), host ? host : _("local socket"));
|
||||||
printf(_(" -p, --port=PORT database server port (default: \"%s\")\n"), DEF_PGPORT_STR);
|
printf(_(" -p, --port=PORT database server port (default: \"%s\")\n"), runtime_options.masterport);
|
||||||
printf(_(" -U, --username=USERNAME database user name to connect as"));
|
printf(_(" -U, --username=USERNAME database user name to connect as (default: \"%s\")\n"), runtime_options.username);
|
||||||
if (getenv("PGUSER"))
|
|
||||||
{
|
|
||||||
printf(_(" (default: \"%s\")"), getenv("PGUSER"));
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
printf(_("\n"));
|
printf(_("\n"));
|
||||||
printf(_("General configuration options:\n"));
|
printf(_("General configuration options:\n"));
|
||||||
printf(_(" -b, --pg_bindir=PATH path to PostgreSQL binaries (optional)\n"));
|
printf(_(" -b, --pg_bindir=PATH path to PostgreSQL binaries (optional)\n"));
|
||||||
@@ -4075,8 +4085,7 @@ check_parameters_for_action(const int action)
|
|||||||
* parameters are at least useless and could be confusing so
|
* parameters are at least useless and could be confusing so
|
||||||
* reject them
|
* reject them
|
||||||
*/
|
*/
|
||||||
if (runtime_options.host[0] || runtime_options.masterport[0] ||
|
if (connection_param_provided)
|
||||||
runtime_options.username[0] || runtime_options.dbname[0])
|
|
||||||
{
|
{
|
||||||
error_list_append(&cli_warnings, _("master connection parameters not required when executing MASTER REGISTER"));
|
error_list_append(&cli_warnings, _("master connection parameters not required when executing MASTER REGISTER"));
|
||||||
}
|
}
|
||||||
@@ -4092,8 +4101,7 @@ check_parameters_for_action(const int action)
|
|||||||
* need connection parameters to the master because we can detect
|
* need connection parameters to the master because we can detect
|
||||||
* the master in repl_nodes
|
* the master in repl_nodes
|
||||||
*/
|
*/
|
||||||
if (runtime_options.host[0] || runtime_options.masterport[0] ||
|
if (connection_param_provided)
|
||||||
runtime_options.username[0] || runtime_options.dbname[0])
|
|
||||||
{
|
{
|
||||||
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY REGISTER"));
|
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY REGISTER"));
|
||||||
}
|
}
|
||||||
@@ -4109,8 +4117,7 @@ check_parameters_for_action(const int action)
|
|||||||
* need connection parameters to the master because we can detect
|
* need connection parameters to the master because we can detect
|
||||||
* the master in repl_nodes
|
* the master in repl_nodes
|
||||||
*/
|
*/
|
||||||
if (runtime_options.host[0] || runtime_options.masterport[0] ||
|
if (connection_param_provided)
|
||||||
runtime_options.username[0] || runtime_options.dbname[0])
|
|
||||||
{
|
{
|
||||||
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY UNREGISTER"));
|
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY UNREGISTER"));
|
||||||
}
|
}
|
||||||
@@ -4127,8 +4134,7 @@ check_parameters_for_action(const int action)
|
|||||||
* detect the master in repl_nodes if we can't find it then the
|
* detect the master in repl_nodes if we can't find it then the
|
||||||
* promote action will be cancelled
|
* promote action will be cancelled
|
||||||
*/
|
*/
|
||||||
if (runtime_options.host[0] || runtime_options.masterport[0] ||
|
if (connection_param_provided)
|
||||||
runtime_options.username[0] || runtime_options.dbname[0])
|
|
||||||
{
|
{
|
||||||
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY PROMOTE"));
|
error_list_append(&cli_warnings, _("master connection parameters not required when executing STANDBY PROMOTE"));
|
||||||
}
|
}
|
||||||
@@ -4174,15 +4180,6 @@ check_parameters_for_action(const int action)
|
|||||||
error_list_append(&cli_errors, _("master hostname (-h/--host) required when executing STANDBY CLONE"));
|
error_list_append(&cli_errors, _("master hostname (-h/--host) required when executing STANDBY CLONE"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(runtime_options.dbname, "") == 0)
|
|
||||||
{
|
|
||||||
error_list_append(&cli_errors, _("master database name (-d/--dbname) required when executing STANDBY CLONE"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(runtime_options.username, "") == 0)
|
|
||||||
{
|
|
||||||
error_list_append(&cli_errors, _("master database username (-U/--username) required when executing STANDBY CLONE"));
|
|
||||||
}
|
|
||||||
if (runtime_options.fast_checkpoint && runtime_options.rsync_only)
|
if (runtime_options.fast_checkpoint && runtime_options.rsync_only)
|
||||||
{
|
{
|
||||||
error_list_append(&cli_warnings, _("-c/--fast-checkpoint has no effect when using -r/--rsync-only"));
|
error_list_append(&cli_warnings, _("-c/--fast-checkpoint has no effect when using -r/--rsync-only"));
|
||||||
|
|||||||
1
repmgr.h
1
repmgr.h
@@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
#define DEFAULT_WAL_KEEP_SEGMENTS "5000"
|
#define DEFAULT_WAL_KEEP_SEGMENTS "5000"
|
||||||
#define DEFAULT_DEST_DIR "."
|
#define DEFAULT_DEST_DIR "."
|
||||||
#define DEFAULT_DBNAME "postgres"
|
|
||||||
#define DEFAULT_REPMGR_SCHEMA_PREFIX "repmgr_"
|
#define DEFAULT_REPMGR_SCHEMA_PREFIX "repmgr_"
|
||||||
#define DEFAULT_PRIORITY 100
|
#define DEFAULT_PRIORITY 100
|
||||||
#define FAILOVER_NODES_MAX_CHECK 50
|
#define FAILOVER_NODES_MAX_CHECK 50
|
||||||
|
|||||||
Reference in New Issue
Block a user