!108 修复远程设置event_triggers参数时出错的问题
Merge pull request !108 from 薛蒙恩/trigger_set_error
This commit is contained in:
commit
cf6700b115
@ -174,19 +174,18 @@ int FindInstanceIdAndType(uint32 node, const char *dataPath, uint32 *instanceId,
|
||||
*/
|
||||
int ssh_exec(const staticNodeConfig* node, const char* cmd, int32 logLevel)
|
||||
{
|
||||
#define MAXLINE 1024
|
||||
char actualCmd[MAXLINE];
|
||||
char actualCmd[MAX_COMMAND_LEN] = {0};
|
||||
int rc = -1;
|
||||
int ret;
|
||||
|
||||
for (uint32 ii = 0; ii < node->sshCount; ii++) {
|
||||
if (mpp_env_separate_file[0] == '\0') {
|
||||
ret = snprintf_s(actualCmd, MAXLINE, MAXLINE - 1,
|
||||
ret = snprintf_s(actualCmd, MAX_COMMAND_LEN, MAX_COMMAND_LEN - 1,
|
||||
"pssh %s -s -H %s \"( %s ) > %s 2>&1\" < %s > /dev/null 2>&1",
|
||||
PSSH_TIMEOUT_OPTION, node->sshChannel[ii], cmd, "/dev/null", "/dev/null");
|
||||
securec_check_intval(ret, (void)ret);
|
||||
} else {
|
||||
ret = snprintf_s(actualCmd, MAXLINE, MAXLINE - 1,
|
||||
ret = snprintf_s(actualCmd, MAX_COMMAND_LEN, MAX_COMMAND_LEN - 1,
|
||||
"pssh %s -s -H %s \"( source %s;%s ) > %s 2>&1\" < %s > /dev/null 2>&1",
|
||||
PSSH_TIMEOUT_OPTION, node->sshChannel[ii], mpp_env_separate_file, cmd,
|
||||
"/dev/null", "/dev/null");
|
||||
|
@ -308,13 +308,31 @@ static void GetRemoteGucCommand(const CtlOption *ctx, char *cmd, size_t cmdLen)
|
||||
securec_check_intval(ret, (void)ret);
|
||||
curLen = (size_t)ret;
|
||||
|
||||
if (ctx->guc.gucCommand == SET_CONF_COMMAND && ctx->guc.value != NULL && ctx->guc.parameter != NULL) {
|
||||
if (ctx->guc.gucCommand != SET_CONF_COMMAND || ctx->guc.value == NULL || ctx->guc.parameter == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(ctx->guc.parameter, "event_triggers") != 0) {
|
||||
ret = snprintf_s((cmd + curLen), (cmdLen - curLen), ((cmdLen - curLen) - 1),
|
||||
SYSTEMQUOTE "-k %s=\\\"%s\\\" " SYSTEMQUOTE, ctx->guc.parameter, ctx->guc.value);
|
||||
securec_check_intval(ret, (void)ret);
|
||||
} else {
|
||||
// event_triggers value contain double quotes, so an escape character is added before remote execution
|
||||
const char *value = ctx->guc.value;
|
||||
char valueCopy[cmdLen] = {0};
|
||||
int j = 0;
|
||||
for (size_t i = 0; i < strlen(value); ++i) {
|
||||
if (value[i] == '"') {
|
||||
valueCopy[j++] = '\\';
|
||||
valueCopy[j++] = '\\';
|
||||
valueCopy[j++] = '\\';
|
||||
}
|
||||
valueCopy[j++] = value[i];
|
||||
}
|
||||
ret = snprintf_s((cmd + curLen), (cmdLen - curLen), ((cmdLen - curLen) - 1),
|
||||
SYSTEMQUOTE "-k %s=\\\"%s\\\" " SYSTEMQUOTE, ctx->guc.parameter, valueCopy);
|
||||
securec_check_intval(ret, (void)ret);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void PrintOneParameterAndValue(char *line)
|
||||
@ -768,7 +786,7 @@ static status_t ListRemoteConfMain(staticNodeConfig *node, const char *cmd)
|
||||
|
||||
static status_t ProcessInRemoteInstance(const CtlOption *ctx)
|
||||
{
|
||||
char remoteCmd[CM_PATH_LENGTH] = {0};
|
||||
char remoteCmd[MAX_COMMAND_LEN] = {0};
|
||||
|
||||
if (ctx->comm.nodeId == g_currentNode->node) {
|
||||
if (ProcessInLocalInstance(&ctx->guc) == CM_ERROR) {
|
||||
|
@ -38,6 +38,7 @@
|
||||
#define DYNAMIC_PRIMARY 0
|
||||
#define DYNAMIC_STANDBY 1
|
||||
#define RELOAD_WAIT_TIME 60
|
||||
#define MAX_COMMAND_LEN 2048
|
||||
|
||||
#define ETCD_BIN_NAME "etcd"
|
||||
#ifndef ENABLE_MULTIPLE_NODES
|
||||
|
Loading…
x
Reference in New Issue
Block a user