TD-10431 process use db msg
This commit is contained in:
parent
eff3783a4f
commit
ec1c569fb9
|
@ -224,7 +224,6 @@ typedef struct SBuildUseDBInput {
|
||||||
int32_t vgVersion;
|
int32_t vgVersion;
|
||||||
} SBuildUseDBInput;
|
} SBuildUseDBInput;
|
||||||
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
|
|
||||||
// null-terminated string instead of char array to avoid too many memory consumption in case of more than 1M tableMeta
|
// null-terminated string instead of char array to avoid too many memory consumption in case of more than 1M tableMeta
|
||||||
|
@ -626,7 +625,6 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char db[TSDB_TABLE_FNAME_LEN];
|
char db[TSDB_TABLE_FNAME_LEN];
|
||||||
int8_t ignoreNotExists;
|
|
||||||
int32_t vgVersion;
|
int32_t vgVersion;
|
||||||
int32_t reserve[8];
|
int32_t reserve[8];
|
||||||
} SUseDbMsg;
|
} SUseDbMsg;
|
||||||
|
@ -872,8 +870,6 @@ typedef struct {
|
||||||
SVgroupInfo vgroupInfo[];
|
SVgroupInfo vgroupInfo[];
|
||||||
} SUseDbRsp;
|
} SUseDbRsp;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sql: show tables like '%a_%'
|
* sql: show tables like '%a_%'
|
||||||
* payload is the query condition, e.g., '%a_%'
|
* payload is the query condition, e.g., '%a_%'
|
||||||
|
@ -1016,35 +1012,27 @@ typedef struct {
|
||||||
|
|
||||||
// mq related
|
// mq related
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqConnectReq;
|
} SMqConnectReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqConnectRsp;
|
} SMqConnectRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqDisconnectReq;
|
} SMqDisconnectReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqDisconnectRsp;
|
} SMqDisconnectRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqAckReq;
|
} SMqAckReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqAckRsp;
|
} SMqAckRsp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqResetReq;
|
} SMqResetReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} SMqResetRsp;
|
} SMqResetRsp;
|
||||||
// mq related end
|
// mq related end
|
||||||
|
|
||||||
|
@ -1100,7 +1088,6 @@ typedef struct {
|
||||||
/* data */
|
/* data */
|
||||||
} SUpdateTagValRsp;
|
} SUpdateTagValRsp;
|
||||||
|
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
/*
|
/**
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* @file vnodeApiTests.cpp
|
||||||
|
* @author slguan (slguan@taosdata.com)
|
||||||
|
* @brief DNODE module API tests
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2021-12-15
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* @copyright Copyright (c) 2021
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "deploy.h"
|
#include "deploy.h"
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
/*
|
/**
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* @file vnodeApiTests.cpp
|
||||||
|
* @author slguan (slguan@taosdata.com)
|
||||||
|
* @brief DNODE module API tests
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2021-12-16
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* @copyright Copyright (c) 2021
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "deploy.h"
|
#include "deploy.h"
|
||||||
|
@ -30,7 +26,7 @@ class DndTestDb : public ::testing::Test {
|
||||||
const char* firstEp = "localhost:9040";
|
const char* firstEp = "localhost:9040";
|
||||||
pServer = CreateServer("/tmp/dnode_test_db", fqdn, 9040, firstEp);
|
pServer = CreateServer("/tmp/dnode_test_db", fqdn, 9040, firstEp);
|
||||||
pClient = createClient("root", "taosdata", fqdn, 9040);
|
pClient = createClient("root", "taosdata", fqdn, 9040);
|
||||||
taosMsleep(300);
|
taosMsleep(1100);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TearDownTestSuite() {
|
static void TearDownTestSuite() {
|
||||||
|
@ -184,31 +180,30 @@ SClient* DndTestDb::pClient;
|
||||||
int32_t DndTestDb::connId;
|
int32_t DndTestDb::connId;
|
||||||
|
|
||||||
TEST_F(DndTestDb, 01_ShowDb) {
|
TEST_F(DndTestDb, 01_ShowDb) {
|
||||||
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 16, NULL);
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
CheckSchema(0, TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN - 1 + VARSTR_HEADER_SIZE, "name");
|
CheckSchema(0, TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN - 1 + VARSTR_HEADER_SIZE, "name");
|
||||||
CheckSchema(1, TSDB_DATA_TYPE_TIMESTAMP, 8, "create time");
|
CheckSchema(1, TSDB_DATA_TYPE_TIMESTAMP, 8, "create time");
|
||||||
CheckSchema(2, TSDB_DATA_TYPE_SMALLINT, 2, "replica");
|
CheckSchema(2, TSDB_DATA_TYPE_SMALLINT, 2, "vgroups");
|
||||||
CheckSchema(3, TSDB_DATA_TYPE_SMALLINT, 2, "quorum");
|
CheckSchema(3, TSDB_DATA_TYPE_SMALLINT, 2, "replica");
|
||||||
CheckSchema(4, TSDB_DATA_TYPE_SMALLINT, 2, "days");
|
CheckSchema(4, TSDB_DATA_TYPE_SMALLINT, 2, "quorum");
|
||||||
CheckSchema(5, TSDB_DATA_TYPE_BINARY, 24 + VARSTR_HEADER_SIZE, "keep0,keep1,keep2");
|
CheckSchema(5, TSDB_DATA_TYPE_SMALLINT, 2, "days");
|
||||||
CheckSchema(6, TSDB_DATA_TYPE_INT, 4, "cache(MB)");
|
CheckSchema(6, TSDB_DATA_TYPE_BINARY, 24 + VARSTR_HEADER_SIZE, "keep0,keep1,keep2");
|
||||||
CheckSchema(7, TSDB_DATA_TYPE_INT, 4, "blocks");
|
CheckSchema(7, TSDB_DATA_TYPE_INT, 4, "cache(MB)");
|
||||||
CheckSchema(8, TSDB_DATA_TYPE_INT, 4, "minrows");
|
CheckSchema(8, TSDB_DATA_TYPE_INT, 4, "blocks");
|
||||||
CheckSchema(9, TSDB_DATA_TYPE_INT, 4, "maxrows");
|
CheckSchema(9, TSDB_DATA_TYPE_INT, 4, "minrows");
|
||||||
CheckSchema(10, TSDB_DATA_TYPE_TINYINT, 1, "wallevel");
|
CheckSchema(10, TSDB_DATA_TYPE_INT, 4, "maxrows");
|
||||||
CheckSchema(11, TSDB_DATA_TYPE_INT, 4, "fsync");
|
CheckSchema(11, TSDB_DATA_TYPE_TINYINT, 1, "wallevel");
|
||||||
CheckSchema(12, TSDB_DATA_TYPE_TINYINT, 1, "comp");
|
CheckSchema(12, TSDB_DATA_TYPE_INT, 4, "fsync");
|
||||||
CheckSchema(13, TSDB_DATA_TYPE_TINYINT, 1, "cachelast");
|
CheckSchema(13, TSDB_DATA_TYPE_TINYINT, 1, "comp");
|
||||||
CheckSchema(14, TSDB_DATA_TYPE_BINARY, 3 + VARSTR_HEADER_SIZE, "precision");
|
CheckSchema(14, TSDB_DATA_TYPE_TINYINT, 1, "cachelast");
|
||||||
CheckSchema(15, TSDB_DATA_TYPE_TINYINT, 1, "update");
|
CheckSchema(15, TSDB_DATA_TYPE_BINARY, 3 + VARSTR_HEADER_SIZE, "precision");
|
||||||
|
CheckSchema(16, TSDB_DATA_TYPE_TINYINT, 1, "update");
|
||||||
|
|
||||||
SendThenCheckShowRetrieveMsg(0);
|
SendThenCheckShowRetrieveMsg(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
{
|
{
|
||||||
taosMsleep(1100);
|
|
||||||
|
|
||||||
SCreateDbMsg* pReq = (SCreateDbMsg*)rpcMallocCont(sizeof(SCreateDbMsg));
|
SCreateDbMsg* pReq = (SCreateDbMsg*)rpcMallocCont(sizeof(SCreateDbMsg));
|
||||||
strcpy(pReq->db, "1.d1");
|
strcpy(pReq->db, "1.d1");
|
||||||
pReq->numOfVgroups = htonl(2);
|
pReq->numOfVgroups = htonl(2);
|
||||||
|
@ -242,10 +237,11 @@ TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
ASSERT_EQ(pMsg->code, 0);
|
ASSERT_EQ(pMsg->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 16, NULL);
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
SendThenCheckShowRetrieveMsg(1);
|
SendThenCheckShowRetrieveMsg(1);
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
||||||
CheckTimestamp();
|
CheckTimestamp();
|
||||||
|
CheckInt16(2); // vgroups
|
||||||
CheckInt16(1); // replica
|
CheckInt16(1); // replica
|
||||||
CheckInt16(1); // quorum
|
CheckInt16(1); // quorum
|
||||||
CheckInt16(10); // days
|
CheckInt16(10); // days
|
||||||
|
@ -299,10 +295,11 @@ TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
ASSERT_EQ(pMsg->code, 0);
|
ASSERT_EQ(pMsg->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 16, NULL);
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
SendThenCheckShowRetrieveMsg(1);
|
SendThenCheckShowRetrieveMsg(1);
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
||||||
CheckTimestamp();
|
CheckTimestamp();
|
||||||
|
CheckInt16(2); // vgroups
|
||||||
CheckInt16(1); // replica
|
CheckInt16(1); // replica
|
||||||
CheckInt16(2); // quorum
|
CheckInt16(2); // quorum
|
||||||
CheckInt16(10); // days
|
CheckInt16(10); // days
|
||||||
|
@ -330,10 +327,11 @@ TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
|
|
||||||
uInfo("all server is running");
|
uInfo("all server is running");
|
||||||
|
|
||||||
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 16, NULL);
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
SendThenCheckShowRetrieveMsg(1);
|
SendThenCheckShowRetrieveMsg(1);
|
||||||
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
CheckBinary("d1", TSDB_DB_NAME_LEN - 1);
|
||||||
CheckTimestamp();
|
CheckTimestamp();
|
||||||
|
CheckInt16(2); // vgroups
|
||||||
CheckInt16(1); // replica
|
CheckInt16(1); // replica
|
||||||
CheckInt16(2); // quorum
|
CheckInt16(2); // quorum
|
||||||
CheckInt16(10); // days
|
CheckInt16(10); // days
|
||||||
|
@ -350,7 +348,7 @@ TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
CheckInt8(0); // update
|
CheckInt8(0); // update
|
||||||
|
|
||||||
{
|
{
|
||||||
SDropDbMsg* pReq = (SDropDbMsg*)rpcMallocCont(sizeof(SAlterDbMsg));
|
SDropDbMsg* pReq = (SDropDbMsg*)rpcMallocCont(sizeof(SDropDbMsg));
|
||||||
strcpy(pReq->db, "1.d1");
|
strcpy(pReq->db, "1.d1");
|
||||||
|
|
||||||
SRpcMsg rpcMsg = {0};
|
SRpcMsg rpcMsg = {0};
|
||||||
|
@ -364,6 +362,103 @@ TEST_F(DndTestDb, 02_Create_Alter_Drop_Db) {
|
||||||
ASSERT_EQ(pMsg->code, 0);
|
ASSERT_EQ(pMsg->code, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 16, NULL);
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
SendThenCheckShowRetrieveMsg(0);
|
SendThenCheckShowRetrieveMsg(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DndTestDb, 03_Create_Use_Restart_Use_Db) {
|
||||||
|
{
|
||||||
|
SCreateDbMsg* pReq = (SCreateDbMsg*)rpcMallocCont(sizeof(SCreateDbMsg));
|
||||||
|
strcpy(pReq->db, "1.d2");
|
||||||
|
pReq->numOfVgroups = htonl(2);
|
||||||
|
pReq->cacheBlockSize = htonl(16);
|
||||||
|
pReq->totalBlocks = htonl(10);
|
||||||
|
pReq->daysPerFile = htonl(10);
|
||||||
|
pReq->daysToKeep0 = htonl(3650);
|
||||||
|
pReq->daysToKeep1 = htonl(3650);
|
||||||
|
pReq->daysToKeep2 = htonl(3650);
|
||||||
|
pReq->minRowsPerFileBlock = htonl(100);
|
||||||
|
pReq->maxRowsPerFileBlock = htonl(4096);
|
||||||
|
pReq->commitTime = htonl(3600);
|
||||||
|
pReq->fsyncPeriod = htonl(3000);
|
||||||
|
pReq->walLevel = 1;
|
||||||
|
pReq->precision = 0;
|
||||||
|
pReq->compression = 2;
|
||||||
|
pReq->replications = 1;
|
||||||
|
pReq->quorum = 1;
|
||||||
|
pReq->update = 0;
|
||||||
|
pReq->cacheLastRow = 0;
|
||||||
|
pReq->ignoreExist = 1;
|
||||||
|
|
||||||
|
SRpcMsg rpcMsg = {0};
|
||||||
|
rpcMsg.pCont = pReq;
|
||||||
|
rpcMsg.contLen = sizeof(SCreateDbMsg);
|
||||||
|
rpcMsg.msgType = TSDB_MSG_TYPE_CREATE_DB;
|
||||||
|
|
||||||
|
sendMsg(pClient, &rpcMsg);
|
||||||
|
SRpcMsg* pMsg = pClient->pRsp;
|
||||||
|
ASSERT_NE(pMsg, nullptr);
|
||||||
|
ASSERT_EQ(pMsg->code, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DB, "show databases", 17, NULL);
|
||||||
|
SendThenCheckShowRetrieveMsg(1);
|
||||||
|
CheckBinary("d2", TSDB_DB_NAME_LEN - 1);
|
||||||
|
|
||||||
|
{
|
||||||
|
SUseDbMsg* pReq = (SUseDbMsg*)rpcMallocCont(sizeof(SUseDbMsg));
|
||||||
|
strcpy(pReq->db, "1.d2");
|
||||||
|
pReq->vgVersion = htonl(-1);
|
||||||
|
|
||||||
|
SRpcMsg rpcMsg = {0};
|
||||||
|
rpcMsg.pCont = pReq;
|
||||||
|
rpcMsg.contLen = sizeof(SUseDbMsg);
|
||||||
|
rpcMsg.msgType = TSDB_MSG_TYPE_USE_DB;
|
||||||
|
|
||||||
|
sendMsg(pClient, &rpcMsg);
|
||||||
|
SRpcMsg* pMsg = pClient->pRsp;
|
||||||
|
ASSERT_NE(pMsg, nullptr);
|
||||||
|
ASSERT_EQ(pMsg->code, 0);
|
||||||
|
|
||||||
|
SUseDbRsp* pRsp = (SUseDbRsp*)pMsg->pCont;
|
||||||
|
EXPECT_STREQ(pRsp->db, "1.d2");
|
||||||
|
pRsp->vgVersion = htonl(pRsp->vgVersion);
|
||||||
|
pRsp->vgNum = htonl(pRsp->vgNum);
|
||||||
|
pRsp->hashMethod = pRsp->hashMethod;
|
||||||
|
EXPECT_EQ(pRsp->vgVersion, 1);
|
||||||
|
EXPECT_EQ(pRsp->vgNum, 2);
|
||||||
|
EXPECT_EQ(pRsp->hashMethod, 1);
|
||||||
|
|
||||||
|
{
|
||||||
|
SVgroupInfo* pInfo = &pRsp->vgroupInfo[0];
|
||||||
|
pInfo->vgId = htonl(pInfo->vgId);
|
||||||
|
pInfo->hashBegin = htonl(pInfo->hashBegin);
|
||||||
|
pInfo->hashEnd = htonl(pInfo->hashEnd);
|
||||||
|
EXPECT_GT(pInfo->vgId, 0);
|
||||||
|
EXPECT_EQ(pInfo->hashBegin, 0);
|
||||||
|
EXPECT_EQ(pInfo->hashEnd, INT32_MAX / 2 - 1);
|
||||||
|
EXPECT_EQ(pInfo->inUse, 0);
|
||||||
|
EXPECT_EQ(pInfo->numOfEps, 1);
|
||||||
|
SEpAddrMsg* pAddr = &pInfo->epAddr[0];
|
||||||
|
pAddr->port = htons(pAddr->port);
|
||||||
|
EXPECT_EQ(pAddr->port, 9040);
|
||||||
|
EXPECT_STREQ(pAddr->fqdn, "localhost");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
SVgroupInfo* pInfo = &pRsp->vgroupInfo[1];
|
||||||
|
pInfo->vgId = htonl(pInfo->vgId);
|
||||||
|
pInfo->hashBegin = htonl(pInfo->hashBegin);
|
||||||
|
pInfo->hashEnd = htonl(pInfo->hashEnd);
|
||||||
|
EXPECT_GT(pInfo->vgId, 0);
|
||||||
|
EXPECT_EQ(pInfo->hashBegin, INT32_MAX / 2);
|
||||||
|
EXPECT_EQ(pInfo->hashEnd, INT32_MAX);
|
||||||
|
EXPECT_EQ(pInfo->inUse, 0);
|
||||||
|
EXPECT_EQ(pInfo->numOfEps, 1);
|
||||||
|
SEpAddrMsg* pAddr = &pInfo->epAddr[0];
|
||||||
|
pAddr->port = htons(pAddr->port);
|
||||||
|
EXPECT_EQ(pAddr->port, 9040);
|
||||||
|
EXPECT_STREQ(pAddr->fqdn, "localhost");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
/*
|
/**
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* @file vnodeApiTests.cpp
|
||||||
|
* @author slguan (slguan@taosdata.com)
|
||||||
|
* @brief DNODE module API tests
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2021-12-14
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* @copyright Copyright (c) 2021
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "deploy.h"
|
#include "deploy.h"
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
/*
|
/**
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* @file vnodeApiTests.cpp
|
||||||
|
* @author slguan (slguan@taosdata.com)
|
||||||
|
* @brief DNODE module API tests
|
||||||
|
* @version 0.1
|
||||||
|
* @date 2021-12-12
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* @copyright Copyright (c) 2021
|
||||||
* it under the terms of the GNU Affero General Public License, version 3
|
|
||||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "deploy.h"
|
#include "deploy.h"
|
||||||
|
|
|
@ -227,6 +227,7 @@ typedef struct {
|
||||||
int32_t hashBegin;
|
int32_t hashBegin;
|
||||||
int32_t hashEnd;
|
int32_t hashEnd;
|
||||||
char dbName[TSDB_FULL_DB_NAME_LEN];
|
char dbName[TSDB_FULL_DB_NAME_LEN];
|
||||||
|
int64_t dbUid;
|
||||||
int32_t numOfTables;
|
int32_t numOfTables;
|
||||||
int32_t numOfTimeSeries;
|
int32_t numOfTimeSeries;
|
||||||
int64_t totalStorage;
|
int64_t totalStorage;
|
||||||
|
|
|
@ -292,8 +292,8 @@ static int32_t mndCreateDb(SMnode *pMnode, SMnodeMsg *pMsg, SCreateDbMsg *pCreat
|
||||||
dbObj.uid = mndGenerateUid(dbObj.name, TSDB_FULL_DB_NAME_LEN);
|
dbObj.uid = mndGenerateUid(dbObj.name, TSDB_FULL_DB_NAME_LEN);
|
||||||
dbObj.numOfVgroups = pCreate->numOfVgroups;
|
dbObj.numOfVgroups = pCreate->numOfVgroups;
|
||||||
dbObj.hashMethod = 1;
|
dbObj.hashMethod = 1;
|
||||||
dbObj.cfgVersion = 0;
|
dbObj.cfgVersion = 1;
|
||||||
dbObj.vgVersion = 0;
|
dbObj.vgVersion = 1;
|
||||||
dbObj.cfg = (SDbCfg){.cacheBlockSize = pCreate->cacheBlockSize,
|
dbObj.cfg = (SDbCfg){.cacheBlockSize = pCreate->cacheBlockSize,
|
||||||
.totalBlocks = pCreate->totalBlocks,
|
.totalBlocks = pCreate->totalBlocks,
|
||||||
.daysPerFile = pCreate->daysPerFile,
|
.daysPerFile = pCreate->daysPerFile,
|
||||||
|
@ -614,17 +614,69 @@ static int32_t mndProcessDropDbMsg(SMnodeMsg *pMsg) {
|
||||||
|
|
||||||
static int32_t mndProcessUseDbMsg(SMnodeMsg *pMsg) {
|
static int32_t mndProcessUseDbMsg(SMnodeMsg *pMsg) {
|
||||||
SMnode *pMnode = pMsg->pMnode;
|
SMnode *pMnode = pMsg->pMnode;
|
||||||
|
SSdb *pSdb = pMnode->pSdb;
|
||||||
SUseDbMsg *pUse = pMsg->rpcMsg.pCont;
|
SUseDbMsg *pUse = pMsg->rpcMsg.pCont;
|
||||||
|
pUse->vgVersion = htonl(pUse->vgVersion);
|
||||||
|
|
||||||
SDbObj *pDb = mndAcquireDb(pMnode, pMsg->db);
|
SDbObj *pDb = mndAcquireDb(pMnode, pUse->db);
|
||||||
if (pDb != NULL) {
|
if (pDb == NULL) {
|
||||||
strncpy(pMsg->db, pUse->db, TSDB_FULL_DB_NAME_LEN);
|
terrno = TSDB_CODE_MND_DB_NOT_EXIST;
|
||||||
mndReleaseDb(pMnode, pDb);
|
mError("db:%s, failed to process use db msg since %s", pUse->db, terrstr());
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
mError("db:%s, failed to process use db msg since %s", pMsg->db, terrstr());
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t contLen = sizeof(SUseDbRsp) + pDb->numOfVgroups * sizeof(SVgroupInfo);
|
||||||
|
SUseDbRsp *pRsp = rpcMallocCont(contLen);
|
||||||
|
if (pRsp == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t vindex = 0;
|
||||||
|
|
||||||
|
if (pUse->vgVersion < pDb->vgVersion) {
|
||||||
|
void *pIter = NULL;
|
||||||
|
while (vindex < pDb->numOfVgroups) {
|
||||||
|
SVgObj *pVgroup = NULL;
|
||||||
|
pIter = sdbFetch(pSdb, SDB_VGROUP, pIter, (void **)&pVgroup);
|
||||||
|
if (pIter == NULL) break;
|
||||||
|
|
||||||
|
if (pVgroup->dbUid == pDb->uid) {
|
||||||
|
SVgroupInfo *pInfo = &pRsp->vgroupInfo[vindex];
|
||||||
|
pInfo->vgId = htonl(pVgroup->vgId);
|
||||||
|
pInfo->hashBegin = htonl(pVgroup->hashBegin);
|
||||||
|
pInfo->hashEnd = htonl(pVgroup->hashEnd);
|
||||||
|
pInfo->numOfEps = pVgroup->replica;
|
||||||
|
for (int32_t gid = 0; gid < pVgroup->replica; ++gid) {
|
||||||
|
SVnodeGid *pVgid = &pVgroup->vnodeGid[gid];
|
||||||
|
SEpAddrMsg *pEpArrr = &pInfo->epAddr[gid];
|
||||||
|
SDnodeObj *pDnode = mndAcquireDnode(pMnode, pVgid->dnodeId);
|
||||||
|
if (pDnode != NULL) {
|
||||||
|
memcpy(pEpArrr->fqdn, pDnode->fqdn, TSDB_FQDN_LEN);
|
||||||
|
pEpArrr->port = htons(pDnode->port);
|
||||||
|
}
|
||||||
|
mndReleaseDnode(pMnode, pDnode);
|
||||||
|
if (pVgid->role == TAOS_SYNC_STATE_LEADER) {
|
||||||
|
pInfo->inUse = gid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vindex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdbRelease(pSdb, pVgroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pRsp->db, pDb->name, TSDB_FULL_DB_NAME_LEN);
|
||||||
|
pRsp->vgVersion = htonl(pDb->vgVersion);
|
||||||
|
pRsp->vgNum = htonl(vindex);
|
||||||
|
pRsp->hashMethod = pDb->hashMethod;
|
||||||
|
|
||||||
|
pMsg->pCont = pRsp;
|
||||||
|
pMsg->contLen = contLen;
|
||||||
|
mndReleaseDb(pMnode, pDb);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndProcessSyncDbMsg(SMnodeMsg *pMsg) {
|
static int32_t mndProcessSyncDbMsg(SMnodeMsg *pMsg) {
|
||||||
|
@ -674,6 +726,12 @@ static int32_t mndGetDbMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pMe
|
||||||
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
pShow->bytes[cols] = 2;
|
||||||
|
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||||
|
strcpy(pSchema[cols].name, "vgroups");
|
||||||
|
pSchema[cols].bytes = htons(pShow->bytes[cols]);
|
||||||
|
cols++;
|
||||||
|
|
||||||
pShow->bytes[cols] = 2;
|
pShow->bytes[cols] = 2;
|
||||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||||
strcpy(pSchema[cols].name, "replica");
|
strcpy(pSchema[cols].name, "replica");
|
||||||
|
@ -811,6 +869,10 @@ static int32_t mndRetrieveDbs(SMnodeMsg *pMsg, SShowObj *pShow, char *data, int3
|
||||||
*(int64_t *)pWrite = pDb->createdTime;
|
*(int64_t *)pWrite = pDb->createdTime;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
||||||
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
|
*(int16_t *)pWrite = pDb->numOfVgroups;
|
||||||
|
cols++;
|
||||||
|
|
||||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||||
*(int16_t *)pWrite = pDb->cfg.replications;
|
*(int16_t *)pWrite = pDb->cfg.replications;
|
||||||
cols++;
|
cols++;
|
||||||
|
|
|
@ -80,6 +80,7 @@ SSdbRaw *mndVgroupActionEncode(SVgObj *pVgroup) {
|
||||||
SDB_SET_INT32(pRaw, dataPos, pVgroup->hashBegin)
|
SDB_SET_INT32(pRaw, dataPos, pVgroup->hashBegin)
|
||||||
SDB_SET_INT32(pRaw, dataPos, pVgroup->hashEnd)
|
SDB_SET_INT32(pRaw, dataPos, pVgroup->hashEnd)
|
||||||
SDB_SET_BINARY(pRaw, dataPos, pVgroup->dbName, TSDB_FULL_DB_NAME_LEN)
|
SDB_SET_BINARY(pRaw, dataPos, pVgroup->dbName, TSDB_FULL_DB_NAME_LEN)
|
||||||
|
SDB_SET_INT64(pRaw, dataPos, pVgroup->dbUid)
|
||||||
SDB_SET_INT8(pRaw, dataPos, pVgroup->replica)
|
SDB_SET_INT8(pRaw, dataPos, pVgroup->replica)
|
||||||
for (int8_t i = 0; i < pVgroup->replica; ++i) {
|
for (int8_t i = 0; i < pVgroup->replica; ++i) {
|
||||||
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
||||||
|
@ -102,7 +103,7 @@ SSdbRow *mndVgroupActionDecode(SSdbRaw *pRaw) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSdbRow *pRow = sdbAllocRow(sizeof(SDbObj));
|
SSdbRow *pRow = sdbAllocRow(sizeof(SVgObj));
|
||||||
SVgObj *pVgroup = sdbGetRowObj(pRow);
|
SVgObj *pVgroup = sdbGetRowObj(pRow);
|
||||||
if (pVgroup == NULL) return NULL;
|
if (pVgroup == NULL) return NULL;
|
||||||
|
|
||||||
|
@ -114,6 +115,7 @@ SSdbRow *mndVgroupActionDecode(SSdbRaw *pRaw) {
|
||||||
SDB_GET_INT32(pRaw, pRow, dataPos, &pVgroup->hashBegin)
|
SDB_GET_INT32(pRaw, pRow, dataPos, &pVgroup->hashBegin)
|
||||||
SDB_GET_INT32(pRaw, pRow, dataPos, &pVgroup->hashEnd)
|
SDB_GET_INT32(pRaw, pRow, dataPos, &pVgroup->hashEnd)
|
||||||
SDB_GET_BINARY(pRaw, pRow, dataPos, pVgroup->dbName, TSDB_FULL_DB_NAME_LEN)
|
SDB_GET_BINARY(pRaw, pRow, dataPos, pVgroup->dbName, TSDB_FULL_DB_NAME_LEN)
|
||||||
|
SDB_GET_INT64(pRaw, pRow, dataPos, &pVgroup->dbUid)
|
||||||
SDB_GET_INT8(pRaw, pRow, dataPos, &pVgroup->replica)
|
SDB_GET_INT8(pRaw, pRow, dataPos, &pVgroup->replica)
|
||||||
for (int8_t i = 0; i < pVgroup->replica; ++i) {
|
for (int8_t i = 0; i < pVgroup->replica; ++i) {
|
||||||
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
SVnodeGid *pVgid = &pVgroup->vnodeGid[i];
|
||||||
|
@ -222,12 +224,13 @@ int32_t mndAllocVgroup(SMnode *pMnode, SDbObj *pDb, SVgObj **ppVgroups) {
|
||||||
pVgroup->vgId = maxVgId++;
|
pVgroup->vgId = maxVgId++;
|
||||||
pVgroup->createdTime = taosGetTimestampMs();
|
pVgroup->createdTime = taosGetTimestampMs();
|
||||||
pVgroup->updateTime = pVgroups->createdTime;
|
pVgroup->updateTime = pVgroups->createdTime;
|
||||||
pVgroup->version = 0;
|
pVgroup->version = 1;
|
||||||
|
pVgroup->dbUid = pDb->uid;
|
||||||
pVgroup->hashBegin = hashMin + hashInterval * v;
|
pVgroup->hashBegin = hashMin + hashInterval * v;
|
||||||
if (v == pDb->numOfVgroups - 1) {
|
if (v == pDb->numOfVgroups - 1) {
|
||||||
pVgroup->hashEnd = hashMax;
|
pVgroup->hashEnd = hashMax;
|
||||||
} else {
|
} else {
|
||||||
pVgroup->hashEnd = hashMin + hashInterval * (v + 1);
|
pVgroup->hashEnd = hashMin + hashInterval * (v + 1) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(pVgroup->dbName, pDb->name, TSDB_FULL_DB_NAME_LEN);
|
memcpy(pVgroup->dbName, pDb->name, TSDB_FULL_DB_NAME_LEN);
|
||||||
|
|
Loading…
Reference in New Issue