From 2c403266e31d4e23460134289e46d3b3d289dce0 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Tue, 9 May 2023 19:29:57 +0800 Subject: [PATCH] feat: support restore dnode clause --- source/libs/parser/inc/parAst.h | 1 + source/libs/parser/src/parTokenizer.c | 1 + .../parser/test/parAlterToBalanceTest.cpp | 56 ------------------ .../parser/test/parExplainToSyncdbTest.cpp | 57 +++++++++++++++++++ 4 files changed, 59 insertions(+), 56 deletions(-) diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index e08b77e681..698aa4fa6d 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -202,6 +202,7 @@ SNode* createIndexOption(SAstCreateContext* pCxt, SNodeList* pFuncs, SNode* pInt SNode* createDropIndexStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SNode* pIndexName); SNode* createCreateComponentNodeStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pDnodeId); SNode* createDropComponentNodeStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pDnodeId); +SNode* createRestoreComponentNodeStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pDnodeId); SNode* createCreateTopicStmtUseQuery(SAstCreateContext* pCxt, bool ignoreExists, SToken* pTopicName, SNode* pQuery); SNode* createCreateTopicStmtUseDb(SAstCreateContext* pCxt, bool ignoreExists, SToken* pTopicName, SToken* pSubDbName, bool withMeta); diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 312584994f..4d965f20ac 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -181,6 +181,7 @@ static SKeyword keywordTable[] = { {"REPLACE", TK_REPLACE}, {"REPLICA", TK_REPLICA}, {"RESET", TK_RESET}, + {"RESTORE", TK_RESTORE}, {"RETENTIONS", TK_RETENTIONS}, {"REVOKE", TK_REVOKE}, {"ROLLUP", TK_ROLLUP}, diff --git a/source/libs/parser/test/parAlterToBalanceTest.cpp b/source/libs/parser/test/parAlterToBalanceTest.cpp index 0d7cc605f7..d137029a14 100644 --- a/source/libs/parser/test/parAlterToBalanceTest.cpp +++ b/source/libs/parser/test/parAlterToBalanceTest.cpp @@ -92,62 +92,6 @@ TEST_F(ParserInitialATest, alterDnode) { clearCfgDnodeReq(); } -TEST_F(ParserInitialATest, restoreDnode) { - useDb("root", "test"); - - SRestoreDnodeReq expect = {0}; - - auto clearRestoreDnodeReq = [&]() { memset(&expect, 0, sizeof(SRestoreDnodeReq)); }; - - auto setRestoreDnodeReq = [&](int32_t dnodeId, int8_t type) { - expect.dnodeId = dnodeId; - expect.restoreType = type; - }; - - setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) { - int32_t expectNodeType = 0; - switch (expect.restoreType) { - case RESTORE_TYPE__ALL: - expectNodeType = QUERY_NODE_RESTORE_DNODE_STMT; - break; - case RESTORE_TYPE__MNODE: - expectNodeType = QUERY_NODE_RESTORE_MNODE_STMT; - break; - case RESTORE_TYPE__VNODE: - expectNodeType = QUERY_NODE_RESTORE_VNODE_STMT; - break; - case RESTORE_TYPE__QNODE: - expectNodeType = QUERY_NODE_RESTORE_QNODE_STMT; - break; - default: - break; - } - ASSERT_EQ(nodeType(pQuery->pRoot), expectNodeType); - ASSERT_EQ(pQuery->pCmdMsg->msgType, TDMT_MND_RESTORE_DNODE); - SRestoreDnodeReq req = {0}; - ASSERT_EQ(tDeserializeSRestoreDnodeReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req), TSDB_CODE_SUCCESS); - ASSERT_EQ(req.dnodeId, expect.dnodeId); - ASSERT_EQ(req.restoreType, expect.restoreType); - }); - - setRestoreDnodeReq(1, RESTORE_TYPE__ALL); - run("RESTORE DNODE 1"); - clearRestoreDnodeReq(); - - setRestoreDnodeReq(2, RESTORE_TYPE__MNODE); - run("RESTORE MNODE ON DNODE 2"); - clearRestoreDnodeReq(); - - setRestoreDnodeReq(1, RESTORE_TYPE__VNODE); - run("RESTORE VNODE ON DNODE 1"); - clearRestoreDnodeReq(); - - setRestoreDnodeReq(2, RESTORE_TYPE__QNODE); - run("RESTORE QNODE ON DNODE 2"); - clearRestoreDnodeReq(); -} - - /* * ALTER DATABASE db_name [alter_database_options] * diff --git a/source/libs/parser/test/parExplainToSyncdbTest.cpp b/source/libs/parser/test/parExplainToSyncdbTest.cpp index f23685b305..8961b0be32 100644 --- a/source/libs/parser/test/parExplainToSyncdbTest.cpp +++ b/source/libs/parser/test/parExplainToSyncdbTest.cpp @@ -133,6 +133,63 @@ TEST_F(ParserExplainToSyncdbTest, redistributeVgroup) { run("REDISTRIBUTE VGROUP 5 DNODE 10 DNODE 20 DNODE 30"); } +TEST_F(ParserExplainToSyncdbTest, restoreDnode) { + useDb("root", "test"); + + SRestoreDnodeReq expect = {0}; + + auto clearRestoreDnodeReq = [&]() { memset(&expect, 0, sizeof(SRestoreDnodeReq)); }; + + auto setRestoreDnodeReq = [&](int32_t dnodeId, int8_t type) { + expect.dnodeId = dnodeId; + expect.restoreType = type; + }; + + setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) { + int32_t expectNodeType = 0; + switch (expect.restoreType) { + case RESTORE_TYPE__ALL: + expectNodeType = QUERY_NODE_RESTORE_DNODE_STMT; + break; + case RESTORE_TYPE__MNODE: + expectNodeType = QUERY_NODE_RESTORE_MNODE_STMT; + break; + case RESTORE_TYPE__VNODE: + expectNodeType = QUERY_NODE_RESTORE_VNODE_STMT; + break; + case RESTORE_TYPE__QNODE: + expectNodeType = QUERY_NODE_RESTORE_QNODE_STMT; + break; + default: + break; + } + ASSERT_EQ(nodeType(pQuery->pRoot), expectNodeType); + ASSERT_EQ(pQuery->pCmdMsg->msgType, TDMT_MND_RESTORE_DNODE); + SRestoreDnodeReq req = {0}; + ASSERT_EQ(tDeserializeSRestoreDnodeReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req), TSDB_CODE_SUCCESS); + ASSERT_EQ(req.dnodeId, expect.dnodeId); + ASSERT_EQ(req.restoreType, expect.restoreType); + }); + + setRestoreDnodeReq(1, RESTORE_TYPE__ALL); + run("RESTORE DNODE 1"); + clearRestoreDnodeReq(); + + setRestoreDnodeReq(2, RESTORE_TYPE__MNODE); + run("RESTORE MNODE ON DNODE 2"); + clearRestoreDnodeReq(); + + setRestoreDnodeReq(1, RESTORE_TYPE__VNODE); + run("RESTORE VNODE ON DNODE 1"); + clearRestoreDnodeReq(); + + setRestoreDnodeReq(2, RESTORE_TYPE__QNODE); + run("RESTORE QNODE ON DNODE 2"); + clearRestoreDnodeReq(); +} + + + // todo reset query cache TEST_F(ParserExplainToSyncdbTest, revoke) {