diff --git a/docs/en/28-releases/01-tdengine.md b/docs/en/28-releases/01-tdengine.md index 8bfdf72cc7..32bdc21e7c 100644 --- a/docs/en/28-releases/01-tdengine.md +++ b/docs/en/28-releases/01-tdengine.md @@ -10,6 +10,10 @@ For TDengine 2.x installation packages by version, please visit [here](https://w import Release from "/components/ReleaseV3"; +## 3.0.1.8 + + + ## 3.0.1.7 diff --git a/docs/en/28-releases/02-tools.md b/docs/en/28-releases/02-tools.md index 2bc22a4450..7126b5a997 100644 --- a/docs/en/28-releases/02-tools.md +++ b/docs/en/28-releases/02-tools.md @@ -10,6 +10,10 @@ For other historical version installers, please visit [here](https://www.taosdat import Release from "/components/ReleaseV3"; +## 2.3.0 + + + ## 2.2.9 diff --git a/docs/zh/28-releases/01-tdengine.md b/docs/zh/28-releases/01-tdengine.md index fd2be899eb..7ed9e0c5a0 100644 --- a/docs/zh/28-releases/01-tdengine.md +++ b/docs/zh/28-releases/01-tdengine.md @@ -10,6 +10,11 @@ TDengine 2.x 各版本安装包请访问[这里](https://www.taosdata.com/all-do import Release from "/components/ReleaseV3"; +## 3.0.1.8 + + + + ## 3.0.1.7 diff --git a/docs/zh/28-releases/02-tools.md b/docs/zh/28-releases/02-tools.md index 3f73b53fab..67ca3fae67 100644 --- a/docs/zh/28-releases/02-tools.md +++ b/docs/zh/28-releases/02-tools.md @@ -10,6 +10,10 @@ taosTools 各版本安装包下载链接如下: import Release from "/components/ReleaseV3"; +## 2.3.0 + + + ## 2.2.9 diff --git a/include/os/osSemaphore.h b/include/os/osSemaphore.h index e52da96f01..5fc89d9d24 100644 --- a/include/os/osSemaphore.h +++ b/include/os/osSemaphore.h @@ -29,7 +29,7 @@ typedef dispatch_semaphore_t tsem_t; int tsem_init(tsem_t *sem, int pshared, unsigned int value); int tsem_wait(tsem_t *sem); -int tsem_timewait(tsem_t *sim, int64_t nanosecs); +int tsem_timewait(tsem_t *sim, int64_t milis); int tsem_post(tsem_t *sem); int tsem_destroy(tsem_t *sem); @@ -38,7 +38,7 @@ int tsem_destroy(tsem_t *sem); #define tsem_t sem_t #define tsem_init sem_init int tsem_wait(tsem_t *sem); -int tsem_timewait(tsem_t *sim, int64_t nanosecs); +int tsem_timewait(tsem_t *sim, int64_t milis); #define tsem_post sem_post #define tsem_destroy sem_destroy diff --git a/packaging/docker/DockerfileCloud b/packaging/docker/DockerfileCloud index 21e387bab3..fa8fcabf34 100644 --- a/packaging/docker/DockerfileCloud +++ b/packaging/docker/DockerfileCloud @@ -12,6 +12,7 @@ RUN apt install -y curl COPY ${pkgFile} /root/ ENV TINI_VERSION v0.19.0 +ENV TAOS_DISABLE_ADAPTER 1 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${cpuType} /tini ENV DEBIAN_FRONTEND=noninteractive WORKDIR /root/ @@ -26,4 +27,4 @@ COPY ./bin/* /usr/bin/ ENTRYPOINT ["/tini", "--", "/usr/bin/entrypoint.sh"] CMD ["bash", "-c", "/usr/bin/run.sh"] -VOLUME [ "/var/lib/taos", "/var/log/taos", "/corefile" ] +VOLUME [ "/var/lib/taos", "/var/log/taos" ] diff --git a/packaging/docker/run.sh b/packaging/docker/run.sh deleted file mode 100755 index 3654beadcb..0000000000 --- a/packaging/docker/run.sh +++ /dev/null @@ -1,205 +0,0 @@ -#!/bin/bash - -TAOS_RUN_TAOSBENCHMARK_TEST_ONCE=0 -#ADMIN_URL=${ADMIN_URL:-http://172.26.10.84:10001} -TAOSD_STARTUP_TIMEOUT_SECOND=${TAOSD_STARTUP_TIMEOUT_SECOND:-160} -TAOS_TIMEOUT_SECOND=${TAOS_TIMEOUT_SECOND:-5} -BACKUP_CORE_FOLDER=/var/log/corefile -ALERT_URL=app/system/alert/add - -echo "ADMIN_URL: ${ADMIN_URL}" -echo "TAOS_TIMEOUT_SECOND: ${TAOS_TIMEOUT_SECOND}" - -function set_service_state() { - #echo "set service state: $1, $2" - service_state="$1" - service_msg="$2" -} -set_service_state "init" "ok" -app_name=`hostname |cut -d\- -f1` - -function check_taosd() { - timeout $TAOS_TIMEOUT_SECOND taos -s "show databases;" >/dev/null - local ret=$? - if [ $ret -ne 0 ]; then - echo "`date` check taosd error $ret" - if [ "x$1" != "xignore" ]; then - set_service_state "error" "taos check failed $ret" - fi - else - set_service_state "ready" "ok" - fi -} -function post_error_msg() { - if [ ! -z "${ADMIN_URL}" ]; then - taos_version=`taos --version` - echo "app_name: ${app_name}" - echo "service_state: ${service_state}" - echo "`date` service_msg: ${service_msg}" - echo "${taos_version}" - curl --connect-timeout 10 --max-time 20 -X POST -H "Content-Type: application/json" \ - -d"{\"appName\":\"${app_name}\",\ - \"alertLevel\":\"${service_state}\",\ - \"taosVersion\":\"${taos_version}\",\ - \"alertMsg\":\"${service_msg}\"}" \ - ${ADMIN_URL}/${ALERT_URL} - fi -} -function check_taosd_exit_type() { - local core_pattern=`cat /proc/sys/kernel/core_pattern` - echo "$core_pattern" | grep -q "^/" - if [ $? -eq 0 ]; then - core_folder=`dirname $core_pattern` - core_prefix=`basename $core_pattern | sed "s/%.*//"` - else - core_folder=`pwd` - core_prefix="$core_pattern" - fi - local core_files=`ls $core_folder | grep "^${core_prefix}"` - if [ ! -z "$core_files" ]; then - # move core files to another folder - mkdir -p ${BACKUP_CORE_FOLDER} - cp ${core_folder}/${core_prefix}* ${BACKUP_CORE_FOLDER}/ - rm -f ${core_folder}/${core_prefix}* - set_service_state "error" "taosd exit with core file" - else - set_service_state "error" "taosd exit without core file" - fi -} -disk_usage_level=(60 80 99) -current_disk_level=0 -disk_state="ok" -disk_msg="ok" -get_usage_ok="yes" -function post_disk_error_msg() { - if [ ! -z "${ADMIN_URL}" ]; then - taos_version=`taos --version` - echo "app_name: ${app_name}" - echo "disk_state: ${disk_state}" - echo "`date` disk_msg: ${disk_msg}" - echo "${taos_version}" - curl --connect-timeout 10 --max-time 20 -X POST -H "Content-Type: application/json" \ - -d"{\"appName\":\"${app_name}\",\ - \"alertLevel\":\"${disk_state}\",\ - \"taosVersion\":\"${taos_version}\",\ - \"alertMsg\":\"${disk_msg}\"}" \ - ${ADMIN_URL}/${ALERT_URL} - fi -} -function check_disk() { - local folder=`cat /etc/taos/taos.cfg|grep -v "^#"|grep dataDir|awk '{print $NF}'` - if [ -z "$folder" ]; then - folder="/var/lib/taos" - fi - local mount_point="$folder" - local usage="" - while [ -z "$usage" ]; do - usage=`df -h|grep -w "${mount_point}"|awk '{print $5}'|grep -v Use|sed "s/%$//"` - if [ "x${mount_point}" = "x/" ]; then - break - fi - mount_point=`dirname ${mount_point}` - done - if [ -z "$usage" ]; then - disk_state="error" - disk_msg="cannot get disk usage" - if [ "$get_usage_ok" = "yes" ]; then - post_disk_error_msg - get_usage_ok="no" - fi - else - get_usage_ok="yes" - local current_level=0 - for level in ${disk_usage_level[*]}; do - if [ ${usage} -ge ${level} ]; then - disk_state="error" - disk_msg="disk usage over ${level}%" - current_level=${level} - fi - done - if [ ${current_level} -gt ${current_disk_level} ]; then - post_disk_error_msg - elif [ ${current_level} -lt ${current_disk_level} ]; then - echo "disk usage reduced from ${current_disk_level} to ${current_level}" - fi - current_disk_level=${current_level} - fi -} -function run_taosd() { - taosd - set_service_state "error" "taosd exit" - # post error msg - # check crash or OOM - check_taosd_exit_type - post_error_msg -} -function print_service_state_change() { - if [ "x$1" != "x${service_state}" ]; then - echo "`date` service state: ${service_state}, ${service_msg}" - fi -} -taosd_start_time=`date +%s` -while ((1)) -do - check_disk - # echo "outer loop: $a" - output=`timeout $TAOS_TIMEOUT_SECOND taos -k` - if [ -z "${output}" ]; then - echo "`date` taos -k error" - status="" - else - status=${output:0:1} - fi - # echo $output - # echo $status - if [ "$status"x = "0"x ] - then - # taosd_start_time=`date +%s` - run_taosd & - fi - # echo "$status"x "$TAOS_RUN_TAOSBENCHMARK_TEST"x "$TAOS_RUN_TAOSBENCHMARK_TEST_ONCE"x - if [ "$status"x = "2"x ] && [ "$TAOS_RUN_TAOSBENCHMARK_TEST"x = "1"x ] && [ "$TAOS_RUN_TAOSBENCHMARK_TEST_ONCE"x = "0"x ] - then - TAOS_RUN_TAOSBENCHMARK_TEST_ONCE=1 - # result=`taos -s "show databases;" | grep " test "` - # if [ "${result:0:5}"x != " test"x ] - # then - # taosBenchmark -y -t 1000 -n 1000 -S 900000 - # fi - taos -s "select stable_name from information_schema.ins_stables where db_name = 'test';"|grep -q -w meters - if [ $? -ne 0 ]; then - taosBenchmark -y -t 1000 -n 1000 -S 900000 - taos -s "create user admin_user pass 'NDS65R6t' sysinfo 0;" - taos -s "GRANT ALL on test.* to admin_user;" - fi - fi - # check taosd status - if [ "$service_state" = "ready" ]; then - # check taosd status - check_taosd - print_service_state_change "ready" - if [ "$service_state" = "error" ]; then - post_error_msg - fi - elif [ "$service_state" = "init" ]; then - check_taosd "ignore" - # check timeout - current_time=`date +%s` - time_elapsed=$(( current_time - taosd_start_time )) - if [ ${time_elapsed} -gt ${TAOSD_STARTUP_TIMEOUT_SECOND} ]; then - set_service_state "error" "taosd startup timeout" - post_error_msg - fi - print_service_state_change "init" - elif [ "$service_state" = "error" ]; then - # check taosd status - check_taosd - print_service_state_change "error" - fi - # check taosadapter - nc -z localhost 6041 - if [ $? -ne 0 ]; then - taosadapter & - fi - sleep 10 -done diff --git a/source/client/src/clientHb.c b/source/client/src/clientHb.c index 0f881beb66..6bdc835217 100644 --- a/source/client/src/clientHb.c +++ b/source/client/src/clientHb.c @@ -69,7 +69,8 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog } else { SDBVgInfo *vgInfo = taosMemoryCalloc(1, sizeof(SDBVgInfo)); if (NULL == vgInfo) { - return TSDB_CODE_TSC_OUT_OF_MEMORY; + code = TSDB_CODE_TSC_OUT_OF_MEMORY; + goto _return; } vgInfo->vgVersion = rsp->vgVersion; @@ -81,7 +82,8 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog if (NULL == vgInfo->vgHash) { taosMemoryFree(vgInfo); tscError("hash init[%d] failed", rsp->vgNum); - return TSDB_CODE_TSC_OUT_OF_MEMORY; + code = TSDB_CODE_TSC_OUT_OF_MEMORY; + goto _return; } for (int32_t j = 0; j < rsp->vgNum; ++j) { @@ -90,7 +92,8 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog tscError("hash push failed, errno:%d", errno); taosHashCleanup(vgInfo->vgHash); taosMemoryFree(vgInfo); - return TSDB_CODE_TSC_OUT_OF_MEMORY; + code = TSDB_CODE_TSC_OUT_OF_MEMORY; + goto _return; } } @@ -98,12 +101,14 @@ static int32_t hbProcessDBInfoRsp(void *value, int32_t valueLen, struct SCatalog } if (code) { - return code; + goto _return; } } +_return: + tFreeSUseDbBatchRsp(&batchUseRsp); - return TSDB_CODE_SUCCESS; + return code; } static int32_t hbProcessStbInfoRsp(void *value, int32_t valueLen, struct SCatalog *pCatalog) { diff --git a/source/client/src/clientMsgHandler.c b/source/client/src/clientMsgHandler.c index 5444617e49..c8edb8f285 100644 --- a/source/client/src/clientMsgHandler.c +++ b/source/client/src/clientMsgHandler.c @@ -21,6 +21,7 @@ #include "tdef.h" #include "tname.h" #include "tdatablock.h" +#include "systable.h" static void setErrno(SRequestObj* pRequest, int32_t code) { pRequest->code = code; @@ -327,6 +328,17 @@ int32_t processDropDbRsp(void* param, SDataBuf* pMsg, int32_t code) { int32_t code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); if (TSDB_CODE_SUCCESS == code) { catalogRemoveDB(pCatalog, dropdbRsp.db, dropdbRsp.uid); + STscObj* pTscObj = pRequest->pTscObj; + + SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter, + .requestId = pRequest->requestId, + .requestObjRefId = pRequest->self, + .mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp)}; + char dbFName[TSDB_DB_FNAME_LEN]; + snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_INFORMATION_SCHEMA_DB); + catalogRefreshDBVgInfo(pCatalog, &conn, dbFName); + snprintf(dbFName, sizeof(dbFName) - 1, "%d.%s", pTscObj->acctId, TSDB_PERFORMANCE_SCHEMA_DB); + catalogRefreshDBVgInfo(pCatalog, &conn, dbFName); } } diff --git a/source/client/src/clientStmt.c b/source/client/src/clientStmt.c index c5f49bce89..86c86d52ab 100644 --- a/source/client/src/clientStmt.c +++ b/source/client/src/clientStmt.c @@ -152,13 +152,13 @@ int32_t stmtRestoreQueryFields(STscStmt* pStmt) { return TSDB_CODE_SUCCESS; } -int32_t stmtUpdateBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags, char* tbFName, const char* sTableName) { +int32_t stmtUpdateBindInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags, char* tbFName, const char* sTableName, bool autoCreateTbl) { STscStmt* pStmt = (STscStmt*)stmt; strncpy(pStmt->bInfo.tbFName, tbFName, sizeof(pStmt->bInfo.tbFName) - 1); pStmt->bInfo.tbFName[sizeof(pStmt->bInfo.tbFName) - 1] = 0; - pStmt->bInfo.tbUid = pTableMeta->uid; + pStmt->bInfo.tbUid = autoCreateTbl ? 0 : pTableMeta->uid; pStmt->bInfo.tbSuid = pTableMeta->suid; pStmt->bInfo.tbType = pTableMeta->tableType; pStmt->bInfo.boundTags = tags; @@ -182,7 +182,7 @@ int32_t stmtUpdateInfo(TAOS_STMT* stmt, STableMeta* pTableMeta, void* tags, char SHashObj* pVgHash, SHashObj* pBlockHash, const char* sTableName) { STscStmt* pStmt = (STscStmt*)stmt; - STMT_ERR_RET(stmtUpdateBindInfo(stmt, pTableMeta, tags, tbFName, sTableName)); + STMT_ERR_RET(stmtUpdateBindInfo(stmt, pTableMeta, tags, tbFName, sTableName, autoCreateTbl)); STMT_ERR_RET(stmtUpdateExecInfo(stmt, pVgHash, pBlockHash, autoCreateTbl)); pStmt->sql.autoCreateTbl = autoCreateTbl; @@ -623,6 +623,8 @@ int stmtSetTbTags(TAOS_STMT* stmt, TAOS_MULTI_BIND* tags) { pStmt->bInfo.sname.tname, tags, pStmt->exec.pRequest->msgBuf, pStmt->exec.pRequest->msgBufLen)); + pStmt->exec.autoCreateTbl = true; + return TSDB_CODE_SUCCESS; } @@ -771,10 +773,6 @@ int stmtAddBatch(TAOS_STMT* stmt) { int stmtUpdateTableUid(STscStmt* pStmt, SSubmitRsp* pRsp) { tscDebug("stmt start to update tbUid, blockNum: %d", pRsp->nBlocks); - if (pRsp->nBlocks <= 0) { - return TSDB_CODE_SUCCESS; - } - size_t keyLen = 0; STableDataBlocks** pIter = taosHashIterate(pStmt->exec.pBlockHash, NULL); while (pIter) { @@ -809,8 +807,30 @@ int stmtUpdateTableUid(STscStmt* pStmt, SSubmitRsp* pRsp) { pMeta->uid = blkRsp->uid; pStmt->bInfo.tbUid = blkRsp->uid; } else { - tscError("table %s not found in submit rsp", pStmt->bInfo.tbFName); - STMT_ERR_RET(TSDB_CODE_TSC_APP_ERROR); + tscDebug("table %s not found in submit rsp, will update from catalog", pStmt->bInfo.tbFName); + if (NULL == pStmt->pCatalog) { + STMT_ERR_RET(catalogGetHandle(pStmt->taos->pAppInfo->clusterId, &pStmt->pCatalog)); + } + + STMT_ERR_RET(stmtCreateRequest(pStmt)); + + STableMeta* pTableMeta = NULL; + SRequestConnInfo conn = {.pTrans = pStmt->taos->pAppInfo->pTransporter, + .requestId = pStmt->exec.pRequest->requestId, + .requestObjRefId = pStmt->exec.pRequest->self, + .mgmtEps = getEpSet_s(&pStmt->taos->pAppInfo->mgmtEp)}; + int32_t code = catalogGetTableMeta(pStmt->pCatalog, &conn, &pStmt->bInfo.sname, &pTableMeta); + + taos_free_result(pStmt->exec.pRequest); + pStmt->exec.pRequest = NULL; + + if (TSDB_CODE_PAR_TABLE_NOT_EXIST == code) { + tscDebug("tb %s not exist", pStmt->bInfo.tbFName); + return TSDB_CODE_SUCCESS; + } + + pMeta->uid = pTableMeta->uid; + pStmt->bInfo.tbUid = pTableMeta->uid; } pIter = taosHashIterate(pStmt->exec.pBlockHash, pIter); diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index 1dd3174c29..ade0c95227 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -25,6 +25,13 @@ #include "tref.h" #include "ttimer.h" +#if 0 +#undef tsem_post +#define tsem_post(x) \ + tscInfo("call sem post at %s %d", __FUNCTION__, __LINE__); \ + sem_post(x) +#endif + int32_t tmqAskEp(tmq_t* tmq, bool async); typedef struct { @@ -733,12 +740,12 @@ void tmqSendHbReq(void* param, void* tmrId) { req.consumerId = tmq->consumerId; req.epoch = tmq->epoch; - int32_t tlen = tSerializeSMqHbReq(NULL, 0, &req); + int32_t tlen = tSerializeSMqHbReq(NULL, 0, &req); if (tlen < 0) { tscError("tSerializeSMqHbReq failed"); return; } - void *pReq = taosMemoryCalloc(1, tlen); + void* pReq = taosMemoryCalloc(1, tlen); if (tlen < 0) { tscError("failed to malloc MqHbReq msg, size:%d", tlen); return; @@ -1397,12 +1404,12 @@ int32_t tmqAskEp(tmq_t* tmq, bool async) { req.epoch = tmq->epoch; strcpy(req.cgroup, tmq->groupId); - int32_t tlen = tSerializeSMqAskEpReq(NULL, 0, &req); + int32_t tlen = tSerializeSMqAskEpReq(NULL, 0, &req); if (tlen < 0) { tscError("tSerializeSMqAskEpReq failed"); return -1; } - void *pReq = taosMemoryCalloc(1, tlen); + void* pReq = taosMemoryCalloc(1, tlen); if (tlen < 0) { tscError("failed to malloc askEpReq msg, size:%d", tlen); return -1; @@ -1461,7 +1468,7 @@ int32_t tmqAskEp(tmq_t* tmq, bool async) { return code; } -void tmqBuildConsumeReqImpl(SMqPollReq *pReq, tmq_t* tmq, int64_t timeout, SMqClientTopic* pTopic, SMqClientVg* pVg) { +void tmqBuildConsumeReqImpl(SMqPollReq* pReq, tmq_t* tmq, int64_t timeout, SMqClientTopic* pTopic, SMqClientVg* pVg) { /*strcpy(pReq->topic, pTopic->topicName);*/ /*strcpy(pReq->cgroup, tmq->groupId);*/ @@ -1561,20 +1568,20 @@ int32_t tmqPollImpl(tmq_t* tmq, int64_t timeout) { tsem_post(&tmq->rspSem); return -1; } - char *msg = taosMemoryCalloc(1, msgSize); + char* msg = taosMemoryCalloc(1, msgSize); if (NULL == msg) { atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); tsem_post(&tmq->rspSem); return -1; } - + if (tSerializeSMqPollReq(msg, msgSize, &req) < 0) { taosMemoryFree(msg); atomic_store_32(&pVg->vgStatus, TMQ_VG_STATUS__IDLE); tsem_post(&tmq->rspSem); return -1; } - + SMqPollCbParam* pParam = taosMemoryMalloc(sizeof(SMqPollCbParam)); if (pParam == NULL) { taosMemoryFree(msg); @@ -1797,17 +1804,20 @@ TAOS_RES* tmq_consumer_poll(tmq_t* tmq, int64_t timeout) { return NULL; } if (timeout != -1) { - int64_t endTime = taosGetTimestampMs(); - int64_t leftTime = endTime - startTime; - if (leftTime > timeout) { - tscDebug("consumer:%" PRId64 ", (epoch %d) timeout, no rsp, start time %" PRId64 ", end time %" PRId64, - tmq->consumerId, tmq->epoch, startTime, endTime); + int64_t currentTime = taosGetTimestampMs(); + int64_t passedTime = currentTime - startTime; + if (passedTime > timeout) { + tscDebug("consumer:%" PRId64 ", (epoch %d) timeout, no rsp, start time %" PRId64 ", current time %" PRId64, + tmq->consumerId, tmq->epoch, startTime, currentTime); return NULL; } - tsem_timewait(&tmq->rspSem, leftTime * 1000); + /*tscInfo("consumer:%" PRId64 ", (epoch %d) wait, start time %" PRId64 ", current time %" PRId64*/ + /*", left time %" PRId64,*/ + /*tmq->consumerId, tmq->epoch, startTime, currentTime, (timeout - passedTime));*/ + tsem_timewait(&tmq->rspSem, (timeout - passedTime)); } else { // use tsem_timewait instead of tsem_wait to avoid unexpected stuck - tsem_timewait(&tmq->rspSem, 500 * 1000); + tsem_timewait(&tmq->rspSem, 1000); } } } diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 183d738e58..6a71d441b0 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -511,8 +511,12 @@ SSDataBlock* blockDataExtractBlock(SSDataBlock* pBlock, int32_t startIndex, int3 isNull = colDataIsNull(pColData, pBlock->info.rows, j, pBlock->pBlockAgg[i]); } - char* p = colDataGetData(pColData, j); - colDataAppend(pDstCol, j - startIndex, p, isNull); + if (isNull) { + colDataAppendNULL(pDstCol, j - startIndex); + } else { + char* p = colDataGetData(pColData, j); + colDataAppend(pDstCol, j - startIndex, p, false); + } } } @@ -809,7 +813,9 @@ static int32_t blockDataAssign(SColumnInfoData* pCols, const SSDataBlock* pDataB SColumnInfoData* pSrc = taosArrayGet(pDataBlock->pDataBlock, i); if (IS_VAR_DATA_TYPE(pSrc->info.type)) { - memcpy(pDst->pData, pSrc->pData, pSrc->varmeta.length); + if (pSrc->varmeta.length != 0) { + memcpy(pDst->pData, pSrc->pData, pSrc->varmeta.length); + } pDst->varmeta.length = pSrc->varmeta.length; for (int32_t j = 0; j < pDataBlock->info.rows; ++j) { diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 7575554bcf..cd97ceaae1 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -2537,24 +2537,22 @@ int32_t tDeserializeSUseDbRspImp(SDecoder *pDecoder, SUseDbRsp *pRsp) { if (tDecodeI16(pDecoder, &pRsp->hashSuffix) < 0) return -1; if (tDecodeI8(pDecoder, &pRsp->hashMethod) < 0) return -1; - if (pRsp->vgNum <= 0) { - return 0; - } + if (pRsp->vgNum > 0) { + pRsp->pVgroupInfos = taosArrayInit(pRsp->vgNum, sizeof(SVgroupInfo)); + if (pRsp->pVgroupInfos == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return -1; + } - pRsp->pVgroupInfos = taosArrayInit(pRsp->vgNum, sizeof(SVgroupInfo)); - if (pRsp->pVgroupInfos == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - - for (int32_t i = 0; i < pRsp->vgNum; ++i) { - SVgroupInfo vgInfo = {0}; - if (tDecodeI32(pDecoder, &vgInfo.vgId) < 0) return -1; - if (tDecodeU32(pDecoder, &vgInfo.hashBegin) < 0) return -1; - if (tDecodeU32(pDecoder, &vgInfo.hashEnd) < 0) return -1; - if (tDecodeSEpSet(pDecoder, &vgInfo.epSet) < 0) return -1; - if (tDecodeI32(pDecoder, &vgInfo.numOfTable) < 0) return -1; - taosArrayPush(pRsp->pVgroupInfos, &vgInfo); + for (int32_t i = 0; i < pRsp->vgNum; ++i) { + SVgroupInfo vgInfo = {0}; + if (tDecodeI32(pDecoder, &vgInfo.vgId) < 0) return -1; + if (tDecodeU32(pDecoder, &vgInfo.hashBegin) < 0) return -1; + if (tDecodeU32(pDecoder, &vgInfo.hashEnd) < 0) return -1; + if (tDecodeSEpSet(pDecoder, &vgInfo.epSet) < 0) return -1; + if (tDecodeI32(pDecoder, &vgInfo.numOfTable) < 0) return -1; + taosArrayPush(pRsp->pVgroupInfos, &vgInfo); + } } if (tDecodeI32(pDecoder, &pRsp->errCode) < 0) return -1; diff --git a/source/dnode/mnode/impl/src/mndSubscribe.c b/source/dnode/mnode/impl/src/mndSubscribe.c index 58c89d76aa..ffb46e5f1b 100644 --- a/source/dnode/mnode/impl/src/mndSubscribe.c +++ b/source/dnode/mnode/impl/src/mndSubscribe.c @@ -782,6 +782,7 @@ SUB_DECODE_OVER: return NULL; } + mTrace("subscribe:%s, decode from raw:%p, row:%p", pSub->key, pRaw, pSub); return pRow; } @@ -928,6 +929,7 @@ int32_t mndDropSubByTopic(SMnode *pMnode, STrans *pTrans, const char *topicName) action.msgType = TDMT_VND_TMQ_DELETE_SUB; if (mndTransAppendRedoAction(pTrans, &action) != 0) { taosMemoryFree(pReq); + sdbRelease(pSdb, pSub); return -1; } } @@ -936,6 +938,8 @@ int32_t mndDropSubByTopic(SMnode *pMnode, STrans *pTrans, const char *topicName) sdbRelease(pSdb, pSub); goto END; } + + sdbRelease(pSdb, pSub); } code = 0; diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index dff8adf29b..5c97ee5633 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -984,6 +984,11 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA /* get stbEntry*/ tdbTbGet(pMeta->pUidIdx, &ctbEntry.ctbEntry.suid, sizeof(tb_uid_t), &pVal, &nVal); + if (!pVal) { + terrno = TSDB_CODE_INVALID_MSG; + goto _err; + } + tdbTbGet(pMeta->pTbDb, &((STbDbKey){.uid = ctbEntry.ctbEntry.suid, .version = ((SUidIdxVal *)pVal)[0].version}), sizeof(STbDbKey), (void **)&stbEntry.pBuf, &nVal); tdbFree(pVal); diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 03532eb6d4..75fb566438 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -660,6 +660,13 @@ _end: return code; } +static void tdBlockDataDestroy(SArray *pBlockArr) { + for (int32_t i = 0; i < taosArrayGetSize(pBlockArr); ++i) { + blockDataDestroy(taosArrayGetP(pBlockArr, i)); + } + taosArrayDestroy(pBlockArr); +} + static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSmaInfoItem *pItem, STSchema *pTSchema, int64_t suid) { SArray *pResList = taosArrayInit(1, POINTER_BYTES); @@ -701,38 +708,42 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma #endif for (int32_t i = 0; i < taosArrayGetSize(pResList); ++i) { SSDataBlock *output = taosArrayGetP(pResList, i); - smaDebug("result block, uid:%"PRIu64", groupid:%"PRIu64", rows:%d", output->info.uid, output->info.groupId, - output->info.rows); + smaDebug("result block, uid:%" PRIu64 ", groupid:%" PRIu64 ", rows:%d", output->info.uid, output->info.groupId, + output->info.rows); - STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); - SSubmitReq *pReq = NULL; + STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); + SSubmitReq *pReq = NULL; // TODO: the schema update should be handled later(TD-17965) if (buildSubmitReqFromDataBlock(&pReq, output, pTSchema, SMA_VID(pSma), suid) < 0) { - smaError("vgId:%d, build submit req for rsma table suid:%" PRIu64 ", uid:%"PRIu64", level %" PRIi8 " failed since %s", SMA_VID(pSma), - suid, output->info.groupId, pItem->level, terrstr()); + smaError("vgId:%d, build submit req for rsma table suid:%" PRIu64 ", uid:%" PRIu64 ", level %" PRIi8 + " failed since %s", + SMA_VID(pSma), suid, output->info.groupId, pItem->level, terrstr()); goto _err; } if (pReq && tdProcessSubmitReq(sinkTsdb, output->info.version, pReq) < 0) { taosMemoryFreeClear(pReq); - smaError("vgId:%d, process submit req for rsma suid:%"PRIu64", uid:%" PRIu64 " level %" PRIi8 " failed since %s", + smaError("vgId:%d, process submit req for rsma suid:%" PRIu64 ", uid:%" PRIu64 " level %" PRIi8 + " failed since %s", SMA_VID(pSma), suid, output->info.groupId, pItem->level, terrstr()); goto _err; } - smaDebug("vgId:%d, process submit req for rsma suid:%" PRIu64 ",uid:%"PRIu64", level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, - SMA_VID(pSma), suid, output->info.groupId, pItem->level, output->info.version, htonl(pReq->header.contLen)); + smaDebug("vgId:%d, process submit req for rsma suid:%" PRIu64 ",uid:%" PRIu64 ", level %" PRIi8 " ver %" PRIi64 + " len %" PRIu32, + SMA_VID(pSma), suid, output->info.groupId, pItem->level, output->info.version, + htonl(pReq->header.contLen)); taosMemoryFreeClear(pReq); } } - taosArrayDestroy(pResList); + tdBlockDataDestroy(pResList); return TSDB_CODE_SUCCESS; _err: - taosArrayDestroy(pResList); + tdBlockDataDestroy(pResList); return TSDB_CODE_FAILED; } @@ -820,8 +831,7 @@ static int32_t tdRsmaPrintSubmitReq(SSma *pSma, SSubmitReq *pReq) { static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, int32_t inputType, SRSmaInfo *pInfo, ERsmaExecType type, int8_t level) { int32_t idx = level - 1; - - void *qTaskInfo = (type == RSMA_EXEC_COMMIT) ? RSMA_INFO_IQTASK(pInfo, idx) : RSMA_INFO_QTASK(pInfo, idx); + void *qTaskInfo = (type == RSMA_EXEC_COMMIT) ? RSMA_INFO_IQTASK(pInfo, idx) : RSMA_INFO_QTASK(pInfo, idx); if (!qTaskInfo) { smaDebug("vgId:%d, no qTaskInfo to execute rsma %" PRIi8 " task for suid:%" PRIu64, SMA_VID(pSma), level, pInfo->suid); diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 38cb534d7f..4324c412f7 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -298,35 +298,24 @@ static int32_t vnodeSyncGetSnapshot(const SSyncFSM *pFsm, SSnapshot *pSnapshot) static void vnodeSyncApplyMsg(const SSyncFSM *pFsm, const SRpcMsg *pMsg, const SFsmCbMeta *pMeta) { SVnode *pVnode = pFsm->data; - if (pMeta->code == 0) { - SRpcMsg rpcMsg = {.msgType = pMsg->msgType, .contLen = pMsg->contLen}; - rpcMsg.pCont = rpcMallocCont(rpcMsg.contLen); - memcpy(rpcMsg.pCont, pMsg->pCont, pMsg->contLen); - rpcMsg.info = pMsg->info; - rpcMsg.info.conn.applyIndex = pMeta->index; - rpcMsg.info.conn.applyTerm = pMeta->term; + SRpcMsg rpcMsg = {.msgType = pMsg->msgType, .contLen = pMsg->contLen}; + rpcMsg.pCont = rpcMallocCont(rpcMsg.contLen); + memcpy(rpcMsg.pCont, pMsg->pCont, pMsg->contLen); + rpcMsg.info = pMsg->info; + rpcMsg.info.conn.applyIndex = pMeta->index; + rpcMsg.info.conn.applyTerm = pMeta->term; - const STraceId *trace = &pMsg->info.traceId; - vGTrace("vgId:%d, commit-cb is excuted, fsm:%p, index:%" PRId64 ", term:%" PRIu64 ", msg-index:%" PRId64 - ", weak:%d, code:%d, state:%d %s, type:%s", - pVnode->config.vgId, pFsm, pMeta->index, pMeta->term, rpcMsg.info.conn.applyIndex, pMeta->isWeak, - pMeta->code, pMeta->state, syncStr(pMeta->state), TMSG_INFO(pMsg->msgType)); + const STraceId *trace = &pMsg->info.traceId; + vGTrace("vgId:%d, commit-cb is excuted, fsm:%p, index:%" PRId64 ", term:%" PRIu64 ", msg-index:%" PRId64 + ", weak:%d, code:%d, state:%d %s, type:%s", + pVnode->config.vgId, pFsm, pMeta->index, pMeta->term, rpcMsg.info.conn.applyIndex, pMeta->isWeak, pMeta->code, + pMeta->state, syncStr(pMeta->state), TMSG_INFO(pMsg->msgType)); - tmsgPutToQueue(&pVnode->msgCb, APPLY_QUEUE, &rpcMsg); - } else { - SRpcMsg rsp = {.code = pMeta->code, .info = pMsg->info}; - vError("vgId:%d, commit-cb execute error, type:%s, index:%" PRId64 ", error:0x%x %s", pVnode->config.vgId, - TMSG_INFO(pMsg->msgType), pMeta->index, pMeta->code, tstrerror(pMeta->code)); - if (rsp.info.handle != NULL) { - tmsgSendRsp(&rsp); - } - } + tmsgPutToQueue(&pVnode->msgCb, APPLY_QUEUE, &rpcMsg); } static void vnodeSyncCommitMsg(const SSyncFSM *pFsm, const SRpcMsg *pMsg, const SFsmCbMeta *pMeta) { - if (pMeta->isWeak == 0) { - vnodeSyncApplyMsg(pFsm, pMsg, pMeta); - } + vnodeSyncApplyMsg(pFsm, pMsg, pMeta); } static void vnodeSyncPreCommitMsg(const SSyncFSM *pFsm, const SRpcMsg *pMsg, const SFsmCbMeta *pMeta) { @@ -420,7 +409,7 @@ static void vnodeRestoreFinish(const SSyncFSM *pFsm) { static void vnodeBecomeFollower(const SSyncFSM *pFsm) { SVnode *pVnode = pFsm->data; - vDebug("vgId:%d, become follower", pVnode->config.vgId); + vInfo("vgId:%d, become follower", pVnode->config.vgId); taosThreadMutexLock(&pVnode->lock); if (pVnode->blocked) { diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c index 2dcd681205..3a398d1551 100644 --- a/source/libs/catalog/src/catalog.c +++ b/source/libs/catalog/src/catalog.c @@ -1076,6 +1076,9 @@ int32_t catalogRefreshTableMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const S SCtgTbMetaCtx ctx = {0}; ctx.pName = (SName*)pTableName; ctx.flag = CTG_FLAG_FORCE_UPDATE | CTG_FLAG_MAKE_STB(isSTable); + if (IS_SYS_DBNAME(ctx.pName->dbname)) { + CTG_FLAG_SET_SYS_DB(ctx.flag); + } CTG_API_LEAVE(ctgRefreshTbMeta(pCtg, pConn, &ctx, NULL, true)); } diff --git a/source/libs/catalog/src/ctgCache.c b/source/libs/catalog/src/ctgCache.c index fa38eeba0c..19b7ee32ae 100644 --- a/source/libs/catalog/src/ctgCache.c +++ b/source/libs/catalog/src/ctgCache.c @@ -663,6 +663,7 @@ int32_t ctgDropDbCacheEnqueue(SCatalog *pCtg, const char *dbFName, int64_t dbId) int32_t code = 0; SCtgCacheOperation *op = taosMemoryCalloc(1, sizeof(SCtgCacheOperation)); op->opId = CTG_OP_DROP_DB_CACHE; + op->syncOp = true; SCtgDropDBMsg *msg = taosMemoryMalloc(sizeof(SCtgDropDBMsg)); if (NULL == msg) { @@ -1612,11 +1613,11 @@ int32_t ctgOpUpdateVgroup(SCtgCacheOperation *operation) { dbCache = NULL; - if (!IS_SYS_DBNAME(dbFName)) { + //if (!IS_SYS_DBNAME(dbFName)) { tstrncpy(vgVersion.dbFName, dbFName, sizeof(vgVersion.dbFName)); CTG_ERR_JRET(ctgMetaRentUpdate(&msg->pCtg->dbRent, &vgVersion, vgVersion.dbId, sizeof(SDbVgVersion), ctgDbVgVersionSortCompare, ctgDbVgVersionSearchCompare)); - } + //} _return: @@ -1641,7 +1642,7 @@ int32_t ctgOpDropDbCache(SCtgCacheOperation *operation) { goto _return; } - if (dbCache->dbId != msg->dbId) { + if (msg->dbId && dbCache->dbId != msg->dbId) { ctgInfo("dbId already updated, dbFName:%s, dbId:0x%" PRIx64 ", targetId:0x%" PRIx64, msg->dbFName, dbCache->dbId, msg->dbId); goto _return; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 8db450ad50..43d09dcac6 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1510,10 +1510,14 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock if (pInfo->numOfPseudoExpr > 0) { int32_t code = addTagPseudoColumnData(&pInfo->readHandle, pInfo->pPseudoExpr, pInfo->numOfPseudoExpr, pInfo->pRes, pInfo->pRes->info.rows, GET_TASKID(pTaskInfo), NULL); - if (code != TSDB_CODE_SUCCESS) { + // ignore the table not exists error, since this table may have been dropped during the scan procedure. + if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_PAR_TABLE_NOT_EXIST) { blockDataFreeRes((SSDataBlock*)pBlock); T_LONG_JMP(pTaskInfo->env, code); } + + // reset the error code. + terrno = 0; } if (filter) { diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c index ea39439503..02cd0fe696 100644 --- a/source/libs/executor/src/sortoperator.c +++ b/source/libs/executor/src/sortoperator.c @@ -740,12 +740,13 @@ void destroyMultiwayMergeOperatorInfo(void* param) { int32_t getMultiwayMergeExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { ASSERT(pOptr != NULL); - SSortExecInfo* pInfo = taosMemoryCalloc(1, sizeof(SSortExecInfo)); + SSortExecInfo* pSortExecInfo = taosMemoryCalloc(1, sizeof(SSortExecInfo)); - SMultiwayMergeOperatorInfo* pOperatorInfo = (SMultiwayMergeOperatorInfo*)pOptr->info; + SMultiwayMergeOperatorInfo* pInfo = (SMultiwayMergeOperatorInfo*)pOptr->info; + + *pSortExecInfo = tsortGetSortExecInfo(pInfo->pSortHandle); + *pOptrExplain = pSortExecInfo; - *pInfo = tsortGetSortExecInfo(pOperatorInfo->pSortHandle); - *pOptrExplain = pInfo; *len = sizeof(SSortExecInfo); return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/tfill.c b/source/libs/executor/src/tfill.c index 9908f35818..7674b9e479 100644 --- a/source/libs/executor/src/tfill.c +++ b/source/libs/executor/src/tfill.c @@ -762,12 +762,10 @@ void getCurWindowFromDiscBuf(SOperatorInfo* pOperator, TSKEY ts, uint64_t groupI resetPrevAndNextWindow(pFillSup, pState); SWinKey key = {.ts = ts, .groupId = groupId}; - // void* curVal = NULL; int32_t curVLen = 0; int32_t code = streamStateFillGet(pState, &key, (void**)&pFillSup->cur.pRowVal, &curVLen); ASSERT(code == TSDB_CODE_SUCCESS); pFillSup->cur.key = key.ts; - // pFillSup->cur.pRowVal = curVal; } void getWindowFromDiscBuf(SOperatorInfo* pOperator, TSKEY ts, uint64_t groupId, SStreamFillSupporter* pFillSup) { @@ -952,6 +950,19 @@ void setDeleteFillValueInfo(TSKEY start, TSKEY end, SStreamFillSupporter* pFillS } } +void copyNotFillExpData(SStreamFillSupporter* pFillSup, SStreamFillInfo* pFillInfo) { + for (int32_t i = pFillSup->numOfFillCols; i < pFillSup->numOfAllCols; ++i) { + SFillColInfo* pFillCol = pFillSup->pAllColInfo + i; + int32_t slotId = GET_DEST_SLOT_ID(pFillCol); + SResultCellData* pCell = getResultCell(pFillInfo->pResRow, slotId); + SResultCellData* pCurCell = getResultCell(&pFillSup->cur, slotId); + pCell->isNull = pCurCell->isNull; + if (!pCurCell->isNull) { + memcpy(pCell->pData, pCurCell->pData, pCell->bytes); + } + } +} + void setFillValueInfo(SSDataBlock* pBlock, TSKEY ts, int32_t rowId, SStreamFillSupporter* pFillSup, SStreamFillInfo* pFillInfo) { pFillInfo->preRowKey = pFillSup->cur.key; @@ -993,6 +1004,7 @@ void setFillValueInfo(SSDataBlock* pBlock, TSKEY ts, int32_t rowId, SStreamFillS setFillKeyInfo(ts, nextWKey, &pFillSup->interval, pFillInfo); pFillInfo->pos = FILL_POS_START; } + copyNotFillExpData(pFillSup, pFillInfo); } break; case TSDB_FILL_PREV: { if (hasNextWindow(pFillSup) && ((pFillSup->next.key != pFillInfo->nextRowKey) || diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c index 1c31b550c6..02f2b15a8f 100644 --- a/source/libs/executor/src/tsort.c +++ b/source/libs/executor/src/tsort.c @@ -831,14 +831,19 @@ uint64_t tsortGetGroupId(STupleHandle* pVHandle) { return pVHandle->pBlock->info SSortExecInfo tsortGetSortExecInfo(SSortHandle* pHandle) { SSortExecInfo info = {0}; - info.sortBuffer = pHandle->pageSize * pHandle->numOfPages; - info.sortMethod = pHandle->inMemSort ? SORT_QSORT_T : SORT_SPILLED_MERGE_SORT_T; - info.loops = pHandle->loops; + if (pHandle == NULL) { + info.sortMethod = SORT_QSORT_T; // by default + info.sortBuffer = 2 * 1048576; // 2mb by default + } else { + info.sortBuffer = pHandle->pageSize * pHandle->numOfPages; + info.sortMethod = pHandle->inMemSort ? SORT_QSORT_T : SORT_SPILLED_MERGE_SORT_T; + info.loops = pHandle->loops; - if (pHandle->pBuf != NULL) { - SDiskbasedBufStatis st = getDBufStatis(pHandle->pBuf); - info.writeBytes = st.flushBytes; - info.readBytes = st.loadBytes; + if (pHandle->pBuf != NULL) { + SDiskbasedBufStatis st = getDBufStatis(pHandle->pBuf); + info.writeBytes = st.flushBytes; + info.readBytes = st.loadBytes; + } } return info; diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 3e658b5c91..640baf4f94 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -3349,7 +3349,8 @@ int32_t lastRowFunction(SqlFunctionCtx* pCtx) { int64_t* pts = (int64_t*)pInput->pPTS->pData; for (int32_t i = pInput->startRowIndex; i < pInput->numOfRows + pInput->startRowIndex; ++i) { - char* data = colDataGetData(pInputCol, i); + bool isNull = colDataIsNull(pInputCol, pInput->numOfRows, i, NULL); + char* data = isNull ? NULL : colDataGetData(pInputCol, i); TSKEY cts = pts[i]; numOfElems++; diff --git a/source/libs/index/src/indexFilter.c b/source/libs/index/src/indexFilter.c index 075408f1b3..2a2865a955 100644 --- a/source/libs/index/src/indexFilter.c +++ b/source/libs/index/src/indexFilter.c @@ -699,8 +699,8 @@ static int32_t sifExecLogic(SLogicConditionNode *node, SIFCtx *ctx, SIFParam *ou } else { for (int32_t m = 0; m < node->pParameterList->length; m++) { output->status = sifMergeCond(node->condType, output->status, params[m].status); - taosArrayDestroy(params[m].result); - params[m].result = NULL; + // taosArrayDestroy(params[m].result); + // params[m].result = NULL; } } _return: @@ -857,9 +857,15 @@ static int32_t sifGetFltHint(SNode *pNode, SIdxFltStatus *status) { SIF_ERR_RET(TSDB_CODE_QRY_APP_ERROR); } *status = res->status; - sifFreeParam(res); taosHashRemove(ctx.pRes, (void *)&pNode, POINTER_BYTES); + + void *iter = taosHashIterate(ctx.pRes, NULL); + while (iter != NULL) { + SIFParam *data = (SIFParam *)iter; + sifFreeParam(data); + iter = taosHashIterate(ctx.pRes, iter); + } taosHashCleanup(ctx.pRes); return code; } diff --git a/source/libs/parser/src/parInsertSql.c b/source/libs/parser/src/parInsertSql.c index 155fc7f831..9c39954f09 100644 --- a/source/libs/parser/src/parInsertSql.c +++ b/source/libs/parser/src/parInsertSql.c @@ -918,7 +918,12 @@ static int32_t preParseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModif static int32_t getTableDataBlocks(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks** pDataBuf) { if (pCxt->pComCxt->async) { - return insGetDataBlockFromList(pStmt->pTableBlockHashObj, &pStmt->pTableMeta->uid, sizeof(pStmt->pTableMeta->uid), + uint64_t uid = pStmt->pTableMeta->uid; + if (pStmt->usingTableProcessing) { + pStmt->pTableMeta->uid = 0; + } + + return insGetDataBlockFromList(pStmt->pTableBlockHashObj, &uid, sizeof(pStmt->pTableMeta->uid), TSDB_DEFAULT_PAYLOAD_SIZE, sizeof(SSubmitBlk), getTableInfo(pStmt->pTableMeta).rowSize, pStmt->pTableMeta, pDataBuf, NULL, &pStmt->createTblReq); diff --git a/source/libs/qworker/inc/qwInt.h b/source/libs/qworker/inc/qwInt.h index a9eca64675..a0e04b6a19 100644 --- a/source/libs/qworker/inc/qwInt.h +++ b/source/libs/qworker/inc/qwInt.h @@ -127,6 +127,7 @@ typedef struct SQWTaskCtx { bool queryRsped; bool queryEnd; bool queryContinue; + bool queryExecDone; bool queryInQueue; int32_t rspCode; int64_t affectedRows; // for insert ...select stmt diff --git a/source/libs/qworker/src/qworker.c b/source/libs/qworker/src/qworker.c index f29bf2106f..0890d10b65 100644 --- a/source/libs/qworker/src/qworker.c +++ b/source/libs/qworker/src/qworker.c @@ -54,6 +54,8 @@ static void freeItem(void *param) { int32_t qwHandleTaskComplete(QW_FPARAMS_DEF, SQWTaskCtx *ctx) { qTaskInfo_t taskHandle = ctx->taskHandle; + ctx->queryExecDone = true; + if (TASK_TYPE_TEMP == ctx->taskType && taskHandle) { if (ctx->explain) { SArray *execInfoList = taosArrayInit(4, sizeof(SExplainExecInfo)); @@ -111,6 +113,14 @@ int32_t qwExecTask(QW_FPARAMS_DEF, SQWTaskCtx *ctx, bool *queryStop) { DataSinkHandle sinkHandle = ctx->sinkHandle; SLocalFetch localFetch = {(void *)mgmt, ctx->localExec, qWorkerProcessLocalFetch, ctx->explainRes}; + if (ctx->queryExecDone) { + if (queryStop) { + *queryStop = true; + } + + return TSDB_CODE_SUCCESS; + } + SArray *pResList = taosArrayInit(4, POINTER_BYTES); while (true) { QW_TASK_DLOG("start to execTask, loopIdx:%d", i++); diff --git a/source/libs/scalar/src/scalar.c b/source/libs/scalar/src/scalar.c index 44f792869e..d1271e9290 100644 --- a/source/libs/scalar/src/scalar.c +++ b/source/libs/scalar/src/scalar.c @@ -603,7 +603,7 @@ int32_t sclWalkCaseWhenList(SScalarCtx *ctx, SNodeList *pList, struct SListCell bool *equal = (bool *)colDataGetData(pComp->columnData, rowIdx); if (*equal) { - bool isNull = colDataIsNull_s(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); + bool isNull = colDataIsNull_s(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); char *pData = isNull ? NULL : colDataGetData(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); colDataAppend(output->columnData, rowIdx, pData, isNull); @@ -617,7 +617,7 @@ int32_t sclWalkCaseWhenList(SScalarCtx *ctx, SNodeList *pList, struct SListCell } if (pElse) { - bool isNull = colDataIsNull_s(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); + bool isNull = colDataIsNull_s(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); char *pData = isNull ? NULL : colDataGetData(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); colDataAppend(output->columnData, rowIdx, pData, isNull); @@ -666,7 +666,7 @@ int32_t sclWalkWhenList(SScalarCtx *ctx, SNodeList *pList, struct SListCell *pCe bool *whenValue = (bool *)colDataGetData(pWhen->columnData, (pWhen->numOfRows > 1 ? rowIdx : 0)); if (*whenValue) { - bool isNull = colDataIsNull_s(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); + bool isNull = colDataIsNull_s(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); char *pData = isNull ? NULL : colDataGetData(pThen->columnData, (pThen->numOfRows > 1 ? rowIdx : 0)); colDataAppend(output->columnData, rowIdx, pData, isNull); @@ -685,7 +685,7 @@ int32_t sclWalkWhenList(SScalarCtx *ctx, SNodeList *pList, struct SListCell *pCe } if (pElse) { - bool isNull = colDataIsNull_s(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); + bool isNull = colDataIsNull_s(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); char *pData = isNull ? NULL : colDataGetData(pElse->columnData, (pElse->numOfRows > 1 ? rowIdx : 0)); colDataAppend(output->columnData, rowIdx, pData, isNull); @@ -1210,6 +1210,7 @@ EDealRes sclRewriteOperator(SNode **pNode, SScalarCtx *ctx) { SScalarParam output = {0}; ctx->code = sclExecOperator(node, ctx, &output); if (ctx->code) { + sclFreeParam(&output); return DEAL_RES_ERROR; } @@ -1358,6 +1359,7 @@ EDealRes sclWalkOperator(SNode *pNode, SScalarCtx *ctx) { ctx->code = sclExecOperator(node, ctx, &output); if (ctx->code) { + sclFreeParam(&output); return DEAL_RES_ERROR; } diff --git a/source/libs/scalar/src/sclvector.c b/source/libs/scalar/src/sclvector.c index 4cf4862136..95d22044d7 100644 --- a/source/libs/scalar/src/sclvector.c +++ b/source/libs/scalar/src/sclvector.c @@ -343,11 +343,11 @@ static FORCE_INLINE void varToNchar(char *buf, SScalarParam *pOut, int32_t rowIn int32_t inputLen = varDataLen(buf); int32_t outputMaxLen = (inputLen + 1) * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE; - char *t = taosMemoryCalloc(1, outputMaxLen); - int32_t ret = taosMbsToUcs4(varDataVal(buf), inputLen, (TdUcs4 *)varDataVal(t), - outputMaxLen - VARSTR_HEADER_SIZE, &len); + char *t = taosMemoryCalloc(1, outputMaxLen); + int32_t ret = + taosMbsToUcs4(varDataVal(buf), inputLen, (TdUcs4 *)varDataVal(t), outputMaxLen - VARSTR_HEADER_SIZE, &len); if (!ret) { - sclError("failed to convert to NCHAR"); + sclError("failed to convert to NCHAR"); } varDataSetLen(t, len); @@ -370,8 +370,8 @@ static FORCE_INLINE void ncharToVar(char *buf, SScalarParam *pOut, int32_t rowIn taosMemoryFree(t); } -//TODO opt performance, tmp is not needed. -int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t* overflow) { +// TODO opt performance, tmp is not needed. +int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) { bool vton = false; _bufConverteFunc func = NULL; @@ -383,11 +383,11 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t* overflow) { func = varToUnsigned; } else if (IS_FLOAT_TYPE(pCtx->outType)) { func = varToFloat; - } else if (pCtx->outType == TSDB_DATA_TYPE_BINARY) { // nchar -> binary + } else if (pCtx->outType == TSDB_DATA_TYPE_BINARY) { // nchar -> binary ASSERT(pCtx->inType == TSDB_DATA_TYPE_NCHAR); func = ncharToVar; vton = true; - } else if (pCtx->outType == TSDB_DATA_TYPE_NCHAR) { // binary -> nchar + } else if (pCtx->outType == TSDB_DATA_TYPE_NCHAR) { // binary -> nchar ASSERT(pCtx->inType == TSDB_DATA_TYPE_VARCHAR); func = varToNchar; vton = true; @@ -405,10 +405,10 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t* overflow) { continue; } - char* data = colDataGetVarData(pCtx->pIn->columnData, i); + char *data = colDataGetVarData(pCtx->pIn->columnData, i); int32_t convertType = pCtx->inType; - if(pCtx->inType == TSDB_DATA_TYPE_JSON){ - if(*data == TSDB_DATA_TYPE_NULL) { + if (pCtx->inType == TSDB_DATA_TYPE_JSON) { + if (*data == TSDB_DATA_TYPE_NULL) { ASSERT(0); } else if (*data == TSDB_DATA_TYPE_NCHAR) { data += CHAR_BYTES; @@ -417,13 +417,13 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t* overflow) { terrno = TSDB_CODE_QRY_JSON_NOT_SUPPORT_ERROR; return terrno; } else { - convertNumberToNumber(data+CHAR_BYTES, colDataGetNumData(pCtx->pOut->columnData, i), *data, pCtx->outType); + convertNumberToNumber(data + CHAR_BYTES, colDataGetNumData(pCtx->pOut->columnData, i), *data, pCtx->outType); continue; } } int32_t bufSize = pCtx->pIn->columnData->info.bytes; - char *tmp = taosMemoryMalloc(varDataTLen(data)); - if(!tmp){ + char *tmp = taosMemoryMalloc(varDataTLen(data)); + if (!tmp) { sclError("out of memory in vectorConvertFromVarData"); return TSDB_CODE_OUT_OF_MEMORY; } @@ -446,7 +446,7 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t* overflow) { tmp[len] = 0; } } - + (*func)(tmp, pCtx->pOut, i, overflow); taosMemoryFreeClear(tmp); } @@ -584,11 +584,12 @@ bool convertJsonValue(__compar_fn_t *fp, int32_t optr, int8_t typeLeft, int8_t t } int32_t vectorConvertToVarData(SSclVectorConvCtx *pCtx) { - SColumnInfoData* pInputCol = pCtx->pIn->columnData; - SColumnInfoData* pOutputCol = pCtx->pOut->columnData; - char tmp[128] = {0}; + SColumnInfoData *pInputCol = pCtx->pIn->columnData; + SColumnInfoData *pOutputCol = pCtx->pOut->columnData; + char tmp[128] = {0}; - if (IS_SIGNED_NUMERIC_TYPE(pCtx->inType) || pCtx->inType == TSDB_DATA_TYPE_BOOL || pCtx->inType == TSDB_DATA_TYPE_TIMESTAMP) { + if (IS_SIGNED_NUMERIC_TYPE(pCtx->inType) || pCtx->inType == TSDB_DATA_TYPE_BOOL || + pCtx->inType == TSDB_DATA_TYPE_TIMESTAMP) { for (int32_t i = pCtx->startIndex; i <= pCtx->endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -648,17 +649,18 @@ int32_t vectorConvertToVarData(SSclVectorConvCtx *pCtx) { } // TODO opt performance -int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, int32_t* overflow, int32_t startIndex, int32_t numOfRows) { - SColumnInfoData* pInputCol = pIn->columnData; - SColumnInfoData* pOutputCol = pOut->columnData; +int32_t vectorConvertSingleColImpl(const SScalarParam *pIn, SScalarParam *pOut, int32_t *overflow, int32_t startIndex, + int32_t numOfRows) { + SColumnInfoData *pInputCol = pIn->columnData; + SColumnInfoData *pOutputCol = pOut->columnData; if (NULL == pInputCol) { sclError("input column is NULL, hashFilter %p", pIn->pHashFilter); return TSDB_CODE_APP_ERROR; } - int32_t rstart = (startIndex >= 0 && startIndex < pIn->numOfRows) ? startIndex : 0; - int32_t rend = numOfRows > 0 ? rstart + numOfRows - 1 : rstart + pIn->numOfRows - 1; + int32_t rstart = (startIndex >= 0 && startIndex < pIn->numOfRows) ? startIndex : 0; + int32_t rend = numOfRows > 0 ? rstart + numOfRows - 1 : rstart + pIn->numOfRows - 1; SSclVectorConvCtx cCtx = {pIn, pOut, rstart, rend, pInputCol->info.type, pOutputCol->info.type}; if (IS_VAR_DATA_TYPE(cCtx.inType)) { @@ -669,14 +671,14 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, ASSERT(1 == pIn->numOfRows); pOut->numOfRows = 0; - + if (IS_SIGNED_NUMERIC_TYPE(cCtx.outType)) { int64_t minValue = tDataTypes[cCtx.outType].minValue; int64_t maxValue = tDataTypes[cCtx.outType].maxValue; - + double value = 0; GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0)); - + if (value > maxValue) { *overflow = 1; return TSDB_CODE_SUCCESS; @@ -689,10 +691,10 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } else if (IS_UNSIGNED_NUMERIC_TYPE(cCtx.outType)) { uint64_t minValue = (uint64_t)tDataTypes[cCtx.outType].minValue; uint64_t maxValue = (uint64_t)tDataTypes[cCtx.outType].maxValue; - + double value = 0; GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, 0)); - + if (value > maxValue) { *overflow = 1; return TSDB_CODE_SUCCESS; @@ -733,7 +735,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } break; } - case TSDB_DATA_TYPE_SMALLINT:{ + case TSDB_DATA_TYPE_SMALLINT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -746,7 +748,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } break; } - case TSDB_DATA_TYPE_INT:{ + case TSDB_DATA_TYPE_INT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -773,7 +775,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } break; } - case TSDB_DATA_TYPE_UTINYINT:{ + case TSDB_DATA_TYPE_UTINYINT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -786,7 +788,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } break; } - case TSDB_DATA_TYPE_USMALLINT:{ + case TSDB_DATA_TYPE_USMALLINT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -799,7 +801,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, } break; } - case TSDB_DATA_TYPE_UINT:{ + case TSDB_DATA_TYPE_UINT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -821,11 +823,11 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, uint64_t value = 0; GET_TYPED_DATA(value, uint64_t, cCtx.inType, colDataGetData(pInputCol, i)); - colDataAppendInt64(pOutputCol, i, (int64_t*)&value); + colDataAppendInt64(pOutputCol, i, (int64_t *)&value); } break; } - case TSDB_DATA_TYPE_FLOAT:{ + case TSDB_DATA_TYPE_FLOAT: { for (int32_t i = cCtx.startIndex; i <= cCtx.endIndex; ++i) { if (colDataIsNull_f(pInputCol->nullbitmap, i)) { colDataAppendNULL(pOutputCol, i); @@ -834,7 +836,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, float value = 0; GET_TYPED_DATA(value, float, cCtx.inType, colDataGetData(pInputCol, i)); - colDataAppendFloat(pOutputCol, i, (float*)&value); + colDataAppendFloat(pOutputCol, i, (float *)&value); } break; } @@ -847,7 +849,7 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, double value = 0; GET_TYPED_DATA(value, double, cCtx.inType, colDataGetData(pInputCol, i)); - colDataAppendDouble(pOutputCol, i, (double*)&value); + colDataAppendDouble(pOutputCol, i, (double *)&value); } break; } @@ -865,25 +867,25 @@ int32_t vectorConvertSingleColImpl(const SScalarParam* pIn, SScalarParam* pOut, int8_t gConvertTypes[TSDB_DATA_TYPE_BLOB + 1][TSDB_DATA_TYPE_BLOB + 1] = { /* NULL BOOL TINY SMAL INT BIG FLOA DOUB VARC TIME NCHA UTIN USMA UINT UBIG JSON VARB DECI BLOB */ - /*NULL*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /*BOOL*/ 0, 0, 2, 3, 4, 5, 6, 7, 5, 9, 7, 11, 12, 13, 14, 0, 7, 0, 0, - /*TINY*/ 0, 0, 0, 3, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0, - /*SMAL*/ 0, 0, 0, 0, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0, - /*INT */ 0, 0, 0, 0, 0, 5, 6, 7, 5, 9, 7, 4, 4, 5, 7, 0, 7, 0, 0, - /*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 5, 9, 7, 5, 5, 5, 7, 0, 7, 0, 0, - /*FLOA*/ 0, 0, 0, 0, 0, 0, 0, 7, 7, 6, 7, 6, 6, 6, 6, 0, 7, 0, 0, - /*DOUB*/ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, - /*VARC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 7, 7, 7, 0, 0, 0, 0, - /*TIME*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 7, 0, 7, 0, 0, - /*NCHA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, - /*UTIN*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 0, 7, 0, 0, - /*USMA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 7, 0, 0, - /*UINT*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 7, 0, 0, - /*UBIG*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - /*JSON*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /*VARB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /*DECI*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /*BLOB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + /*NULL*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /*BOOL*/ 0, 0, 2, 3, 4, 5, 6, 7, 5, 9, 7, 11, 12, 13, 14, 0, 7, 0, 0, + /*TINY*/ 0, 0, 0, 3, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0, + /*SMAL*/ 0, 0, 0, 0, 4, 5, 6, 7, 5, 9, 7, 3, 4, 5, 7, 0, 7, 0, 0, + /*INT */ 0, 0, 0, 0, 0, 5, 6, 7, 5, 9, 7, 4, 4, 5, 7, 0, 7, 0, 0, + /*BIGI*/ 0, 0, 0, 0, 0, 0, 6, 7, 5, 9, 7, 5, 5, 5, 7, 0, 7, 0, 0, + /*FLOA*/ 0, 0, 0, 0, 0, 0, 0, 7, 7, 6, 7, 6, 6, 6, 6, 0, 7, 0, 0, + /*DOUB*/ 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, + /*VARC*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 8, 7, 7, 7, 7, 0, 0, 0, 0, + /*TIME*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 7, 0, 7, 0, 0, + /*NCHA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, + /*UTIN*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 0, 7, 0, 0, + /*USMA*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 7, 0, 0, + /*UINT*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 7, 0, 0, + /*UBIG*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + /*JSON*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /*VARB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /*DECI*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /*BLOB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int32_t vectorGetConvertType(int32_t type1, int32_t type2) { if (type1 == type2) { @@ -897,7 +899,8 @@ int32_t vectorGetConvertType(int32_t type1, int32_t type2) { return gConvertTypes[type2][type1]; } -int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_t type, int32_t startIndex, int32_t numOfRows) { +int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_t type, int32_t startIndex, + int32_t numOfRows) { SDataType t = {.type = type, .bytes = tDataTypes[type].bytes}; output->numOfRows = input->numOfRows; @@ -914,8 +917,9 @@ int32_t vectorConvertSingleCol(SScalarParam *input, SScalarParam *output, int32_ return TSDB_CODE_SUCCESS; } -int32_t vectorConvertCols(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam* pLeftOut, SScalarParam* pRightOut, int32_t startIndex, int32_t numOfRows) { - int32_t leftType = GET_PARAM_TYPE(pLeft); +int32_t vectorConvertCols(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pLeftOut, SScalarParam *pRightOut, + int32_t startIndex, int32_t numOfRows) { + int32_t leftType = GET_PARAM_TYPE(pLeft); int32_t rightType = GET_PARAM_TYPE(pRight); if (leftType == rightType) { return TSDB_CODE_SUCCESS; @@ -1007,9 +1011,9 @@ static void vectorMathTsAddHelper(SColumnInfoData *pLeftCol, SColumnInfoData *pR } } -static SColumnInfoData* vectorConvertVarToDouble(SScalarParam* pInput, int32_t* converted) { - SScalarParam output = {0}; - SColumnInfoData* pCol = pInput->columnData; +static SColumnInfoData *vectorConvertVarToDouble(SScalarParam *pInput, int32_t *converted) { + SScalarParam output = {0}; + SColumnInfoData *pCol = pInput->columnData; if (IS_VAR_DATA_TYPE(pCol->info.type) && pCol->info.type != TSDB_DATA_TYPE_JSON) { int32_t code = vectorConvertSingleCol(pInput, &output, TSDB_DATA_TYPE_DOUBLE, -1, -1); @@ -1024,7 +1028,7 @@ static SColumnInfoData* vectorConvertVarToDouble(SScalarParam* pInput, int32_t* } *converted = VECTOR_UN_CONVERT; - + return pInput->columnData; } @@ -1043,9 +1047,9 @@ void vectorMathAdd(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut pOut->numOfRows = TMAX(pLeft->numOfRows, pRight->numOfRows); - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); - SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); if ((GET_PARAM_TYPE(pLeft) == TSDB_DATA_TYPE_TIMESTAMP && IS_INTEGER_TYPE(GET_PARAM_TYPE(pRight))) || (GET_PARAM_TYPE(pRight) == TSDB_DATA_TYPE_TIMESTAMP && IS_INTEGER_TYPE(GET_PARAM_TYPE(pLeft))) || @@ -1150,9 +1154,9 @@ void vectorMathSub(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); - SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); if ((GET_PARAM_TYPE(pLeft) == TSDB_DATA_TYPE_TIMESTAMP && GET_PARAM_TYPE(pRight) == TSDB_DATA_TYPE_BIGINT) || (GET_PARAM_TYPE(pRight) == TSDB_DATA_TYPE_TIMESTAMP && @@ -1228,9 +1232,9 @@ void vectorMathMultiply(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); - SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); _getDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(pLeftCol->info.type); _getDoubleValue_fn_t getVectorDoubleValueFnRight = getVectorDoubleValueFn(pRightCol->info.type); @@ -1261,8 +1265,8 @@ void vectorMathDivide(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *p int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); _getDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(pLeftCol->info.type); @@ -1315,8 +1319,8 @@ void vectorMathRemainder(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); _getDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(pLeftCol->info.type); @@ -1394,8 +1398,8 @@ void vectorMathMinus(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pO int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : (pLeft->numOfRows - 1); int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + int32_t leftConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); _getDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(pLeftCol->info.type); @@ -1456,9 +1460,9 @@ void vectorBitAnd(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); - SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); _getBigintValue_fn_t getVectorBigintValueFnLeft = getVectorBigintValueFn(pLeftCol->info.type); _getBigintValue_fn_t getVectorBigintValueFnRight = getVectorBigintValueFn(pRightCol->info.type); @@ -1510,9 +1514,9 @@ void vectorBitOr(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : TMAX(pLeft->numOfRows, pRight->numOfRows) - 1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; - int32_t leftConvert = 0, rightConvert = 0; - SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); - SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); + int32_t leftConvert = 0, rightConvert = 0; + SColumnInfoData *pLeftCol = vectorConvertVarToDouble(pLeft, &leftConvert); + SColumnInfoData *pRightCol = vectorConvertVarToDouble(pRight, &rightConvert); _getBigintValue_fn_t getVectorBigintValueFnLeft = getVectorBigintValueFn(pLeftCol->info.type); _getBigintValue_fn_t getVectorBigintValueFnRight = getVectorBigintValueFn(pRightCol->info.type); @@ -1536,8 +1540,8 @@ void vectorBitOr(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, doReleaseVec(pRightCol, rightConvert); } -int32_t doVectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows, - int32_t step, __compar_fn_t fp, int32_t optr) { +int32_t doVectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex, + int32_t numOfRows, int32_t step, __compar_fn_t fp, int32_t optr) { int32_t num = 0; for (int32_t i = startIndex; i < numOfRows && i >= 0; i += step) { @@ -1590,15 +1594,15 @@ int32_t doVectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarPa return num; } -void doVectorCompare(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows, - int32_t _ord, int32_t optr) { +void doVectorCompare(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex, + int32_t numOfRows, int32_t _ord, int32_t optr) { int32_t i = 0; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; int32_t lType = GET_PARAM_TYPE(pLeft); int32_t rType = GET_PARAM_TYPE(pRight); __compar_fn_t fp = NULL; int32_t compRows = 0; - + if (lType == rType) { fp = filterGetCompFunc(lType, optr); } else { @@ -1634,10 +1638,10 @@ void doVectorCompare(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pO } } -void vectorCompareImpl(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t startIndex, int32_t numOfRows, - int32_t _ord, int32_t optr) { - SScalarParam pLeftOut = {0}; - SScalarParam pRightOut = {0}; +void vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t startIndex, + int32_t numOfRows, int32_t _ord, int32_t optr) { + SScalarParam pLeftOut = {0}; + SScalarParam pRightOut = {0}; SScalarParam *param1 = NULL; SScalarParam *param2 = NULL; @@ -1661,16 +1665,16 @@ void vectorCompareImpl(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam * } doVectorCompare(param1, param2, pOut, startIndex, numOfRows, _ord, optr); - + sclFreeParam(&pLeftOut); sclFreeParam(&pRightOut); } -void vectorCompare(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t _ord, int32_t optr) { +void vectorCompare(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t _ord, int32_t optr) { vectorCompareImpl(pLeft, pRight, pOut, -1, -1, _ord, optr); } -void vectorGreater(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t _ord) { +void vectorGreater(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t _ord) { vectorCompare(pLeft, pRight, pOut, _ord, OP_TYPE_GREATER_THAN); } @@ -1734,10 +1738,10 @@ void vectorNotNull(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut pOut->numOfRows = pLeft->numOfRows; } -void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, int32_t _ord) { +void vectorIsTrue(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *pOut, int32_t _ord) { vectorConvertSingleColImpl(pLeft, pOut, NULL, -1, -1); - for(int32_t i = 0; i < pOut->numOfRows; ++i) { - if(colDataIsNull_s(pOut->columnData, i)) { + for (int32_t i = 0; i < pOut->numOfRows; ++i) { + if (colDataIsNull_s(pOut->columnData, i)) { int8_t v = 0; colDataAppendInt8(pOut->columnData, i, &v); colDataSetNotNull_f(pOut->columnData->nullbitmap, i); @@ -1748,7 +1752,7 @@ void vectorIsTrue(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pOut, STagVal getJsonValue(char *json, char *key, bool *isExist) { STagVal val = {.pKey = key}; - if (tTagIsJson((const STag *)json) == false) { + if (json == NULL || tTagIsJson((const STag *)json) == false) { terrno = TSDB_CODE_QRY_JSON_NOT_SUPPORT_ERROR; if (isExist) { *isExist = false; diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h index aa8d3bef51..e882f7461d 100644 --- a/source/libs/sync/inc/syncInt.h +++ b/source/libs/sync/inc/syncInt.h @@ -70,6 +70,7 @@ typedef struct SSyncTimer { uint64_t logicClock; uint64_t counter; int32_t timerMS; + int64_t timeStamp; SRaftId destId; int64_t hbDataRid; } SSyncTimer; diff --git a/source/libs/sync/inc/syncMessage.h b/source/libs/sync/inc/syncMessage.h index 7ceec29be4..6535f77fbe 100644 --- a/source/libs/sync/inc/syncMessage.h +++ b/source/libs/sync/inc/syncMessage.h @@ -35,6 +35,7 @@ typedef struct SyncTimeout { ESyncTimeoutType timeoutType; uint64_t logicClock; int32_t timerMS; + int64_t timeStamp; void* data; // need optimized } SyncTimeout; diff --git a/source/libs/sync/inc/syncReplication.h b/source/libs/sync/inc/syncReplication.h index 7da610a9ed..eae931d989 100644 --- a/source/libs/sync/inc/syncReplication.h +++ b/source/libs/sync/inc/syncReplication.h @@ -48,7 +48,7 @@ extern "C" { // /\ UNCHANGED <> int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode); -int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* pDestId, SRpcMsg* pMsg); +int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* pDestId, SRpcMsg* pMsg, const char* debugStr); int32_t syncNodeReplicate(SSyncNode* pSyncNode); int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId, bool snapshot); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 7dab496a5b..b926cf2cf5 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -691,6 +691,7 @@ static int32_t syncHbTimerInit(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer, SRa pSyncTimer->timerMS = pSyncNode->hbBaseLine; pSyncTimer->timerCb = syncNodeEqPeerHeartbeatTimer; pSyncTimer->destId = destId; + pSyncTimer->timeStamp = taosGetTimestampMs(); atomic_store_64(&pSyncTimer->logicClock, 0); return 0; } @@ -704,6 +705,7 @@ static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { pData->rid = syncHbTimerDataAdd(pData); } pSyncTimer->hbDataRid = pData->rid; + pSyncTimer->timeStamp = taosGetTimestampMs(); pData->syncNodeRid = pSyncNode->rid; pData->pTimer = pSyncTimer; @@ -1897,7 +1899,7 @@ static void syncNodeEqPingTimer(void* param, void* tmrId) { return; } - sTrace("enqueue ping msg"); + // sTrace("enqueue ping msg"); code = pNode->syncEqMsg(pNode->msgcb, &rpcMsg); if (code != 0) { sError("failed to sync enqueue ping msg since %s", terrstr()); @@ -2041,8 +2043,15 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) { pSyncMsg->privateTerm = 0; pSyncMsg->timeStamp = taosGetTimestampMs(); + // update reset time + int64_t tsNow = taosGetTimestampMs(); + int64_t timerElapsed = tsNow - pSyncTimer->timeStamp; + pSyncTimer->timeStamp = tsNow; + char logBuf[64]; + snprintf(logBuf, sizeof(logBuf), "timer-elapsed:%" PRId64, timerElapsed); + // send msg - syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg); + syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg, logBuf); } else { sTrace("vgId:%d, do not send hb, timerLogicClock:%" PRId64 ", msgLogicClock:%" PRId64 "", pSyncNode->vgId, @@ -2151,8 +2160,9 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) { SyncHeartbeat* pMsg = pRpcMsg->pCont; int64_t tsMs = taosGetTimestampMs(); + int64_t timeDiff = tsMs - pMsg->timeStamp; char buf[128]; - snprintf(buf, sizeof(buf), "recv local time:%" PRId64, tsMs); + snprintf(buf, sizeof(buf), "net elapsed:%" PRId64, timeDiff); syncLogRecvHeartbeat(ths, pMsg, buf); SRpcMsg rpcMsg = {0}; @@ -2229,8 +2239,9 @@ int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { SyncHeartbeatReply* pMsg = pRpcMsg->pCont; int64_t tsMs = taosGetTimestampMs(); + int64_t timeDiff = tsMs - pMsg->timeStamp; char buf[128]; - snprintf(buf, sizeof(buf), "recv local time:%" PRId64, tsMs); + snprintf(buf, sizeof(buf), "net elapsed:%" PRId64, timeDiff); syncLogRecvHeartbeatReply(ths, pMsg, buf); // update last reply time, make decision whether the other node is alive or not @@ -2509,6 +2520,8 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde SRpcMsg rpcMsg = {0}; syncEntry2OriginalRpc(pEntry, &rpcMsg); + sTrace("do commit index:%" PRId64 ", type:%s", i, TMSG_INFO(pEntry->msgType)); + // user commit if ((ths->pFsm->FpCommitCb != NULL) && syncUtilUserCommit(pEntry->originalRpcType)) { bool internalExecute = true; @@ -2516,7 +2529,8 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde internalExecute = false; } - sNTrace(ths, "commit index:%" PRId64 ", internal:%d", i, internalExecute); + sNTrace(ths, "user commit index:%" PRId64 ", internal:%d, type:%s", i, internalExecute, + TMSG_INFO(pEntry->msgType)); // execute fsm in apply thread, or execute outside syncPropose if (internalExecute) { diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index ce98419980..28a8a2e995 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -35,6 +35,7 @@ int32_t syncBuildTimeout(SRpcMsg* pMsg, ESyncTimeoutType timeoutType, uint64_t l pTimeout->timeoutType = timeoutType; pTimeout->logicClock = logicClock; pTimeout->timerMS = timerMS; + pTimeout->timeStamp = taosGetTimestampMs(); pTimeout->data = pNode; return 0; } diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index 54c29febe5..27f6e855d6 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -207,8 +207,8 @@ int32_t syncNodeMaybeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* dest return ret; } -int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* destId, SRpcMsg* pMsg) { - syncLogSendHeartbeat(pSyncNode, pMsg->pCont, ""); +int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* destId, SRpcMsg* pMsg, const char* debugStr) { + syncLogSendHeartbeat(pSyncNode, pMsg->pCont, debugStr); return syncNodeSendMsgById(destId, pSyncNode, pMsg); } @@ -231,7 +231,7 @@ int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode) { pSyncMsg->timeStamp = ts; // send msg - syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg); + syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg, "x"); } return 0; diff --git a/source/libs/sync/src/syncUtil.c b/source/libs/sync/src/syncUtil.c index 1e5a268e97..2908e7b945 100644 --- a/source/libs/sync/src/syncUtil.c +++ b/source/libs/sync/src/syncUtil.c @@ -396,8 +396,11 @@ void syncPrintSnapshotReceiverLog(const char* flags, ELogLevel level, int32_t df } void syncLogRecvTimer(SSyncNode* pSyncNode, const SyncTimeout* pMsg, const char* s) { - sNTrace(pSyncNode, "recv sync-timer {type:%s, lc:%" PRId64 ", ms:%d, data:%p}, %s", - syncTimerTypeStr(pMsg->timeoutType), pMsg->logicClock, pMsg->timerMS, pMsg->data, s); + int64_t tsNow = taosGetTimestampMs(); + int64_t timeDIff = tsNow - pMsg->timeStamp; + sNTrace( + pSyncNode, "recv sync-timer {type:%s, lc:%" PRId64 ", ms:%d, ts:%" PRId64 ", elapsed:%" PRId64 ", data:%p}, %s", + syncTimerTypeStr(pMsg->timeoutType), pMsg->logicClock, pMsg->timerMS, pMsg->timeStamp, timeDIff, pMsg->data, s); } void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s) { diff --git a/source/libs/tdb/src/db/tdbBtree.c b/source/libs/tdb/src/db/tdbBtree.c index e3860f85c6..fcf9d6ce3e 100644 --- a/source/libs/tdb/src/db/tdbBtree.c +++ b/source/libs/tdb/src/db/tdbBtree.c @@ -741,14 +741,12 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx tdbPageCreate(pOlds[0]->pageSize, &pOldsCopy[i], tdbDefaultMalloc, NULL); tdbBtreeInitPage(pOldsCopy[i], &iarg, 0); tdbPageCopy(pOlds[i], pOldsCopy[i], 0); - } - - for (iNew = 0; iNew < nNews; ++iNew) { - tdbBtreeInitPage(pNews[iNew], &iarg, 0); + pOlds[i]->nOverflow = 0; } iNew = 0; nNewCells = 0; + tdbBtreeInitPage(pNews[iNew], &iarg, 0); for (int iOld = 0; iOld < nOlds; iOld++) { SPage *pPage; diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index e7254c8bc6..a1fee4021e 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -129,7 +129,7 @@ static int tdbPCacheAlterImpl(SPCache *pCache, int32_t nPage) { pCache->nFree++; } - for (int32_t iPage = 0; iPage < pCache->nPage; iPage++) { + for (int32_t iPage = 0; iPage < pCache->nPages; iPage++) { aPage[iPage] = pCache->aPage[iPage]; } diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index abbad06515..7264e0b5ff 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -28,12 +28,12 @@ typedef struct { TDB_STATIC_ASSERT(sizeof(SFileHdr) == 128, "Size of file header is not correct"); struct hashset_st { - size_t nbits; - size_t mask; - size_t capacity; + size_t nbits; + size_t mask; + size_t capacity; size_t *items; - size_t nitems; - double load_factor; + size_t nitems; + double load_factor; }; static const unsigned int prime = 39; @@ -68,11 +68,11 @@ void hashset_destroy(hashset_t set) { } int hashset_add_member(hashset_t set, void *item) { - size_t value = (size_t) item; + size_t value = (size_t)item; size_t h; if (value == 0) { - return -1; + return -1; } for (h = set->mask & (prime * value); set->items[h] != 0; h = set->mask & (h + prime2)) { @@ -103,7 +103,7 @@ int hashset_add(hashset_t set, void *item) { set->nitems = 0; for (size_t i = 0; i < old_capacity; ++i) { - hashset_add_member(set, (void*)old_items[i]); + hashset_add_member(set, (void *)old_items[i]); } tdbOsFree(old_items); } @@ -112,7 +112,7 @@ int hashset_add(hashset_t set, void *item) { } int hashset_remove(hashset_t set, void *item) { - size_t value = (size_t) item; + size_t value = (size_t)item; for (size_t h = set->mask & (prime * value); set->items[h] != 0; h = set->mask & (h + prime2)) { if (set->items[h] == value) { @@ -126,7 +126,7 @@ int hashset_remove(hashset_t set, void *item) { } int hashset_contains(hashset_t set, void *item) { - size_t value = (size_t) item; + size_t value = (size_t)item; for (size_t h = set->mask & (prime * value); set->items[h] != 0; h = set->mask & (h + prime2)) { if (set->items[h] == value) { @@ -319,7 +319,8 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) { tRBTreePut(&pPager->rbt, (SRBTreeNode *)pPage); // Write page to journal if neccessary - if (TDB_PAGE_PGNO(pPage) <= pPager->dbOrigSize && (pPager->jPageSet == NULL || !hashset_contains(pPager->jPageSet, (void*)((long)TDB_PAGE_PGNO(pPage))))) { + if (TDB_PAGE_PGNO(pPage) <= pPager->dbOrigSize && + (pPager->jPageSet == NULL || !hashset_contains(pPager->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))))) { ret = tdbPagerWritePageToJournal(pPager, pPage); if (ret < 0) { tdbError("failed to write page to journal since %s", tstrerror(terrno)); @@ -327,7 +328,7 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) { } if (pPager->jPageSet) { - hashset_add(pPager->jPageSet, (void*)((long)TDB_PAGE_PGNO(pPage))); + hashset_add(pPager->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); } } @@ -372,6 +373,7 @@ int tdbPagerCommit(SPager *pPager, TXN *pTxn) { SRBTreeNode *pNode = NULL; while ((pNode = tRBTreeIterNext(&iter)) != NULL) { pPage = (SPage *)pNode; + ASSERT(pPage->nOverflow == 0); ret = tdbPagerWritePageToDB(pPager, pPage); if (ret < 0) { tdbError("failed to write page to db since %s", tstrerror(terrno)); @@ -391,7 +393,7 @@ int tdbPagerCommit(SPager *pPager, TXN *pTxn) { tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage); if (pPager->jPageSet) { - hashset_remove(pPager->jPageSet, (void*)((long)TDB_PAGE_PGNO(pPage))); + hashset_remove(pPager->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); } tdbPCacheRelease(pPager->pCache, pPage, pTxn); } @@ -503,7 +505,7 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) { return -1; } - u8 *pageBuf = tdbOsCalloc(1, pPager->pageSize); + u8 *pageBuf = tdbOsCalloc(1, pPager->pageSize); if (pageBuf == NULL) { return -1; } @@ -560,7 +562,7 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) { pPage->isDirty = 0; tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage); - hashset_remove(pPager->jPageSet, (void*)((long)TDB_PAGE_PGNO(pPage))); + hashset_remove(pPager->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage))); tdbPCacheRelease(pPager->pCache, pPage, pTxn); } diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 275048e94a..55bfb57a82 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -794,15 +794,18 @@ void cliSend(SCliConn* pConn) { int msgLen = transMsgLenFromCont(pMsg->contLen); STransMsgHead* pHead = transHeadFromCont(pMsg->pCont); - pHead->ahandle = pCtx != NULL ? (uint64_t)pCtx->ahandle : 0; - pHead->noResp = REQUEST_NO_RESP(pMsg) ? 1 : 0; - pHead->persist = REQUEST_PERSIS_HANDLE(pMsg) ? 1 : 0; - pHead->msgType = pMsg->msgType; - pHead->msgLen = (int32_t)htonl((uint32_t)msgLen); - pHead->release = REQUEST_RELEASE_HANDLE(pCliMsg) ? 1 : 0; - memcpy(pHead->user, pTransInst->user, strlen(pTransInst->user)); - pHead->traceId = pMsg->info.traceId; - pHead->magicNum = htonl(TRANS_MAGIC_NUM); + if (pHead->comp == 0) { + pHead->ahandle = pCtx != NULL ? (uint64_t)pCtx->ahandle : 0; + pHead->noResp = REQUEST_NO_RESP(pMsg) ? 1 : 0; + pHead->persist = REQUEST_PERSIS_HANDLE(pMsg) ? 1 : 0; + pHead->msgType = pMsg->msgType; + pHead->msgLen = (int32_t)htonl((uint32_t)msgLen); + pHead->release = REQUEST_RELEASE_HANDLE(pCliMsg) ? 1 : 0; + memcpy(pHead->user, pTransInst->user, strlen(pTransInst->user)); + pHead->traceId = pMsg->info.traceId; + pHead->magicNum = htonl(TRANS_MAGIC_NUM); + } + if (pHead->persist == 1) { CONN_SET_PERSIST_BY_APP(pConn); } diff --git a/source/libs/transport/src/transComm.c b/source/libs/transport/src/transComm.c index 7710abcaa1..2759fb5aeb 100644 --- a/source/libs/transport/src/transComm.c +++ b/source/libs/transport/src/transComm.c @@ -60,21 +60,20 @@ int32_t transDecompressMsg(char** msg, int32_t len) { STransMsgHead* pHead = (STransMsgHead*)(*msg); if (pHead->comp == 0) return 0; - char* pCont = transContFromHead(pHead); + char* pCont = transContFromHead(pHead); + STransCompMsg* pComp = (STransCompMsg*)pCont; int32_t oriLen = htonl(pComp->contLen); char* buf = taosMemoryCalloc(1, oriLen + sizeof(STransMsgHead)); STransMsgHead* pNewHead = (STransMsgHead*)buf; - - int32_t decompLen = LZ4_decompress_safe(pCont + sizeof(STransCompMsg), pNewHead->content, - len - sizeof(STransMsgHead) - sizeof(STransCompMsg), oriLen); + int32_t decompLen = LZ4_decompress_safe(pCont + sizeof(STransCompMsg), pNewHead->content, + len - sizeof(STransMsgHead) - sizeof(STransCompMsg), oriLen); memcpy((char*)pNewHead, (char*)pHead, sizeof(STransMsgHead)); pNewHead->msgLen = htonl(oriLen + sizeof(STransMsgHead)); taosMemoryFree(pHead); - *msg = buf; if (decompLen != oriLen) { return -1; diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index f093d84db6..b7fe404a4e 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -195,7 +195,7 @@ static bool uvHandleReq(SSvrConn* pConn) { } if (transDecompressMsg((char**)&pHead, msgLen) < 0) { - tDebug("%s conn %p recv invalid packet, failed to decompress", transLabel(pTransInst), pConn); + tError("%s conn %p recv invalid packet, failed to decompress", transLabel(pTransInst), pConn); return false; } @@ -277,10 +277,8 @@ void uvOnRecvCb(uv_stream_t* cli, ssize_t nread, const uv_buf_t* buf) { SConnBuffer* pBuf = &conn->readBuf; if (nread > 0) { pBuf->len += nread; - tTrace("%s conn %p total read:%d, current read:%d", transLabel(pTransInst), conn, pBuf->len, (int)nread); if (pBuf->len <= TRANS_PACKET_LIMIT) { while (transReadComplete(pBuf)) { - tTrace("%s conn %p alread read complete packet", transLabel(pTransInst), conn); if (true == pBuf->invalid || false == uvHandleReq(conn)) { tError("%s conn %p read invalid packet, received from %s, local info:%s", transLabel(pTransInst), conn, conn->dst, conn->src); diff --git a/source/os/src/osSemaphore.c b/source/os/src/osSemaphore.c index 310804da8d..53d8dad226 100644 --- a/source/os/src/osSemaphore.c +++ b/source/os/src/osSemaphore.c @@ -75,17 +75,18 @@ int32_t tsem_wait(tsem_t* sem) { return ret; } -int32_t tsem_timewait(tsem_t* sem, int64_t nanosecs) { - struct timespec ts, rel; - FILETIME ft_before, ft_after; - int rc; +int32_t tsem_timewait(tsem_t* sem, int64_t milis) { + return tsem_wait(sem); +#if 0 + struct timespec ts; + timespec_get(&ts); + ts.tv_nsec += ms * 1000000; + ts.tv_sec += ts.tv_nsec / 1000000000; + ts.tv_nsec %= 1000000000; - rel.tv_sec = 0; - rel.tv_nsec = nanosecs; - - GetSystemTimeAsFileTime(&ft_before); + /*GetSystemTimeAsFileTime(&ft_before);*/ // errno = 0; - rc = sem_timedwait(sem, pthread_win32_getabstime_np(&ts, &rel)); + rc = sem_timedwait(sem, ts); /* This should have timed out */ // assert(errno == ETIMEDOUT); @@ -102,6 +103,7 @@ int32_t tsem_timewait(tsem_t* sem, int64_t nanosecs) { // return 1; // } return rc; +#endif } #elif defined(_TD_DARWIN_64) @@ -133,9 +135,9 @@ int tsem_wait(tsem_t *psem) { return 0; } -int tsem_timewait(tsem_t *psem, int64_t nanosecs) { +int tsem_timewait(tsem_t *psem, int64_t milis) { if (psem == NULL || *psem == NULL) return -1; - dispatch_semaphore_wait(*psem, nanosecs); + dispatch_semaphore_wait(*psem, milis * 1000 * 1000); return 0; } @@ -227,15 +229,20 @@ int32_t tsem_wait(tsem_t* sem) { return ret; } -int32_t tsem_timewait(tsem_t* sem, int64_t nanosecs) { +int32_t tsem_timewait(tsem_t* sem, int64_t ms) { int ret = 0; - struct timespec tv = { - .tv_sec = 0, - .tv_nsec = nanosecs, - }; + struct timespec ts = {0}; - while ((ret = sem_timedwait(sem, &tv)) == -1 && errno == EINTR) continue; + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { + return -1; + } + + ts.tv_nsec += ms * 1000000; + ts.tv_sec += ts.tv_nsec / 1000000000; + ts.tv_nsec %= 1000000000; + + while ((ret = sem_timedwait(sem, &ts)) == -1 && errno == EINTR) continue; return ret; } diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index 079dbd8d02..17cd7476b0 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -278,7 +278,7 @@ ,,y,script,./test.sh -f tsim/stable/values.sim ,,y,script,./test.sh -f tsim/stable/vnode3.sim ,,y,script,./test.sh -f tsim/stable/metrics_idx.sim -,,,script,./test.sh -f tsim/sma/drop_sma.sim +,,n,script,./test.sh -f tsim/sma/drop_sma.sim ,,y,script,./test.sh -f tsim/sma/sma_leak.sim ,,y,script,./test.sh -f tsim/sma/tsmaCreateInsertQuery.sim ,,y,script,./test.sh -f tsim/sma/rsmaCreateInsertQuery.sim @@ -418,17 +418,17 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py ,,n,system-test,python3 ./test.py -f 0-others/compatibility.py ,,,system-test,python3 ./test.py -f 1-insert/alter_database.py -,,,system-test,python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py ,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py -,,,system-test,python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py -,,,system-test,python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py -,,,system-test,python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py +,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py ,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_stable.py #,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_table.py ,,n,system-test,python3 ./test.py -f 1-insert/boundary.py ,,n,system-test,python3 ./test.py -f 1-insert/insertWithMoreVgroup.py ,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_comment.py -,,,system-test,python3 ./test.py -f 1-insert/time_range_wise.py +,,n,system-test,python3 ./test.py -f 1-insert/time_range_wise.py ,,,system-test,python3 ./test.py -f 1-insert/block_wise.py ,,,system-test,python3 ./test.py -f 1-insert/create_retentions.py ,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/mutil_stage.py @@ -622,17 +622,17 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py -,,,system-test,python3 ./test.py -f 2-query/json_tag.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py ,,,system-test,python3 ./test.py -f 2-query/nestedQuery.py ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_str.py ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_math.py ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_time.py -,,,system-test,python3 ./test.py -f 2-query/stablity.py +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py ,,,system-test,python3 ./test.py -f 2-query/stablity_1.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py -,,,system-test,python3 ./test.py -f 2-query/queryQnode.py +,,n,system-test,python3 ./test.py -f 2-query/queryQnode.py ,,,system-test,python3 ./test.py -f 6-cluster/5dnode1mnode.py ,,,system-test,python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 ,,,system-test,python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3 @@ -669,8 +669,8 @@ ,,,system-test,python3 test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py -N 4 -M 1 ,,,system-test,python3 test.py -f 6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py -N 4 -M 1 ,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/create_wrong_topic.py -,,,system-test,python3 ./test.py -f 7-tmq/dropDbR3ConflictTransaction.py -N 3 -,,,system-test,python3 ./test.py -f 7-tmq/basic5.py +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/dropDbR3ConflictTransaction.py -N 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 7-tmq/basic5.py ,,,system-test,python3 ./test.py -f 7-tmq/subscribeDb.py ,,,system-test,python3 ./test.py -f 7-tmq/subscribeDb0.py ,,,system-test,python3 ./test.py -f 7-tmq/subscribeDb1.py @@ -725,7 +725,7 @@ ,,,system-test,python3 ./test.py -f 7-tmq/dataFromTsdbNWal-multiCtb.py ,,,system-test,python3 ./test.py -f 7-tmq/tmq_taosx.py ,,,system-test,python3 ./test.py -f 7-tmq/stbTagFilter-multiCtb.py -,,,system-test,python3 ./test.py -f 99-TDcase/TD-19201.py +,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-19201.py ,,,system-test,python3 ./test.py -f 7-tmq/tmqSubscribeStb-r3.py -N 5 ,,,system-test,python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 ,,,system-test,python3 ./test.py -f 7-tmq/tmq3mnodeSwitch.py -N 6 -M 3 -n 3 @@ -768,7 +768,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 2 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 2 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 2 -,,,system-test,python3 ./test.py -f 2-query/json_tag.py -Q 2 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 2 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 2 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 2 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 2 @@ -862,7 +862,7 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/timetruncate.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/Timediff.py -Q 3 -,,,system-test,python3 ./test.py -f 2-query/json_tag.py -Q 3 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/json_tag.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/top.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/bottom.py -Q 3 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/percentile.py -Q 3 @@ -978,8 +978,8 @@ ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_str.py -Q 4 ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_math.py -Q 4 ,,,system-test,python3 ./test.py -f 2-query/nestedQuery_time.py -Q 4 -,,,system-test,python3 ./test.py -f 2-query/stablity.py -Q 4 -,,,system-test,python3 ./test.py -f 2-query/stablity_1.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity.py -Q 4 +,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/stablity_1.py -Q 4 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/avg.py -Q 4 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py -Q 4 ,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py -Q 4 diff --git a/tests/pytest/crash_gen/crash_gen_main.py b/tests/pytest/crash_gen/crash_gen_main.py index f8c5f970c5..4140728dcd 100755 --- a/tests/pytest/crash_gen/crash_gen_main.py +++ b/tests/pytest/crash_gen/crash_gen_main.py @@ -2022,7 +2022,8 @@ class TdSuperTable: conf.set("group.id", "tg2") conf.set("td.connect.user", "root") conf.set("td.connect.pass", "taosdata") - conf.set("enable.auto.commit", "true") + conf.set("enable.auto. + ", "true") def tmq_commit_cb_print(tmq, resp, offset, param=None): print(f"commit: {resp}, tmq: {tmq}, offset: {offset}, param: {param}") conf.set_auto_commit_cb(tmq_commit_cb_print, None) diff --git a/tests/script/api/batchprepare.c b/tests/script/api/batchprepare.c index f39d5e6528..74aa7baf0b 100644 --- a/tests/script/api/batchprepare.c +++ b/tests/script/api/batchprepare.c @@ -115,6 +115,7 @@ int insertMBMETest3(TAOS_STMT *stmt, TAOS *taos); int insertMBMETest4(TAOS_STMT *stmt, TAOS *taos); int insertMPMETest1(TAOS_STMT *stmt, TAOS *taos); int insertAUTOTest1(TAOS_STMT *stmt, TAOS *taos); +int insertAUTOTest2(TAOS_STMT *stmt, TAOS *taos); int queryColumnTest(TAOS_STMT *stmt, TAOS *taos); int queryMiscTest(TAOS_STMT *stmt, TAOS *taos); @@ -128,7 +129,7 @@ typedef struct { int32_t colNum; int32_t *colList; // full table column list int32_t testType; - bool autoCreateTbl; + int32_t autoCreateTbl; bool fullCol; int32_t (*runFn)(TAOS_STMT*, TAOS*); int32_t tblNum; @@ -142,45 +143,46 @@ typedef struct { } CaseCfg; CaseCfg gCase[] = { - {"insert:MBSE0-FULL", tListLen(shortColList), shortColList, TTYPE_INSERT, false, true, insertMBSETest1, 1, 10, 10, 0, 0, 0, 1, -1}, - {"insert:MBSE0-FULL", tListLen(shortColList), shortColList, TTYPE_INSERT, false, true, insertMBSETest1, 10, 100, 10, 0, 0, 0, 1, -1}, + {"insert:MBSE0-FULL", tListLen(shortColList), shortColList, TTYPE_INSERT, 0, true, insertMBSETest1, 1, 10, 10, 0, 0, 0, 1, -1}, + {"insert:MBSE0-FULL", tListLen(shortColList), shortColList, TTYPE_INSERT, 0, true, insertMBSETest1, 10, 100, 10, 0, 0, 0, 1, -1}, - {"insert:MBSE1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBSETest1, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBSE1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBSETest1, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBSE1-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBSETest1, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBSE1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBSETest1, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBSE1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBSETest1, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBSE1-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBSETest1, 10, 10, 2, 2, 0, 0, 1, -1}, - {"insert:MBSE2-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBSETest2, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBSE2-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBSETest2, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBSE2-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBSETest2, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBSE2-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBSETest2, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBSE2-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBSETest2, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBSE2-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBSETest2, 10, 10, 2, 2, 0, 0, 1, -1}, - {"insert:MBME1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBMETest1, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBME1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest1, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBME1-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest1, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBME1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBMETest1, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBME1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest1, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBME1-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest1, 10, 10, 2, 2, 0, 0, 1, -1}, // 11 - {"insert:MBME2-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBMETest2, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBME2-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest2, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBME2-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest2, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBME2-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBMETest2, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBME2-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest2, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBME2-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest2, 10, 10, 2, 2, 0, 0, 1, -1}, - {"insert:MBME3-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBMETest3, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBME3-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest3, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBME3-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest3, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBME3-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBMETest3, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBME3-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest3, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBME3-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest3, 10, 10, 2, 2, 0, 0, 1, -1}, - {"insert:MBME4-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMBMETest4, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MBME4-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest4, 10, 10, 2, 12, 0, 0, 1, -1}, - {"insert:MBME4-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMBMETest4, 10, 10, 2, 2, 0, 0, 1, -1}, + {"insert:MBME4-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMBMETest4, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MBME4-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest4, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MBME4-C002", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMBMETest4, 10, 10, 2, 2, 0, 0, 1, -1}, - {"insert:MPME1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, false, true, insertMPMETest1, 10, 10, 2, 0, 0, 0, 1, -1}, - {"insert:MPME1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, false, false, insertMPMETest1, 10, 10, 2, 12, 0, 0, 1, -1}, + {"insert:MPME1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, true, insertMPMETest1, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:MPME1-C012", tListLen(fullColList), fullColList, TTYPE_INSERT, 0, false, insertMPMETest1, 10, 10, 2, 12, 0, 0, 1, -1}, // 22 - {"insert:AUTO1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, true, true, insertAUTOTest1, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:AUTO1-FULL", tListLen(fullColList), fullColList, TTYPE_INSERT, 1, true, insertAUTOTest1, 10, 10, 2, 0, 0, 0, 1, -1}, + {"insert:AUTO1-TBEXISTS", tListLen(fullColList), fullColList, TTYPE_INSERT, 3, true, insertAUTOTest2, 10, 10, 2, 0, 0, 0, 1, -1}, - {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, false, false, queryColumnTest, 10, 10, 1, 3, 0, 0, 1, 2}, - {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, false, false, queryMiscTest, 10, 10, 1, 3, 0, 0, 1, 2}, + {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, queryColumnTest, 10, 10, 1, 3, 0, 0, 1, 2}, + {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, queryMiscTest, 10, 10, 1, 3, 0, 0, 1, 2}, -// {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, false, false, queryColumnTest, 1, 10, 1, 1, 0, 0, 1, 2}, -// {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, false, false, queryMiscTest, 2, 10, 1, 1, 0, 0, 1, 2}, +// {"query:SUBT-COLUMN", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, queryColumnTest, 1, 10, 1, 1, 0, 0, 1, 2}, +// {"query:SUBT-MISC", tListLen(fullColList), fullColList, TTYPE_QUERY, 0, false, queryMiscTest, 2, 10, 1, 1, 0, 0, 1, 2}, }; @@ -221,7 +223,7 @@ typedef struct { CaseCtrl gCaseCtrl = { .precision = TIME_PRECISION_MICRO, .bindNullNum = 0, - .printCreateTblSql = false, + .printCreateTblSql = true, .printQuerySql = true, .printStmtSql = true, .printVerbose = false, @@ -230,7 +232,7 @@ CaseCtrl gCaseCtrl = { .numericParam = false, .rowNum = 0, .bindColNum = 0, - .bindTagNum = 0, + .bindTagNum = 14, .bindRowNum = 0, .bindColTypeNum = 0, .bindColTypeList = NULL, @@ -242,8 +244,8 @@ CaseCtrl gCaseCtrl = { .funcIdxList = NULL, .checkParamNum = false, .runTimes = 0, - .caseIdx = -1, - .caseNum = -1, + .caseIdx = 23, + .caseNum = 1, .caseRunIdx = -1, .caseRunNum = -1, }; @@ -1946,6 +1948,73 @@ int insertAUTOTest1(TAOS_STMT *stmt, TAOS *taos) { } + +/* [prepare [settbnametag [bind add exec]]] */ +int insertAUTOTest2(TAOS_STMT *stmt, TAOS *taos) { + int32_t loop = 0; + + while (gCurCase->bindTagNum > 0 && gCurCase->bindColNum > 0) { + BindData data = {0}; + prepareInsertData(&data); + + int code = taos_stmt_prepare(stmt, data.sql, 0); + if (code != 0){ + printf("!!!failed to execute taos_stmt_prepare. error:%s\n", taos_stmt_errstr(stmt)); + exit(1); + } + + bpCheckIsInsert(stmt, 1); + + int32_t bindTimes = gCurCase->rowNum/gCurCase->bindRowNum; + for (int32_t b = 0; b tblNum; ++t) { + if (gCurCase->tblNum > 1) { + char buf[32]; + sprintf(buf, "t%d", t); + code = bpSetTableNameTags(&data, t, buf, stmt); + if (code != 0){ + printf("!!!taos_stmt_set_tbname_tags error:%s\n", taos_stmt_errstr(stmt)); + exit(1); + } + } + + if (gCaseCtrl.checkParamNum) { + bpCheckParamNum(stmt); + } + if (bpBindParam(stmt, data.pBind + t*bindTimes*gCurCase->bindColNum + b*gCurCase->bindColNum)) { + exit(1); + } + + if (taos_stmt_add_batch(stmt)) { + printf("!!!taos_stmt_add_batch error:%s\n", taos_stmt_errstr(stmt)); + exit(1); + } + + if (taos_stmt_execute(stmt) != 0) { + printf("!!!taos_stmt_execute error:%s\n", taos_stmt_errstr(stmt)); + exit(1); + } + } + } + + bpCheckIsInsert(stmt, 1); + + destroyData(&data); + + gCurCase->bindColNum -= 2; + gCurCase->bindTagNum -= 2; + gCurCase->fullCol = false; + loop++; + } + + bpCheckAffectedRows(stmt, loop); + + gExecLoopTimes = loop; + + return 0; +} + + /* select * from table */ int queryColumnTest(TAOS_STMT *stmt, TAOS *taos) { BindData data = {0}; @@ -2243,70 +2312,76 @@ int sql_s_perf1(TAOS *taos) { return 0; } -void generateCreateTableSQL(char *buf, int32_t tblIdx, int32_t colNum, int32_t *colList, bool stable) { +void generateCreateTableSQL(char *buf, int32_t tblIdx, int32_t colNum, int32_t *colList, int32_t tableType) { int32_t blen = 0; - blen = sprintf(buf, "create table %s%d ", (stable ? bpStbPrefix : bpTbPrefix), tblIdx); + blen = sprintf(buf, "create table %s%d ", (1 == tableType ? bpStbPrefix : bpTbPrefix), tblIdx); - blen += sprintf(buf + blen, " ("); - - for (int c = 0; c < colNum; ++c) { - if (c > 0) { - blen += sprintf(buf + blen, ","); - } - - switch (colList[c]) { - case TSDB_DATA_TYPE_BOOL: - blen += sprintf(buf + blen, "booldata bool"); - break; - case TSDB_DATA_TYPE_TINYINT: - blen += sprintf(buf + blen, "tinydata tinyint"); - break; - case TSDB_DATA_TYPE_SMALLINT: - blen += sprintf(buf + blen, "smalldata smallint"); - break; - case TSDB_DATA_TYPE_INT: - blen += sprintf(buf + blen, "intdata int"); - break; - case TSDB_DATA_TYPE_BIGINT: - blen += sprintf(buf + blen, "bigdata bigint"); - break; - case TSDB_DATA_TYPE_FLOAT: - blen += sprintf(buf + blen, "floatdata float"); - break; - case TSDB_DATA_TYPE_DOUBLE: - blen += sprintf(buf + blen, "doubledata double"); - break; - case TSDB_DATA_TYPE_VARCHAR: - blen += sprintf(buf + blen, "binarydata binary(%d)", gVarCharSize); - break; - case TSDB_DATA_TYPE_TIMESTAMP: - blen += sprintf(buf + blen, "ts timestamp"); - break; - case TSDB_DATA_TYPE_NCHAR: - blen += sprintf(buf + blen, "nchardata nchar(%d)", gVarCharSize); - break; - case TSDB_DATA_TYPE_UTINYINT: - blen += sprintf(buf + blen, "utinydata tinyint unsigned"); - break; - case TSDB_DATA_TYPE_USMALLINT: - blen += sprintf(buf + blen, "usmalldata smallint unsigned"); - break; - case TSDB_DATA_TYPE_UINT: - blen += sprintf(buf + blen, "uintdata int unsigned"); - break; - case TSDB_DATA_TYPE_UBIGINT: - blen += sprintf(buf + blen, "ubigdata bigint unsigned"); - break; - default: - printf("invalid col type:%d", colList[c]); - exit(1); - } + if (tableType == 3) { + blen += sprintf(buf + blen, "using %s%d", bpStbPrefix, bpDefaultStbId); } - blen += sprintf(buf + blen, ")"); + if (tableType == 0 || tableType == 1) { + blen += sprintf(buf + blen, " ("); + + for (int c = 0; c < colNum; ++c) { + if (c > 0) { + blen += sprintf(buf + blen, ","); + } + + switch (colList[c]) { + case TSDB_DATA_TYPE_BOOL: + blen += sprintf(buf + blen, "booldata bool"); + break; + case TSDB_DATA_TYPE_TINYINT: + blen += sprintf(buf + blen, "tinydata tinyint"); + break; + case TSDB_DATA_TYPE_SMALLINT: + blen += sprintf(buf + blen, "smalldata smallint"); + break; + case TSDB_DATA_TYPE_INT: + blen += sprintf(buf + blen, "intdata int"); + break; + case TSDB_DATA_TYPE_BIGINT: + blen += sprintf(buf + blen, "bigdata bigint"); + break; + case TSDB_DATA_TYPE_FLOAT: + blen += sprintf(buf + blen, "floatdata float"); + break; + case TSDB_DATA_TYPE_DOUBLE: + blen += sprintf(buf + blen, "doubledata double"); + break; + case TSDB_DATA_TYPE_VARCHAR: + blen += sprintf(buf + blen, "binarydata binary(%d)", gVarCharSize); + break; + case TSDB_DATA_TYPE_TIMESTAMP: + blen += sprintf(buf + blen, "ts timestamp"); + break; + case TSDB_DATA_TYPE_NCHAR: + blen += sprintf(buf + blen, "nchardata nchar(%d)", gVarCharSize); + break; + case TSDB_DATA_TYPE_UTINYINT: + blen += sprintf(buf + blen, "utinydata tinyint unsigned"); + break; + case TSDB_DATA_TYPE_USMALLINT: + blen += sprintf(buf + blen, "usmalldata smallint unsigned"); + break; + case TSDB_DATA_TYPE_UINT: + blen += sprintf(buf + blen, "uintdata int unsigned"); + break; + case TSDB_DATA_TYPE_UBIGINT: + blen += sprintf(buf + blen, "ubigdata bigint unsigned"); + break; + default: + printf("invalid col type:%d", colList[c]); + exit(1); + } + } - if (stable) { - blen += sprintf(buf + blen, "tags ("); + blen += sprintf(buf + blen, ")"); + } + + if (1 == tableType) { + blen += sprintf(buf + blen, " tags ("); for (int c = 0; c < colNum; ++c) { if (c > 0) { blen += sprintf(buf + blen, ","); @@ -2363,6 +2438,64 @@ void generateCreateTableSQL(char *buf, int32_t tblIdx, int32_t colNum, int32_t * blen += sprintf(buf + blen, ")"); } + if (3 == tableType) { + blen += sprintf(buf + blen, " tags ("); + for (int c = 0; c < colNum; ++c) { + if (c > 0) { + blen += sprintf(buf + blen, ","); + } + switch (colList[c]) { + case TSDB_DATA_TYPE_BOOL: + blen += sprintf(buf + blen, "%s", rand() % 2 ? "true": "false"); + break; + case TSDB_DATA_TYPE_TINYINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_SMALLINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_INT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_BIGINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_FLOAT: + blen += sprintf(buf + blen, "%f", rand() % 128); + break; + case TSDB_DATA_TYPE_DOUBLE: + blen += sprintf(buf + blen, "%f", rand() % 128); + break; + case TSDB_DATA_TYPE_VARCHAR: + blen += sprintf(buf + blen, "'var%d'", rand() % 128); + break; + case TSDB_DATA_TYPE_TIMESTAMP: + blen += sprintf(buf + blen, "%lld", bpTs); + break; + case TSDB_DATA_TYPE_NCHAR: + blen += sprintf(buf + blen, "'nch%d'", rand() % 128); + break; + case TSDB_DATA_TYPE_UTINYINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_USMALLINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_UINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + case TSDB_DATA_TYPE_UBIGINT: + blen += sprintf(buf + blen, "%d", rand() % 128); + break; + default: + printf("invalid col type:%d", colList[c]); + exit(1); + } + } + + blen += sprintf(buf + blen, ")"); + } + if (gCaseCtrl.printCreateTblSql) { printf("\tCreate Table SQL:%s\n", buf); } @@ -2421,11 +2554,11 @@ void prepare(TAOS *taos, int32_t colNum, int32_t *colList, int prepareStb) { result = taos_query(taos, "use demo"); taos_free_result(result); - if (!prepareStb) { + if (0 == prepareStb) { // create table for (int i = 0 ; i < 10; i++) { char buf[1024]; - generateCreateTableSQL(buf, i, colNum, colList, false); + generateCreateTableSQL(buf, i, colNum, colList, 0); result = taos_query(taos, buf); code = taos_errno(result); if (code != 0) { @@ -2436,17 +2569,35 @@ void prepare(TAOS *taos, int32_t colNum, int32_t *colList, int prepareStb) { taos_free_result(result); } } else { - char buf[1024]; - generateCreateTableSQL(buf, bpDefaultStbId, colNum, colList, true); - - result = taos_query(taos, buf); - code = taos_errno(result); - if (code != 0) { - printf("!!!failed to create table, reason:%s\n", taos_errstr(result)); + if (1 == prepareStb || 3 == prepareStb) { + char buf[1024]; + generateCreateTableSQL(buf, bpDefaultStbId, colNum, colList, 1); + + result = taos_query(taos, buf); + code = taos_errno(result); + if (code != 0) { + printf("!!!failed to create table, reason:%s\n", taos_errstr(result)); + taos_free_result(result); + exit(1); + } taos_free_result(result); - exit(1); } - taos_free_result(result); + + + if (3 == prepareStb) { + for (int i = 0 ; i < 10; i++) { + char buf[1024]; + generateCreateTableSQL(buf, i, colNum, colList, 3); + result = taos_query(taos, buf); + code = taos_errno(result); + if (code != 0) { + printf("!!!failed to create table, reason:%s\n", taos_errstr(result)); + taos_free_result(result); + exit(1); + } + taos_free_result(result); + } + } } } @@ -2486,7 +2637,7 @@ int32_t runCase(TAOS *taos, int32_t caseIdx, int32_t caseRunIdx, bool silent) { if (gCaseCtrl.autoCreateTbl) { if (gCurCase->testType == TTYPE_INSERT && gCurCase->tblNum > 1) { - gCurCase->autoCreateTbl = true; + gCurCase->autoCreateTbl = 1; if (gCurCase->bindTagNum <= 0) { gCurCase->bindTagNum = gCurCase->colNum; } diff --git a/tests/script/sh/checkAsan.sh b/tests/script/sh/checkAsan.sh index 8b478384cf..7df17b22da 100755 --- a/tests/script/sh/checkAsan.sh +++ b/tests/script/sh/checkAsan.sh @@ -37,8 +37,9 @@ python_error=`cat ${LOG_DIR}/*.info | grep -w "stack" | wc -l` # TD-20569 # /root/TDengine/source/libs/function/src/builtinsimpl.c:856:29: runtime error: signed integer overflow: 9223372036854775806 + 9223372036854775805 cannot be represented in type 'long int' # /root/TDengine/source/libs/scalar/src/sclvector.c:1075:66: runtime error: signed integer overflow: 9223372034707292160 + 1668838476672 cannot be represented in type 'long int' +# /root/TDengine/source/common/src/tdataformat.c:1876:7: runtime error: signed integer overflow: 8252423483843671206 + 2406154664059062870 cannot be represented in type 'long int' -runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type"| grep -v "builtinsimpl.c.*signed integer overflow"| grep -v "sclvector.c.*signed integer overflow" | wc -l` +runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type"| grep -v "signed integer overflow" | wc -l` echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m" echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m" @@ -58,4 +59,4 @@ else fi cat ${LOG_DIR}/*.asan exit 1 -fi \ No newline at end of file +fi diff --git a/tests/script/tsim/stream/fillIntervalValue.sim b/tests/script/tsim/stream/fillIntervalValue.sim index 89590d1be0..fe4ec759eb 100644 --- a/tests/script/tsim/stream/fillIntervalValue.sim +++ b/tests/script/tsim/stream/fillIntervalValue.sim @@ -403,23 +403,46 @@ sql drop database if exists test4; sql create database test4 vgroups 1; sql use test4; -sql create table t1(ts timestamp, a int, b int , c int, d double, s varchar(20));; -sql create stream streams4 trigger at_once into streamt4 as select _wstart ts, count(*) c1 from t1 where ts > 1648791210000 and ts < 1648791413000 interval(10s) fill(NULL); +sql create stable st(ts timestamp,a int,b int,c int, d double, s varchar(20) ) tags(ta int,tb int,tc int); +sql create table t1 using st tags(1,1,1); +sql create table t2 using st tags(2,2,2); + +sql create stream streams4 trigger at_once into streamt4 as select _wstart ts, count(*) c1, concat(tbname, 'aaa') as pname, timezone() from st where ts > 1648791000000 and ts < 1648793000000 partition by tbname interval(10s) fill(NULL); sql insert into t1 values(1648791213000,1,2,3,1.0,'aaa'); sql insert into t1 values(1648791233000,1,2,3,1.0,'aaa'); +sql insert into t1 values(1648791273000,1,2,3,1.0,'aaa'); + +sql insert into t2 values(1648791213000,1,2,3,1.0,'bbb'); +sql insert into t2 values(1648791233000,1,2,3,1.0,'bbb'); +sql insert into t2 values(1648791273000,1,2,3,1.0,'bbb'); $loop_count = 0 loop4: sleep 200 -sql select * from streamt4 order by ts; +sql select * from streamt4 order by pname, ts; + +print ===> $data[0][0] , $data[0][1] , $data[0][2] , $data[0][3] +print ===> $data[1][0] , $data[1][1] , $data[1][2] , $data[1][3] +print ===> $data[2][0] , $data[2][1] , $data[2][2] , $data[2][3] +print ===> $data[3][0] , $data[3][1] , $data[3][2] , $data[3][3] +print ===> $data[4][0] , $data[4][1] , $data[4][2] , $data[4][3] +print ===> $data[5][0] , $data[5][1] , $data[5][2] , $data[5][3] +print ===> $data[6][0] , $data[6][1] , $data[6][2] , $data[6][3] +print ===> $data[7][0] , $data[7][1] , $data[7][2] , $data[7][3] +print ===> $data[8][0] , $data[8][1] , $data[8][2] , $data[8][3] +print ===> $data[9][0] , $data[9][1] , $data[9][2] , $data[9][3] +print ===> $data[10][0] , $data[10][1] , $data[10][2] , $data[10][3] +print ===> $data[11][0] , $data[11][1] , $data[11][2] , $data[11][3] +print ===> $data[12][0] , $data[12][1] , $data[12][2] , $data[12][3] +print ===> $data[13][0] , $data[13][1] , $data[13][2] , $data[13][3] $loop_count = $loop_count + 1 if $loop_count == 10 then return -1 endi -if $rows != 3 then +if $rows != 14 then print =====rows=$rows goto loop4 endi @@ -429,6 +452,67 @@ if $data11 != NULL then goto loop4 endi +if $data12 != t1aaa then + print =====data12=$data12 + goto loop4 +endi + +if $data13 == NULL then + print =====data13=$data13 + goto loop4 +endi + +if $data32 != t1aaa then + print =====data32=$data32 + goto loop4 +endi + +if $data42 != t1aaa then + print =====data42=$data42 + goto loop4 +endi + +if $data52 != t1aaa then + print =====data52=$data52 + goto loop4 +endi + +if $data81 != NULL then + print =====data81=$data81 + goto loop4 +endi + +if $data82 != t2aaa then + print =====data82=$data82 + goto loop4 +endi + +if $data83 == NULL then + print =====data83=$data83 + goto loop4 +endi + +if $data[10][2] != t2aaa then + print =====data[10][2]=$data[10][2] + goto loop4 +endi + +if $data[11][2] != t2aaa then + print =====data[11][2]=$data[11][2] + goto loop4 +endi + +if $data[12][2] != t2aaa then + print =====data[12][2]=$data[12][2] + goto loop4 +endi + +if $data[12][3] == NULL then + print =====data[12][3]=$data[12][3] + goto loop4 +endi + + diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py index 9bdc0a2cf4..19239513d6 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py @@ -73,9 +73,10 @@ class TDTestCase: for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: + tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py index d33a1b0d27..f27c343329 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py @@ -74,14 +74,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -124,7 +124,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_1_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): drop_db_sql = "drop database if exists {}".format(dbname) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py index 75e01977fd..671010db9a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py @@ -75,14 +75,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -125,7 +125,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_3_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): newTdSql=tdCom.newTdSql() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py index 77dcab90bf..0537d824b9 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py @@ -74,14 +74,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -124,7 +124,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_3_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): drop_db_sql = "drop database if exists {}".format(dbname) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py index 1a2c31a311..73153c5825 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py @@ -36,7 +36,7 @@ class TDTestCase: self.tb_nums = 10 self.row_nums = 100 self.stop_dnode_id = None - self.loop_restart_times = 5 + self.loop_restart_times = 3 self.current_thread = None self.max_restart_time = 10 self.try_check_times = 10 @@ -84,14 +84,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -150,7 +150,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -171,7 +171,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -271,16 +271,16 @@ class TDTestCase: caller = inspect.getframeinfo(inspect.stack()[2][0]) if row < 0: args = (caller.filename, caller.lineno, sql, row) - tdLog.exit("%s(%d) failed: sql:%s, row:%d is smaller than zero" % args) + tdLog.notice("%s(%d) failed: sql:%s, row:%d is smaller than zero" % args) if col < 0: args = (caller.filename, caller.lineno, sql, row) - tdLog.exit("%s(%d) failed: sql:%s, col:%d is smaller than zero" % args) + tdLog.notice("%s(%d) failed: sql:%s, col:%d is smaller than zero" % args) if row > tdSql.queryRows: args = (caller.filename, caller.lineno, sql, row, tdSql.queryRows) - tdLog.exit("%s(%d) failed: sql:%s, row:%d is larger than queryRows:%d" % args) + tdLog.notice("%s(%d) failed: sql:%s, row:%d is larger than queryRows:%d" % args) if col > tdSql.queryCols: args = (caller.filename, caller.lineno, sql, col, tdSql.queryCols) - tdLog.exit("%s(%d) failed: sql:%s, col:%d is larger than queryCols:%d" % args) + tdLog.notice("%s(%d) failed: sql:%s, col:%d is larger than queryCols:%d" % args) def mycheckData(self, sql ,row, col, data): check_status = True @@ -361,31 +361,31 @@ class TDTestCase: # print(ps_kill_taosd) os.system(ps_kill_taosd) else : - tdLog.exit(" ==== port of dnode {} not found ====".format(dnode_id)) + tdLog.notice(" ==== port of dnode {} not found ====".format(dnode_id)) def stop_All(self): tdDnodes = cluster.dnodes - # newTdSql=tdCom.newTdSql() + newTdSql=tdCom.newTdSql() # ==== stop all dnode ===== for k ,v in self.dnode_list.items(): dnode_id = v[0] - # tdDnodes[dnode_id-1].stoptaosd() - self.force_stop_dnode(dnode_id) + + tdDnodes[dnode_id-1].stoptaosd() + # self.force_stop_dnode(dnode_id) # self.wait_stop_dnode_OK(newTdSql) def start_All(self): tdDnodes = cluster.dnodes - # newTdSql=tdCom.newTdSql() + for k ,v in self.dnode_list.items(): dnode_id = v[0] start = time.time() tdDnodes[dnode_id-1].starttaosd() - # self.wait_start_dnode_OK(newTdSql) end = time.time() time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) @@ -401,7 +401,10 @@ class TDTestCase: # begin to stop All taosd self.stop_All() # begin to start All taosd - self.start_All() + self.start_All() + + time.sleep(5) + tdLog.debug(" ==== cluster has restart , this is {}_th restart cluster ==== ".format(i)) @@ -418,9 +421,6 @@ class TDTestCase: self.check_setup_cluster_status() self.stop_All_dnodes_check_datas() - - - def stop(self): tdSql.close() tdLog.success(f"{__file__} successfully executed") diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py index a9fb9555e8..d054e25e46 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py @@ -75,14 +75,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -125,7 +125,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_3_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): newTdSql=tdCom.newTdSql() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py index 6102a82b04..2993ce3a4a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py @@ -77,14 +77,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -128,7 +128,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_3_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): newTdSql=tdCom.newTdSql() @@ -284,7 +284,7 @@ class TDTestCase: end = time.time() time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py index d87ec3d35e..d9a84db6a2 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py @@ -77,14 +77,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -128,7 +128,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_db_replica_3_insertdatas(self, dbname, replica_num ,vgroup_nums ,tb_nums , row_nums ): newTdSql=tdCom.newTdSql() @@ -262,7 +262,7 @@ class TDTestCase: if not vote_act: print("=======before_revote_leader_infos ======\n" , before_leader_infos) print("=======after_revote_leader_infos ======\n" , after_leader_infos) - tdLog.exit(" ===maybe revote not occured , there is no dnode offline ====") + tdLog.notice(" ===maybe revote not occured , there is no dnode offline ====") else: for vgroup_info in vote_act: for ind , role in enumerate(vgroup_info): @@ -282,10 +282,15 @@ class TDTestCase: def check_insert_status(self, newTdSql , dbname, tb_nums , row_nums): newTdSql.execute("use {}".format(dbname)) - newTdSql.query("select count(*) from {}.{}".format(dbname,'stb1')) - # tdSql.checkData(0 , 0 , tb_nums*row_nums) - newTdSql.query("select distinct tbname from {}.{}".format(dbname,'stb1')) - # tdSql.checkRows(tb_nums) + os.system(''' taos -s "select count(*) from {}.{};" '''.format(dbname,'stb1')) + # try: + # newTdSql.query("select count(*) from {}.{}".format(dbname,'stb1')) + # # tdSql.checkData(0 , 0 , tb_nums*row_nums) + # newTdSql.query("select distinct tbname from {}.{}".format(dbname,'stb1')) + # # tdSql.checkRows(tb_nums) + # except taos.error.ProgrammingError as err: + # tdLog.info(err.msg) + # pass def loop_query_constantly(self, times , db_name, tb_nums ,row_nums): @@ -335,9 +340,10 @@ class TDTestCase: tdDnodes[self.stop_dnode_id-1].starttaosd() self.wait_start_dnode_OK(newTdSql) end = time.time() + time.sleep(3) time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py index 00b808b8b4..74181bc563 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py @@ -83,14 +83,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -133,7 +133,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_database(self, dbname, replica_num ,vgroup_nums ): drop_db_sql = "drop database if exists {}".format(dbname) @@ -190,7 +190,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - #tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + #tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -431,7 +431,7 @@ class TDTestCase: end = time.time() time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) # create new stables again tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) @@ -454,7 +454,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) def _create_threading(dbname): diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py index e64649189d..f1275dcecc 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py @@ -36,7 +36,7 @@ class TDTestCase: self.tb_nums = 10 self.row_nums = 100 self.stop_dnode_id = None - self.loop_restart_times = 5 + self.loop_restart_times = 3 self.current_thread = None self.max_restart_time = 10 self.try_check_times = 10 @@ -83,14 +83,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -133,7 +133,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_database(self, dbname, replica_num ,vgroup_nums ): drop_db_sql = "drop database if exists {}".format(dbname) @@ -190,7 +190,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -211,7 +211,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -428,7 +428,7 @@ class TDTestCase: end = time.time() time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) # create new stables again tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) @@ -453,7 +453,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) def _create_threading(dbname): diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py index b633887009..b48fed77ee 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py @@ -404,8 +404,8 @@ class TDTestCase: # begin stop dnode start = time.time() - tdDnodes[self.stop_dnode_id-1].forcestop() - + tdDnodes[self.stop_dnode_id-1].stoptaosd() + self.wait_stop_dnode_OK(newTdSql) # append rows of stablename when dnode stop @@ -451,11 +451,13 @@ class TDTestCase: # begin restart dnode # force stop taosd by kill -9 - self.force_stop_dnode(self.stop_dnode_id) - self.wait_stop_dnode_OK(newTdSql) + # self.force_stop_dnode(self.stop_dnode_id) + tdDnodes[self.stop_dnode_id].stoptaosd() + # self.wait_stop_dnode_OK(newTdSql) + time.sleep(3) os.system(" taos -s 'select * from information_schema.ins_dnodes;' ") tdDnodes[self.stop_dnode_id-1].starttaosd() - self.wait_start_dnode_OK(newTdSql) + # self.wait_start_dnode_OK(newTdSql) end = time.time() time_cost = int(end-start) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py index 6415da94b4..0af157ebff 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py @@ -166,14 +166,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -287,12 +287,12 @@ class TDTestCase: break return check_status - def start_benchmark_inserts(self,dbname , json_file): + def start_benchmark_inserts(self): benchmark_build_path = self.getBuildPath() + '/build/bin/taosBenchmark' - tdLog.notice("==== start taosBenchmark insert datas of database {} ==== ".format(dbname)) - os.system(" {} -y -n 10 -t 10 >>/dev/null 2>&1 ".format(benchmark_build_path , json_file)) + tdLog.notice("==== start taosBenchmark insert datas of database test ==== ") + os.system(" {} -y -n 10000 -t 100 ".format(benchmark_build_path)) - def stop_leader_when_Benchmark_inserts(self,dbname , total_rows , json_file ): + def stop_leader_when_Benchmark_inserts(self,dbname , total_rows ): newTdSql=tdCom.newTdSql() @@ -302,35 +302,22 @@ class TDTestCase: tdSql.execute(" create database {} replica {} vgroups {}".format(dbname , self.replica , self.vgroups)) # start insert datas using taosBenchmark ,expect insert 10000 rows - - self.current_thread = threading.Thread(target=self.start_benchmark_inserts, args=(dbname,json_file)) + time.sleep(3) + self.current_thread = threading.Thread(target=self.start_benchmark_inserts, args=()) self.current_thread.start() tdSql.query(" select * from information_schema.ins_databases ") - # make sure create database ok - while (tdSql.queryRows!=3): - time.sleep(0.5) - tdSql.query(" select * from information_schema.ins_databases ") - - # # make sure create stable ok - tdSql.query(" show {}.stables ".format(dbname)) - while (tdSql.queryRows!=1): - time.sleep(0.5) - tdSql.query(" show {}.stables ".format(dbname)) - - # stop leader of database when insert 10% rows - # os.system("taos -s 'select * from information_schema.ins_databases';") - tdSql.query(" select count(*) from {}.{} ".format(dbname,"stb1")) + tdSql.query(" select count(*) from {}.{} ".format(dbname,"meters")) while not tdSql.queryResult: - tdSql.query(" select count(*) from {}.{} ".format(dbname,"stb1")) + tdSql.query(" select count(*) from {}.{} ".format(dbname,"meters")) tdLog.debug(" === current insert {} rows in database {} === ".format(tdSql.queryResult[0][0] , dbname)) while (tdSql.queryResult[0][0] < total_rows/10): if tdSql.queryResult: tdLog.debug(" === current insert {} rows in database {} === ".format(tdSql.queryResult[0][0] , dbname)) time.sleep(0.01) - tdSql.query(" select count(*) from {}.{} ".format(dbname,"stb1")) + tdSql.query(" select count(*) from {}.{} ".format(dbname,"meters")) tdLog.debug(" === database {} has write {} rows at least ====".format(dbname,total_rows/10)) @@ -340,24 +327,26 @@ class TDTestCase: before_leader_infos = self.get_leader_infos(dbname) tdDnodes[self.stop_dnode_id-1].stoptaosd() + os.system("taos -s 'show dnodes;'") # self.current_thread.join() after_leader_infos = self.get_leader_infos(dbname) - start = time.time() - revote_status = self.check_revote_leader_success(dbname ,before_leader_infos , after_leader_infos) - while not revote_status: - after_leader_infos = self.get_leader_infos(dbname) - revote_status = self.check_revote_leader_success(dbname ,before_leader_infos , after_leader_infos) - end = time.time() - time_cost = end - start - tdLog.debug(" ==== revote leader of database {} cost time {} ====".format(dbname , time_cost)) + # start = time.time() + # revote_status = self.check_revote_leader_success(dbname ,before_leader_infos , after_leader_infos) + # while not revote_status: + # after_leader_infos = self.get_leader_infos(dbname) + # revote_status = self.check_revote_leader_success(dbname ,before_leader_infos , after_leader_infos) + # end = time.time() + # time_cost = end - start + # tdLog.debug(" ==== revote leader of database {} cost time {} ====".format(dbname , time_cost)) self.current_thread.join() + time.sleep(2) tdDnodes[self.stop_dnode_id-1].starttaosd() self.wait_start_dnode_OK(newTdSql) - tdSql.query(" select count(*) from {}.{} ".format(dbname,"stb1")) + tdSql.query(" select count(*) from {}.{} ".format(dbname,"meters")) tdLog.debug(" ==== expected insert {} rows of database {} , really is {}".format(total_rows, dbname , tdSql.queryResult[0][0])) @@ -366,11 +355,8 @@ class TDTestCase: # basic insert and check of cluster # self.check_setup_cluster_status() - json = os.path.dirname(__file__) + '/insert_10W_rows.json' - self.stop_leader_when_Benchmark_inserts('db_1' , 100 ,json) - # tdLog.notice( " ===== start insert 100W rows ==== ") - # json = os.path.dirname(__file__) + '/insert_100W_rows.json' - # self.stop_leader_when_Benchmark_inserts('db_2' , 1000000 ,json) + self.stop_leader_when_Benchmark_inserts('test' , 1000000 ) + def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py index 1b99c1e92b..6308e67068 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py @@ -166,14 +166,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -216,7 +216,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def create_database(self, dbname, replica_num ,vgroup_nums ): drop_db_sql = "drop database if exists {}".format(dbname) @@ -273,7 +273,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -294,7 +294,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -399,7 +399,7 @@ class TDTestCase: if not vote_act: print("=======before_revote_leader_infos ======\n" , before_leader_infos) print("=======after_revote_leader_infos ======\n" , after_leader_infos) - tdLog.exit(" ===maybe revote not occured , there is no dnode offline ====") + tdLog.notice(" ===maybe revote not occured , there is no dnode offline ====") else: for vgroup_info in vote_act: for ind , role in enumerate(vgroup_info): @@ -455,7 +455,10 @@ class TDTestCase: # begin stop dnode # force stop taosd by kill -9 - self.force_stop_dnode(self.stop_dnode_id) + # self.force_stop_dnode(self.stop_dnode_id) + + tdDnodes[self.stop_dnode_id-1].stoptaosd() + self.wait_stop_dnode_OK(newTdSql) @@ -496,7 +499,7 @@ class TDTestCase: end = time.time() time_cost = int(end -start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) # create new stables again tdLog.notice(" ==== create new stable {} when dnode {} restart ====".format('new_stb2' , self.stop_dnode_id)) @@ -515,8 +518,9 @@ class TDTestCase: # force stop taosd by kill -9 # get leader info before stop before_leader_infos = self.get_leader_infos(db_name) - self.force_stop_dnode(self.stop_dnode_id) - + # self.force_stop_dnode(self.stop_dnode_id) + + tdDnodes[self.stop_dnode_id-1].stoptaosd() self.wait_stop_dnode_OK(newTdSql) # check revote leader when restart servers @@ -554,7 +558,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) def _create_threading(dbname): diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py index 1dcaae452e..4fcfbfaf08 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py @@ -85,14 +85,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -151,7 +151,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -172,7 +172,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -410,7 +410,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) for thread in self.thread_list: thread.join() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py index 945fcf2990..42d9e944f9 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py @@ -85,14 +85,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -151,7 +151,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -172,7 +172,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -399,7 +399,8 @@ class TDTestCase: for loop in range(self.loop_restart_times): tdLog.debug(" ==== this is {}_th restart follower of database {} ==== ".format(loop ,self.db_name)) self.stop_dnode_id = self._get_stop_dnode_id(self.db_name,"follower" ) - self.force_stop_dnode(self.stop_dnode_id) + # self.force_stop_dnode(self.stop_dnode_id) + tdDnodes[self.stop_dnode_id-1].stoptaosd() self.wait_stop_dnode_OK(newTdSql) start = time.time() @@ -409,7 +410,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) for thread in self.thread_list: thread.join() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py index 8ef151a385..c53e909417 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py @@ -85,14 +85,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -151,7 +151,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups; '".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select count(*) from {}.{}".format(dbname,stablename)) @@ -172,7 +172,7 @@ class TDTestCase: while not status_OK : if count > self.try_check_times: os.system("taos -s ' show {}.vgroups;'".format(dbname)) - tdLog.exit(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) + tdLog.notice(" ==== check insert rows failed after {} try check {} times of database {}".format(count , self.try_check_times ,dbname)) break time.sleep(0.1) tdSql.query("select distinct tbname from {}.{}".format(dbname,stablename)) @@ -438,7 +438,8 @@ class TDTestCase: before_leader_infos = self.get_leader_infos(self.db_name) self.stop_dnode_id = self._get_stop_dnode_id(self.db_name ,"leader") - self.force_stop_dnode(self.stop_dnode_id) + # self.force_stop_dnode(self.stop_dnode_id) + tdDnodes[self.stop_dnode_id-1].stoptaosd() start = time.time() @@ -464,7 +465,7 @@ class TDTestCase: time_cost = int(end-start) if time_cost > self.max_restart_time: - tdLog.exit(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) + tdLog.notice(" ==== restart dnode {} cost too much time , please check ====".format(self.stop_dnode_id)) for thread in self.thread_list: thread.join() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py index 49e5cafe96..1f994e3350 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py @@ -30,7 +30,7 @@ class TDTestCase: self.vgroups = 2 self.tb_nums = 10 self.row_nums = 10 - self.max_vote_time_cost = 30 # seconds + self.max_vote_time_cost = 100 # seconds def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -74,14 +74,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -124,7 +124,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def check_vgroups_init_done(self,dbname): @@ -159,7 +159,7 @@ class TDTestCase: tdLog.notice(" ==== database %s vote the leaders success , cost time is %.3f second ====="%(dbname,cost_time) ) # os.system("taos -s 'show {}.vgroups;'".format(dbname)) if cost_time >= self.max_vote_time_cost: - tdLog.exit(" ==== database %s vote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) + tdLog.notice(" ==== database %s vote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) return cost_time @@ -184,10 +184,10 @@ class TDTestCase: tdSql.execute(create_db_replica_3_vgroups_10) self.vote_leader_time_costs(db2) - # create database replica 3 vgroups 100 + # create database replica 3 vgroups 30 db3 = 'db_3' create_db_replica_3_vgroups_100 = "create database {} replica 3 vgroups 20".format(db3) - tdLog.notice('=======database {} replica 3 vgroups 100 ======'.format(db3)) + tdLog.notice('=======database {} replica 3 vgroups 30 ======'.format(db3)) tdSql.execute(create_db_replica_3_vgroups_100) self.vote_leader_time_costs(db3) diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py index 20cf7c583a..56131f24be 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py @@ -77,14 +77,14 @@ class TDTestCase: if count==1 and is_leader: tdLog.notice("===== depoly cluster success with 1 mnode as leader =====") else: - tdLog.exit("===== depoly cluster fail with 1 mnode as leader =====") + tdLog.notice("===== depoly cluster fail with 1 mnode as leader =====") for k ,v in self.dnode_list.items(): if k == mnode_name: if v[3]==0: tdLog.notice("===== depoly cluster mnode only success at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: - tdLog.exit("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) + tdLog.notice("===== depoly cluster mnode only fail at {} , support_vnodes is {} ".format(mnode_name,v[3])) else: continue @@ -127,7 +127,7 @@ class TDTestCase: if len(v) ==1 and v[0] in ['leader', 'leader*']: tdLog.notice(" === create database replica only 1 role leader check success of vgroup_id {} ======".format(k)) else: - tdLog.exit(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) + tdLog.notice(" === create database replica only 1 role leader check fail of vgroup_id {} ======".format(k)) def _get_stop_dnode(self): only_dnode_list = self.dnode_list.keys() - self.mnode_list.keys() @@ -151,7 +151,7 @@ class TDTestCase: if role == stop_dnode_id and vgroups_leader_follower[ind+1]=="offline": tdLog.notice("====== dnode {} has offline , endpoint is {}".format(stop_dnode_id , self.stop_dnode)) elif role == stop_dnode_id : - tdLog.exit("====== dnode {} has not offline , endpoint is {}".format(stop_dnode_id , self.stop_dnode)) + tdLog.notice("====== dnode {} has not offline , endpoint is {}".format(stop_dnode_id , self.stop_dnode)) else: continue else: @@ -257,7 +257,7 @@ class TDTestCase: tdLog.notice(" ==== database %s vote the leaders success , cost time is %.3f second ====="%(dbname,cost_time) ) # os.system("taos -s 'show {}.vgroups;'".format(dbname)) if cost_time >= self.max_vote_time_cost: - tdLog.exit(" ==== database %s vote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) + tdLog.notice(" ==== database %s vote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) return cost_time @@ -276,7 +276,7 @@ class TDTestCase: tdLog.notice(" ==== database %s revote the leaders success , cost time is %.3f second ====="%(dbname,cost_time) ) # os.system("taos -s 'show {}.vgroups;'".format(dbname)) if cost_time >= self.max_vote_time_cost: - tdLog.exit(" ==== database %s revote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) + tdLog.notice(" ==== database %s revote the leaders cost too large time , cost time is %.3f second ===="%(dbname,cost_time) ) return cost_time @@ -300,7 +300,7 @@ class TDTestCase: vote_act = set(set(after_vgroups)-set(before_vgroups)) if not vote_act: - tdLog.exit(" ===maybe revote not occured , there is no dnode offline ====") + tdLog.notice(" ===maybe revote not occured , there is no dnode offline ====") else: for vgroup_info in vote_act: for ind , role in enumerate(vgroup_info): @@ -309,7 +309,7 @@ class TDTestCase: if vgroup_info[ind+1] =="offline" and "leader" in vgroup_info: tdLog.notice(" === revote leader ok , leader is {} now ====".format(list(vgroup_info).index("leader")-1)) elif vgroup_info[ind+1] !="offline": - tdLog.exit(" === dnode {} should be offline ".format(self.stop_dnode)) + tdLog.notice(" === dnode {} should be offline ".format(self.stop_dnode)) else: continue break diff --git a/tests/system-test/6-cluster/vnode/insert_100W_rows.json b/tests/system-test/6-cluster/vnode/insert_100W_rows.json deleted file mode 100644 index 4b49c38fb6..0000000000 --- a/tests/system-test/6-cluster/vnode/insert_100W_rows.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "filetype": "insert", - "cfgdir": "/etc/taos/", - "host": "localhost", - "port": 6030, - "user": "root", - "password": "taosdata", - "thread_count": 10, - "create_table_thread_count": 10, - "confirm_parameter_prompt": "no", - "insert_interval": 0, - "interlace_rows": 1000, - "num_of_records_per_req": 1000, - "databases": [ - { - "dbinfo": { - "name": "db_2", - "drop": "no", - "vgroups": 1, - "replica": 3 - }, - "super_tables": [ - { - "name": "stb1", - "childtable_count": 10, - "childtable_prefix": "sub_", - "auto_create_table": "yes", - "batch_create_tbl_num": 5000, - "data_source": "rand", - "insert_mode": "taosc", - "insert_rows": 100000, - "interlace_rows": 0, - "insert_interval": 0, - "max_sql_len": 1000000, - "disorder_ratio": 0, - "disorder_range": 1000, - "timestamp_step": 10, - "start_timestamp": "2015-05-01 00:00:00.000", - "sample_format": "csv", - "use_sample_ts": "no", - "tags_file": "", - "columns": [ - { - "type": "INT", - "count": 1 - }, - { - "type": "TINYINT", - "count": 1 - }, - { - "type": "SMALLINT", - "count": 1 - }, - { - "type": "BIGINT", - "count": 1 - }, - { - "type": "UINT", - "count": 1 - }, - { - "type": "UTINYINT", - "count": 1 - }, - { - "type": "USMALLINT", - "count": 1 - }, - { - "type": "UBIGINT", - "count": 1 - }, - { - "type": "DOUBLE", - "count": 1 - }, - { - "type": "FLOAT", - "count": 1 - }, - { - "type": "BINARY", - "len": 40, - "count": 1 - }, - { - "type": "VARCHAR", - "len": 200, - "count": 1 - }, - { - "type": "nchar", - "len": 200, - "count": 1 - } - ], - "tags": [ - { - "type": "INT", - "count": 1 - }, - { - "type": "BINARY", - "len": 100, - "count": 1 - }, - { - "type": "BOOL", - "count": 1 - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/tests/system-test/6-cluster/vnode/insert_10W_rows.json b/tests/system-test/6-cluster/vnode/insert_10W_rows.json deleted file mode 100644 index b3b63aed12..0000000000 --- a/tests/system-test/6-cluster/vnode/insert_10W_rows.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "filetype": "insert", - "cfgdir": "/etc/taos/", - "host": "localhost", - "port": 6030, - "user": "root", - "password": "taosdata", - "thread_count": 1, - "create_table_thread_count": 1, - "confirm_parameter_prompt": "no", - "insert_interval": 0, - "interlace_rows": 1000, - "num_of_records_per_req": 1000, - "databases": [ - { - "dbinfo": { - "name": "db_1", - "drop": "no", - "vgroups": 1, - "replica": 3 - }, - "super_tables": [ - { - "name": "stb1", - "childtable_count": 10, - "childtable_prefix": "sub_", - "auto_create_table": "yes", - "batch_create_tbl_num": 5000, - "data_source": "rand", - "insert_mode": "taosc", - "insert_rows": 10000, - "interlace_rows": 0, - "insert_interval": 0, - "max_sql_len": 1000000, - "disorder_ratio": 0, - "disorder_range": 1000, - "timestamp_step": 10, - "start_timestamp": "2015-05-01 00:00:00.000", - "sample_format": "csv", - "use_sample_ts": "no", - "tags_file": "", - "columns": [ - { - "type": "INT", - "count": 1 - }, - { - "type": "TINYINT", - "count": 1 - }, - { - "type": "SMALLINT", - "count": 1 - }, - { - "type": "BIGINT", - "count": 1 - }, - { - "type": "UINT", - "count": 1 - }, - { - "type": "UTINYINT", - "count": 1 - }, - { - "type": "USMALLINT", - "count": 1 - }, - { - "type": "UBIGINT", - "count": 1 - }, - { - "type": "DOUBLE", - "count": 1 - }, - { - "type": "FLOAT", - "count": 1 - }, - { - "type": "BINARY", - "len": 40, - "count": 1 - }, - { - "type": "VARCHAR", - "len": 200, - "count": 1 - }, - { - "type": "nchar", - "len": 200, - "count": 1 - } - ], - "tags": [ - { - "type": "INT", - "count": 1 - }, - { - "type": "BINARY", - "len": 100, - "count": 1 - }, - { - "type": "BOOL", - "count": 1 - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c index 577021f460..28578e48a2 100644 --- a/tools/shell/src/shellEngine.c +++ b/tools/shell/src/shellEngine.c @@ -232,7 +232,7 @@ void shellRunSingleCommandImp(char *command) { int32_t num_rows_affacted = taos_affected_rows(pSql); taos_free_result(pSql); et = taosGetTimestampUs(); - printf("Query OK, %d row(s) affected(%.6fs)\r\n", num_rows_affacted, (et - st) / 1E6); + printf("Query OK, %d row(s) affected (%.6fs)\r\n", num_rows_affacted, (et - st) / 1E6); // call auto tab callbackAutoTab(command, NULL, false);