diff --git a/src/client/src/tscSystem.c b/src/client/src/tscSystem.c index 7811f39e33529476d361881f4291189530e4c510..114e5c50e6692cc8e0263e0e26788580e9bb86ba 100644 --- a/src/client/src/tscSystem.c +++ b/src/client/src/tscSystem.c @@ -445,6 +445,7 @@ static int taos_set_config_imp(const char *config){ tscError("already set config"); return 0; } + taosInitGlobalCfg(); cJSON *root = cJSON_Parse(config); if (root == NULL) { tscError("failed to set config, invalid json format: %s", config); @@ -460,21 +461,15 @@ static int taos_set_config_imp(const char *config){ ret = -2; continue; } - if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL)){ + if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION)){ ret = -2; } } - taosPrintGlobalCfg(); setConfFlag = true; return ret; } int taos_set_config(const char *config){ - if(taos_init()){ - tscError("failed to call taos_init"); - return -1; - } - static int32_t lock = 0; for (int i = 1; atomic_val_compare_exchange_32(&lock, 0, 1) != 0; ++i) { diff --git a/src/util/inc/tconfig.h b/src/util/inc/tconfig.h index 3c5cdfe08c0a0411d968bb8211cc0d2e691706ec..f73ba9a7aaa2ab2ae669ab17d1bff7e680d5a3b8 100644 --- a/src/util/inc/tconfig.h +++ b/src/util/inc/tconfig.h @@ -89,7 +89,7 @@ void taosDumpGlobalCfg(); void taosInitConfigOption(SGlobalCfg cfg); SGlobalCfg * taosGetConfigOption(const char *option); -bool taosReadConfigOption(const char *option, char *value, char *value2, char *value3); +bool taosReadConfigOption(const char *option, char *value, char *value2, char *value3, int8_t cfgStatus); #ifdef __cplusplus } diff --git a/src/util/src/tconfig.c b/src/util/src/tconfig.c index 548b3bc4f5aed921ee50cd3ed3629b5b7916f8a9..e7a8f0639b99e22805f69656160966e08e4da7b2 100644 --- a/src/util/src/tconfig.c +++ b/src/util/src/tconfig.c @@ -293,7 +293,9 @@ SGlobalCfg *taosGetConfigOption(const char *option) { return NULL; } -bool taosReadConfigOption(const char *option, char *value, char *value2, char *value3) { +bool taosReadConfigOption(const char *option, char *value, char *value2, char *value3, + int8_t cfgStatus) { + bool ret = false; for (int i = 0; i < tsGlobalConfigNum; ++i) { SGlobalCfg *cfg = tsGlobalConfig + i; if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_CONFIG)) continue; @@ -301,35 +303,48 @@ bool taosReadConfigOption(const char *option, char *value, char *value2, char *v switch (cfg->valType) { case TAOS_CFG_VTYPE_INT8: - return taosReadInt8Config(cfg, value); + ret = taosReadInt8Config(cfg, value); + break; case TAOS_CFG_VTYPE_INT16: - return taosReadInt16Config(cfg, value); + ret = taosReadInt16Config(cfg, value); + break; case TAOS_CFG_VTYPE_INT32: - return taosReadInt32Config(cfg, value); + ret = taosReadInt32Config(cfg, value); + break; case TAOS_CFG_VTYPE_UINT16: - return taosReadUInt16Config(cfg, value); + ret = taosReadUInt16Config(cfg, value); + break; case TAOS_CFG_VTYPE_FLOAT: - return taosReadFloatConfig(cfg, value); + ret = taosReadFloatConfig(cfg, value); + break; case TAOS_CFG_VTYPE_DOUBLE: - return taosReadDoubleConfig(cfg, value); + ret = taosReadDoubleConfig(cfg, value); + break; case TAOS_CFG_VTYPE_STRING: - return taosReadStringConfig(cfg, value); + ret = taosReadStringConfig(cfg, value); + break; case TAOS_CFG_VTYPE_IPSTR: - return taosReadIpStrConfig(cfg, value); + ret = taosReadIpStrConfig(cfg, value); + break; case TAOS_CFG_VTYPE_DIRECTORY: - return taosReadDirectoryConfig(cfg, value); + ret = taosReadDirectoryConfig(cfg, value); + break; case TAOS_CFG_VTYPE_DATA_DIRCTORY: if (taosReadDirectoryConfig(cfg, value)) { taosReadDataDirCfg(value, value2, value3); - return true; + ret = true; } - return false; + ret = false; + break; default: uError("config option:%s, input value:%s, can't be recognized", option, value); - return false; + ret = false; + } + if(ret && cfgStatus == TAOS_CFG_CSTATUS_OPTION){ + cfg->cfgStatus = TAOS_CFG_CSTATUS_OPTION; } } - return false; + return ret; } void taosInitConfigOption(SGlobalCfg cfg) { @@ -464,7 +479,7 @@ bool taosReadGlobalCfg() { if (vlen3 != 0) value3[vlen3] = 0; } - taosReadConfigOption(option, value, value2, value3); + taosReadConfigOption(option, value, value2, value3, TAOS_CFG_CSTATUS_FILE); } fclose(fp);