fix: new reseek callback to separate tsdb & cache readers
This commit is contained in:
parent
545607ccd2
commit
eac3847532
|
@ -207,10 +207,12 @@ int32_t tsdbDecmprColData(uint8_t *pIn, SBlockCol *pBlockCol, int8_t cmprAlg, in
|
|||
uint8_t **ppBuf);
|
||||
// tsdbMemTable ==============================================================================================
|
||||
// SMemTable
|
||||
typedef int32_t (*_tsdb_reseek_func_t)(void *pQHandle);
|
||||
|
||||
int32_t tsdbMemTableCreate(STsdb *pTsdb, SMemTable **ppMemTable);
|
||||
void tsdbMemTableDestroy(SMemTable *pMemTable);
|
||||
STbData *tsdbGetTbDataFromMemTable(SMemTable *pMemTable, tb_uid_t suid, tb_uid_t uid);
|
||||
int32_t tsdbRefMemTable(SMemTable *pMemTable, void *pQHandle, SQueryNode **ppNode);
|
||||
int32_t tsdbRefMemTable(SMemTable *pMemTable, void *pQHandle, _tsdb_reseek_func_t reseek, SQueryNode **ppNode);
|
||||
int32_t tsdbUnrefMemTable(SMemTable *pMemTable, SQueryNode *pNode);
|
||||
SArray *tsdbMemTableGetTbDataArray(SMemTable *pMemTable);
|
||||
// STbDataIter
|
||||
|
@ -290,7 +292,7 @@ int32_t tsdbDelFReaderClose(SDelFReader **ppReader);
|
|||
int32_t tsdbReadDelData(SDelFReader *pReader, SDelIdx *pDelIdx, SArray *aDelData);
|
||||
int32_t tsdbReadDelIdx(SDelFReader *pReader, SArray *aDelIdx);
|
||||
// tsdbRead.c ==============================================================================================
|
||||
int32_t tsdbTakeReadSnap(STsdbReader *pReader, STsdbReadSnap **ppSnap);
|
||||
int32_t tsdbTakeReadSnap(STsdbReader *pReader, _tsdb_reseek_func_t reseek, STsdbReadSnap **ppSnap);
|
||||
void tsdbUntakeReadSnap(STsdbReader *pReader, STsdbReadSnap *pSnap);
|
||||
// tsdbMerge.c ==============================================================================================
|
||||
int32_t tsdbMerge(STsdb *pTsdb);
|
||||
|
@ -362,9 +364,10 @@ struct STbData {
|
|||
};
|
||||
|
||||
struct SQueryNode {
|
||||
SQueryNode *pNext;
|
||||
SQueryNode **ppNext;
|
||||
void *pQHandle;
|
||||
SQueryNode *pNext;
|
||||
SQueryNode **ppNext;
|
||||
void *pQHandle;
|
||||
_tsdb_reseek_func_t reseek;
|
||||
};
|
||||
|
||||
struct SMemTable {
|
||||
|
|
|
@ -194,6 +194,12 @@ static void freeItem(void* pItem) {
|
|||
}
|
||||
}
|
||||
|
||||
static int32_t tsdbCacheQueryReseek(void* pQHandle) {
|
||||
int32_t code = 0;
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32_t* slotIds, SArray* pTableUidList) {
|
||||
if (pReader == NULL || pResBlock == NULL) {
|
||||
return TSDB_CODE_INVALID_PARA;
|
||||
|
@ -237,7 +243,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32
|
|||
taosArrayPush(pLastCols, &p);
|
||||
}
|
||||
|
||||
tsdbTakeReadSnap(NULL, &pr->pReadSnap);
|
||||
tsdbTakeReadSnap(NULL, tsdbCacheQueryReseek, &pr->pReadSnap);
|
||||
pr->pDataFReader = NULL;
|
||||
pr->pDataFReaderLast = NULL;
|
||||
|
||||
|
|
|
@ -636,7 +636,7 @@ _err:
|
|||
|
||||
int32_t tsdbGetNRowsInTbData(STbData *pTbData) { return pTbData->sl.size; }
|
||||
|
||||
int32_t tsdbRefMemTable(SMemTable *pMemTable, void *pQHandle, SQueryNode **ppNode) {
|
||||
int32_t tsdbRefMemTable(SMemTable *pMemTable, void *pQHandle, _tsdb_reseek_func_t reseek, SQueryNode **ppNode) {
|
||||
int32_t code = 0;
|
||||
|
||||
int32_t nRef = atomic_fetch_add_32(&pMemTable->nRef, 1);
|
||||
|
@ -649,6 +649,7 @@ int32_t tsdbRefMemTable(SMemTable *pMemTable, void *pQHandle, SQueryNode **ppNod
|
|||
goto _exit;
|
||||
}
|
||||
(*ppNode)->pQHandle = pQHandle;
|
||||
(*ppNode)->reseek = reseek;
|
||||
(*ppNode)->pNext = pMemTable->qList.pNext;
|
||||
(*ppNode)->ppNext = &pMemTable->qList.pNext;
|
||||
pMemTable->qList.pNext->ppNext = &(*ppNode)->pNext;
|
||||
|
@ -714,8 +715,6 @@ _exit:
|
|||
return aTbDataP;
|
||||
}
|
||||
|
||||
extern int32_t tsdbSetQueryReseek(void *pQHandle);
|
||||
|
||||
int32_t tsdbRecycleMemTable(SMemTable *pMemTable) {
|
||||
int32_t code = 0;
|
||||
|
||||
|
@ -725,11 +724,11 @@ int32_t tsdbRecycleMemTable(SMemTable *pMemTable) {
|
|||
SQueryNode *pNextNode = pNode->pNext;
|
||||
|
||||
if (pNextNode == &pMemTable->qList) {
|
||||
code = tsdbSetQueryReseek(pNode->pQHandle);
|
||||
code = (*pNode->reseek)(pNode->pQHandle);
|
||||
if (code) goto _exit;
|
||||
break;
|
||||
} else {
|
||||
code = tsdbSetQueryReseek(pNode->pQHandle);
|
||||
code = (*pNode->reseek)(pNode->pQHandle);
|
||||
if (code) goto _exit;
|
||||
pNode = pMemTable->qList.pNext;
|
||||
ASSERT(pNode == pNextNode);
|
||||
|
|
|
@ -3489,6 +3489,8 @@ static int32_t doOpenReaderImpl(STsdbReader* pReader) {
|
|||
}
|
||||
|
||||
// ====================================== EXPOSED APIs ======================================
|
||||
static int32_t tsdbSetQueryReseek(void* pQHandle);
|
||||
|
||||
int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTableList, STsdbReader** ppReader,
|
||||
const char* idstr) {
|
||||
STimeWindow window = pCond->twindows;
|
||||
|
@ -3570,7 +3572,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl
|
|||
}
|
||||
|
||||
if (numOfTables > 0) {
|
||||
code = tsdbTakeReadSnap(pReader, &pReader->pReadSnap);
|
||||
code = tsdbTakeReadSnap(pReader, tsdbSetQueryReseek, &pReader->pReadSnap);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _err;
|
||||
}
|
||||
|
@ -4106,7 +4108,7 @@ int32_t tsdbGetTableSchema(SVnode* pVnode, int64_t uid, STSchema** pSchema, int6
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t tsdbTakeReadSnap(STsdbReader* pReader, STsdbReadSnap** ppSnap) {
|
||||
int32_t tsdbTakeReadSnap(STsdbReader* pReader, _tsdb_reseek_func_t reseek, STsdbReadSnap** ppSnap) {
|
||||
int32_t code = 0;
|
||||
STsdb* pTsdb = pReader->pTsdb;
|
||||
SVersionRange* pRange = &pReader->verRange;
|
||||
|
@ -4127,12 +4129,12 @@ int32_t tsdbTakeReadSnap(STsdbReader* pReader, STsdbReadSnap** ppSnap) {
|
|||
|
||||
// take snapshot
|
||||
if (pTsdb->mem && (pRange->minVer <= pTsdb->mem->maxVer && pRange->maxVer >= pTsdb->mem->minVer)) {
|
||||
tsdbRefMemTable(pTsdb->mem, pReader, &(*ppSnap)->pNode);
|
||||
tsdbRefMemTable(pTsdb->mem, pReader, reseek, &(*ppSnap)->pNode);
|
||||
(*ppSnap)->pMem = pTsdb->mem;
|
||||
}
|
||||
|
||||
if (pTsdb->imem && (pRange->minVer <= pTsdb->imem->maxVer && pRange->maxVer >= pTsdb->imem->minVer)) {
|
||||
tsdbRefMemTable(pTsdb->imem, pReader, &(*ppSnap)->pINode);
|
||||
tsdbRefMemTable(pTsdb->imem, pReader, reseek, &(*ppSnap)->pINode);
|
||||
(*ppSnap)->pIMem = pTsdb->imem;
|
||||
}
|
||||
|
||||
|
@ -4173,7 +4175,7 @@ void tsdbUntakeReadSnap(STsdbReader* pReader, STsdbReadSnap* pSnap) {
|
|||
tsdbTrace("vgId:%d, untake read snapshot", TD_VID(pTsdb->pVnode));
|
||||
}
|
||||
|
||||
int32_t tsdbSetQueryReseek(void* pQHandle) {
|
||||
static int32_t tsdbSetQueryReseek(void* pQHandle) {
|
||||
int32_t code = 0;
|
||||
|
||||
// lock handle
|
||||
|
|
Loading…
Reference in New Issue