From 1404632d3e48af6fb6a7027d72a9c5703a56962d Mon Sep 17 00:00:00 2001 From: afwerar <1296468573@qq.com> Date: Fri, 22 Jul 2022 17:11:57 +0800 Subject: [PATCH] os: fix multi level storage conf error --- source/common/src/tglobal.c | 13 ++++- source/util/src/tconfig.c | 102 ++++++++++++++++++++++++++++++++---- 2 files changed, 103 insertions(+), 12 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 6dc78d6400..a73808f2ed 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -226,8 +226,17 @@ static int32_t taosSetTfsCfg(SConfig *pCfg) { } if (tsDataDir[0] == 0) { - uError("datadir not set"); - return -1; + if (pItem->str != NULL) { + taosAddDataDir(0, pItem->str, 0, 1); + tstrncpy(tsDataDir, pItem->str, PATH_MAX); + if (taosMulMkDir(tsDataDir) != 0) { + uError("failed to create dataDir:%s since %s", tsDataDir, terrstr()); + return -1; + } + } else { + uError("datadir not set"); + return -1; + } } return 0; diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index db1207f057..11ae31919a 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -626,6 +626,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { int32_t cfgLoadFromEnvVar(SConfig *pConfig) { char *line = NULL, *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; + int32_t code = 0; ssize_t _bytes = 0; TdCmdPtr pCmd = taosOpenCmd("set"); if (pCmd == NULL) { @@ -658,9 +659,12 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) { if (vlen3 != 0) value3[vlen3] = 0; } - cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_VAR); if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { - cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_VAR); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_VAR); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; + } else { + code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_VAR); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -674,6 +678,7 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) { int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { char buf[1024], *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; + int32_t code = 0; int32_t index = 0; if (envCmd == NULL) return 0; while (envCmd[index]!=NULL) { @@ -700,9 +705,12 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { if (vlen3 != 0) value3[vlen3] = 0; } - cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_CMD); if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { - cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_CMD); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_CMD); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; + } else { + code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_CMD); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -713,6 +721,7 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { char *line = NULL, *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; + int32_t code = 0; ssize_t _bytes = 0; const char *filepath = ".env"; @@ -761,9 +770,12 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { if (vlen3 != 0) value3[vlen3] = 0; } - cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_FILE); if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { - cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_FILE); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_ENV_FILE); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; + } else { + code = cfgSetItem(pConfig, name, value, CFG_STYPE_ENV_FILE); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -819,11 +831,12 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { if (vlen3 != 0) value3[vlen3] = 0; } - code = cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE); - if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_CFG_FILE); if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; + } else { + code = cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } @@ -839,9 +852,75 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { } } +// int32_t cfgLoadFromCfgText(SConfig *pConfig, const char *configText) { +// char *line = NULL, *name, *value, *value2, *value3; +// int32_t olen, vlen, vlen2, vlen3; +// ssize_t _bytes = 0; +// int32_t code = 0; + +// TdFilePtr pFile = taosOpenFile(filepath, TD_FILE_READ | TD_FILE_STREAM); +// if (pFile == NULL) { +// // success when the file does not exist +// if (errno == ENOENT) { +// terrno = TAOS_SYSTEM_ERROR(errno); +// uInfo("failed to load from cfg file %s since %s, use default parameters", filepath, terrstr()); +// return 0; +// } else { +// uError("failed to load from cfg file %s since %s", filepath, terrstr()); +// return -1; +// } +// } + +// while (!taosEOFFile(pFile)) { +// name = value = value2 = value3 = NULL; +// olen = vlen = vlen2 = vlen3 = 0; + +// _bytes = taosGetLineFile(pFile, &line); +// if (_bytes <= 0) { +// break; +// } + +// if(line[_bytes - 1] == '\n') line[_bytes - 1] = 0; + +// paGetToken(line, &name, &olen); +// if (olen == 0) continue; +// name[olen] = 0; + +// paGetToken(name + olen + 1, &value, &vlen); +// if (vlen == 0) continue; +// value[vlen] = 0; + +// paGetToken(value + vlen + 1, &value2, &vlen2); +// if (vlen2 != 0) { +// value2[vlen2] = 0; +// paGetToken(value2 + vlen2 + 1, &value3, &vlen3); +// if (vlen3 != 0) value3[vlen3] = 0; +// } + +// code = cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE); +// if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; +// if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { +// code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_CFG_FILE); +// if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; +// } +// } + +// taosCloseFile(&pFile); +// if (line != NULL) taosMemoryFreeClear(line); + +// if (code == 0 || (code != 0 && terrno == TSDB_CODE_CFG_NOT_FOUND)) { +// uInfo("load from cfg file %s success", filepath); +// return 0; +// } else { +// uError("failed to load from cfg file %s since %s", filepath, terrstr()); +// return -1; +// } +// } + int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { char *cfgLineBuf = NULL, *name, *value, *value2, *value3; int32_t olen, vlen, vlen2, vlen3; + int32_t code = 0; if (url == NULL || strlen(url) == 0) { uInfo("fail to load apoll url"); return 0; @@ -916,9 +995,12 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) value3[vlen3] = 0; } - cfgSetItem(pConfig, name, value, CFG_STYPE_APOLLO_URL); if (value2 != NULL && value3 != NULL && value2[0] != 0 && value3[0] != 0 && strcasecmp(name, "dataDir") == 0) { - cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_APOLLO_URL); + code = cfgSetTfsItem(pConfig, name, value, value2, value3, CFG_STYPE_APOLLO_URL); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; + } else { + code = cfgSetItem(pConfig, name, value, CFG_STYPE_APOLLO_URL); + if (code != 0 && terrno != TSDB_CODE_CFG_NOT_FOUND) break; } } }