mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-22 22:56:29 +00:00
Add option "--dump-config"
This is initially intended for verifying the configuration parsing mechanism and is currently undocumented.
This commit is contained in:
86
configfile.c
86
configfile.c
@@ -1354,6 +1354,61 @@ reload_config(t_server_type server_type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dump the parsed configuration
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
dump_config(void)
|
||||||
|
{
|
||||||
|
ConfigFileSetting *setting;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
setting = &config_file_settings[0];
|
||||||
|
|
||||||
|
do {
|
||||||
|
printf("%s|", setting->name);
|
||||||
|
switch (setting->type)
|
||||||
|
{
|
||||||
|
case CONFIG_INT:
|
||||||
|
printf("%i", *setting->val.intptr);
|
||||||
|
break;
|
||||||
|
case CONFIG_BOOL:
|
||||||
|
printf("%s", format_bool(*setting->val.boolptr));
|
||||||
|
break;
|
||||||
|
case CONFIG_STRING:
|
||||||
|
printf("%s", setting->val.strptr);
|
||||||
|
break;
|
||||||
|
case CONFIG_FAILOVER_MODE:
|
||||||
|
printf("%s", format_failover_mode(*setting->val.failovermodeptr));
|
||||||
|
break;
|
||||||
|
case CONFIG_CONNECTION_CHECK_TYPE:
|
||||||
|
printf("%s", print_connection_check_type(*setting->val.checktypeptr));
|
||||||
|
break;
|
||||||
|
case CONFIG_EVENT_NOTIFICATION_LIST:
|
||||||
|
{
|
||||||
|
char *list = print_event_notification_list(setting->val.notificationlistptr);
|
||||||
|
printf("%s", list);
|
||||||
|
pfree(list);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CONFIG_TABLESPACE_MAPPING:
|
||||||
|
{
|
||||||
|
char *list = print_tablespace_mapping(setting->val.tablespacemappingptr);
|
||||||
|
printf("%s", list);
|
||||||
|
pfree(list);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* this should never happen */
|
||||||
|
log_error("unhandled setting type %i", (int)setting->type);
|
||||||
|
}
|
||||||
|
puts("");
|
||||||
|
i++;
|
||||||
|
setting = &config_file_settings[i];
|
||||||
|
} while (setting->name != NULL);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
exit_with_config_file_errors(ItemList *config_errors, ItemList *config_warnings, bool terse)
|
exit_with_config_file_errors(ItemList *config_errors, ItemList *config_warnings, bool terse)
|
||||||
{
|
{
|
||||||
@@ -2118,7 +2173,7 @@ print_event_notification_list(EventNotificationList *list)
|
|||||||
appendPQExpBufferStr(&buf, cell->event_type);
|
appendPQExpBufferStr(&buf, cell->event_type);
|
||||||
|
|
||||||
if (cell->next)
|
if (cell->next)
|
||||||
appendPQExpBufferStr(&buf, ", ");
|
appendPQExpBufferChar(&buf, ',');
|
||||||
|
|
||||||
cell = cell->next;
|
cell = cell->next;
|
||||||
}
|
}
|
||||||
@@ -2132,6 +2187,35 @@ print_event_notification_list(EventNotificationList *list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
print_tablespace_mapping(TablespaceList *tablespace_mapping)
|
||||||
|
{
|
||||||
|
TablespaceListCell *cell;
|
||||||
|
bool first = true;
|
||||||
|
PQExpBufferData buf;
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
initPQExpBuffer(&buf);
|
||||||
|
|
||||||
|
for (cell = tablespace_mapping->head; cell; cell = cell->next)
|
||||||
|
{
|
||||||
|
if (first == true)
|
||||||
|
first = false;
|
||||||
|
else
|
||||||
|
appendPQExpBufferChar(&buf, ',');
|
||||||
|
|
||||||
|
appendPQExpBuffer(&buf, "%s=%s",
|
||||||
|
cell->old_dir, cell->new_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = palloc0(strlen(buf.data) + 1);
|
||||||
|
strncpy(ptr, buf.data, strlen(buf.data));
|
||||||
|
|
||||||
|
termPQExpBuffer(&buf);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
format_failover_mode(failover_mode_opt failover)
|
format_failover_mode(failover_mode_opt failover)
|
||||||
|
|||||||
@@ -311,6 +311,8 @@ const char *progname(void);
|
|||||||
|
|
||||||
void load_config(const char *config_file, bool verbose, bool terse, char *argv0);
|
void load_config(const char *config_file, bool verbose, bool terse, char *argv0);
|
||||||
bool reload_config(t_server_type server_type);
|
bool reload_config(t_server_type server_type);
|
||||||
|
void dump_config(void);
|
||||||
|
|
||||||
void parse_configuration_item(ItemList *error_list, ItemList *warning_list, const char *name, const char *value);
|
void parse_configuration_item(ItemList *error_list, ItemList *warning_list, const char *name, const char *value);
|
||||||
|
|
||||||
bool parse_recovery_conf(const char *data_dir, t_recovery_conf *conf);
|
bool parse_recovery_conf(const char *data_dir, t_recovery_conf *conf);
|
||||||
@@ -342,6 +344,7 @@ void exit_with_cli_errors(ItemList *error_list, const char *repmgr_command);
|
|||||||
void print_item_list(ItemList *item_list);
|
void print_item_list(ItemList *item_list);
|
||||||
const char *print_connection_check_type(ConnectionCheckType type);
|
const char *print_connection_check_type(ConnectionCheckType type);
|
||||||
char *print_event_notification_list(EventNotificationList *list);
|
char *print_event_notification_list(EventNotificationList *list);
|
||||||
|
char *print_tablespace_mapping(TablespaceList *tablespacemappingptr);
|
||||||
|
|
||||||
extern bool modify_auto_conf(const char *data_dir, KeyValueList *items);
|
extern bool modify_auto_conf(const char *data_dir, KeyValueList *items);
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ typedef struct
|
|||||||
bool no_wait;
|
bool no_wait;
|
||||||
bool compact;
|
bool compact;
|
||||||
bool detail;
|
bool detail;
|
||||||
|
bool dump_config;
|
||||||
|
|
||||||
/* logging options */
|
/* logging options */
|
||||||
char log_level[MAXLEN]; /* overrides setting in repmgr.conf */
|
char log_level[MAXLEN]; /* overrides setting in repmgr.conf */
|
||||||
@@ -151,7 +152,7 @@ typedef struct
|
|||||||
/* configuration metadata */ \
|
/* configuration metadata */ \
|
||||||
false, false, false, false, false, \
|
false, false, false, false, false, \
|
||||||
/* general configuration options */ \
|
/* general configuration options */ \
|
||||||
"", false, false, "", -1, false, false, false, \
|
"", false, false, "", -1, false, false, false, false, \
|
||||||
/* logging options */ \
|
/* logging options */ \
|
||||||
"", false, false, false, false, \
|
"", false, false, false, false, \
|
||||||
/* output options */ \
|
/* output options */ \
|
||||||
|
|||||||
@@ -277,6 +277,11 @@ main(int argc, char **argv)
|
|||||||
runtime_options.detail = true;
|
runtime_options.detail = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* --dump-config */
|
||||||
|
case OPT_DUMP_CONFIG:
|
||||||
|
runtime_options.dump_config = true;
|
||||||
|
break;
|
||||||
|
|
||||||
/*----------------------------
|
/*----------------------------
|
||||||
* database connection options
|
* database connection options
|
||||||
*----------------------------
|
*----------------------------
|
||||||
@@ -1081,6 +1086,24 @@ main(int argc, char **argv)
|
|||||||
runtime_options.terse,
|
runtime_options.terse,
|
||||||
argv[0]);
|
argv[0]);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle options which must be executed without a repmgr command
|
||||||
|
*/
|
||||||
|
if (runtime_options.dump_config == true)
|
||||||
|
{
|
||||||
|
if (repmgr_command != NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
_("--dump-config cannot be used in combination with a repmgr command"));
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
dump_config();
|
||||||
|
exit(SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
check_cli_parameters(action);
|
check_cli_parameters(action);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1219,8 +1242,6 @@ main(int argc, char **argv)
|
|||||||
logger_set_level(LOG_ERROR);
|
logger_set_level(LOG_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Node configuration information is not needed for all actions, with
|
* Node configuration information is not needed for all actions, with
|
||||||
* STANDBY CLONE being the main exception.
|
* STANDBY CLONE being the main exception.
|
||||||
|
|||||||
@@ -104,6 +104,7 @@
|
|||||||
#define OPT_CONFIG_ARCHIVE_DIR 2001
|
#define OPT_CONFIG_ARCHIVE_DIR 2001
|
||||||
#define OPT_DISABLE_WAL_RECEIVER 2002
|
#define OPT_DISABLE_WAL_RECEIVER 2002
|
||||||
#define OPT_ENABLE_WAL_RECEIVER 2003
|
#define OPT_ENABLE_WAL_RECEIVER 2003
|
||||||
|
#define OPT_DUMP_CONFIG 2004
|
||||||
|
|
||||||
/* deprecated since 4.0 */
|
/* deprecated since 4.0 */
|
||||||
#define OPT_CHECK_UPSTREAM_CONFIG 999
|
#define OPT_CHECK_UPSTREAM_CONFIG 999
|
||||||
@@ -125,6 +126,7 @@ static struct option long_options[] =
|
|||||||
{"no-wait", no_argument, NULL, 'W'},
|
{"no-wait", no_argument, NULL, 'W'},
|
||||||
{"compact", no_argument, NULL, OPT_COMPACT},
|
{"compact", no_argument, NULL, OPT_COMPACT},
|
||||||
{"detail", no_argument, NULL, OPT_DETAIL},
|
{"detail", no_argument, NULL, OPT_DETAIL},
|
||||||
|
{"dump-config", no_argument, NULL, OPT_DUMP_CONFIG},
|
||||||
|
|
||||||
/* connection options */
|
/* connection options */
|
||||||
{"dbname", required_argument, NULL, 'd'},
|
{"dbname", required_argument, NULL, 'd'},
|
||||||
|
|||||||
@@ -386,12 +386,9 @@ output_check_status(CheckStatus status)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return "UNKNOWN";
|
return "UNKNOWN";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Escape a string for use as a parameter in recovery.conf
|
* Escape a string for use as a parameter in recovery.conf
|
||||||
* Caller must free returned value
|
* Caller must free returned value
|
||||||
@@ -433,7 +430,6 @@ escape_string(PGconn *conn, const char *string)
|
|||||||
/*
|
/*
|
||||||
* simple function to escape double quotes only
|
* simple function to escape double quotes only
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
escape_double_quotes(char *string, PQExpBufferData *out)
|
escape_double_quotes(char *string, PQExpBufferData *out)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user