repmgr: improve switchover handling when "pg_ctl" used

If logging output not explicitly rediretced with "-l" in the pg_ctl
options, repmgr would hang waiting for pg_ctl output.

Note that we recommend using the OS-level service commands where
available.
This commit is contained in:
Ian Barwick
2018-01-30 13:40:38 +09:00
parent b38f45120c
commit 044d8a1098
2 changed files with 31 additions and 13 deletions

View File

@@ -2101,9 +2101,12 @@ test_ssh_connection(char *host, char *remote_user)
bool
local_command(const char *command, PQExpBufferData *outputbuf)
{
FILE *fp;
FILE *fp = NULL;
char output[MAXLEN];
int retval = 0;
bool success;
log_verbose(LOG_DEBUG, "executing:\n %s", command);
if (outputbuf == NULL)
{
@@ -2119,20 +2122,28 @@ local_command(const char *command, PQExpBufferData *outputbuf)
return false;
}
/* TODO: better error handling */
while (fgets(output, MAXLEN, fp) != NULL)
{
appendPQExpBuffer(outputbuf, "%s", output);
if (!feof(fp))
{
break;
}
}
pclose(fp);
retval = pclose(fp);
success = (WEXITSTATUS(retval) == 0) ? true : false;
log_verbose(LOG_DEBUG, "result of command was %i (%i)", WEXITSTATUS(retval), retval);
if (outputbuf->data != NULL)
log_verbose(LOG_DEBUG, "local_command(): output returned was:\n%s", outputbuf->data);
else
log_verbose(LOG_DEBUG, "local_command(): no output returned");
return true;
return success;
}
@@ -2394,7 +2405,12 @@ remote_command(const char *host, const char *user, const char *command, PQExpBuf
pclose(fp);
if (outputbuf != NULL)
log_verbose(LOG_DEBUG, "remote_command(): output returned was:\n %s", outputbuf->data);
{
if (strlen(outputbuf->data))
log_verbose(LOG_DEBUG, "remote_command(): output returned was:\n %s", outputbuf->data);
else
log_verbose(LOG_DEBUG, "remote_command(): no output returned");
}
return true;
}