mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-26 16:46:28 +00:00
standby switchover: fetch remote repmgr version number
This commit is contained in:
@@ -3430,6 +3430,7 @@ do_standby_switchover(void)
|
|||||||
char remote_host[MAXLEN] = "";
|
char remote_host[MAXLEN] = "";
|
||||||
int remote_node_id = UNKNOWN_NODE_ID;
|
int remote_node_id = UNKNOWN_NODE_ID;
|
||||||
t_node_info remote_node_record = T_NODE_INFO_INITIALIZER;
|
t_node_info remote_node_record = T_NODE_INFO_INITIALIZER;
|
||||||
|
int remote_repmgr_version = UNKNOWN_REPMGR_VERSION_NUM;
|
||||||
|
|
||||||
RecordStatus record_status = RECORD_NOT_FOUND;
|
RecordStatus record_status = RECORD_NOT_FOUND;
|
||||||
RecoveryType recovery_type = RECTYPE_UNKNOWN;
|
RecoveryType recovery_type = RECTYPE_UNKNOWN;
|
||||||
@@ -3781,7 +3782,12 @@ do_standby_switchover(void)
|
|||||||
initPQExpBuffer(&remote_command_str);
|
initPQExpBuffer(&remote_command_str);
|
||||||
make_remote_repmgr_path(&remote_command_str, &remote_node_record);
|
make_remote_repmgr_path(&remote_command_str, &remote_node_record);
|
||||||
|
|
||||||
appendPQExpBufferStr(&remote_command_str, "--version 2>/dev/null && echo \"1\" || echo \"0\"");
|
/*
|
||||||
|
* Here we're executing an arbitrary repmgr command which is guaranteed to
|
||||||
|
* succeed if repmgr is executed. We'll extract the actual version number in the
|
||||||
|
* next step.
|
||||||
|
*/
|
||||||
|
appendPQExpBufferStr(&remote_command_str, "--version >/dev/null 2>&1 && echo \"1\" || echo \"0\"");
|
||||||
initPQExpBuffer(&command_output);
|
initPQExpBuffer(&command_output);
|
||||||
command_success = remote_command(remote_host,
|
command_success = remote_command(remote_host,
|
||||||
runtime_options.remote_user,
|
runtime_options.remote_user,
|
||||||
@@ -3827,8 +3833,57 @@ do_standby_switchover(void)
|
|||||||
|
|
||||||
exit(ERR_BAD_CONFIG);
|
exit(ERR_BAD_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
termPQExpBuffer(&command_output);
|
termPQExpBuffer(&command_output);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now we're sure the binary can be executed, fetch its version number.
|
||||||
|
*/
|
||||||
|
initPQExpBuffer(&remote_command_str);
|
||||||
|
make_remote_repmgr_path(&remote_command_str, &remote_node_record);
|
||||||
|
|
||||||
|
appendPQExpBufferStr(&remote_command_str, "--version 2>/dev/null");
|
||||||
|
initPQExpBuffer(&command_output);
|
||||||
|
command_success = remote_command(remote_host,
|
||||||
|
runtime_options.remote_user,
|
||||||
|
remote_command_str.data,
|
||||||
|
config_file_options.ssh_options,
|
||||||
|
&command_output);
|
||||||
|
|
||||||
|
termPQExpBuffer(&remote_command_str);
|
||||||
|
|
||||||
|
if (command_success == true)
|
||||||
|
{
|
||||||
|
remote_repmgr_version = parse_repmgr_version(command_output.data);
|
||||||
|
if (remote_repmgr_version == UNKNOWN_REPMGR_VERSION_NUM)
|
||||||
|
{
|
||||||
|
log_error(_("unable to parse \"%s\"'s reported version on \"%s\""),
|
||||||
|
progname(), remote_host);
|
||||||
|
PQfinish(remote_conn);
|
||||||
|
PQfinish(local_conn);
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
log_debug(_("\"%s\" version on \"%s\" is %i"),
|
||||||
|
progname(), remote_host, remote_repmgr_version );
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log_error(_("unable to execute \"%s\" on \"%s\""),
|
||||||
|
progname(), remote_host);
|
||||||
|
|
||||||
|
if (strlen(command_output.data) > 2)
|
||||||
|
log_detail("%s", command_output.data);
|
||||||
|
|
||||||
|
termPQExpBuffer(&command_output);
|
||||||
|
|
||||||
|
PQfinish(remote_conn);
|
||||||
|
PQfinish(local_conn);
|
||||||
|
|
||||||
|
exit(ERR_BAD_CONFIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
termPQExpBuffer(&command_output);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the expected remote repmgr.conf file exists
|
* Check if the expected remote repmgr.conf file exists
|
||||||
@@ -3939,9 +3994,12 @@ do_standby_switchover(void)
|
|||||||
* correct user, otherwise the node will probably not be able to attach to
|
* correct user, otherwise the node will probably not be able to attach to
|
||||||
* the promotion candidate (and is a sign of bad configuration anyway) so we
|
* the promotion candidate (and is a sign of bad configuration anyway) so we
|
||||||
* will complain vocally.
|
* will complain vocally.
|
||||||
|
*
|
||||||
|
* We'll only do this if we've determined the remote repmgr binary is new
|
||||||
|
* enough to have the "node check --replication-config-owner" option.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (PQserverVersion(local_conn) >= 120000)
|
if (PQserverVersion(local_conn) >= 120000 && remote_repmgr_version >= 50100)
|
||||||
{
|
{
|
||||||
initPQExpBuffer(&remote_command_str);
|
initPQExpBuffer(&remote_command_str);
|
||||||
make_remote_repmgr_path(&remote_command_str, &remote_node_record);
|
make_remote_repmgr_path(&remote_command_str, &remote_node_record);
|
||||||
|
|||||||
Reference in New Issue
Block a user