fix(query): fix reader not release when error occuring.
This commit is contained in:
parent
2d478d3896
commit
19e40e8bee
|
@ -1336,6 +1336,171 @@ _end:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t doSetUserTableMetaInfo(SStoreMetaReader* pMetaReaderFn, SStoreMeta* pMetaFn, void* pVnode,
|
||||||
|
SMTbCursor* pCur, SMetaReader* pMReader, int64_t uid, const char* dbname,
|
||||||
|
int32_t vgId, SSDataBlock* p, int32_t rowIndex, const char* idStr) {
|
||||||
|
char n[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
|
int32_t lino = 0;
|
||||||
|
int32_t code = pMetaReaderFn->getTableEntryByUid(pMReader, uid);
|
||||||
|
if (code < 0) {
|
||||||
|
qError("failed to get table meta, cname:%s, uid:%" PRId64 ", code:%s, %s", uid, tstrerror(terrno), idStr);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
STR_TO_VARSTR(n, pMReader->me.name);
|
||||||
|
|
||||||
|
// table name
|
||||||
|
SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, n, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// database name
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 1);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, dbname, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// vgId
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 6);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&vgId, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
int32_t tableType = pMReader->me.type;
|
||||||
|
if (tableType == TSDB_CHILD_TABLE) {
|
||||||
|
// create time
|
||||||
|
int64_t ts = pMReader->me.ctbEntry.btime;
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 2);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&ts, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
SMetaReader mr1 = {0};
|
||||||
|
pMetaReaderFn->initReader(&mr1, pVnode, META_READER_NOLOCK, pMetaFn);
|
||||||
|
|
||||||
|
int64_t suid = pMReader->me.ctbEntry.suid;
|
||||||
|
code = pMetaReaderFn->getTableEntryByUid(&mr1, suid);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
qError("failed to get super table meta, cname:%s, suid:0x%" PRIx64 ", code:%s, %s", pCur->mr.me.name, suid,
|
||||||
|
tstrerror(code), idStr);
|
||||||
|
pMetaReaderFn->clearReader(&mr1);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 3);
|
||||||
|
if (pColInfoData == NULL) {
|
||||||
|
pMetaReaderFn->clearReader(&mr1);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
}
|
||||||
|
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&mr1.me.stbEntry.schemaRow.nCols, false);
|
||||||
|
if (code != 0) {
|
||||||
|
pMetaReaderFn->clearReader(&mr1);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
}
|
||||||
|
|
||||||
|
// super table name
|
||||||
|
STR_TO_VARSTR(n, mr1.me.name);
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 4);
|
||||||
|
if (pColInfoData == NULL) {
|
||||||
|
pMetaReaderFn->clearReader(&mr1);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
}
|
||||||
|
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, n, false);
|
||||||
|
pMetaReaderFn->clearReader(&mr1);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// table comment
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 8);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
if (pMReader->me.ctbEntry.commentLen > 0) {
|
||||||
|
char comment[TSDB_TB_COMMENT_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
|
STR_TO_VARSTR(comment, pMReader->me.ctbEntry.comment);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, comment, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
} else if (pMReader->me.ctbEntry.commentLen == 0) {
|
||||||
|
char comment[VARSTR_HEADER_SIZE + VARSTR_HEADER_SIZE] = {0};
|
||||||
|
STR_TO_VARSTR(comment, "");
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, comment, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
} else {
|
||||||
|
colDataSetNULL(pColInfoData, rowIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// uid
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 5);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pMReader->me.uid, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// ttl
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 7);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pMReader->me.ctbEntry.ttlDays, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
STR_TO_VARSTR(n, "CHILD_TABLE");
|
||||||
|
|
||||||
|
} else if (tableType == TSDB_NORMAL_TABLE) {
|
||||||
|
// create time
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 2);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pCur->mr.me.ntbEntry.btime, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// number of columns
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 3);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pCur->mr.me.ntbEntry.schemaRow.nCols, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// super table name
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 4);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
colDataSetNULL(pColInfoData, rowIndex);
|
||||||
|
|
||||||
|
// table comment
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 8);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
if (pMReader->me.ntbEntry.commentLen > 0) {
|
||||||
|
char comment[TSDB_TB_COMMENT_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
|
STR_TO_VARSTR(comment, pMReader->me.ntbEntry.comment);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, comment, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
} else if (pMReader->me.ntbEntry.commentLen == 0) {
|
||||||
|
char comment[VARSTR_HEADER_SIZE + VARSTR_HEADER_SIZE] = {0};
|
||||||
|
STR_TO_VARSTR(comment, "");
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, comment, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
} else {
|
||||||
|
colDataSetNULL(pColInfoData, rowIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// uid
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 5);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pMReader->me.uid, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
// ttl
|
||||||
|
pColInfoData = taosArrayGet(p->pDataBlock, 7);
|
||||||
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
code = colDataSetVal(pColInfoData, rowIndex, (char*)&pMReader->me.ntbEntry.ttlDays, false);
|
||||||
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
STR_TO_VARSTR(n, "NORMAL_TABLE");
|
||||||
|
// impl later
|
||||||
|
}
|
||||||
|
|
||||||
|
_end:
|
||||||
|
qError("%s failed at line %d since %s, %s", __func__, lino, tstrerror(code), idStr);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) {
|
static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
int32_t lino = 0;
|
int32_t lino = 0;
|
||||||
|
@ -1377,152 +1542,14 @@ static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) {
|
||||||
|
|
||||||
SMetaReader mr = {0};
|
SMetaReader mr = {0};
|
||||||
pAPI->metaReaderFn.initReader(&mr, pInfo->readHandle.vnode, META_READER_LOCK, &pAPI->metaFn);
|
pAPI->metaReaderFn.initReader(&mr, pInfo->readHandle.vnode, META_READER_LOCK, &pAPI->metaFn);
|
||||||
ret = pAPI->metaReaderFn.getTableEntryByUid(&mr, *uid);
|
doSetUserTableMetaInfo(&pAPI->metaReaderFn, &pAPI->metaFn, pInfo->readHandle.vnode, pInfo->pCur, &mr, *uid, dbname,
|
||||||
if (ret < 0) {
|
vgId, p, numOfRows, GET_TASKID(pTaskInfo));
|
||||||
pAPI->metaReaderFn.clearReader(&mr);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
STR_TO_VARSTR(n, mr.me.name);
|
|
||||||
|
|
||||||
// table name
|
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 0);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, n, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// database name
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 1);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, dbname, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// vgId
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 6);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&vgId, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
int32_t tableType = mr.me.type;
|
|
||||||
if (tableType == TSDB_CHILD_TABLE) {
|
|
||||||
// create time
|
|
||||||
int64_t ts = mr.me.ctbEntry.btime;
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 2);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&ts, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
SMetaReader mr1 = {0};
|
|
||||||
pAPI->metaReaderFn.initReader(&mr1, pInfo->readHandle.vnode, META_READER_NOLOCK, &pAPI->metaFn);
|
|
||||||
|
|
||||||
int64_t suid = mr.me.ctbEntry.suid;
|
|
||||||
code = pAPI->metaReaderFn.getTableEntryByUid(&mr1, suid);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
|
||||||
qError("failed to get super table meta, cname:%s, suid:0x%" PRIx64 ", code:%s, %s", pInfo->pCur->mr.me.name,
|
|
||||||
suid, tstrerror(terrno), GET_TASKID(pTaskInfo));
|
|
||||||
pAPI->metaReaderFn.clearReader(&mr1);
|
|
||||||
pAPI->metaReaderFn.clearReader(&mr);
|
|
||||||
T_LONG_JMP(pTaskInfo->env, terrno);
|
|
||||||
}
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 3);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&mr1.me.stbEntry.schemaRow.nCols, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// super table name
|
|
||||||
STR_TO_VARSTR(n, mr1.me.name);
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 4);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, n, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
pAPI->metaReaderFn.clearReader(&mr1);
|
|
||||||
|
|
||||||
// table comment
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 8);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
if (mr.me.ctbEntry.commentLen > 0) {
|
|
||||||
char comment[TSDB_TB_COMMENT_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_TO_VARSTR(comment, mr.me.ctbEntry.comment);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, comment, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
} else if (mr.me.ctbEntry.commentLen == 0) {
|
|
||||||
char comment[VARSTR_HEADER_SIZE + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_TO_VARSTR(comment, "");
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, comment, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
} else {
|
|
||||||
colDataSetNULL(pColInfoData, numOfRows);
|
|
||||||
}
|
|
||||||
|
|
||||||
// uid
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 5);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&mr.me.uid, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// ttl
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 7);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&mr.me.ctbEntry.ttlDays, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
STR_TO_VARSTR(n, "CHILD_TABLE");
|
|
||||||
|
|
||||||
} else if (tableType == TSDB_NORMAL_TABLE) {
|
|
||||||
// create time
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 2);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ntbEntry.btime, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// number of columns
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 3);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&pInfo->pCur->mr.me.ntbEntry.schemaRow.nCols, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// super table name
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 4);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
colDataSetNULL(pColInfoData, numOfRows);
|
|
||||||
|
|
||||||
// table comment
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 8);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
if (mr.me.ntbEntry.commentLen > 0) {
|
|
||||||
char comment[TSDB_TB_COMMENT_LEN + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_TO_VARSTR(comment, mr.me.ntbEntry.comment);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, comment, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
} else if (mr.me.ntbEntry.commentLen == 0) {
|
|
||||||
char comment[VARSTR_HEADER_SIZE + VARSTR_HEADER_SIZE] = {0};
|
|
||||||
STR_TO_VARSTR(comment, "");
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, comment, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
} else {
|
|
||||||
colDataSetNULL(pColInfoData, numOfRows);
|
|
||||||
}
|
|
||||||
|
|
||||||
// uid
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 5);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&mr.me.uid, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
// ttl
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 7);
|
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, (char*)&mr.me.ntbEntry.ttlDays, false);
|
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
|
||||||
|
|
||||||
STR_TO_VARSTR(n, "NORMAL_TABLE");
|
|
||||||
// impl later
|
|
||||||
}
|
|
||||||
|
|
||||||
pAPI->metaReaderFn.clearReader(&mr);
|
pAPI->metaReaderFn.clearReader(&mr);
|
||||||
|
|
||||||
pColInfoData = taosArrayGet(p->pDataBlock, 9);
|
SColumnInfoData* pColInfoData = taosArrayGet(p->pDataBlock, 9);
|
||||||
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
QUERY_CHECK_NULL(pColInfoData, code, lino, _end, terrno);
|
||||||
|
|
||||||
code = colDataSetVal(pColInfoData, numOfRows, n, false);
|
code = colDataSetVal(pColInfoData, numOfRows, n, false);
|
||||||
QUERY_CHECK_CODE(code, lino, _end);
|
QUERY_CHECK_CODE(code, lino, _end);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue