enh: support drop table with uid
This commit is contained in:
parent
144ec78bb6
commit
8621c4fdab
|
@ -208,6 +208,7 @@ typedef struct SCtgTbMetasCtx {
|
||||||
|
|
||||||
typedef struct SCtgTbNamesCtx {
|
typedef struct SCtgTbNamesCtx {
|
||||||
int32_t fetchNum;
|
int32_t fetchNum;
|
||||||
|
SRWLatch lock;
|
||||||
SArray* pNames;
|
SArray* pNames;
|
||||||
SArray* pResList;
|
SArray* pResList;
|
||||||
SArray* pFetchs;
|
SArray* pFetchs;
|
||||||
|
|
|
@ -601,6 +601,7 @@ static int32_t ctgInitGetTbNamesTask(SCtgJob* pJob, int32_t taskId, void* param)
|
||||||
task.taskCtx = pTaskCtx;
|
task.taskCtx = pTaskCtx;
|
||||||
pTaskCtx->pNames = param;
|
pTaskCtx->pNames = param;
|
||||||
pTaskCtx->pResList = taosArrayInit(pJob->tbNameNum, sizeof(SMetaRes));
|
pTaskCtx->pResList = taosArrayInit(pJob->tbNameNum, sizeof(SMetaRes));
|
||||||
|
taosInitRWLatch(&pTaskCtx->lock);
|
||||||
if (NULL == pTaskCtx->pResList) {
|
if (NULL == pTaskCtx->pResList) {
|
||||||
qError("qid:0x%" PRIx64 " taosArrayInit %d SMetaRes %d failed", pJob->queryId, pJob->tbNameNum,
|
qError("qid:0x%" PRIx64 " taosArrayInit %d SMetaRes %d failed", pJob->queryId, pJob->tbNameNum,
|
||||||
(int32_t)sizeof(SMetaRes));
|
(int32_t)sizeof(SMetaRes));
|
||||||
|
@ -1929,20 +1930,40 @@ static int32_t ctgHandleGetTbNamesRsp(SCtgTaskReq* tReq, int32_t reqType, const
|
||||||
SName* pName = NULL;
|
SName* pName = NULL;
|
||||||
CTG_ERR_JRET(ctgGetFetchName(ctx->pNames, pFetch, &pName));
|
CTG_ERR_JRET(ctgGetFetchName(ctx->pNames, pFetch, &pName));
|
||||||
|
|
||||||
|
|
||||||
CTG_ERR_JRET(ctgProcessRspMsg(pMsgCtx->out, reqType, pMsg->pData, pMsg->len, rspCode, pMsgCtx->target));
|
CTG_ERR_JRET(ctgProcessRspMsg(pMsgCtx->out, reqType, pMsg->pData, pMsg->len, rspCode, pMsgCtx->target));
|
||||||
|
|
||||||
switch (reqType) {
|
switch (reqType) {
|
||||||
case TDMT_MND_USE_DB: {
|
case TDMT_MND_USE_DB: {
|
||||||
SUseDbOutput* pOut = (SUseDbOutput*)pMsgCtx->out;
|
SUseDbOutput* pOut = (SUseDbOutput*)pMsgCtx->out;
|
||||||
|
CTG_ERR_JRET(ctgMakeVgArray(pOut->dbVgroup));
|
||||||
SVgroupInfo vgInfo = {0};
|
int32_t vgSize = taosArrayGetSize(pOut->dbVgroup->vgArray);
|
||||||
CTG_ERR_JRET(ctgGetVgInfoFromHashValue(pCtg, &pConn->mgmtEps, pOut->dbVgroup, pName, &vgInfo));
|
if (0 == vgSize) {
|
||||||
|
ctgTaskError("no vgroup got, dbName:%s", pName->dbname);
|
||||||
ctgTaskDebug("will refresh tbmeta, not supposed to be stb, tbName:%s, flag:%d", tNameGetTableName(pName), flag);
|
CTG_ERR_JRET(TSDB_CODE_CTG_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
*vgId = vgInfo.vgId;
|
SArray* pVgArray = taosArrayDup(pOut->dbVgroup->vgArray, NULL);
|
||||||
CTG_ERR_JRET(ctgGetTbMetaFromVnode(pCtg, pConn, pName, &vgInfo, NULL, tReq));
|
if (NULL == pVgArray) {
|
||||||
|
ctgTaskError("fail to dup vgArray:%s", pName->dbname);
|
||||||
|
CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY);
|
||||||
|
}
|
||||||
|
for (int32_t i = 0; i < vgSize; ++i) {
|
||||||
|
SVgroupInfo* vgInfo = TARRAY_GET_ELEM(pVgArray, i);
|
||||||
|
if (NULL == vgInfo) {
|
||||||
|
taosArrayDestroy(pVgArray);
|
||||||
|
ctgTaskError("fail to get the %dth vgInfo, vgSize:%d", i, vgSize);
|
||||||
|
CTG_ERR_JRET(TSDB_CODE_CTG_INTERNAL_ERROR);
|
||||||
|
}
|
||||||
|
ctgTaskDebug("will refresh tbmeta, not supposed to be stb, tbName:%s, flag:%d, vgId:%d",
|
||||||
|
tNameGetTableName(pName), flag, vgInfo->vgId);
|
||||||
|
*vgId = vgInfo->vgId;
|
||||||
|
if (i > 0) atomic_add_fetch_32(&ctx->fetchNum, 1);
|
||||||
|
code = ctgGetTbMetaFromVnode(pCtg, pConn, pName, vgInfo, NULL, tReq);
|
||||||
|
if (code) {
|
||||||
|
taosArrayDestroy(pVgArray);
|
||||||
|
CTG_ERR_JRET(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taosArrayDestroy(pVgArray);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -2025,7 +2046,7 @@ static int32_t ctgHandleGetTbNamesRsp(SCtgTaskReq* tReq, int32_t reqType, const
|
||||||
(int32_t)taosArrayGetSize(ctx->pResList));
|
(int32_t)taosArrayGetSize(ctx->pResList));
|
||||||
CTG_ERR_JRET(TSDB_CODE_CTG_INTERNAL_ERROR);
|
CTG_ERR_JRET(TSDB_CODE_CTG_INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
|
// taosWLockLatch(ctx->lock);
|
||||||
pRes->code = 0;
|
pRes->code = 0;
|
||||||
pRes->pRes = pOut->tbMeta;
|
pRes->pRes = pOut->tbMeta;
|
||||||
pOut->tbMeta = NULL;
|
pOut->tbMeta = NULL;
|
||||||
|
|
Loading…
Reference in New Issue