From 1a06dd684e4c78671ac51ab12180dfd113a7575c Mon Sep 17 00:00:00 2001 From: wangjiaming0909 <604227650@qq.com> Date: Wed, 13 Mar 2024 12:02:29 +0800 Subject: [PATCH] support drop ctb --- include/common/tmsgdef.h | 1 + source/dnode/mnode/impl/src/mndStb.c | 7 ++++ source/libs/parser/src/parTranslater.c | 46 ++++++++++++++++++++++++-- tests/system-test/2-query/tsma.py | 3 +- 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/include/common/tmsgdef.h b/include/common/tmsgdef.h index 0854d53699..8d6c012c62 100644 --- a/include/common/tmsgdef.h +++ b/include/common/tmsgdef.h @@ -228,6 +228,7 @@ TD_DEF_MSG_TYPE(TDMT_MND_STB_DROP, "drop-stb", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_GET_TABLE_TSMA, "get-table-tsma", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_MND_GET_TSMA, "get-tsma", NULL, NULL) + TD_DEF_MSG_TYPE(TDMT_MND_DROP_TB_WITH_TSMA, "drop-tb-with-tsma", NULL, NULL) TD_CLOSE_MSG_SEG(TDMT_END_MND_MSG) TD_NEW_MSG_SEG(TDMT_VND_MSG) // 2<<8 diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index d03cfd6658..3482806cf8 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -63,6 +63,7 @@ static int32_t mndProcessCreateIndexReq(SRpcMsg *pReq); static int32_t mndProcessDropIndexReq(SRpcMsg *pReq); static int32_t mndProcessDropStbReqFromMNode(SRpcMsg *pReq); +static int32_t mndProcessDropTbWithTsma(SRpcMsg* pReq); int32_t mndInitStb(SMnode *pMnode) { SSdbTable table = { @@ -91,6 +92,8 @@ int32_t mndInitStb(SMnode *pMnode) { mndSetMsgHandle(pMnode, TDMT_MND_TABLE_CFG, mndProcessTableCfgReq); mndSetMsgHandle(pMnode, TDMT_MND_STB_DROP, mndProcessDropStbReqFromMNode); mndSetMsgHandle(pMnode, TDMT_MND_STB_DROP_RSP, mndTransProcessRsp); + mndSetMsgHandle(pMnode, TDMT_MND_DROP_TB_WITH_TSMA, mndProcessDropTbWithTsma); + mndSetMsgHandle(pMnode, TDMT_MND_DROP_TB_WITH_TSMA_RSP, mndTransProcessRsp); // mndSetMsgHandle(pMnode, TDMT_MND_SYSTABLE_RETRIEVE, mndProcessRetrieveStbReq); // mndSetMsgHandle(pMnode, TDMT_MND_CREATE_INDEX, mndProcessCreateIndexReq); @@ -3703,3 +3706,7 @@ static int32_t mndProcessDropStbReqFromMNode(SRpcMsg *pReq) { } return code; } + +static int32_t mndProcessDropTbWithTsma(SRpcMsg* pReq) { + +} diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index eb354bd0fc..aad37c58e7 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -3673,7 +3673,7 @@ static int32_t setTableTsmas(STranslateContext* pCxt, SName* pName, SRealTableNo STableTSMAInfo* pTsma = taosArrayGetP(pRealTable->pTsmas, i); SName tsmaTargetTbName = {0}; toName(pCxt->pParseCxt->acctId, pRealTable->table.dbName, "", &tsmaTargetTbName); - int32_t len = snprintf(tsmaTargetTbName.tname, TSDB_TABLE_NAME_LEN, "%s.%s", pTsma->dbFName, pTsma->name); + int32_t len = snprintf(tsmaTargetTbName.tname, TSDB_TABLE_NAME_LEN, "%s.%s", pTsma->dbFName, pTsma->name); // TODO what if tsma name is too long len = taosCreateMD5Hash(tsmaTargetTbName.tname, len); sprintf(tsmaTargetTbName.tname + len, "_%s", pRealTable->table.tableName); collectUseTable(&tsmaTargetTbName, pCxt->pTargetTables); @@ -7950,6 +7950,9 @@ static int32_t doTranslateDropCtbsWithTsma(STranslateContext* pCxt, SDropTableSt FOREACH(pNode, pStmt->pTables) { SDropTableClause* pClause = (SDropTableClause*)pNode; if (pClause->pTsmas) { + for (int32_t i = 0; i < pClause->pTsmas->size; ++i) { + + } // generate tsma res ctb names and get it's vgInfo } } @@ -12376,6 +12379,44 @@ SArray* serializeVgroupsDropTableBatch(SHashObj* pVgroupHashmap) { return pBufArray; } +static int32_t dropTableAddTsmaResTb(STranslateContext* pCxt, SHashObj* pVgMap, SDropTableStmt* pStmt) { + char tsmaResTbName[TSDB_TABLE_NAME_LEN + TSDB_DB_FNAME_LEN + 1]; + SName tbName = {0}; + SNode* pNode; + int32_t code = 0; + STableMeta* pTableMeta = NULL; + FOREACH(pNode, pStmt->pTables) { + SDropTableClause* pClause = (SDropTableClause*)pNode; + if (pClause->pTsmas) { + for (int32_t i = 0; pClause->pTsmas->size; ++i) { + const STableTSMAInfo* pTsma = taosArrayGetP(pClause->pTsmas, i); + + int32_t len = sprintf(tsmaResTbName, "%s.%s", pTsma->dbFName, pTsma->name); + len = taosCreateMD5Hash(tsmaResTbName, len); + sprintf(tsmaResTbName + len, "_%s", pClause->tableName); + + toName(pCxt->pParseCxt->acctId, pClause->dbName, tsmaResTbName, &tbName); + code = getTargetMeta(pCxt, &tbName, &pTableMeta, false); + if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST) { + code = TSDB_CODE_SUCCESS; + continue; + } + if (code) break; + collectUseTable(&tbName, pCxt->pTargetTables); + SVgroupInfo info = {0}; + if (TSDB_CODE_SUCCESS == code) { + code = getTableHashVgroup(pCxt, pClause->dbName, tsmaResTbName, &info); + } + if (TSDB_CODE_SUCCESS == code) { + addDropTbReqIntoVgroup(pVgMap, pClause, &info, pTableMeta->suid); + } + } + } + if (code) break; + } + return code; +} + static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) { SDropTableStmt* pStmt = (SDropTableStmt*)pQuery->pRoot; bool isSuperTable = false; @@ -12415,8 +12456,7 @@ static int32_t rewriteDropTable(STranslateContext* pCxt, SQuery* pQuery) { } } if (pStmt->withTsma) { - taosHashCleanup(pVgroupHashmap); - return TSDB_CODE_SUCCESS; + dropTableAddTsmaResTb(pCxt, pVgroupHashmap, pStmt); } SArray* pBufArray = serializeVgroupsDropTableBatch(pVgroupHashmap); diff --git a/tests/system-test/2-query/tsma.py b/tests/system-test/2-query/tsma.py index 1e43fb6ec5..dc11fb4ae5 100644 --- a/tests/system-test/2-query/tsma.py +++ b/tests/system-test/2-query/tsma.py @@ -751,6 +751,7 @@ class TDTestCase: self.create_tsma('tsma5', 'test', 'norm_tb', [ 'avg(c1)', 'avg(c2)'], '10m') + time.sleep(999999) self.test_query_with_tsma_interval() self.test_query_with_tsma_agg() self.test_recursive_tsma() @@ -1000,7 +1001,7 @@ class TDTestCase: def run(self): self.init_data() # time.sleep(999999) - #self.test_ddl() + self.test_ddl() self.test_query_with_tsma() # time.sleep(999999)