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* createDropIndexStmt(SAstCreateContext* pCxt, bool ignoreNotExists, SNode* pIndexName);
|
||||||
SNode* createCreateComponentNodeStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pDnodeId);
|
SNode* createCreateComponentNodeStmt(SAstCreateContext* pCxt, ENodeType type, const SToken* pDnodeId);
|
||||||
SNode* createDropComponentNodeStmt(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* createCreateTopicStmtUseQuery(SAstCreateContext* pCxt, bool ignoreExists, SToken* pTopicName, SNode* pQuery);
|
||||||
SNode* createCreateTopicStmtUseDb(SAstCreateContext* pCxt, bool ignoreExists, SToken* pTopicName, SToken* pSubDbName,
|
SNode* createCreateTopicStmtUseDb(SAstCreateContext* pCxt, bool ignoreExists, SToken* pTopicName, SToken* pSubDbName,
|
||||||
bool withMeta);
|
bool withMeta);
|
||||||
|
|
|
@ -181,6 +181,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"REPLACE", TK_REPLACE},
|
{"REPLACE", TK_REPLACE},
|
||||||
{"REPLICA", TK_REPLICA},
|
{"REPLICA", TK_REPLICA},
|
||||||
{"RESET", TK_RESET},
|
{"RESET", TK_RESET},
|
||||||
|
{"RESTORE", TK_RESTORE},
|
||||||
{"RETENTIONS", TK_RETENTIONS},
|
{"RETENTIONS", TK_RETENTIONS},
|
||||||
{"REVOKE", TK_REVOKE},
|
{"REVOKE", TK_REVOKE},
|
||||||
{"ROLLUP", TK_ROLLUP},
|
{"ROLLUP", TK_ROLLUP},
|
||||||
|
|
|
@ -92,62 +92,6 @@ TEST_F(ParserInitialATest, alterDnode) {
|
||||||
clearCfgDnodeReq();
|
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]
|
* 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");
|
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
|
// todo reset query cache
|
||||||
|
|
||||||
TEST_F(ParserExplainToSyncdbTest, revoke) {
|
TEST_F(ParserExplainToSyncdbTest, revoke) {
|
||||||
|
|
Loading…
Reference in New Issue