提交 13ea775c 编写于 作者: wmmhello's avatar wmmhello

[TD-5992}<fix>:optimize

上级 6028c919
...@@ -440,30 +440,30 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) { ...@@ -440,30 +440,30 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) {
#include "cJSON.h" #include "cJSON.h"
static setConfRet taos_set_config_imp(const char *config){ static setConfRet taos_set_config_imp(const char *config){
setConfRet ret; setConfRet ret = {SET_CONF_RET_SUCC, {0}};
static bool setConfFlag = false; static bool setConfFlag = false;
if (setConfFlag) { if (setConfFlag) {
ret.retCode = -5; ret.retCode = SET_CONF_RET_ERR_ONLY_ONCE;
strcpy(ret.retMsg, "configuration can only set once"); strcpy(ret.retMsg, "configuration can only set once");
return ret; return ret;
} }
taosInitGlobalCfg(); taosInitGlobalCfg();
cJSON *root = cJSON_Parse(config); cJSON *root = cJSON_Parse(config);
if (root == NULL){ if (root == NULL){
ret.retCode = -4; ret.retCode = SET_CONF_RET_ERR_JSON_PARSE;
strcpy(ret.retMsg, "parse json error"); strcpy(ret.retMsg, "parse json error");
return ret; return ret;
} }
int size = cJSON_GetArraySize(root); int size = cJSON_GetArraySize(root);
if(!cJSON_IsObject(root) || size == 0) { if(!cJSON_IsObject(root) || size == 0) {
ret.retCode = -3; ret.retCode = SET_CONF_RET_ERR_JSON_INVALID;
strcpy(ret.retMsg, "json content is invalid, must be not empty object"); strcpy(ret.retMsg, "json content is invalid, must be not empty object");
return ret; return ret;
} }
if(size >= 1000) { if(size >= 1000) {
ret.retCode = -6; ret.retCode = SET_CONF_RET_ERR_TOO_LONG;
strcpy(ret.retMsg, "json object size is too long"); strcpy(ret.retMsg, "json object size is too long");
return ret; return ret;
} }
...@@ -471,21 +471,25 @@ static setConfRet taos_set_config_imp(const char *config){ ...@@ -471,21 +471,25 @@ static setConfRet taos_set_config_imp(const char *config){
for(int i = 0; i < size; i++){ for(int i = 0; i < size; i++){
cJSON *item = cJSON_GetArrayItem(root, i); cJSON *item = cJSON_GetArrayItem(root, i);
if(!item) { if(!item) {
ret.retCode = -2; ret.retCode = SET_CONF_RET_ERR_INNER;
strcpy(ret.retMsg, "inner error"); strcpy(ret.retMsg, "inner error");
return ret; return ret;
} }
if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){ if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){
ret.retCode = -1; ret.retCode = SET_CONF_RET_ERR_PART;
if (strlen(ret.retMsg) == 0){ if (strlen(ret.retMsg) == 0){
snprintf(ret.retMsg, 1024, "part error|%s", item->string); snprintf(ret.retMsg, RET_MSG_LENGTH - 1, "part error|%s", item->string);
}else{ }else{
char tmp[1000] = {0}; int leftSize = RET_MSG_LENGTH - 1 - strlen(ret.retMsg);
strncpy(tmp, ret.retMsg, 1000); leftSize = leftSize >= 0 ? leftSize : 0;
snprintf(ret.retMsg, 1024, "%s|%s", tmp, item->string); strncat(ret.retMsg, "|", leftSize);
leftSize = RET_MSG_LENGTH - 1 - strlen(ret.retMsg);
leftSize = leftSize >= 0 ? leftSize : 0;
strncat(ret.retMsg, item->string, leftSize);
} }
} }
} }
cJSON_Delete(root);
setConfFlag = true; setConfFlag = true;
return ret; return ret;
} }
......
...@@ -62,3 +62,10 @@ TEST(testCase, set_config_test5) { ...@@ -62,3 +62,10 @@ TEST(testCase, set_config_test5) {
ASSERT_EQ(ret.retCode, -3); ASSERT_EQ(ret.retCode, -3);
printf("msg:%d->%s", ret.retCode, ret.retMsg); printf("msg:%d->%s", ret.retCode, ret.retMsg);
} }
TEST(testCase, set_config_test6) {
const char *config = "{\"numOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitThreadsnumOfCoitT3333dd\":\"10\", \"esdfa\":\"10\"}";
setConfRet ret = taos_set_config(config);
ASSERT_EQ(ret.retCode, -1);
printf("msg:%d->%s", ret.retCode, ret.retMsg);
}
...@@ -62,9 +62,20 @@ typedef struct taosField { ...@@ -62,9 +62,20 @@ typedef struct taosField {
int16_t bytes; int16_t bytes;
} TAOS_FIELD; } TAOS_FIELD;
typedef enum {
SET_CONF_RET_SUCC = 0,
SET_CONF_RET_ERR_PART = -1,
SET_CONF_RET_ERR_INNER = -2,
SET_CONF_RET_ERR_JSON_INVALID = -3,
SET_CONF_RET_ERR_JSON_PARSE = -4,
SET_CONF_RET_ERR_ONLY_ONCE = -5,
SET_CONF_RET_ERR_TOO_LONG = -6
} SET_CONF_RET_CODE;
#define RET_MSG_LENGTH 1024
typedef struct setConfRet { typedef struct setConfRet {
char retMsg[1024]; SET_CONF_RET_CODE retCode;
int8_t retCode; char retMsg[RET_MSG_LENGTH];
} setConfRet; } setConfRet;
#ifdef _TD_GO_DLL_ #ifdef _TD_GO_DLL_
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册