From 8c121da8a138dbb033eed25b98499665ab4e4c93 Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Tue, 5 Dec 2017 12:53:04 +0900 Subject: [PATCH] Add diagnostic option "repmgr node check --has-passfile" This checks if the active libpq version (9.6 and later) has the "passfile" option, and returns 0 if present, 1 if not. ` --- dbutils.c | 2 +- repmgr-action-node.c | 13 +++++++++++-- repmgr-client-global.h | 3 ++- repmgr-client.c | 12 +++++++++++- repmgr-client.h | 2 ++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/dbutils.c b/dbutils.c index b576449d..2354a997 100644 --- a/dbutils.c +++ b/dbutils.c @@ -700,7 +700,7 @@ has_passfile(void) PQconninfoFree(defs); - return has_passfile; + return has_passfile; } diff --git a/repmgr-action-node.c b/repmgr-action-node.c index a3df1644..64958cc8 100644 --- a/repmgr-action-node.c +++ b/repmgr-action-node.c @@ -564,6 +564,15 @@ do_node_check(void) CheckStatusListCell *cell = NULL; + /* internal */ + if (runtime_options.has_passfile == true) + { + return_code = has_passfile() ? 0 : 1; + + exit(return_code); + } + + if (strlen(config_file_options.conninfo)) conn = establish_db_connection(config_file_options.conninfo, true); else @@ -587,8 +596,8 @@ do_node_check(void) if (runtime_options.archive_ready == true) { return_code = do_node_check_archive_ready(conn, - runtime_options.output_mode, - NULL); + runtime_options.output_mode, + NULL); PQfinish(conn); exit(return_code); } diff --git a/repmgr-client-global.h b/repmgr-client-global.h index 30018650..5ff186cd 100644 --- a/repmgr-client-global.h +++ b/repmgr-client-global.h @@ -101,6 +101,7 @@ typedef struct bool replication_lag; bool role; bool slots; + bool has_passfile; /* "node join" options */ char config_files[MAXLEN]; @@ -151,7 +152,7 @@ typedef struct /* "node status" options */ \ false, \ /* "node check" options */ \ - false, false, false, false, false, \ + false, false, false, false, false, false, \ /* "node join" options */ \ "", \ /* "node service" options */ \ diff --git a/repmgr-client.c b/repmgr-client.c index 7ce6778b..bd402df8 100644 --- a/repmgr-client.c +++ b/repmgr-client.c @@ -447,6 +447,10 @@ main(int argc, char **argv) runtime_options.slots = true; break; + case OPT_HAS_PASSFILE: + runtime_options.has_passfile = true; + break; + /*-------------------- * "node rejoin" options *-------------------- @@ -1316,7 +1320,7 @@ check_cli_parameters(const int action) /* * XXX if -D/--pgdata provided, and also - * config_file_options.pgdaga, warn -D/--pgdata will be + * config_file_options.pgdata, warn -D/--pgdata will be * ignored */ @@ -1356,6 +1360,12 @@ check_cli_parameters(const int action) } } break; + case NODE_CHECK: + if (runtime_options.has_passfile == true) + { + config_file_required = false; + } + break; case NODE_STATUS: if (runtime_options.node_id != UNKNOWN_NODE_ID) { diff --git a/repmgr-client.h b/repmgr-client.h index 41de3f60..c0cc7d12 100644 --- a/repmgr-client.h +++ b/repmgr-client.h @@ -81,6 +81,7 @@ #define OPT_DOWNSTREAM 1032 #define OPT_SLOTS 1033 #define OPT_CONFIG_ARCHIVE_DIR 1034 +#define OPT_HAS_PASSFILE 1035 /* deprecated since 3.3 */ #define OPT_DATA_DIR 999 #define OPT_NO_CONNINFO_PASSWORD 998 @@ -153,6 +154,7 @@ static struct option long_options[] = {"replication-lag", no_argument, NULL, OPT_REPLICATION_LAG}, {"role", no_argument, NULL, OPT_ROLE}, {"slots", no_argument, NULL, OPT_SLOTS}, + {"has-passfile", no_argument, NULL, OPT_HAS_PASSFILE}, /* "node rejoin" options */ {"config-files", required_argument, NULL, OPT_CONFIG_FILES},