diff --git a/repmgr-action-bdr.c b/repmgr-action-bdr.c index ac51240d..13853f63 100644 --- a/repmgr-action-bdr.c +++ b/repmgr-action-bdr.c @@ -22,6 +22,7 @@ void do_bdr_register(void) { PGconn *conn = NULL; + BdrNodeInfoList bdr_nodes = T_BDR_NODE_INFO_LIST_INITIALIZER; ExtensionStatus extension_status; t_node_info node_info = T_NODE_INFO_INITIALIZER; RecordStatus record_status; @@ -45,6 +46,25 @@ do_bdr_register(void) { log_error(_("database \"%s\" is not BDR-enabled"), dbname); log_hint(_("when using repmgr with BDR, the repmgr schema must be stored in the BDR database")); + PQfinish(conn); + exit(ERR_BAD_CONFIG); + } + + /* Check that there are at most 2 BDR nodes */ + get_all_bdr_node_records(conn, &bdr_nodes); + + if (bdr_nodes.node_count == 0) + { + log_error(_("database \"%s\" is BDR-enabled but no BDR nodes were found"), dbname); + PQfinish(conn); + exit(ERR_BAD_CONFIG); + } + + if (bdr_nodes.node_count > 2) + { + log_error(_("repmgr can only support BDR clusters with 2 nodes")); + log_detail(_("this BDR cluster has %i nodes"), bdr_nodes.node_count); + PQfinish(conn); exit(ERR_BAD_CONFIG); } @@ -54,12 +74,10 @@ do_bdr_register(void) if (extension_status == REPMGR_UNKNOWN) { log_error(_("unable to determine status of \"repmgr\" extension in database \"%s\""), - dbname -); + dbname); PQfinish(conn); } - if (extension_status == REPMGR_UNAVAILABLE) { log_error(_("\"repmgr\" extension is not available")); @@ -73,7 +91,6 @@ do_bdr_register(void) log_error(_("repmgr metadatabase contains records for non-BDR nodes")); exit(ERR_BAD_CONFIG); } - } else { diff --git a/repmgr-client.c b/repmgr-client.c index 255fcd82..234f6362 100644 --- a/repmgr-client.c +++ b/repmgr-client.c @@ -1242,12 +1242,14 @@ do_help(void) } printf(_("Usage:\n")); - printf(_(" %s [OPTIONS] primary register\n"), progname()); - printf(_(" %s [OPTIONS] primary unregister\n"), progname()); + printf(_(" %s [OPTIONS] primary register\n"), progname()); + printf(_(" %s [OPTIONS] primary unregister\n"), progname()); printf(_(" %s [OPTIONS] standby clone\n"), progname()); printf(_(" %s [OPTIONS] standby register\n"), progname()); printf(_(" %s [OPTIONS] standby unregister\n"), progname()); printf(_(" %s [OPTIONS] standby promote\n"), progname()); + printf(_(" %s [OPTIONS] bdr register\n"), progname()); + printf(_(" %s [OPTIONS] bdr unregister\n"), progname()); printf(_(" %s [OPTIONS] cluster event\n"), progname()); puts("");