fix bugs in regression test(degenerated cases, committed blocks are ignored in get cache blocks).
This commit is contained in:
parent
819b4c6190
commit
84c1eb3cdd
|
@ -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,12 +1081,20 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1622,6 +1630,11 @@ static void doCheckQueryCompleted(SQueryRuntimeEnv *pRuntimeEnv, TSKEY lastKey,
|
||||||
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)) ||
|
||||||
(lastKey <= pQuery->ekey && !QUERY_IS_ASC_QUERY(pQuery))) {
|
(lastKey <= pQuery->ekey && !QUERY_IS_ASC_QUERY(pQuery))) {
|
||||||
|
@ -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 *
|
||||||
// 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)) {
|
||||||
|
|
Loading…
Reference in New Issue