From f743478363c8ff636481f8ff14c4bc266006bf1b Mon Sep 17 00:00:00 2001 From: hjxilinx Date: Wed, 25 Mar 2020 14:19:00 +0800 Subject: [PATCH] [td-32]use code to denote if query is killed or not --- src/query/src/queryExecutor.c | 43 +++++++++++------------- src/vnode/detail/src/vnodeQueryImpl.c | 4 +-- src/vnode/detail/src/vnodeQueryProcess.c | 24 ++++++------- 3 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/query/src/queryExecutor.c b/src/query/src/queryExecutor.c index f233ac0d99..a996c8467f 100644 --- a/src/query/src/queryExecutor.c +++ b/src/query/src/queryExecutor.c @@ -1599,7 +1599,8 @@ static void teardownQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv) { pRuntimeEnv->pTSBuf = tsBufDestory(pRuntimeEnv->pTSBuf); } -static bool isQueryKilled(SQuery *pQuery) { +static bool isQueryKilled(SQInfo *pQInfo) { + return (pQInfo->code == TSDB_CODE_QUERY_CANCELLED); #if 0 /* * check if the queried meter is going to be deleted. @@ -1613,8 +1614,6 @@ static bool isQueryKilled(SQuery *pQuery) { return (pQInfo->killed == 1); #endif - - return 0; } static bool setQueryKilled(SQInfo* pQInfo) { @@ -2641,7 +2640,7 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) { while (tsdbNextDataBlock(pQueryHandle)) { // check if query is killed or not set the status of query to pass the status check - if (isQueryKilled(pQuery)) { + if (isQueryKilled(GET_QINFO_ADDR(pRuntimeEnv))) { return cnt; } @@ -3607,7 +3606,7 @@ void vnodeScanAllData(SQueryRuntimeEnv *pRuntimeEnv) { pRuntimeEnv->scanFlag = REPEAT_SCAN; /* check if query is killed or not */ - if (isQueryKilled(pQuery)) { + if (isQueryKilled(GET_QINFO_ADDR(pRuntimeEnv))) { // setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -4394,14 +4393,10 @@ static void queryOnDataBlocks(SQInfo *pQInfo, STableDataInfo *pMeterDataInfo) { SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv; SQuery * pQuery = pRuntimeEnv->pQuery; - // SMeterObj * pTempMeter = getMeterObj(pSupporter->pMetersHashTable, pSupporter->pMeterSidExtInfo[0]->sid); - // __block_search_fn_t searchFn = vnodeSearchKeyFunc[pTempMeter->searchAlgorithm]; - // dTrace("QInfo:%p start to check data blocks in %d files", pQInfo, pVnodeFileInfo->numOfFiles); - tsdb_query_handle_t *pQueryHandle = pRuntimeEnv->pQueryHandle; while (tsdbNextDataBlock(pQueryHandle)) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { break; } @@ -4583,7 +4578,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { pSupporter->meterIdx = start; for (int32_t k = start; k <= end; ++k, pSupporter->meterIdx++) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -4610,7 +4605,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { pSupporter->subgroupIdx); for (int32_t k = start; k <= end; ++k) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -4661,7 +4656,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { while (pSupporter->meterIdx < pSupporter->numOfMeters) { int32_t k = pSupporter->meterIdx; - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -4955,7 +4950,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) { doMultiMeterSupplementaryScan(pQInfo); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p query killed, abort", pQInfo); return; } @@ -4994,7 +4989,7 @@ static void tableFixedOutputProcessor(SQInfo *pQInfo) { vnodeScanAllData(pRuntimeEnv); doFinalizeResult(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -5027,7 +5022,7 @@ static void tableMultiOutputProcessor(SQInfo *pQInfo) { vnodeScanAllData(pRuntimeEnv); doFinalizeResult(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -5074,7 +5069,7 @@ static void vnodeSingleMeterIntervalMainLooper(SQueryRuntimeEnv *pRuntimeEnv) { initCtxOutputBuf(pRuntimeEnv); vnodeScanAllData(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(GET_QINFO_ADDR(pRuntimeEnv))) { return; } @@ -5177,7 +5172,7 @@ void qTableQuery(SQInfo *pQInfo) { SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv; SQuery *pQuery = pRuntimeEnv->pQuery; - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p it is already killed, abort", pQInfo); return; } @@ -5267,7 +5262,7 @@ void qTableQuery(SQInfo *pQInfo) { pQInfo->elapsedTime += (taosGetTimestampUs() - st); /* check if query is killed or not */ - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p query is killed", pQInfo); } else { dTrace("QInfo:%p query task completed, %d points are returned", pQInfo, pQuery->rec.pointsRead); @@ -5309,7 +5304,7 @@ void qSuperTableQuery(void *pReadMsg) { /* record the total elapsed time */ pQInfo->elapsedTime += (taosGetTimestampUs() - st); - pQuery->status = isQueryKilled(pQuery) ? 1 : 0; + pQuery->status = isQueryKilled(pQInfo) ? 1 : 0; // taosInterpoSetStartInfo(&pQInfo->runtimeEnv.interpoInfo, pQuery->pointsRead, // pQInfo->query.interpoType); @@ -6172,7 +6167,7 @@ int32_t qRetrieveQueryResultInfo(SQInfo *pQInfo, int32_t *numOfRows, int32_t *ro } SQuery *pQuery = pQInfo->runtimeEnv.pQuery; - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p query is killed, code:%d", pQInfo, pQInfo->code); if (pQInfo->code == TSDB_CODE_SUCCESS) { return TSDB_CODE_QUERY_CANCELLED; @@ -6289,11 +6284,11 @@ int32_t qDumpRetrieveResult(SQInfo *pQInfo, SRetrieveTableRsp** pRsp, int32_t* c // has more data to return or need next round to execute addToTaskQueue(pQInfo); - } else if (isQueryKilled(pQuery)) { - code = TSDB_CODE_QUERY_CANCELLED; + } else { + code = pQInfo->code; } - if (isQueryKilled(pQuery) || Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) { + if (isQueryKilled(pQInfo) || Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) { (*pRsp)->completed = 1; // notify no more result to client vnodeFreeQInfo(pQInfo); } diff --git a/src/vnode/detail/src/vnodeQueryImpl.c b/src/vnode/detail/src/vnodeQueryImpl.c index 9eb3fb8b65..f3e5cc27b3 100644 --- a/src/vnode/detail/src/vnodeQueryImpl.c +++ b/src/vnode/detail/src/vnodeQueryImpl.c @@ -5312,7 +5312,7 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) { while (1) { // check if query is killed or not set the status of query to pass the status check - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return cnt; } @@ -6375,7 +6375,7 @@ void vnodeScanAllData(SQueryRuntimeEnv *pRuntimeEnv) { pRuntimeEnv->scanFlag = REPEAT_SCAN; /* check if query is killed or not */ - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } diff --git a/src/vnode/detail/src/vnodeQueryProcess.c b/src/vnode/detail/src/vnodeQueryProcess.c index cedb76b4ac..23520f35a1 100644 --- a/src/vnode/detail/src/vnodeQueryProcess.c +++ b/src/vnode/detail/src/vnodeQueryProcess.c @@ -105,7 +105,7 @@ static void queryOnMultiDataCache(SQInfo *pQInfo, SMeterDataInfo *pMeterDataInfo int32_t start = pSupporter->pSidSet->starterPos[groupIdx]; int32_t end = pSupporter->pSidSet->starterPos[groupIdx + 1] - 1; - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -276,7 +276,7 @@ static void queryOnMultiDataFiles(SQInfo *pQInfo, SMeterDataInfo *pMeterDataInfo int64_t st = taosGetTimestampUs(); while (1) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { break; } @@ -363,7 +363,7 @@ static void queryOnMultiDataFiles(SQInfo *pQInfo, SMeterDataInfo *pMeterDataInfo int32_t j = QUERY_IS_ASC_QUERY(pQuery) ? 0 : numOfBlocks - 1; for (; j < numOfBlocks && j >= 0; j += step) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { break; } @@ -603,7 +603,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { pSupporter->meterIdx = start; for (int32_t k = start; k <= end; ++k, pSupporter->meterIdx++) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -630,7 +630,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { pSupporter->subgroupIdx); for (int32_t k = start; k <= end; ++k) { - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -681,7 +681,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { while (pSupporter->meterIdx < pSupporter->numOfMeters) { int32_t k = pSupporter->meterIdx; - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { setQueryStatus(pQuery, QUERY_NO_DATA_TO_CHECK); return; } @@ -958,7 +958,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) { doMultiMeterSupplementaryScan(pQInfo); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p query killed, abort", pQInfo); return; } @@ -998,7 +998,7 @@ static void vnodeSingleTableFixedOutputProcessor(SQInfo *pQInfo) { vnodeScanAllData(pRuntimeEnv); doFinalizeResult(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -1033,7 +1033,7 @@ static void vnodeSingleTableMultiOutputProcessor(SQInfo *pQInfo) { vnodeScanAllData(pRuntimeEnv); doFinalizeResult(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -1087,7 +1087,7 @@ static void vnodeSingleMeterIntervalMainLooper(STableQuerySupportObj *pSupporter initCtxOutputBuf(pRuntimeEnv); vnodeScanAllData(pRuntimeEnv); - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { return; } @@ -1301,7 +1301,7 @@ void vnodeSingleTableQuery(SSchedMsg *pMsg) { pQInfo->useconds += (taosGetTimestampUs() - st); /* check if query is killed or not */ - if (isQueryKilled(pQuery)) { + if (isQueryKilled(pQInfo)) { dTrace("QInfo:%p query is killed", pQInfo); pQInfo->over = 1; } else { @@ -1345,7 +1345,7 @@ void vnodeMultiMeterQuery(SSchedMsg *pMsg) { /* record the total elapsed time */ pQInfo->useconds += (taosGetTimestampUs() - st); - pQInfo->over = isQueryKilled(pQuery) ? 1 : 0; + pQInfo->over = isQueryKilled(pQInfo) ? 1 : 0; taosInterpoSetStartInfo(&pQInfo->pTableQuerySupporter->runtimeEnv.interpoInfo, pQuery->pointsRead, pQInfo->query.interpoType); -- GitLab