feat: support restore dnode clause
This commit is contained in:
parent
6c7d4ec898
commit
2c403266e3
|
@ -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);
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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]
|
||||
*
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue