From 8fcaee6d97d3b9fc08de6e60c5961e10bd770d74 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 1 Apr 2022 10:39:59 +0800 Subject: [PATCH 1/2] minor changes --- source/dnode/mgmt/dm/src/dmFile.c | 2 +- source/dnode/mgmt/main/src/dndExec.c | 10 ++++++++-- source/util/src/tconfig.c | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/source/dnode/mgmt/dm/src/dmFile.c b/source/dnode/mgmt/dm/src/dmFile.c index 444f18e6e0..d5105bcb1b 100644 --- a/source/dnode/mgmt/dm/src/dmFile.c +++ b/source/dnode/mgmt/dm/src/dmFile.c @@ -200,7 +200,7 @@ int32_t dmWriteFile(SDnodeMgmt *pMgmt) { taosMemoryFree(content); char realfile[PATH_MAX]; - snprintf(realfile, sizeof(realfile), "%s%smnode.json", pMgmt->path, TD_DIRSEP); + snprintf(realfile, sizeof(realfile), "%s%sdnode.json", pMgmt->path, TD_DIRSEP); if (taosRenameFile(file, realfile) != 0) { terrno = TAOS_SYSTEM_ERROR(errno); diff --git a/source/dnode/mgmt/main/src/dndExec.c b/source/dnode/mgmt/main/src/dndExec.c index fdc6125fb0..82f54d4fc9 100644 --- a/source/dnode/mgmt/main/src/dndExec.c +++ b/source/dnode/mgmt/main/src/dndExec.c @@ -20,9 +20,9 @@ static bool dndRequireNode(SMgmtWrapper *pWrapper) { bool required = false; int32_t code = (*pWrapper->fp.requiredFp)(pWrapper, &required); if (!required) { - dDebug("node:%s, no need to start", pWrapper->name); + dDebug("node:%s, does not require startup", pWrapper->name); } else { - dDebug("node:%s, need to start", pWrapper->name); + dDebug("node:%s, needs to be started", pWrapper->name); } return required; } @@ -279,6 +279,12 @@ static int32_t dndRunInChildProcess(SDnode *pDnode) { SMgmtWrapper *pWrapper = &pDnode->wrappers[pDnode->ntype]; dInfo("%s run in child process", pWrapper->name); + pWrapper->required = dndRequireNode(pWrapper); + if (!pWrapper->required) { + dError("%s does not require startup", pWrapper->name); + return -1; + } + SMsgCb msgCb = dndCreateMsgcb(pWrapper); tmsgSetDefaultMsgCb(&msgCb); pWrapper->procType = PROC_CHILD; diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 9101d3c7c8..ce9ef5b1c0 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -590,7 +590,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { } int32_t cfgLoadFromEnvVar(SConfig *pConfig) { - uInfo("load from global env variables not implemented yet"); + uInfo("load from env variables not implemented yet"); return 0; } From 8eb99ef6d1a0297b3ca5f98cd6ce82c6c6486627 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 1 Apr 2022 11:57:35 +0800 Subject: [PATCH 2/2] shm --- include/os/osProc.h | 4 ++- source/dnode/mgmt/main/src/dndExec.c | 40 +++++++++++++++++++++------- source/os/src/osProc.c | 17 ++++++++---- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/include/os/osProc.h b/include/os/osProc.h index 0b22105e5e..f09b695ef4 100644 --- a/include/os/osProc.h +++ b/include/os/osProc.h @@ -21,9 +21,11 @@ extern "C" { #endif int32_t taosNewProc(char **args); +void taosWaitProc(int32_t pid); +void taosKillProc(int32_t pid); +bool taosProcExist(int32_t pid); void taosSetProcName(int32_t argc, char **argv, const char *name); void taosSetProcPath(int32_t argc, char **argv); -bool taosProcExists(int32_t pid); #ifdef __cplusplus } diff --git a/source/dnode/mgmt/main/src/dndExec.c b/source/dnode/mgmt/main/src/dndExec.c index 82f54d4fc9..b37893aa6f 100644 --- a/source/dnode/mgmt/main/src/dndExec.c +++ b/source/dnode/mgmt/main/src/dndExec.c @@ -255,17 +255,39 @@ static int32_t dndRunInParentProcess(SDnode *pDnode) { while (1) { if (pDnode->event == DND_EVENT_STOP) { dInfo("dnode is about to stop"); + for (ENodeType n = DNODE + 1; n < NODE_MAX; ++n) { + SMgmtWrapper *pWrapper = &pDnode->wrappers[n]; + if (!pWrapper->required) continue; + if (pDnode->ntype == NODE_MAX) continue; + + if (pWrapper->procId > 0 && taosProcExist(pWrapper->procId)) { + dInfo("node:%s, send kill signal to the child process:%d", pWrapper->name, pWrapper->procId); + taosKillProc(pWrapper->procId); + } + } + + for (ENodeType n = DNODE + 1; n < NODE_MAX; ++n) { + SMgmtWrapper *pWrapper = &pDnode->wrappers[n]; + if (!pWrapper->required) continue; + if (pDnode->ntype == NODE_MAX) continue; + + if (pWrapper->procId > 0 && taosProcExist(pWrapper->procId)) { + dInfo("node:%s, wait for child process:%d to stop", pWrapper->name, pWrapper->procId); + taosWaitProc(pWrapper->procId); + dInfo("node:%s, child process:%d is stopped", pWrapper->name, pWrapper->procId); + } + } break; - } + } else { + for (ENodeType n = DNODE + 1; n < NODE_MAX; ++n) { + SMgmtWrapper *pWrapper = &pDnode->wrappers[n]; + if (!pWrapper->required) continue; + if (pDnode->ntype == NODE_MAX) continue; - for (ENodeType n = DNODE + 1; n < NODE_MAX; ++n) { - SMgmtWrapper *pWrapper = &pDnode->wrappers[n]; - if (!pWrapper->required) continue; - if (pDnode->ntype == NODE_MAX) continue; - - if (pWrapper->procId <= 0 || !taosProcExists(pWrapper->procId)) { - dInfo("node:%s, process:%d is killed and needs to be restarted", pWrapper->name, pWrapper->procId); - dndNewProc(pWrapper, n); + if (pWrapper->procId <= 0 || !taosProcExist(pWrapper->procId)) { + dInfo("node:%s, process:%d is killed and needs to be restarted", pWrapper->name, pWrapper->procId); + dndNewProc(pWrapper, n); + } } } diff --git a/source/os/src/osProc.c b/source/os/src/osProc.c index 2d2174a4c8..6b52fa30be 100644 --- a/source/os/src/osProc.c +++ b/source/os/src/osProc.c @@ -32,6 +32,18 @@ int32_t taosNewProc(char **args) { } } +void taosWaitProc(int32_t pid) { + int32_t status = 0; + waitpid(pid, &status, 0); +} + +void taosKillProc(int32_t pid) { kill(pid, SIGINT); } + +bool taosProcExist(int32_t pid) { + int32_t p = getpgid(pid); + return p >= 0; +} + // the length of the new name must be less than the original name to take effect void taosSetProcName(int32_t argc, char **argv, const char *name) { prctl(PR_SET_NAME, name); @@ -48,8 +60,3 @@ void taosSetProcName(int32_t argc, char **argv, const char *name) { } void taosSetProcPath(int32_t argc, char **argv) { tsProcPath = argv[0]; } - -bool taosProcExists(int32_t pid) { - int32_t p = getpgid(pid); - return p >= 0; -}