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;
|
pLoadInfo->currentLoadBlockIndex = nextSlotIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SBlockData *loadLastBlock(SLDataIter *pIter, const char *idStr) {
|
static int32_t loadLastBlock(SLDataIter *pIter, const char *idStr, SBlockData **pResBlock) {
|
||||||
int32_t code = 0;
|
if (pResBlock != NULL) {
|
||||||
|
*pResBlock = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t code = 0;
|
||||||
SSttBlockLoadInfo *pInfo = pIter->pBlockLoadInfo;
|
SSttBlockLoadInfo *pInfo = pIter->pBlockLoadInfo;
|
||||||
|
|
||||||
if (pInfo->blockData[0].sttBlockIndex == pIter->iSttBlk) {
|
if (pInfo->blockData[0].sttBlockIndex == pIter->iSttBlk) {
|
||||||
if (pInfo->currentLoadBlockIndex != 0) {
|
if (pInfo->currentLoadBlockIndex != 0) {
|
||||||
tsdbDebug("current load index is set to 0, block index:%d, fileVer:%" PRId64 ", due to uid:%" PRIu64
|
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);
|
pIter->iSttBlk, pIter->cid, pIter->uid, idStr);
|
||||||
pInfo->currentLoadBlockIndex = 0;
|
pInfo->currentLoadBlockIndex = 0;
|
||||||
}
|
}
|
||||||
return &pInfo->blockData[0].data;
|
|
||||||
|
*pResBlock = &pInfo->blockData[0].data;
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pInfo->blockData[1].sttBlockIndex == pIter->iSttBlk) {
|
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);
|
pIter->iSttBlk, pIter->cid, pIter->uid, idStr);
|
||||||
pInfo->currentLoadBlockIndex = 1;
|
pInfo->currentLoadBlockIndex = 1;
|
||||||
}
|
}
|
||||||
return &pInfo->blockData[1].data;
|
|
||||||
|
*pResBlock = &pInfo->blockData[1].data;
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pIter->pSttBlk == NULL || pInfo->pSchema == NULL) {
|
if (pIter->pSttBlk == NULL || pInfo->pSchema == NULL) {
|
||||||
return NULL;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateBlockLoadSlot(pInfo);
|
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],
|
code = tsdbSttFileReadBlockDataByColumn(pIter->pReader, pIter->pSttBlk, pBlock, pInfo->pSchema, &pInfo->colIds[1],
|
||||||
pInfo->numOfCols - 1);
|
pInfo->numOfCols - 1);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto _exit;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
double el = (taosGetTimestampUs() - st) / 1000.0;
|
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,
|
tsdbDebug("last block index list:%d, %d, rowIndex:%d %s", pInfo->blockData[0].sttBlockIndex,
|
||||||
pInfo->blockData[1].sttBlockIndex, pIter->iRow, idStr);
|
pInfo->blockData[1].sttBlockIndex, pIter->iRow, idStr);
|
||||||
return &pInfo->blockData[pInfo->currentLoadBlockIndex].data;
|
|
||||||
|
|
||||||
_exit:
|
*pResBlock = &pInfo->blockData[pInfo->currentLoadBlockIndex].data;
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
return code;
|
||||||
terrno = code;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find the earliest block that contains the required records
|
// 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) {
|
static int32_t findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
||||||
bool hasVal = false;
|
bool hasVal = false;
|
||||||
int32_t step = pIter->backward ? -1 : 1;
|
int32_t step = pIter->backward ? -1 : 1;
|
||||||
int32_t i = pIter->iRow;
|
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
|
// 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) {
|
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) {
|
if (i == -1) {
|
||||||
tsdbDebug("failed to find the data in pBlockData, uid:%" PRIu64 " , %s", pIter->uid, idStr);
|
tsdbDebug("failed to find the data in pBlockData, uid:%" PRIu64 " , %s", pIter->uid, idStr);
|
||||||
pIter->iRow = -1;
|
pIter->iRow = -1;
|
||||||
return;
|
return code;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -817,20 +825,23 @@ static void findNextValidRow(SLDataIter *pIter, const char *idStr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pIter->iRow = (hasVal) ? i : -1;
|
pIter->iRow = (hasVal) ? i : -1;
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||||
int32_t step = pIter->backward ? -1 : 1;
|
int32_t step = pIter->backward ? -1 : 1;
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
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
|
// no qualified last file block in current file, no need to fetch row
|
||||||
if (pIter->pSttBlk == NULL) {
|
if (pIter->pSttBlk == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t iBlockL = pIter->iSttBlk;
|
code = loadLastBlock(pIter, idStr, &pBlockData);
|
||||||
SBlockData *pBlockData = loadLastBlock(pIter, idStr);
|
if (pBlockData == NULL || code != TSDB_CODE_SUCCESS) {
|
||||||
if (pBlockData == NULL || terrno != TSDB_CODE_SUCCESS) {
|
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -838,7 +849,10 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
bool skipBlock = false;
|
bool skipBlock = false;
|
||||||
findNextValidRow(pIter, idStr);
|
code = findNextValidRow(pIter, idStr);
|
||||||
|
if (code) {
|
||||||
|
goto _exit;
|
||||||
|
}
|
||||||
|
|
||||||
if (pIter->pBlockLoadInfo->checkRemainingRow) {
|
if (pIter->pBlockLoadInfo->checkRemainingRow) {
|
||||||
skipBlock = true;
|
skipBlock = true;
|
||||||
|
@ -873,8 +887,8 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iBlockL != pIter->iSttBlk) {
|
if (iBlockL != pIter->iSttBlk) {
|
||||||
pBlockData = loadLastBlock(pIter, idStr);
|
code = loadLastBlock(pIter, idStr, &pBlockData);
|
||||||
if (pBlockData == NULL) {
|
if ((pBlockData == NULL) || (code != 0)) {
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -888,7 +902,7 @@ bool tLDataIterNextRow(SLDataIter *pIter, const char *idStr) {
|
||||||
pIter->rInfo.row = tsdbRowFromBlockData(pBlockData, pIter->iRow);
|
pIter->rInfo.row = tsdbRowFromBlockData(pBlockData, pIter->iRow);
|
||||||
|
|
||||||
_exit:
|
_exit:
|
||||||
return (terrno == TSDB_CODE_SUCCESS) && (pIter->pSttBlk != NULL) && (pBlockData != NULL);
|
return (code == TSDB_CODE_SUCCESS) && (pIter->pSttBlk != NULL) && (pBlockData != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SMergeTree =================================================
|
// SMergeTree =================================================
|
||||||
|
|
|
@ -3598,6 +3598,7 @@ static int32_t buildBlockFromFiles(STsdbReader* pReader) {
|
||||||
|
|
||||||
if (pBlockIter->numOfBlocks == 0) {
|
if (pBlockIter->numOfBlocks == 0) {
|
||||||
// let's try to extract data from stt files.
|
// let's try to extract data from stt files.
|
||||||
|
terrno = 0;
|
||||||
ERetrieveType type = doReadDataFromSttFiles(pReader);
|
ERetrieveType type = doReadDataFromSttFiles(pReader);
|
||||||
if (type == TSDB_READ_RETURN) {
|
if (type == TSDB_READ_RETURN) {
|
||||||
return terrno;
|
return terrno;
|
||||||
|
|
Loading…
Reference in New Issue