!108 修复远程设置event_triggers参数时出错的问题

Merge pull request !108 from 薛蒙恩/trigger_set_error
This commit is contained in:
opengauss-bot 2023-03-09 14:42:57 +00:00 committed by Gitee
commit cf6700b115
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 26 additions and 8 deletions

View File

@ -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");

View File

@ -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) {

View File

@ -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