diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 1e23094ca8d6763639f36c4322ccf1773b885d93..ebcdddffdee3f4be6e70048c2d0e170a9c38e1f2 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -487,7 +487,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0); code = tscGetTableMeta(pSql, pTableMetaInfo); assert(code == TSDB_CODE_SUCCESS && pTableMetaInfo->pTableMeta != NULL); - (*pSql->fp)(pSql->param, NULL, code); + (*pSql->fp)(pSql->param, pSql, code); return; } diff --git a/src/client/src/tscPrepare.c b/src/client/src/tscPrepare.c index d66e40b20f972b62cbbbb10985443a4aac6b416f..0068b23334c895d2ccb1b37aeda0712e8b29d9c9 100644 --- a/src/client/src/tscPrepare.c +++ b/src/client/src/tscPrepare.c @@ -494,7 +494,7 @@ TAOS_STMT* taos_stmt_init(TAOS* taos) { tsem_init(&pSql->rspSem, 0, 0); pSql->signature = pSql; pSql->pTscObj = pObj; - pSql->pTscObj->pSql = pSql; + //pSql->pTscObj->pSql = pSql; pSql->maxRetry = TSDB_MAX_REPLICA_NUM; pStmt->pSql = pSql; @@ -515,7 +515,7 @@ int taos_stmt_prepare(TAOS_STMT* stmt, const char* sql, unsigned long length) { //doAsyncQuery(pObj, pSql, waitForQueryRsp, taos, sqlstr, sqlLen); SSqlCmd *pCmd = &pSql->cmd; SSqlRes *pRes = &pSql->res; - pSql->param = (void*)pStmt->taos; + pSql->param = (void*)pSql; pSql->fp = waitForQueryRsp; pSql->insertType = TSDB_QUERY_TYPE_STMT_INSERT; @@ -613,7 +613,12 @@ int taos_stmt_execute(TAOS_STMT* stmt) { } else { tfree(pStmt->pSql->sqlstr); pStmt->pSql->sqlstr = sql; - ret = taos_query(pStmt->taos, pStmt->pSql->sqlstr); + SSqlObj* pSql = taos_query((TAOS*)pStmt->taos, pStmt->pSql->sqlstr); + if (pSql != NULL) { + ret = pSql->res.code; + } else { + ret = terrno; + } } } return ret; diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index 2421dc48db9e143993b7461fd8eda585fb40f4b2..5ff417f7d52ba9980f2c0675d0dd6cb937c96ec2 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -256,13 +256,7 @@ int taos_query_imp(STscObj *pObj, SSqlObj *pSql) { } void waitForQueryRsp(void *param, TAOS_RES *tres, int code) { - assert(param != NULL); - SSqlObj *pSql = ((STscObj *)param)->pSql; - - // valid error code is less than 0 - if (code < 0) { - pSql->res.code = code; - } + assert(tres != NULL); SSqlObj *pSql = (SSqlObj *) tres; sem_post(&pSql->rspSem); diff --git a/src/dnode/src/dnodeMain.c b/src/dnode/src/dnodeMain.c index 69400816295a155de26f6f0175180931096471aa..5e81d77489fa8a49e1593c663c88d2eaa053cfb0 100644 --- a/src/dnode/src/dnodeMain.c +++ b/src/dnode/src/dnodeMain.c @@ -38,6 +38,7 @@ static void dnodeCheckDataDirOpenned(char *dir); static SDnodeRunStatus tsDnodeRunStatus = TSDB_DNODE_RUN_STATUS_STOPPED; static int32_t dnodeInitComponents(); static void dnodeCleanupComponents(int32_t stepId); +static int dnodeCreateDir(const char *dir); typedef struct { const char *const name; @@ -59,6 +60,16 @@ static const SDnodeComponent SDnodeComponents[] = { {"shell", dnodeInitShell, dnodeCleanupShell} }; +static int dnodeCreateDir(const char *dir) { + struct stat dirstat; + if (stat(dir, &dirstat) < 0) { + if (mkdir(dir, 0755) != 0 && errno != EEXIST) { + return -1; + } + } + return 0; +} + static void dnodeCleanupComponents(int32_t stepId) { for (int32_t i = stepId; i >= 0; i--) { SDnodeComponents[i].cleanup(); @@ -87,9 +98,9 @@ int32_t dnodeInitSystem() { taosSetCoreDump(); signal(SIGPIPE, SIG_IGN); - struct stat dirstat; - if (stat(tsLogDir, &dirstat) < 0) { - mkdir(tsLogDir, 0755); + if (dnodeCreateDir(tsLogDir) < 0) { + printf("failed to create dir: %s, reason: %s\n", tsLogDir, strerror(errno)); + return -1; } char temp[TSDB_FILENAME_LEN]; @@ -140,7 +151,11 @@ static void dnodeCheckDataDirOpenned(char *dir) { char filepath[256] = {0}; sprintf(filepath, "%s/.running", dir); - int32_t fd = open(filepath, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU | S_IRWXG | S_IRWXO); + int fd = open(filepath, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU | S_IRWXG | S_IRWXO); + if (fd < 0) { + dError("failed to open lock file:%s, reason: %s, quit", filepath, strerror(errno)); + exit(0); + } int32_t ret = flock(fd, LOCK_EX | LOCK_NB); if (ret != 0) { dError("failed to lock file:%s ret:%d, database may be running, quit", filepath, ret); @@ -150,16 +165,28 @@ static void dnodeCheckDataDirOpenned(char *dir) { } static int32_t dnodeInitStorage() { - struct stat dirstat; - if (stat(tsDataDir, &dirstat) < 0) { - mkdir(tsDataDir, 0755); + if (dnodeCreateDir(tsDataDir) < 0) { + dError("failed to create dir: %s, reason: %s", tsDataDir, strerror(errno)); + return -1; } - sprintf(tsMnodeDir, "%s/mnode", tsDataDir); sprintf(tsVnodeDir, "%s/vnode", tsDataDir); sprintf(tsDnodeDir, "%s/dnode", tsDataDir); - mkdir(tsVnodeDir, 0755); - mkdir(tsDnodeDir, 0755); + + //TODO(dengyihao): no need to init here + if (dnodeCreateDir(tsMnodeDir) < 0) { + dError("failed to create dir: %s, reason: %s", tsMnodeDir, strerror(errno)); + return -1; + } + //TODO(dengyihao): no need to init here + if (dnodeCreateDir(tsVnodeDir) < 0) { + dError("failed to create dir: %s, reason: %s", tsVnodeDir, strerror(errno)); + return -1; + } + if (dnodeCreateDir(tsDnodeDir) < 0) { + dError("failed to create dir: %s, reason: %s", tsDnodeDir, strerror(errno)); + return -1; + } dnodeCheckDataDirOpenned(tsDnodeDir); diff --git a/tests/pytest/fulltest.sh b/tests/pytest/fulltest.sh index bf3523dc0f2a46f2895dbf90f92d0da505940615..99dc658d71b7524c1880deef5eb551f833c39a7d 100755 --- a/tests/pytest/fulltest.sh +++ b/tests/pytest/fulltest.sh @@ -131,6 +131,6 @@ python3 ./test.py -f user/pass_len.py #query python3 ./test.py -f query/filter.py -python3 ./test.py $1 -f query/filterCombo.py -python3 ./test.py $1 -f query/queryNormal.py -python3 ./test.py $1 -f query/queryError.py +python3 ./test.py -f query/filterCombo.py +python3 ./test.py -f query/queryNormal.py +python3 ./test.py -f query/queryError.py diff --git a/tests/test-all.sh b/tests/test-all.sh index 7bde4da67a9fa4eb5ac9dcea8071acff8228d39b..cd5444858ebf87246bca0849fe2cfeb522032d2b 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -1,5 +1,22 @@ #!/bin/bash +function runSimCaseOneByOne { + while read -r line; do + if [[ $line =~ ^run.* ]]; then + case=`echo $line | awk '{print $2}'` + ./test.sh -f $case 2>&1 | grep 'success\|failed\|fault' | grep -v 'default' | tee -a out.log + fi + done < $1 +} + +function runPyCaseOneByOne { + while read -r line; do + if [[ $line =~ ^python.* ]]; then + $line 2>&1 | grep 'successfully executed\|failed\|fault' | grep -v 'default'| tee -a pytest-out.log + fi + done < $1 +} + # Color setting RED='\033[0;31m' GREEN='\033[1;32m' @@ -9,10 +26,13 @@ NC='\033[0m' echo "### run TSIM script ###" cd script + +[ -f out.log ] && rm -f out.log + if [ "$1" == "cron" ]; then - ./test.sh -f fullGeneralSuite.sim 2>&1 | grep 'success\|failed\|fault' | grep -v 'default' | tee out.log + runSimCaseOneByOne fullGeneralSuite.sim else - ./test.sh -f basicSuite.sim 2>&1 | grep 'success\|failed\|fault' | grep -v 'default' | tee out.log + runSimCaseOneByOne basicSuite.sim fi totalSuccess=`grep 'success' out.log | wc -l` @@ -36,10 +56,12 @@ fi echo "### run Python script ###" cd ../pytest +[ -f pytest-out.log ] && rm -f pytest-out.log + if [ "$1" == "cron" ]; then - ./fulltest.sh 2>&1 | grep 'successfully executed\|failed\|fault' | grep -v 'default'| tee pytest-out.log + runPyCaseOneByOne fulltest.sh else - ./smoketest.sh 2>&1 | grep 'successfully executed\|failed\|fault' | grep -v 'default'| tee pytest-out.log + runPyCaseOneByOne smoketest.sh fi totalPySuccess=`grep 'successfully executed' pytest-out.log | wc -l`