提交 53074586 编写于 作者: M Minglei Jin

fix: pack stb list into array to release reader lock

上级 de113ccf
...@@ -483,30 +483,36 @@ static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) { ...@@ -483,30 +483,36 @@ static int32_t vnodeGetStbColumnNum(SVnode *pVnode, tb_uid_t suid, int *num) {
} }
int32_t vnodeGetTimeSeriesNum(SVnode *pVnode, int64_t *num) { int32_t vnodeGetTimeSeriesNum(SVnode *pVnode, int64_t *num) {
SMStbCursor *pCur = metaOpenStbCursor(pVnode->pMeta, 0); SArray *suidList = NULL;
if (!pCur) {
if (!(suidList = taosArrayInit(1, sizeof(tb_uid_t)))) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return TSDB_CODE_FAILED;
}
if (vnodeGetStbIdList(pVnode, 0, suidList) < 0) {
qError("vgId:%d, failed to get stb id list error: %s", TD_VID(pVnode), terrstr());
taosArrayDestroy(suidList);
return TSDB_CODE_FAILED; return TSDB_CODE_FAILED;
} }
*num = 0; *num = 0;
while (1) { int64_t arrSize = taosArrayGetSize(suidList);
tb_uid_t id = metaStbCursorNext(pCur); for (int64_t i = 0; i < arrSize; ++i) {
if (id == 0) { tb_uid_t suid = *(tb_uid_t *)taosArrayGet(suidList, i);
break;
}
SMetaStbStats stats = {0}; SMetaStbStats stats = {0};
metaGetStbStats(pVnode->pMeta, id, &stats); metaGetStbStats(pVnode->pMeta, suid, &stats);
int64_t ctbNum = stats.ctbNum; int64_t ctbNum = stats.ctbNum;
// vnodeGetCtbNum(pVnode, id, &ctbNum); // vnodeGetCtbNum(pVnode, id, &ctbNum);
int numOfCols = 0; int numOfCols = 0;
vnodeGetStbColumnNum(pVnode, id, &numOfCols); vnodeGetStbColumnNum(pVnode, suid, &numOfCols);
*num += ctbNum * (numOfCols - 1); *num += ctbNum * (numOfCols - 1);
} }
metaCloseStbCursor(pCur); taosArrayDestroy(suidList);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册