diff --git a/Jenkinsfile b/Jenkinsfile
index fc1a408755a341f69923ac8a1a9499148c79b17c..8952e493dbdc68fdf17e03b29604dfde3cc6ee62 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -31,7 +31,6 @@ def abort_previous(){
if (buildNumber > 1) milestone(buildNumber - 1)
milestone(buildNumber)
}
-def kipstage=0
def pre_test(){
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh '''
@@ -46,7 +45,7 @@ def pre_test(){
git pull
git fetch origin +refs/pull/${CHANGE_ID}/merge
git checkout -qf FETCH_HEAD
- git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD develop)|grep -v -E '.*md|.*src/connector|Jenkinsfile' || exit 0
+ git --no-pager diff --name-only FETCH_HEAD $(git merge-base FETCH_HEAD develop)|grep -v -E '.*md|//src//connector|Jenkinsfile' || exit 0
cd ${WK}
git reset --hard HEAD~10
git checkout develop
@@ -73,29 +72,12 @@ pipeline {
}
stages {
- stage('pre_build'){
- agent{label 'master'}
- steps {
- sh'''
- cd ${WORKSPACE}
- git checkout develop
- git pull
- git fetch origin +refs/pull/${CHANGE_ID}/merge
- git checkout -qf FETCH_HEAD
- '''
- script{
- skipstage=sh(script:"git --no-pager diff --name-only FETCH_HEAD develop|grep -v -E '.*md|//src//connector|Jenkinsfile|test-all.sh' || echo 1 ",returnStdout:true)
- }
- }
- }
+
stage('Parallel test stage') {
//only build pr
when {
changeRequest()
- expression {
- skipstage == 0
- }
}
parallel {
stage('python_1_s1') {
@@ -145,7 +127,7 @@ pipeline {
stage('test_b1_s2') {
agent{label 'b1'}
steps {
- timeout(time: 45, unit: 'MINUTES'){
+ timeout(time: 90, unit: 'MINUTES'){
pre_test()
sh '''
cd ${WKC}/tests
@@ -283,7 +265,7 @@ pipeline {
构建结果: Successful
构建编号:${BUILD_NUMBER}
触发用户:${env.CHANGE_AUTHOR}
- 提交信息:${CHANGE_TITLE}
+ 提交信息:${env.CHANGE_TITLE}
构建地址:${BUILD_URL}
构建日志:${BUILD_URL}console
@@ -321,7 +303,7 @@ pipeline {
构建结果: Successful
构建编号:${BUILD_NUMBER}
触发用户:${env.CHANGE_AUTHOR}
- 提交信息:${CHANGE_TITLE}
+ 提交信息:${env.CHANGE_TITLE}
构建地址:${BUILD_URL}
构建日志:${BUILD_URL}console
diff --git a/cmake/version.inc b/cmake/version.inc
index f9927bf1c61c62dd27123e1c6aec158c4d1c09cf..07356bb2161bde20a2e6e0c9588a15cf2fb11b10 100755
--- a/cmake/version.inc
+++ b/cmake/version.inc
@@ -13,28 +13,40 @@ ELSE ()
SET(TD_VER_COMPATIBLE "2.0.0.0")
ENDIF ()
+find_program(HAVE_GIT NAMES git)
+
IF (DEFINED GITINFO)
SET(TD_VER_GIT ${GITINFO})
+ELSEIF (HAVE_GIT)
+ execute_process(COMMAND git log -1 --format=%H WORKING_DIRECTORY ${TD_COMMUNITY_DIR} OUTPUT_VARIABLE GIT_COMMITID)
+ message(STATUS "git log result:${GIT_COMMITID}")
+ IF (GIT_COMMITID)
+ string (REGEX REPLACE "[\n\t\r]" "" GIT_COMMITID ${GIT_COMMITID})
+ SET(TD_VER_GIT ${GIT_COMMITID})
+ ELSE ()
+ message(STATUS "not a git repository")
+ SET(TD_VER_GIT "no git commit id")
+ ENDIF ()
ELSE ()
- execute_process(
- COMMAND git log -1 --format=%H
- WORKING_DIRECTORY ${TD_COMMUNITY_DIR}
- OUTPUT_VARIABLE GIT_COMMITID
- )
- string (REGEX REPLACE "[\n\t\r]" "" GIT_COMMITID ${GIT_COMMITID})
- SET(TD_VER_GIT ${GIT_COMMITID})
+ message(STATUS "no git cmd")
+ SET(TD_VER_GIT "no git commit id")
ENDIF ()
IF (DEFINED GITINFOI)
SET(TD_VER_GIT_INTERNAL ${GITINFOI})
+ELSEIF (HAVE_GIT)
+ execute_process(COMMAND git log -1 --format=%H WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMITID)
+ message(STATUS "git log result:${GIT_COMMITID}")
+ IF (GIT_COMMITID)
+ string (REGEX REPLACE "[\n\t\r]" "" GIT_COMMITID ${GIT_COMMITID})
+ SET(TD_VER_GIT_INTERNAL ${GIT_COMMITID})
+ ELSE ()
+ message(STATUS "not a git repository")
+ SET(TD_VER_GIT "no git commit id")
+ ENDIF ()
ELSE ()
- execute_process(
- COMMAND git log -1 --format=%H
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE GIT_COMMITID
- )
- string (REGEX REPLACE "[\n\t\r]" "" GIT_COMMITID ${GIT_COMMITID})
- SET(TD_VER_GIT_INTERNAL ${GIT_COMMITID})
+ message(STATUS "no git cmd")
+ SET(TD_VER_GIT_INTERNAL "no git commit id")
ENDIF ()
IF (DEFINED VERDATE)
diff --git a/src/client/src/tscLocal.c b/src/client/src/tscLocal.c
index bb015bce3d1a8ea9d92f3915d1edccd7f31539a3..820572859e88540656b8ce42dc3a6e77467c1423 100644
--- a/src/client/src/tscLocal.c
+++ b/src/client/src/tscLocal.c
@@ -892,7 +892,12 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
SSqlRes *pRes = &pSql->res;
if (pCmd->command == TSDB_SQL_CFG_LOCAL) {
- pRes->code = (uint8_t)taosCfgDynamicOptions(pCmd->payload);
+ if (taosCfgDynamicOptions(pCmd->payload)) {
+ pRes->code = TSDB_CODE_SUCCESS;
+ } else {
+ pRes->code = TSDB_CODE_COM_INVALID_CFG_MSG;
+ }
+ pRes->numOfRows = 0;
} else if (pCmd->command == TSDB_SQL_DESCRIBE_TABLE) {
pRes->code = (uint8_t)tscProcessDescribeTable(pSql);
} else if (pCmd->command == TSDB_SQL_RETRIEVE_EMPTY_RESULT) {
diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c
index 9e8c6bb163927231bea438e0e86fb09a6f642e10..3b248a6281f7049076705be624139d2f8e34bbd9 100644
--- a/src/client/src/tscSQLParser.c
+++ b/src/client/src/tscSQLParser.c
@@ -129,6 +129,7 @@ static int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo);
static int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo);
static int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index);
static int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSQLExpr* pSqlExpr, SQueryInfo* pQueryInfo, SArray* pCols, int64_t *uid);
+static bool validateDebugFlag(int32_t flag);
int16_t getNewResColId(SQueryInfo* pQueryInfo) {
return pQueryInfo->resColumnId--;
@@ -173,6 +174,16 @@ static uint8_t convertOptr(SStrToken *pToken) {
}
}
+static bool validateDebugFlag(int32_t v) {
+ const static int validFlag[] = {131, 135, 143};
+
+ for (int i = 0; i < tListLen(validFlag); i++) {
+ if (v == validFlag[i]) {
+ return true;
+ }
+ }
+ return false;
+}
/*
* Used during parsing query sql. Since the query sql usually small in length, error position
* is not needed in the final error message.
@@ -565,16 +576,16 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
int32_t numOfToken = (int32_t) taosArrayGetSize(pMiscInfo->a);
- SStrToken* t = taosArrayGet(pMiscInfo->a, 0);
- SStrToken* t1 = taosArrayGet(pMiscInfo->a, 1);
+ assert(numOfToken >= 1 && numOfToken <= 2);
+ SStrToken* t = taosArrayGet(pMiscInfo->a, 0);
strncpy(pCmd->payload, t->z, t->n);
if (numOfToken == 2) {
+ SStrToken* t1 = taosArrayGet(pMiscInfo->a, 1);
pCmd->payload[t->n] = ' '; // add sep
strncpy(&pCmd->payload[t->n + 1], t1->z, t1->n);
- }
-
- break;
+ }
+ return TSDB_CODE_SUCCESS;
}
case TSDB_SQL_CREATE_TABLE: {
@@ -5357,13 +5368,15 @@ int32_t validateLocalConfig(SMiscInfo* pOptions) {
SDNodeDynConfOption LOCAL_DYNAMIC_CFG_OPTIONS[6] = {{"resetLog", 8}, {"rpcDebugFlag", 12}, {"tmrDebugFlag", 12},
{"cDebugFlag", 10}, {"uDebugFlag", 10}, {"debugFlag", 9}};
+
SStrToken* pOptionToken = taosArrayGet(pOptions->a, 0);
if (numOfToken == 1) {
// reset log does not need value
for (int32_t i = 0; i < 1; ++i) {
SDNodeDynConfOption* pOption = &LOCAL_DYNAMIC_CFG_OPTIONS[i];
- if ((strncasecmp(pOption->name, pOptionToken->z, pOptionToken->n) == 0) && (pOption->len == pOptionToken->n)) {
+ if ((pOption->len == pOptionToken->n) &&
+ (strncasecmp(pOption->name, pOptionToken->z, pOptionToken->n) == 0)) {
return TSDB_CODE_SUCCESS;
}
}
@@ -5371,15 +5384,14 @@ int32_t validateLocalConfig(SMiscInfo* pOptions) {
SStrToken* pValToken = taosArrayGet(pOptions->a, 1);
int32_t val = strtol(pValToken->z, NULL, 10);
- if (val < 131 || val > 199) {
- // options value is out of valid range
+ if (!validateDebugFlag(val)) {
return TSDB_CODE_TSC_INVALID_SQL;
}
for (int32_t i = 1; i < tListLen(LOCAL_DYNAMIC_CFG_OPTIONS); ++i) {
SDNodeDynConfOption* pOption = &LOCAL_DYNAMIC_CFG_OPTIONS[i];
- if ((strncasecmp(pOption->name, pOptionToken->z, pOptionToken->n) == 0) && (pOption->len == pOptionToken->n)) {
- // options is valid
+ if ((pOption->len == pOptionToken->n)
+ && (strncasecmp(pOption->name, pOptionToken->z, pOptionToken->n) == 0)) {
return TSDB_CODE_SUCCESS;
}
}
diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c
index 3d88cf83127672f8f5780da695e24cee4850c035..fb6d7459318174bc864b8d0cc813df3d3e65dc00 100644
--- a/src/common/src/tglobal.c
+++ b/src/common/src/tglobal.c
@@ -273,7 +273,7 @@ bool taosCfgDynamicOptions(char *msg) {
int32_t vint = 0;
paGetToken(msg, &option, &olen);
- if (olen == 0) return TSDB_CODE_COM_INVALID_CFG_MSG;
+ if (olen == 0) return false;;
paGetToken(option + olen + 1, &value, &vlen);
if (vlen == 0)
@@ -316,11 +316,9 @@ bool taosCfgDynamicOptions(char *msg) {
}
return true;
}
-
if (strncasecmp(cfg->option, "debugFlag", olen) == 0) {
- taosSetAllDebugFlag();
+ taosSetAllDebugFlag();
}
-
return true;
}
diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c
index 4d8c64d8b319072c857ac800fdc5672c3b05214c..abcadd64b10e21fb6fe14767d374bfacbf744101 100644
--- a/src/kit/taosdemo/taosdemo.c
+++ b/src/kit/taosdemo/taosdemo.c
@@ -67,6 +67,7 @@ typedef struct DemoArguments {
char * sqlFile;
bool use_metric;
bool insert_only;
+ bool answer_yes;
char * output_file;
int mode;
char * datatype[MAX_NUM_DATATYPE + 1];
@@ -114,6 +115,7 @@ typedef struct DemoArguments {
{0, 'c', "config_directory", 0, "Configuration directory. Default is '/etc/taos/'.", 14},
#endif
{0, 'x', 0, 0, "Insert only flag.", 13},
+ {0, 'y', 0, 0, "Default input yes for prompt", 13},
{0, 'O', "order", 0, "Insert mode--0: In order, 1: Out of order. Default is in order.", 14},
{0, 'R', "rate", 0, "Out of order data's rate--if order=1 Default 10, min: 0, max: 50.", 14},
{0, 'D', "delete table", 0, "Delete data methods——0: don't delete, 1: delete by table, 2: delete by stable, 3: delete by database", 14},
@@ -210,6 +212,9 @@ typedef struct DemoArguments {
case 'x':
arguments->insert_only = true;
break;
+ case 'y':
+ arguments->answer_yes = true;
+ break;
case 'c':
if (wordexp(arg, &full_path, 0) != 0) {
fprintf(stderr, "Invalid path %s\n", arg);
@@ -328,6 +333,8 @@ typedef struct DemoArguments {
#endif
printf("%s%s\n", indent, "-x");
printf("%s%s%s\n", indent, indent, "flag, Insert only flag.");
+ printf("%s%s\n", indent, "-y");
+ printf("%s%s%s\n", indent, indent, "flag, Anser Yes for prompt.");
printf("%s%s\n", indent, "-O");
printf("%s%s%s\n", indent, indent, "order, Insert mode--0: In order, 1: Out of order. Default is in order.");
printf("%s%s\n", indent, "-R");
@@ -409,6 +416,8 @@ typedef struct DemoArguments {
arguments->use_metric = true;
} else if (strcmp(argv[i], "-x") == 0) {
arguments->insert_only = true;
+ } else if (strcmp(argv[i], "-y") == 0) {
+ arguments->answer_yes = true;
} else if (strcmp(argv[i], "-c") == 0) {
strcpy(configDir, argv[++i]);
} else if (strcmp(argv[i], "-O") == 0) {
@@ -549,6 +558,7 @@ int main(int argc, char *argv[]) {
NULL,
false, // use_metric
false, // insert_only
+ false, // answer_yes
"./output.txt", // output_file
0, // mode
{
@@ -584,6 +594,7 @@ int main(int argc, char *argv[]) {
arguments.num_of_RPR = 1000;
arguments.use_metric = true;
arguments.insert_only = false;
+ arguments.answer_yes = false;
// end change
parse_args(argc, argv, &arguments);
@@ -606,6 +617,7 @@ int main(int argc, char *argv[]) {
int nrecords_per_request = arguments.num_of_RPR;
bool use_metric = arguments.use_metric;
bool insert_only = arguments.insert_only;
+ bool answer_yes = arguments.answer_yes;
char **data_type = arguments.datatype;
int count_data_type = 0;
char dataString[STRING_LEN];
@@ -666,9 +678,12 @@ int main(int argc, char *argv[]) {
printf("# Delete method: %d\n", method_of_delete);
printf("# Test time: %d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + 1,
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
- printf("###################################################################\n\n");
- printf("Press enter key to continue");
- (void)getchar();
+
+ if (!answer_yes) {
+ printf("###################################################################\n\n");
+ printf("Press enter key to continue");
+ (void)getchar();
+ }
fprintf(fp, "###################################################################\n");
fprintf(fp, "# Server IP: %s:%hu\n", ip_addr == NULL ? "localhost" : ip_addr, port);
diff --git a/src/mnode/inc/mnodeDnode.h b/src/mnode/inc/mnodeDnode.h
index 56d7455ad24f76a0b289e8ad8882db1867d0bed9..fa1995254e9598614cebfef57221b3ff4238b6f1 100644
--- a/src/mnode/inc/mnodeDnode.h
+++ b/src/mnode/inc/mnodeDnode.h
@@ -67,6 +67,7 @@ void mnodeCleanupDnodes();
int32_t mnodeGetDnodesNum();
int32_t mnodeGetOnlinDnodesCpuCoreNum();
int32_t mnodeGetOnlineDnodesNum();
+void mnodeGetOnlineAndTotalDnodesNum(int32_t *onlineNum, int32_t *totalNum);
void * mnodeGetNextDnode(void *pIter, SDnodeObj **pDnode);
void mnodeCancelGetNextDnode(void *pIter);
void mnodeIncDnodeRef(SDnodeObj *pDnode);
diff --git a/src/mnode/src/mnodeDnode.c b/src/mnode/src/mnodeDnode.c
index d76ecd9ba00307d8031144a3dab8480a35d1b25f..304096f3ae6178bdb5b7ce0620d81cf29bef11d0 100644
--- a/src/mnode/src/mnodeDnode.c
+++ b/src/mnode/src/mnodeDnode.c
@@ -263,6 +263,28 @@ int32_t mnodeGetOnlineDnodesNum() {
return onlineDnodes;
}
+void mnodeGetOnlineAndTotalDnodesNum(int32_t *onlineNum, int32_t *totalNum) {
+ SDnodeObj *pDnode = NULL;
+ void * pIter = NULL;
+ int32_t onlineDnodes = 0, totalDnodes = 0;
+
+ while (1) {
+ pIter = mnodeGetNextDnode(pIter, &pDnode);
+ if (pDnode == NULL) break;
+ if (pDnode->status != TAOS_DN_STATUS_OFFLINE) ++onlineDnodes;
+ ++totalDnodes;
+ mnodeDecDnodeRef(pDnode);
+ }
+
+ if (onlineNum) {
+ *onlineNum = onlineDnodes;
+ }
+
+ if (totalNum) {
+ *totalNum = totalDnodes;
+ }
+}
+
void *mnodeGetDnode(int32_t dnodeId) {
return sdbGetRow(tsDnodeSdb, &dnodeId);
}
diff --git a/src/mnode/src/mnodeShow.c b/src/mnode/src/mnodeShow.c
index 0377df97fd0d53731eb552aa2871d35d85af91c5..4ff2a38dffcb2186f73e2254efeaa6419c68d50b 100644
--- a/src/mnode/src/mnodeShow.c
+++ b/src/mnode/src/mnodeShow.c
@@ -280,8 +280,11 @@ static int32_t mnodeProcessHeartBeatMsg(SMnodeMsg *pMsg) {
}
}
- pRsp->onlineDnodes = htonl(mnodeGetOnlineDnodesNum());
- pRsp->totalDnodes = htonl(mnodeGetDnodesNum());
+ int32_t onlineDnodes = 0, totalDnodes = 0;
+ mnodeGetOnlineAndTotalDnodesNum(&onlineDnodes, &totalDnodes);
+
+ pRsp->onlineDnodes = htonl(onlineDnodes);
+ pRsp->totalDnodes = htonl(totalDnodes);
mnodeGetMnodeEpSetForShell(&pRsp->epSet, false);
pMsg->rpcRsp.rsp = pRsp;
diff --git a/src/os/src/darwin/darwinEnv.c b/src/os/src/darwin/darwinEnv.c
index 83344df22104ccd4e691494089d7364ae647d719..8ac97eacfbc53eb67fa141f8bdddc79d8a65777c 100644
--- a/src/os/src/darwin/darwinEnv.c
+++ b/src/os/src/darwin/darwinEnv.c
@@ -29,17 +29,15 @@ static const char* expand_like_shell(const char *path) {
void osInit() {
if (configDir[0] == 0) {
- strcpy(configDir, expand_like_shell("~/TDengine/cfg"));
+ strcpy(configDir, expand_like_shell("/usr/local/etc/taos"));
}
+ strcpy(tsDataDir, expand_like_shell("/usr/local/var/lib/taos"));
+ strcpy(tsLogDir, expand_like_shell("/usr/local/var/log/taos"));
+ strcpy(tsScriptDir, expand_like_shell("/usr/local/etc/taos"));
strcpy(tsVnodeDir, "");
strcpy(tsDnodeDir, "");
strcpy(tsMnodeDir, "");
-
- strcpy(tsDataDir, expand_like_shell("~/TDengine/data"));
- strcpy(tsLogDir, expand_like_shell("~/TDengine/log"));
- strcpy(tsScriptDir, expand_like_shell("~/TDengine/cfg"));
-
strcpy(tsOsName, "Darwin");
}
diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c
index 0e78289111fd3feecf760ec02b19fd0f1b8ef0f2..9b6d2b779199d0629e66242ab17b95416e6c9a73 100644
--- a/src/query/src/qExecutor.c
+++ b/src/query/src/qExecutor.c
@@ -4571,7 +4571,7 @@ static void generateBlockDistResult(STableBlockDist *pTableBlockDist) {
if (pTableBlockDist == NULL) {
return;
}
- int64_t min = INT64_MAX, max = INT64_MIN, avg = 0;
+ int64_t min = 0, max = 0, avg = 0;
SArray* blockInfos= pTableBlockDist->dataBlockInfos;
int64_t totalRows = 0, totalBlocks = taosArrayGetSize(blockInfos);
for (size_t i = 0; i < taosArrayGetSize(blockInfos); i++) {