Merge pull request #27270 from taosdata/fix/3_liaohj
fix(tsdb): check return value.
This commit is contained in:
commit
0bdebe4e72
|
@ -146,10 +146,14 @@ static void updateBlockLoadSlot(SSttBlockLoadInfo *pLoadInfo) {
|
|||
pLoadInfo->currentLoadBlockIndex = nextSlotIndex;
|
||||
}
|
||||
|
||||
static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
||||
int32_t code = 0;
|
||||
static int32_t loadLastBlock(SLDataIter *pIter, const char *idStr, SBlockData **pResBlock) {
|
||||
if (pResBlock != NULL) {
|
||||
*pResBlock = NULL;
|
||||
}
|
||||
|
||||
int32_t code = 0;
|
||||
SSttBlockLoadInfo *pInfo = pIter->pBlockLoadInfo;
|
||||
|
||||
if (pInfo->blockData[0].sttBlockIndex == pIter->iSttBlk) {
|
||||
if (pInfo->currentLoadBlockIndex != 0) {
|
||||
tsdbDebug("current load index is set to 0, block index:%d, fileVer:%" PRId64 ", due to uid:%" PRIu64
|
||||
|
@ -157,7 +161,9 @@ static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
|||
pIter->iSttBlk, pIter->cid, pIter->uid, idStr);
|
||||
pInfo->currentLoadBlockIndex = 0;
|
||||
}
|
||||
return &pInfo->blockData[0].data;
|
||||
|
||||
*pResBlock = &pInfo->blockData[0].data;
|
||||
return code;
|
||||
}
|
||||
|
||||
if (pInfo->blockData[1].sttBlockIndex == pIter->iSttBlk) {
|
||||
|
@ -167,11 +173,13 @@ static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
|||
pIter->iSttBlk, pIter->cid, pIter->uid, idStr);
|
||||
pInfo->currentLoadBlockIndex = 1;
|
||||
}
|
||||
return &pInfo->blockData[1].data;
|
||||
|
||||
*pResBlock = &pInfo->blockData[1].data;
|
||||
return code;
|
||||
}
|
||||
|
||||
if (pIter->pSttBlk == NULL || pInfo->pSchema == NULL) {
|
||||
return NULL;
|
||||
return code;
|
||||
}
|
||||
|
||||
updateBlockLoadSlot(pInfo);
|
||||
|
@ -181,7 +189,7 @@ static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
|||
code = tsdbSttFileReadBlockDataByColumn(pIter->pReader, pIter->pSttBlk, pBlock, pInfo->pSchema, &pInfo->colIds[1],
|
||||
pInfo->numOfCols - 1);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _exit;
|
||||
return code;
|
||||
}
|
||||
|
||||
double el = (taosGetTimestampUs() - st) / 1000.0;
|
||||
|
@ -200,14 +208,9 @@ static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
|||
|
||||
tsdbDebug("last block index list:%d, %d, rowIndex:%d %s", pInfo->blockData[0].sttBlockIndex,
|
||||
pInfo->blockData[1].sttBlockIndex, pIter->iRow, idStr);
|
||||
return &pInfo->blockData[pInfo->currentLoadBlockIndex].data;
|
||||
|
||||
_exit:
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
terrno = code;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
*pResBlock = &pInfo->blockData[pInfo->currentLoadBlockIndex].data;
|
||||
return code;
|
||||
}
|
||||
|
||||
// find the earliest block that contains the required records
|
||||
|
@ -735,12 +738,17 @@ void tLDataIterNextBlock(SLDataIter *pIter, const char *idStr) {
|
|||
}
|
||||
}
|
||||
|
||||
static void findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
||||
bool hasVal = false;
|
||||
int32_t step = pIter->backward ? -1 : 1;
|
||||
int32_t i = pIter->iRow;
|
||||
static int32_t findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
||||
bool hasVal = false;
|
||||
int32_t step = pIter->backward ? -1 : 1;
|
||||
int32_t i = pIter->iRow;
|
||||
SBlockData *pData = NULL;
|
||||
|
||||
SBlockData *pData = loadLastBlock(pIter, idStr);
|
||||
int32_t code = loadLastBlock(pIter, idStr, &pData);
|
||||
if (code) {
|
||||
tsdbError("failed to load stt block, code:%s, %s", tstrerror(code), idStr);
|
||||
return code;
|
||||
}
|
||||
|
||||
// mostly we only need to find the start position for a given table
|
||||
if ((((i == 0) && (!pIter->backward)) || (i == pData->nRow - 1 && pIter->backward)) && pData->aUid != NULL) {
|
||||
|
@ -748,7 +756,7 @@ static void findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
|||
if (i == -1) {
|
||||
tsdbDebug("failed to find the data in pBlockData, uid:%" PRIu64 " , %s", pIter->uid, idStr);
|
||||
pIter->iRow = -1;
|
||||
return;
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -817,20 +825,23 @@ static void findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
|||
}
|
||||
|
||||
pIter->iRow = (hasVal) ? i : -1;
|
||||
return code;
|
||||
}
|
||||
|
||||
bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||
int32_t step = pIter->backward ? -1 : 1;
|
||||
terrno = TSDB_CODE_SUCCESS;
|
||||
|
||||
int32_t step = pIter->backward ? -1 : 1;
|
||||
int32_t code = 0;
|
||||
int32_t iBlockL = pIter->iSttBlk;
|
||||
SBlockData *pBlockData = NULL;
|
||||
terrno = 0;
|
||||
|
||||
// no qualified last file block in current file, no need to fetch row
|
||||
if (pIter->pSttBlk == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int32_t iBlockL = pIter->iSttBlk;
|
||||
SBlockData *pBlockData = loadLastBlock(pIter, idStr);
|
||||
if (pBlockData == NULL || terrno != TSDB_CODE_SUCCESS) {
|
||||
code = loadLastBlock(pIter, idStr, &pBlockData);
|
||||
if (pBlockData == NULL || code != TSDB_CODE_SUCCESS) {
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
|
@ -838,7 +849,10 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
|||
|
||||
while (1) {
|
||||
bool skipBlock = false;
|
||||
findNextValidRow(pIter, idStr);
|
||||
code = findNextValidRow(pIter, idStr);
|
||||
if (code) {
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
if (pIter->pBlockLoadInfo->checkRemainingRow) {
|
||||
skipBlock = true;
|
||||
|
@ -873,8 +887,8 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
|||
}
|
||||
|
||||
if (iBlockL != pIter->iSttBlk) {
|
||||
pBlockData = loadLastBlock(pIter, idStr);
|
||||
if (pBlockData == NULL) {
|
||||
code = loadLastBlock(pIter, idStr, &pBlockData);
|
||||
if ((pBlockData == NULL) || (code != 0)) {
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
|
@ -888,7 +902,7 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
|||
pIter->rInfo.row = tsdbRowFromBlockData(pBlockData, pIter->iRow);
|
||||
|
||||
_exit:
|
||||
return (terrno == TSDB_CODE_SUCCESS) && (pIter->pSttBlk != NULL) && (pBlockData != NULL);
|
||||
return (code == TSDB_CODE_SUCCESS) && (pIter->pSttBlk != NULL) && (pBlockData != NULL);
|
||||
}
|
||||
|
||||
// SMergeTree =================================================
|
||||
|
|
|
@ -3598,6 +3598,7 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) {
|
|||
|
||||
if (pBlockIter->numOfBlocks == 0) {
|
||||
// let's try to extract data from stt files.
|
||||
terrno = 0;
|
||||
ERetrieveType type = doReadDataFromSttFiles(pReader);
|
||||
if (type == TSDB_READ_RETURN) {
|
||||
return terrno;
|
||||
|
|
Loading…
Reference in New Issue