2021-12-19 03:08:43 +00:00
|
|
|
/**
|
|
|
|
|
* @file db.cpp
|
|
|
|
|
* @author slguan (slguan@taosdata.com)
|
2022-01-10 05:22:41 +00:00
|
|
|
* @brief DNODE module vnode tests
|
2021-12-19 03:08:43 +00:00
|
|
|
* @version 0.1
|
|
|
|
|
* @date 2021-12-20
|
|
|
|
|
*
|
|
|
|
|
* @copyright Copyright (c) 2021
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
2022-01-04 12:36:54 +00:00
|
|
|
#include "sut.h"
|
2021-12-19 03:08:43 +00:00
|
|
|
|
2022-01-08 04:57:46 +00:00
|
|
|
class DndTestVnode : public ::testing::Test {
|
2021-12-19 03:08:43 +00:00
|
|
|
protected:
|
2022-01-10 07:15:37 +00:00
|
|
|
static void SetUpTestSuite() { test.Init("/tmp/dnode_test_vnode", 9115); }
|
2021-12-22 10:39:32 +00:00
|
|
|
static void TearDownTestSuite() { test.Cleanup(); }
|
2021-12-19 03:08:43 +00:00
|
|
|
|
2021-12-22 10:39:32 +00:00
|
|
|
static Testbase test;
|
2021-12-19 03:08:43 +00:00
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
void SetUp() override {}
|
|
|
|
|
void TearDown() override {}
|
|
|
|
|
};
|
|
|
|
|
|
2022-01-08 04:57:46 +00:00
|
|
|
Testbase DndTestVnode::test;
|
2021-12-19 03:08:43 +00:00
|
|
|
|
2022-01-17 08:54:16 +00:00
|
|
|
TEST_F(DndTestVnode, 01_Create_Vnode) {
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
2022-02-16 06:57:47 +00:00
|
|
|
SCreateVnodeReq createReq = {0};
|
|
|
|
|
createReq.vgId = 2;
|
|
|
|
|
createReq.dnodeId = 1;
|
|
|
|
|
strcpy(createReq.db, "1.d1");
|
|
|
|
|
createReq.dbUid = 9527;
|
|
|
|
|
createReq.vgVersion = 1;
|
2022-04-25 13:12:03 +00:00
|
|
|
createReq.durationPerFile = 10;
|
|
|
|
|
createReq.durationToKeep0 = 3650;
|
|
|
|
|
createReq.durationToKeep1 = 3650;
|
|
|
|
|
createReq.durationToKeep2 = 3650;
|
2022-02-16 06:57:47 +00:00
|
|
|
createReq.minRows = 100;
|
|
|
|
|
createReq.minRows = 4096;
|
|
|
|
|
createReq.fsyncPeriod = 3000;
|
|
|
|
|
createReq.walLevel = 1;
|
|
|
|
|
createReq.precision = 0;
|
|
|
|
|
createReq.compression = 2;
|
|
|
|
|
createReq.replica = 1;
|
2022-04-20 01:47:38 +00:00
|
|
|
createReq.strict = 1;
|
2022-02-16 06:57:47 +00:00
|
|
|
createReq.cacheLastRow = 0;
|
|
|
|
|
createReq.selfIndex = 0;
|
|
|
|
|
for (int r = 0; r < createReq.replica; ++r) {
|
|
|
|
|
SReplica* pReplica = &createReq.replicas[r];
|
|
|
|
|
pReplica->id = 1;
|
|
|
|
|
pReplica->port = 9527;
|
2022-01-17 08:54:16 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-16 06:57:47 +00:00
|
|
|
int32_t contLen = tSerializeSCreateVnodeReq(NULL, 0, &createReq);
|
|
|
|
|
void* pReq = rpcMallocCont(contLen);
|
|
|
|
|
tSerializeSCreateVnodeReq(pReq, contLen, &createReq);
|
|
|
|
|
|
2022-01-17 08:54:16 +00:00
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_VNODE, pReq, contLen);
|
|
|
|
|
ASSERT_NE(pRsp, nullptr);
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
|
|
|
|
test.Restart();
|
|
|
|
|
} else {
|
2022-04-09 08:05:20 +00:00
|
|
|
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_ALREADY_DEPLOYED);
|
2021-12-20 02:05:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
2022-01-17 08:54:16 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-09 02:52:06 +00:00
|
|
|
TEST_F(DndTestVnode, 02_Alter_Vnode) {
|
2022-01-17 08:54:16 +00:00
|
|
|
for (int i = 0; i < 3; ++i) {
|
2022-02-16 06:57:47 +00:00
|
|
|
SAlterVnodeReq alterReq = {0};
|
|
|
|
|
alterReq.vgVersion = 2;
|
2022-04-25 13:12:03 +00:00
|
|
|
alterReq.durationPerFile = 10;
|
|
|
|
|
alterReq.durationToKeep0 = 3650;
|
|
|
|
|
alterReq.durationToKeep1 = 3650;
|
|
|
|
|
alterReq.durationToKeep2 = 3650;
|
2022-02-16 06:57:47 +00:00
|
|
|
alterReq.fsyncPeriod = 3000;
|
|
|
|
|
alterReq.walLevel = 1;
|
|
|
|
|
alterReq.replica = 1;
|
2022-04-20 01:47:38 +00:00
|
|
|
alterReq.strict = 1;
|
2022-02-16 06:57:47 +00:00
|
|
|
alterReq.cacheLastRow = 0;
|
|
|
|
|
alterReq.selfIndex = 0;
|
|
|
|
|
for (int r = 0; r < alterReq.replica; ++r) {
|
|
|
|
|
SReplica* pReplica = &alterReq.replicas[r];
|
|
|
|
|
pReplica->id = 1;
|
|
|
|
|
pReplica->port = 9527;
|
2022-01-17 08:54:16 +00:00
|
|
|
}
|
|
|
|
|
|
2022-02-16 06:57:47 +00:00
|
|
|
int32_t contLen = tSerializeSCreateVnodeReq(NULL, 0, &alterReq);
|
|
|
|
|
void* pReq = rpcMallocCont(contLen);
|
|
|
|
|
tSerializeSCreateVnodeReq(pReq, contLen, &alterReq);
|
|
|
|
|
|
2022-04-20 06:58:14 +00:00
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_VND_ALTER_VNODE, pReq, contLen);
|
2022-01-17 08:54:16 +00:00
|
|
|
ASSERT_NE(pRsp, nullptr);
|
|
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(DndTestVnode, 03_Create_Stb) {
|
|
|
|
|
for (int i = 0; i < 1; ++i) {
|
|
|
|
|
SVCreateTbReq req = {0};
|
|
|
|
|
req.ver = 0;
|
2022-03-24 07:06:50 +00:00
|
|
|
req.dbFName = (char*)"1.db1";
|
2022-01-17 08:54:16 +00:00
|
|
|
req.name = (char*)"stb1";
|
|
|
|
|
req.ttl = 0;
|
|
|
|
|
req.keep = 0;
|
|
|
|
|
req.type = TD_SUPER_TABLE;
|
|
|
|
|
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx schemas[2] = {0};
|
2022-01-17 08:54:16 +00:00
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx* pSchema = &schemas[0];
|
2022-01-17 08:54:16 +00:00
|
|
|
pSchema->bytes = htonl(8);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_TIMESTAMP;
|
|
|
|
|
strcpy(pSchema->name, "ts");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx* pSchema = &schemas[1];
|
2022-01-17 08:54:16 +00:00
|
|
|
pSchema->bytes = htonl(4);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_INT;
|
|
|
|
|
strcpy(pSchema->name, "col1");
|
|
|
|
|
}
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema tagSchemas[3] = {0};
|
2022-01-17 08:54:16 +00:00
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[0];
|
2022-01-17 08:54:16 +00:00
|
|
|
pSchema->bytes = htonl(2);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_TINYINT;
|
|
|
|
|
strcpy(pSchema->name, "tag1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[1];
|
2022-01-17 08:54:16 +00:00
|
|
|
pSchema->bytes = htonl(8);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_BIGINT;
|
|
|
|
|
strcpy(pSchema->name, "tag2");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[2];
|
2022-01-17 08:54:16 +00:00
|
|
|
pSchema->bytes = htonl(16);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_BINARY;
|
|
|
|
|
strcpy(pSchema->name, "tag3");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
req.stbCfg.suid = 9527;
|
|
|
|
|
req.stbCfg.nCols = 2;
|
|
|
|
|
req.stbCfg.pSchema = &schemas[0];
|
|
|
|
|
req.stbCfg.nTagCols = 3;
|
2022-04-01 09:43:50 +00:00
|
|
|
req.stbCfg.pTagSchema = &tagSchemas[0];
|
2022-01-17 08:54:16 +00:00
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
int32_t contLen = tSerializeSVCreateTbReq(NULL, &req) + sizeof(SMsgHead);
|
|
|
|
|
SMsgHead* pHead = (SMsgHead*)rpcMallocCont(contLen);
|
2022-01-17 08:54:16 +00:00
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
pHead->contLen = htonl(contLen);
|
|
|
|
|
pHead->vgId = htonl(2);
|
2022-01-17 08:54:16 +00:00
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
void* pBuf = POINTER_SHIFT(pHead, sizeof(SMsgHead));
|
2022-01-17 08:54:16 +00:00
|
|
|
tSerializeSVCreateTbReq(&pBuf, &req);
|
|
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_VND_CREATE_STB, (void*)pHead, contLen);
|
2022-01-17 08:54:16 +00:00
|
|
|
ASSERT_NE(pRsp, nullptr);
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
|
|
|
|
test.Restart();
|
|
|
|
|
} else {
|
|
|
|
|
ASSERT_EQ(pRsp->code, TSDB_CODE_TDB_TABLE_ALREADY_EXIST);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-09 02:52:06 +00:00
|
|
|
TEST_F(DndTestVnode, 04_Alter_Stb) {
|
2022-02-08 09:44:58 +00:00
|
|
|
for (int i = 0; i < 1; ++i) {
|
|
|
|
|
SVCreateTbReq req = {0};
|
|
|
|
|
req.ver = 0;
|
2022-03-24 07:06:50 +00:00
|
|
|
req.dbFName = (char*)"1.db1";
|
2022-02-08 09:44:58 +00:00
|
|
|
req.name = (char*)"stb1";
|
|
|
|
|
req.ttl = 0;
|
|
|
|
|
req.keep = 0;
|
|
|
|
|
req.type = TD_SUPER_TABLE;
|
|
|
|
|
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx schemas[2] = {0};
|
2022-02-08 09:44:58 +00:00
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx* pSchema = &schemas[0];
|
2022-02-08 09:44:58 +00:00
|
|
|
pSchema->bytes = htonl(8);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_TIMESTAMP;
|
|
|
|
|
strcpy(pSchema->name, "ts");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchemaEx* pSchema = &schemas[1];
|
2022-02-08 09:44:58 +00:00
|
|
|
pSchema->bytes = htonl(4);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_INT;
|
|
|
|
|
strcpy(pSchema->name, "col1");
|
|
|
|
|
}
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema tagSchemas[3] = {0};
|
2022-02-08 09:44:58 +00:00
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[0];
|
2022-02-08 09:44:58 +00:00
|
|
|
pSchema->bytes = htonl(2);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_TINYINT;
|
|
|
|
|
strcpy(pSchema->name, "_tag1");
|
2021-12-19 03:08:43 +00:00
|
|
|
}
|
2022-02-08 09:44:58 +00:00
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[1];
|
2022-02-08 09:44:58 +00:00
|
|
|
pSchema->bytes = htonl(8);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_BIGINT;
|
|
|
|
|
strcpy(pSchema->name, "_tag2");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2022-04-01 09:43:50 +00:00
|
|
|
SSchema* pSchema = &tagSchemas[2];
|
2022-02-08 09:44:58 +00:00
|
|
|
pSchema->bytes = htonl(16);
|
|
|
|
|
pSchema->type = TSDB_DATA_TYPE_BINARY;
|
|
|
|
|
strcpy(pSchema->name, "_tag3");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
req.stbCfg.suid = 9527;
|
|
|
|
|
req.stbCfg.nCols = 2;
|
|
|
|
|
req.stbCfg.pSchema = &schemas[0];
|
|
|
|
|
req.stbCfg.nTagCols = 3;
|
2022-04-01 09:43:50 +00:00
|
|
|
req.stbCfg.pTagSchema = &tagSchemas[0];
|
2022-02-08 09:44:58 +00:00
|
|
|
|
|
|
|
|
int32_t contLen = tSerializeSVCreateTbReq(NULL, &req) + sizeof(SMsgHead);
|
|
|
|
|
SMsgHead* pHead = (SMsgHead*)rpcMallocCont(contLen);
|
|
|
|
|
|
|
|
|
|
pHead->contLen = htonl(contLen);
|
|
|
|
|
pHead->vgId = htonl(2);
|
|
|
|
|
|
|
|
|
|
void* pBuf = POINTER_SHIFT(pHead, sizeof(SMsgHead));
|
|
|
|
|
tSerializeSVCreateTbReq(&pBuf, &req);
|
|
|
|
|
|
|
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_VND_ALTER_STB, (void*)pHead, contLen);
|
|
|
|
|
ASSERT_NE(pRsp, nullptr);
|
|
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
2021-12-20 02:05:10 +00:00
|
|
|
}
|
2022-01-17 08:54:16 +00:00
|
|
|
}
|
2021-12-19 03:08:43 +00:00
|
|
|
|
2022-01-17 08:54:16 +00:00
|
|
|
TEST_F(DndTestVnode, 05_DROP_Stb) {
|
2021-12-20 02:05:10 +00:00
|
|
|
{
|
2022-01-28 02:54:50 +00:00
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
SVDropTbReq req = {0};
|
|
|
|
|
req.ver = 0;
|
|
|
|
|
req.name = (char*)"stb1";
|
|
|
|
|
req.suid = 9599;
|
|
|
|
|
req.type = TD_SUPER_TABLE;
|
2022-01-28 01:29:17 +00:00
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
int32_t contLen = tSerializeSVDropTbReq(NULL, &req) + sizeof(SMsgHead);
|
|
|
|
|
SMsgHead* pHead = (SMsgHead*)rpcMallocCont(contLen);
|
2022-01-28 01:29:17 +00:00
|
|
|
|
2022-01-28 02:54:50 +00:00
|
|
|
pHead->contLen = htonl(contLen);
|
|
|
|
|
pHead->vgId = htonl(2);
|
|
|
|
|
|
|
|
|
|
void* pBuf = POINTER_SHIFT(pHead, sizeof(SMsgHead));
|
|
|
|
|
tSerializeSVDropTbReq(&pBuf, &req);
|
|
|
|
|
|
|
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_VND_DROP_STB, (void*)pHead, contLen);
|
2022-01-05 12:18:56 +00:00
|
|
|
ASSERT_NE(pRsp, nullptr);
|
2022-01-28 02:54:50 +00:00
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
2021-12-20 02:05:10 +00:00
|
|
|
}
|
2021-12-19 03:08:43 +00:00
|
|
|
}
|
|
|
|
|
}
|
2022-01-17 08:54:16 +00:00
|
|
|
|
2022-02-09 02:52:06 +00:00
|
|
|
TEST_F(DndTestVnode, 06_Drop_Vnode) {
|
2022-01-17 08:54:16 +00:00
|
|
|
for (int i = 0; i < 3; ++i) {
|
2022-02-16 06:10:09 +00:00
|
|
|
SDropVnodeReq dropReq = {0};
|
|
|
|
|
dropReq.vgId = 2;
|
|
|
|
|
dropReq.dnodeId = 1;
|
|
|
|
|
strcpy(dropReq.db, "1.d1");
|
|
|
|
|
dropReq.dbUid = 9527;
|
2022-01-17 08:54:16 +00:00
|
|
|
|
2022-02-16 06:10:09 +00:00
|
|
|
int32_t contLen = tSerializeSDropVnodeReq(NULL, 0, &dropReq);
|
|
|
|
|
void* pReq = rpcMallocCont(contLen);
|
|
|
|
|
tSerializeSDropVnodeReq(pReq, contLen, &dropReq);
|
2022-01-17 08:54:16 +00:00
|
|
|
|
|
|
|
|
SRpcMsg rpcMsg = {0};
|
|
|
|
|
rpcMsg.pCont = pReq;
|
2022-02-16 06:10:09 +00:00
|
|
|
rpcMsg.contLen = contLen;
|
2022-01-17 08:54:16 +00:00
|
|
|
rpcMsg.msgType = TDMT_DND_DROP_VNODE;
|
|
|
|
|
|
|
|
|
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_VNODE, pReq, contLen);
|
|
|
|
|
ASSERT_NE(pRsp, nullptr);
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
ASSERT_EQ(pRsp->code, 0);
|
|
|
|
|
test.Restart();
|
|
|
|
|
} else {
|
2022-04-09 08:05:20 +00:00
|
|
|
ASSERT_EQ(pRsp->code, TSDB_CODE_NODE_NOT_DEPLOYED);
|
2022-01-17 08:54:16 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|