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

[TD-5992] modify return msg

上级 04a0fb05
...@@ -439,30 +439,49 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) { ...@@ -439,30 +439,49 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) {
} }
#include "cJSON.h" #include "cJSON.h"
static int taos_set_config_imp(const char *config){ static setConfRet taos_set_config_imp(const char *config){
setConfRet ret = {0};
static bool setConfFlag = false; static bool setConfFlag = false;
if (setConfFlag) { if (setConfFlag) {
return 0; ret.retCode = -5;
strcpy(ret.retMsg, "configuration can only set once");
return ret;
} }
taosInitGlobalCfg(); taosInitGlobalCfg();
cJSON *root = cJSON_Parse(config); cJSON *root = cJSON_Parse(config);
if (root == NULL || !cJSON_IsObject(root) || cJSON_GetArraySize(root) == 0) { if (root == NULL){
return -1; ret.retCode = -4;
strcpy(ret.retMsg, "parse json error");
return ret;
}
if(!cJSON_IsObject(root) || cJSON_GetArraySize(root) == 0) {
ret.retCode = -3;
strcpy(ret.retMsg, "json content is invalid, must be not empty object");
return ret;
} }
int ret = 0;
int size = cJSON_GetArraySize(root); int size = cJSON_GetArraySize(root);
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 && !taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){ if(!item) {
ret = -2; ret.retCode = -2;
strcpy(ret.retMsg, "inner error");
return ret;
}
if(!taosReadConfigOption(item->string, item->valuestring, NULL, NULL, TAOS_CFG_CSTATUS_OPTION, TSDB_CFG_CTYPE_B_CLIENT)){
ret.retCode = -1;
if (strlen(ret.retMsg) == 0){
sprintf(ret.retMsg, "part error|%s", item->string);
}else{
sprintf(ret.retMsg, "%s|%s", ret.retMsg, item->string);
}
} }
} }
setConfFlag = true; setConfFlag = true;
return ret; return ret;
} }
int taos_set_config(const char *config){ setConfRet taos_set_config(const char *config){
static int32_t lock = 0; static int32_t lock = 0;
for (int i = 1; atomic_val_compare_exchange_32(&lock, 0, 1) != 0; ++i) { for (int i = 1; atomic_val_compare_exchange_32(&lock, 0, 1) != 0; ++i) {
...@@ -471,7 +490,7 @@ int taos_set_config(const char *config){ ...@@ -471,7 +490,7 @@ int taos_set_config(const char *config){
sched_yield(); sched_yield();
} }
} }
int ret = taos_set_config_imp(config); setConfRet ret = taos_set_config_imp(config);
atomic_store_32(&lock, 0); atomic_store_32(&lock, 0);
return ret; return ret;
} }
...@@ -8,10 +8,14 @@ ...@@ -8,10 +8,14 @@
/* test set config function */ /* test set config function */
TEST(testCase, set_config_test1) { TEST(testCase, set_config_test1) {
const char *config = "{\"debugFlag\":\"131\"}"; const char *config = "{\"debugFlag\":\"131\"}";
taos_set_config(config); setConfRet ret = taos_set_config(config);
ASSERT_EQ(ret.retCode, 0);
printf("msg:%d->%s", ret.retCode, ret.retMsg);
const char *config2 = "{\"debugFlag\":\"199\"}"; const char *config2 = "{\"debugFlag\":\"199\"}";
taos_set_config(config2); // not take effect ret = taos_set_config(config2); // not take effect
ASSERT_EQ(ret.retCode, -5)
printf("msg:%d->%s", ret.retCode, ret.retMsg);
bool readResult = taosReadGlobalCfg(); // load file config, debugFlag not take effect bool readResult = taosReadGlobalCfg(); // load file config, debugFlag not take effect
ASSERT_TRUE(readResult); ASSERT_TRUE(readResult);
...@@ -37,3 +41,24 @@ TEST(testCase, set_config_test2) { ...@@ -37,3 +41,24 @@ TEST(testCase, set_config_test2) {
int32_t result = *(int32_t*)cfg->ptr; int32_t result = *(int32_t*)cfg->ptr;
ASSERT_NE(result, 10); // numOfCommitThreads not type of TSDB_CFG_CTYPE_B_CLIENT ASSERT_NE(result, 10); // numOfCommitThreads not type of TSDB_CFG_CTYPE_B_CLIENT
} }
TEST(testCase, set_config_test3) {
const char *config = "{\"numOfCoitThreads\":\"10\", \"esdfa\":\"10\"}";
setConfRet ret = taos_set_config(config);
ASSERT_EQ(ret.retCode, -1);
printf("msg:%d->%s", ret.retCode, ret.retMsg);
}
TEST(testCase, set_config_test4) {
const char *config = "{null}";
setConfRet ret = taos_set_config(config);
ASSERT_EQ(ret.retCode, -4);
printf("msg:%d->%s", ret.retCode, ret.retMsg);
}
TEST(testCase, set_config_test5) {
const char *config = "ddd";
setConfRet ret = taos_set_config(config);
ASSERT_EQ(ret.retCode, -3);
printf("msg:%d->%s", ret.retCode, ret.retMsg);
}
...@@ -62,6 +62,11 @@ typedef struct taosField { ...@@ -62,6 +62,11 @@ typedef struct taosField {
int16_t bytes; int16_t bytes;
} TAOS_FIELD; } TAOS_FIELD;
typedef struct setConfRet {
char retMsg[1024];
int8_t retCode;
} setConfRet;
#ifdef _TD_GO_DLL_ #ifdef _TD_GO_DLL_
#define DLL_EXPORT __declspec(dllexport) #define DLL_EXPORT __declspec(dllexport)
#else #else
...@@ -71,7 +76,7 @@ typedef struct taosField { ...@@ -71,7 +76,7 @@ typedef struct taosField {
DLL_EXPORT int taos_init(); DLL_EXPORT int taos_init();
DLL_EXPORT void taos_cleanup(void); DLL_EXPORT void taos_cleanup(void);
DLL_EXPORT int taos_options(TSDB_OPTION option, const void *arg, ...); DLL_EXPORT int taos_options(TSDB_OPTION option, const void *arg, ...);
DLL_EXPORT int taos_set_config(const char *config); DLL_EXPORT setConfRet taos_set_config(const char *config);
DLL_EXPORT TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port); DLL_EXPORT TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port);
DLL_EXPORT TAOS *taos_connect_auth(const char *ip, const char *user, const char *auth, const char *db, uint16_t port); DLL_EXPORT TAOS *taos_connect_auth(const char *ip, const char *user, const char *auth, const char *db, uint16_t port);
DLL_EXPORT void taos_close(TAOS *taos); DLL_EXPORT void taos_close(TAOS *taos);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册