TD-14034 assert happen when executing "drop database if exist test" on 3.0
This commit is contained in:
parent
0f45064d8d
commit
911f8a5a2c
|
@ -802,6 +802,32 @@ static int32_t mndSetDropDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *p
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t mndBuildDropDbRsp(SDbObj *pDb, int32_t *pRspLen, void **ppRsp, bool useRpcMalloc) {
|
||||||
|
SDropDbRsp dropRsp = {0};
|
||||||
|
if (pDb != NULL) {
|
||||||
|
memcpy(dropRsp.db, pDb->name, TSDB_DB_FNAME_LEN);
|
||||||
|
dropRsp.uid = pDb->uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t rspLen = tSerializeSDropDbRsp(NULL, 0, &dropRsp);
|
||||||
|
void *pRsp = NULL;
|
||||||
|
if (useRpcMalloc) {
|
||||||
|
pRsp = rpcMallocCont(rspLen);
|
||||||
|
} else {
|
||||||
|
pRsp = malloc(rspLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRsp == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
tSerializeSDropDbRsp(pRsp, rspLen, &dropRsp);
|
||||||
|
*pRspLen = rspLen;
|
||||||
|
*ppRsp = pRsp;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t mndDropDb(SMnode *pMnode, SNodeMsg *pReq, SDbObj *pDb) {
|
static int32_t mndDropDb(SMnode *pMnode, SNodeMsg *pReq, SDbObj *pDb) {
|
||||||
int32_t code = -1;
|
int32_t code = -1;
|
||||||
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_TYPE_DROP_DB, &pReq->rpcMsg);
|
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_TYPE_DROP_DB, &pReq->rpcMsg);
|
||||||
|
@ -814,18 +840,9 @@ static int32_t mndDropDb(SMnode *pMnode, SNodeMsg *pReq, SDbObj *pDb) {
|
||||||
if (mndSetDropDbCommitLogs(pMnode, pTrans, pDb) != 0) goto DROP_DB_OVER;
|
if (mndSetDropDbCommitLogs(pMnode, pTrans, pDb) != 0) goto DROP_DB_OVER;
|
||||||
if (mndSetDropDbRedoActions(pMnode, pTrans, pDb) != 0) goto DROP_DB_OVER;
|
if (mndSetDropDbRedoActions(pMnode, pTrans, pDb) != 0) goto DROP_DB_OVER;
|
||||||
|
|
||||||
SDropDbRsp dropRsp = {0};
|
int32_t rspLen = 0;
|
||||||
memcpy(dropRsp.db, pDb->name, TSDB_DB_FNAME_LEN);
|
void *pRsp = NULL;
|
||||||
dropRsp.uid = pDb->uid;
|
if (mndBuildDropDbRsp(pDb, &rspLen, &pRsp, false) < 0) goto DROP_DB_OVER;
|
||||||
|
|
||||||
int32_t rspLen = tSerializeSDropDbRsp(NULL, 0, &dropRsp);
|
|
||||||
void *pRsp = malloc(rspLen);
|
|
||||||
if (pRsp == NULL) {
|
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
|
||||||
goto DROP_DB_OVER;
|
|
||||||
}
|
|
||||||
tSerializeSDropDbRsp(pRsp, rspLen, &dropRsp);
|
|
||||||
|
|
||||||
mndTransSetRpcRsp(pTrans, pRsp, rspLen);
|
mndTransSetRpcRsp(pTrans, pRsp, rspLen);
|
||||||
|
|
||||||
if (mndTransPrepare(pMnode, pTrans) != 0) goto DROP_DB_OVER;
|
if (mndTransPrepare(pMnode, pTrans) != 0) goto DROP_DB_OVER;
|
||||||
|
@ -854,7 +871,7 @@ static int32_t mndProcessDropDbReq(SNodeMsg *pReq) {
|
||||||
pDb = mndAcquireDb(pMnode, dropReq.db);
|
pDb = mndAcquireDb(pMnode, dropReq.db);
|
||||||
if (pDb == NULL) {
|
if (pDb == NULL) {
|
||||||
if (dropReq.ignoreNotExists) {
|
if (dropReq.ignoreNotExists) {
|
||||||
code = 0;
|
code = mndBuildDropDbRsp(pDb, &pReq->rspLen, &pReq->pRsp, true);
|
||||||
goto DROP_DB_OVER;
|
goto DROP_DB_OVER;
|
||||||
} else {
|
} else {
|
||||||
terrno = TSDB_CODE_MND_DB_NOT_EXIST;
|
terrno = TSDB_CODE_MND_DB_NOT_EXIST;
|
||||||
|
|
Loading…
Reference in New Issue