mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-22 22:56:29 +00:00
node check: add option --db-connection
This is intended for diagnostic purposes, primarily when diagnosing the connection parameters used when repmgr is being executed on a remote node.
This commit is contained in:
@@ -53,6 +53,8 @@ static CheckStatus do_node_check_slots(PGconn *conn, OutputMode mode, t_node_inf
|
||||
static CheckStatus do_node_check_missing_slots(PGconn *conn, OutputMode mode, t_node_info *node_info, CheckStatusList *list_output);
|
||||
static CheckStatus do_node_check_data_directory(PGconn *conn, OutputMode mode, t_node_info *node_info, CheckStatusList *list_output);
|
||||
static CheckStatus do_node_check_replication_config_owner(PGconn *conn, OutputMode mode, t_node_info *node_info, CheckStatusList *list_output);
|
||||
static CheckStatus do_node_check_db_connection(PGconn *conn, OutputMode mode);
|
||||
|
||||
/*
|
||||
* NODE STATUS
|
||||
*
|
||||
@@ -734,12 +736,18 @@ do_node_check(void)
|
||||
exit(return_code);
|
||||
}
|
||||
|
||||
/* for use by "standby switchover" */
|
||||
if (runtime_options.replication_connection == true)
|
||||
{
|
||||
do_node_check_replication_connection();
|
||||
exit(SUCCESS);
|
||||
}
|
||||
|
||||
if (runtime_options.db_connection == true)
|
||||
{
|
||||
exit_on_connection_error = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* If --optformat was provided, we'll assume this is a remote invocation
|
||||
* and instead of exiting with an error, we'll return an error string to
|
||||
@@ -750,6 +758,7 @@ do_node_check(void)
|
||||
exit_on_connection_error = false;
|
||||
}
|
||||
|
||||
|
||||
if (config_file_options.conninfo[0] != '\0')
|
||||
{
|
||||
t_conninfo_param_list node_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
|
||||
@@ -799,6 +808,17 @@ do_node_check(void)
|
||||
conn = establish_db_connection_by_params(&source_conninfo, exit_on_connection_error);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* --db-connection option provided
|
||||
*/
|
||||
if (runtime_options.db_connection == true)
|
||||
{
|
||||
return_code = do_node_check_db_connection(conn, runtime_options.output_mode);
|
||||
PQfinish(conn);
|
||||
exit(return_code);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we've reached here, and the connection is invalid, then --optformat was provided
|
||||
*/
|
||||
@@ -2152,6 +2172,72 @@ CheckStatus do_node_check_replication_config_owner(PGconn *conn, OutputMode mode
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This is not included in the general list output
|
||||
*/
|
||||
static CheckStatus
|
||||
do_node_check_db_connection(PGconn *conn, OutputMode mode)
|
||||
{
|
||||
CheckStatus status = CHECK_STATUS_OK;
|
||||
PQExpBufferData details;
|
||||
|
||||
if (mode == OM_CSV)
|
||||
{
|
||||
log_error(_("--csv output not provided with --db-connection option"));
|
||||
PQfinish(conn);
|
||||
exit(ERR_BAD_CONFIG);
|
||||
}
|
||||
|
||||
/* This check is for configuration diagnostics only */
|
||||
if (mode == OM_NAGIOS)
|
||||
{
|
||||
log_error(_("--nagios output not provided with --db-connection option"));
|
||||
PQfinish(conn);
|
||||
exit(ERR_BAD_CONFIG);
|
||||
}
|
||||
|
||||
initPQExpBuffer(&details);
|
||||
|
||||
if (PQstatus(conn) != CONNECTION_OK)
|
||||
{
|
||||
t_conninfo_param_list conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
|
||||
int c;
|
||||
|
||||
status = CHECK_STATUS_CRITICAL;
|
||||
initialize_conninfo_params(&conninfo, false);
|
||||
conn_to_param_list(conn, &conninfo);
|
||||
|
||||
appendPQExpBufferStr(&details,
|
||||
"connection parameters used:");
|
||||
for (c = 0; c < conninfo.size && conninfo.keywords[c] != NULL; c++)
|
||||
{
|
||||
if (conninfo.values[c] != NULL && conninfo.values[c][0] != '\0')
|
||||
{
|
||||
appendPQExpBuffer(&details,
|
||||
" %s=%s",
|
||||
conninfo.keywords[c], conninfo.values[c]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (mode == OM_OPTFORMAT)
|
||||
{
|
||||
printf("--db-connection=%s\n",
|
||||
output_check_status(status));
|
||||
}
|
||||
else if (mode == OM_TEXT)
|
||||
{
|
||||
printf("%s (%s)\n",
|
||||
output_check_status(status),
|
||||
details.data);
|
||||
}
|
||||
termPQExpBuffer(&details);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
do_node_service(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user