fix meta deadlock

This commit is contained in:
yihaoDeng 2024-08-14 21:09:24 +08:00
parent 2b40ecf718
commit ecb48dd317
2 changed files with 16 additions and 5 deletions

View File

@ -282,7 +282,6 @@ int32_t metaResumeTbCursor(SMTbCursor *pTbCur, int8_t first, int8_t move) {
code = tdbTbcOpen(((SMeta *)pTbCur->pMeta)->pUidIdx, (TBC **)&pTbCur->pDbc, NULL);
if (code != 0) {
metaReaderReleaseLock(&pTbCur->mr);
pTbCur->paused = 1;
TSDB_CHECK_CODE(code, lino, _exit);
}
@ -1311,7 +1310,8 @@ int32_t metaFilterTableIds(void *pVnode, SMetaFltParam *arg, SArray *pUids) {
}
TAOS_CHECK_GOTO(metaCreateTagIdxKey(pCursor->suid, pCursor->cid, tagData, nTagData, pCursor->type,
param->reverse ? INT64_MAX : INT64_MIN, &pKey, &nKey), NULL, END);
param->reverse ? INT64_MAX : INT64_MIN, &pKey, &nKey),
NULL, END);
int cmp = 0;
TAOS_CHECK_GOTO(tdbTbcMoveTo(pCursor->pCur, pKey, nKey, &cmp), 0, END);

View File

@ -568,7 +568,12 @@ static SSDataBlock* sysTableScanUserCols(SOperatorInfo* pOperator) {
if (pInfo->pCur == NULL) {
pInfo->pCur = pAPI->metaFn.openTableMetaCursor(pInfo->readHandle.vnode);
} else {
(void)pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 0);
code = pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 0);
if (code != 0) {
pAPI->metaFn.closeTableMetaCursor(pInfo->pCur);
pInfo->pCur = NULL;
QUERY_CHECK_CODE(code, lino, _end);
}
}
if (pInfo->pSchema == NULL) {
@ -782,7 +787,8 @@ static SSDataBlock* sysTableScanUserTags(SOperatorInfo* pOperator) {
pInfo->pCur = pAPI->metaFn.openTableMetaCursor(pInfo->readHandle.vnode);
QUERY_CHECK_NULL(pInfo->pCur, code, lino, _end, terrno);
} else {
(void)pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 0);
code = pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 0);
QUERY_CHECK_CODE(code, lino, _end);
}
while ((ret = pAPI->metaFn.cursorNext(pInfo->pCur, TSDB_SUPER_TABLE)) == 0) {
@ -1583,7 +1589,12 @@ static SSDataBlock* sysTableBuildUserTables(SOperatorInfo* pOperator) {
firstMetaCursor = 1;
}
if (!firstMetaCursor) {
(void)pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 1);
code = pAPI->metaFn.resumeTableMetaCursor(pInfo->pCur, 0, 1);
if (code != 0) {
pAPI->metaFn.closeTableMetaCursor(pInfo->pCur);
pInfo->pCur = NULL;
QUERY_CHECK_CODE(code, lino, _end);
}
}
blockDataCleanup(pInfo->pRes);