提交 84c1eb3c 编写于 作者: H hjxilinx

fix bugs in regression test(degenerated cases, committed blocks are ignored in get cache blocks).

上级 819b4c61
...@@ -1057,7 +1057,7 @@ void savePointPosition(SPositionInfo *position, int32_t fileId, int32_t slot, in ...@@ -1057,7 +1057,7 @@ void savePointPosition(SPositionInfo *position, int32_t fileId, int32_t slot, in
position->pos = pos; position->pos = pos;
} }
bool isCacheBlockValid(SQuery *pQuery, SCacheBlock *pBlock, SMeterObj *pMeterObj) { bool isCacheBlockValid(SQuery *pQuery, SCacheBlock *pBlock, SMeterObj *pMeterObj, int32_t slot) {
if (pMeterObj != pBlock->pMeterObj || pBlock->blockId > pQuery->blockId) { if (pMeterObj != pBlock->pMeterObj || pBlock->blockId > pQuery->blockId) {
SMeterObj *pNewMeterObj = pBlock->pMeterObj; SMeterObj *pNewMeterObj = pBlock->pMeterObj;
char * id = (pNewMeterObj != NULL) ? pNewMeterObj->meterId : NULL; char * id = (pNewMeterObj != NULL) ? pNewMeterObj->meterId : NULL;
...@@ -1081,11 +1081,19 @@ bool isCacheBlockValid(SQuery *pQuery, SCacheBlock *pBlock, SMeterObj *pMeterObj ...@@ -1081,11 +1081,19 @@ bool isCacheBlockValid(SQuery *pQuery, SCacheBlock *pBlock, SMeterObj *pMeterObj
dWarn( dWarn(
"QInfo:%p vid:%d sid:%d id:%s, cache block is empty. slot:%d first:%d, last:%d, numOfBlocks:%d," "QInfo:%p vid:%d sid:%d id:%s, cache block is empty. slot:%d first:%d, last:%d, numOfBlocks:%d,"
"allocated but not write data yet.", "allocated but not write data yet.",
GET_QINFO_ADDR(pQuery), pMeterObj->vnode, pMeterObj->sid, pMeterObj->meterId, pQuery->slot, pQuery->firstSlot, GET_QINFO_ADDR(pQuery), pMeterObj->vnode, pMeterObj->sid, pMeterObj->meterId, slot, pQuery->firstSlot,
pQuery->currentSlot, pQuery->numOfBlocks); pQuery->currentSlot, pQuery->numOfBlocks);
return false; return false;
} }
SCacheInfo* pCacheInfo = (SCacheInfo*) pMeterObj->pCache;
if (pCacheInfo->commitPoint == pMeterObj->pointsPerBlock && pQuery->slot == pCacheInfo->currentSlot) {
dWarn("QInfo:%p vid:%d sid:%d id:%s, cache block is committed, ignore. slot:%d first:%d, last:%d, numOfBlocks:%d",
GET_QINFO_ADDR(pQuery), pMeterObj->vnode, pMeterObj->sid, pMeterObj->meterId, slot, pQuery->firstSlot,
pQuery->currentSlot, pQuery->numOfBlocks);
return false;
}
return true; return true;
} }
...@@ -1117,7 +1125,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE ...@@ -1117,7 +1125,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE
} }
// block is empty or block does not belongs to current table, return NULL value // block is empty or block does not belongs to current table, return NULL value
if (!isCacheBlockValid(pQuery, pBlock, pMeterObj)) { if (!isCacheBlockValid(pQuery, pBlock, pMeterObj, slot)) {
return NULL; return NULL;
} }
...@@ -1203,7 +1211,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE ...@@ -1203,7 +1211,7 @@ SCacheBlock *getCacheDataBlock(SMeterObj *pMeterObj, SQueryRuntimeEnv *pRuntimeE
pQuery->fileId = -1; pQuery->fileId = -1;
pQuery->slot = slot; pQuery->slot = slot;
if (!isCacheBlockValid(pQuery, pNewBlock, pMeterObj)) { if (!isCacheBlockValid(pQuery, pNewBlock, pMeterObj, slot)) {
return NULL; return NULL;
} }
...@@ -1621,6 +1629,11 @@ static void doCheckQueryCompleted(SQueryRuntimeEnv *pRuntimeEnv, TSKEY lastKey, ...@@ -1621,6 +1629,11 @@ static void doCheckQueryCompleted(SQueryRuntimeEnv *pRuntimeEnv, TSKEY lastKey,
if (pRuntimeEnv->scanFlag != MASTER_SCAN || (!isIntervalQuery(pQuery))) { if (pRuntimeEnv->scanFlag != MASTER_SCAN || (!isIntervalQuery(pQuery))) {
return; return;
} }
// no qualified results exist, abort check
if (pWindowResInfo->size == 0) {
return;
}
// query completed // query completed
if ((lastKey >= pQuery->ekey && QUERY_IS_ASC_QUERY(pQuery)) || if ((lastKey >= pQuery->ekey && QUERY_IS_ASC_QUERY(pQuery)) ||
...@@ -4134,13 +4147,14 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj * ...@@ -4134,13 +4147,14 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj *
tw = win; tw = win;
int32_t startPos = getNextQualifiedWindow(pRuntimeEnv, &tw, pWindowResInfo, &blockInfo, primaryKey, searchFn); int32_t startPos = getNextQualifiedWindow(pRuntimeEnv, &tw, pWindowResInfo, &blockInfo, primaryKey, searchFn);
assert(startPos > 0); assert(startPos >= 0);
pQuery->limit.offset -= 1; pQuery->limit.offset -= 1;
// set the abort info // set the abort info
pQuery->pos = startPos; pQuery->pos = startPos;
pQuery->lastKey = primaryKey[startPos]; pQuery->lastKey = primaryKey[startPos];
pWindowResInfo->prevSKey = tw.skey;
win = tw; win = tw;
continue; continue;
} else { } else {
...@@ -4176,6 +4190,8 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj * ...@@ -4176,6 +4190,8 @@ static bool forwardQueryStartPosIfNeeded(SQInfo *pQInfo, STableQuerySupportObj *
// set the abort info // set the abort info
pQuery->pos = QUERY_IS_ASC_QUERY(pQuery)? 0:blockInfo.size-1; pQuery->pos = QUERY_IS_ASC_QUERY(pQuery)? 0:blockInfo.size-1;
pQuery->lastKey = QUERY_IS_ASC_QUERY(pQuery)? blockInfo.keyFirst:blockInfo.keyLast; pQuery->lastKey = QUERY_IS_ASC_QUERY(pQuery)? blockInfo.keyFirst:blockInfo.keyLast;
pWindowResInfo->prevSKey = n.skey;
win = n; win = n;
if (pQuery->limit.offset == 0 && IS_DISK_DATA_BLOCK(pQuery)) { if (pQuery->limit.offset == 0 && IS_DISK_DATA_BLOCK(pQuery)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册