[TD-388] drop dnode in community version
This commit is contained in:
parent
268baa3df8
commit
ab9fac496b
|
@ -725,6 +725,8 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t queryId;
|
uint32_t queryId;
|
||||||
uint32_t streamId;
|
uint32_t streamId;
|
||||||
|
uint32_t totalDnodes;
|
||||||
|
uint32_t onlineDnodes;
|
||||||
int8_t killConnection;
|
int8_t killConnection;
|
||||||
SRpcIpSet ipList;
|
SRpcIpSet ipList;
|
||||||
} SCMHeartBeatRsp;
|
} SCMHeartBeatRsp;
|
||||||
|
|
|
@ -66,7 +66,6 @@ typedef struct SMnodeObj {
|
||||||
SDnodeObj *pDnode;
|
SDnodeObj *pDnode;
|
||||||
} SMnodeObj;
|
} SMnodeObj;
|
||||||
|
|
||||||
// todo use dynamic length string
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *tableId;
|
char *tableId;
|
||||||
int8_t type;
|
int8_t type;
|
||||||
|
|
|
@ -34,6 +34,7 @@ char* mgmtGetDnodeStatusStr(int32_t dnodeStatus);
|
||||||
void mgmtMonitorDnodeModule();
|
void mgmtMonitorDnodeModule();
|
||||||
|
|
||||||
int32_t mgmtGetDnodesNum();
|
int32_t mgmtGetDnodesNum();
|
||||||
|
int32_t mgmtGetOnlinDnodesNum();
|
||||||
void * mgmtGetNextDnode(void *pIter, SDnodeObj **pDnode);
|
void * mgmtGetNextDnode(void *pIter, SDnodeObj **pDnode);
|
||||||
void mgmtIncDnodeRef(SDnodeObj *pDnode);
|
void mgmtIncDnodeRef(SDnodeObj *pDnode);
|
||||||
void mgmtDecDnodeRef(SDnodeObj *pDnode);
|
void mgmtDecDnodeRef(SDnodeObj *pDnode);
|
||||||
|
|
|
@ -31,6 +31,7 @@ void * mgmtGetNextChildTable(void *pIter, SChildTableObj **pTable);
|
||||||
void * mgmtGetNextSuperTable(void *pIter, SSuperTableObj **pTable);
|
void * mgmtGetNextSuperTable(void *pIter, SSuperTableObj **pTable);
|
||||||
void mgmtDropAllChildTables(SDbObj *pDropDb);
|
void mgmtDropAllChildTables(SDbObj *pDropDb);
|
||||||
void mgmtDropAllSuperTables(SDbObj *pDropDb);
|
void mgmtDropAllSuperTables(SDbObj *pDropDb);
|
||||||
|
void mgmtDropAllChildTablesInVgroups(SVgObj *pVgroup);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,6 @@ static int32_t mgmtDnodeActionDelete(SSdbOper *pOper) {
|
||||||
SDnodeObj *pDnode = pOper->pObj;
|
SDnodeObj *pDnode = pOper->pObj;
|
||||||
|
|
||||||
#ifndef _SYNC
|
#ifndef _SYNC
|
||||||
//TODO: drop dnode local
|
|
||||||
mgmtDropAllDnodeVgroups(pDnode);
|
mgmtDropAllDnodeVgroups(pDnode);
|
||||||
#endif
|
#endif
|
||||||
mgmtDropMnodeLocal(pDnode->dnodeId);
|
mgmtDropMnodeLocal(pDnode->dnodeId);
|
||||||
|
@ -179,6 +178,23 @@ int32_t mgmtGetDnodesNum() {
|
||||||
return sdbGetNumOfRows(tsDnodeSdb);
|
return sdbGetNumOfRows(tsDnodeSdb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t mgmtGetOnlinDnodesNum(char *ep) {
|
||||||
|
SDnodeObj *pDnode = NULL;
|
||||||
|
void * pIter = NULL;
|
||||||
|
int32_t onlineDnodes = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
pIter = mgmtGetNextDnode(pIter, &pDnode);
|
||||||
|
if (pDnode == NULL) break;
|
||||||
|
if (pDnode->status != TAOS_DN_STATUS_OFFLINE) onlineDnodes++;
|
||||||
|
mgmtDecDnodeRef(pDnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
sdbFreeIter(pIter);
|
||||||
|
|
||||||
|
return onlineDnodes;
|
||||||
|
}
|
||||||
|
|
||||||
void *mgmtGetDnode(int32_t dnodeId) {
|
void *mgmtGetDnode(int32_t dnodeId) {
|
||||||
return sdbGetRow(tsDnodeSdb, &dnodeId);
|
return sdbGetRow(tsDnodeSdb, &dnodeId);
|
||||||
}
|
}
|
||||||
|
@ -397,7 +413,6 @@ static int32_t mgmtCreateDnode(char *ep) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO drop others tables
|
|
||||||
int32_t mgmtDropDnode(SDnodeObj *pDnode) {
|
int32_t mgmtDropDnode(SDnodeObj *pDnode) {
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
.type = SDB_OPER_GLOBAL,
|
.type = SDB_OPER_GLOBAL,
|
||||||
|
@ -410,7 +425,7 @@ int32_t mgmtDropDnode(SDnodeObj *pDnode) {
|
||||||
code = TSDB_CODE_SDB_ERROR;
|
code = TSDB_CODE_SDB_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mLPrint("dnode:%d is dropped from cluster, result:%s", pDnode->dnodeId, tstrerror(code));
|
mLPrint("dnode:%d, is dropped from cluster, result:%s", pDnode->dnodeId, tstrerror(code));
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -353,8 +353,8 @@ void sdbIncRef(void *handle, void *pObj) {
|
||||||
SSdbTable *pTable = handle;
|
SSdbTable *pTable = handle;
|
||||||
int32_t * pRefCount = (int32_t *)(pObj + pTable->refCountPos);
|
int32_t * pRefCount = (int32_t *)(pObj + pTable->refCountPos);
|
||||||
atomic_add_fetch_32(pRefCount, 1);
|
atomic_add_fetch_32(pRefCount, 1);
|
||||||
if (0 && (pTable->tableId == SDB_TABLE_MNODE || pTable->tableId == SDB_TABLE_DNODE)) {
|
if (1 && (pTable->tableId == SDB_TABLE_MNODE || pTable->tableId == SDB_TABLE_DNODE)) {
|
||||||
sdbTrace("table:%s, add ref to record:%s:%d", pTable->tableName, sdbGetKeyStrFromObj(pTable, pObj), *pRefCount);
|
sdbTrace("add ref to table:%s record:%s:%d", pTable->tableName, sdbGetKeyStrFromObj(pTable, pObj), *pRefCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,8 +364,8 @@ void sdbDecRef(void *handle, void *pObj) {
|
||||||
SSdbTable *pTable = handle;
|
SSdbTable *pTable = handle;
|
||||||
int32_t * pRefCount = (int32_t *)(pObj + pTable->refCountPos);
|
int32_t * pRefCount = (int32_t *)(pObj + pTable->refCountPos);
|
||||||
int32_t refCount = atomic_sub_fetch_32(pRefCount, 1);
|
int32_t refCount = atomic_sub_fetch_32(pRefCount, 1);
|
||||||
if (0 && (pTable->tableId == SDB_TABLE_MNODE || pTable->tableId == SDB_TABLE_DNODE)) {
|
if (1 && (pTable->tableId == SDB_TABLE_MNODE || pTable->tableId == SDB_TABLE_DNODE)) {
|
||||||
sdbTrace("table:%s, def ref of record:%s:%d", pTable->tableName, sdbGetKeyStrFromObj(pTable, pObj), *pRefCount);
|
sdbTrace("def ref of table:%s record:%s:%d", pTable->tableName, sdbGetKeyStrFromObj(pTable, pObj), *pRefCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t *updateEnd = pObj + pTable->refCountPos - 1;
|
int8_t *updateEnd = pObj + pTable->refCountPos - 1;
|
||||||
|
|
|
@ -325,6 +325,8 @@ static void mgmtProcessHeartBeatMsg(SQueuedMsg *pMsg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pHBRsp->onlineDnodes = htonl(mgmtGetOnlinDnodesNum());
|
||||||
|
pHBRsp->totalDnodes = htonl(mgmtGetDnodesNum());
|
||||||
mgmtGetMnodeIpSet(&pHBRsp->ipList);
|
mgmtGetMnodeIpSet(&pHBRsp->ipList);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1305,7 +1305,7 @@ static void mgmtProcessSuperTableVgroupMsg(SQueuedMsg *pMsg) {
|
||||||
if (pDnode == NULL) break;
|
if (pDnode == NULL) break;
|
||||||
|
|
||||||
strncpy(pVgroupInfo->vgroups[vgSize].ipAddr[vn].fqdn, pDnode->dnodeFqdn, tListLen(pDnode->dnodeFqdn));
|
strncpy(pVgroupInfo->vgroups[vgSize].ipAddr[vn].fqdn, pDnode->dnodeFqdn, tListLen(pDnode->dnodeFqdn));
|
||||||
pVgroupInfo->vgroups[vgSize].ipAddr[vn].port = htons(tsDnodeShellPort);
|
pVgroupInfo->vgroups[vgSize].ipAddr[vn].port = htons(pDnode->dnodePort);
|
||||||
|
|
||||||
pVgroupInfo->vgroups[vgSize].numOfIps++;
|
pVgroupInfo->vgroups[vgSize].numOfIps++;
|
||||||
}
|
}
|
||||||
|
@ -1787,6 +1787,34 @@ static void mgmtGetChildTableMeta(SQueuedMsg *pMsg) {
|
||||||
rpcSendResponse(&rpcRsp);
|
rpcSendResponse(&rpcRsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mgmtDropAllChildTablesInVgroups(SVgObj *pVgroup) {
|
||||||
|
void * pIter = NULL;
|
||||||
|
int32_t numOfTables = 0;
|
||||||
|
SChildTableObj *pTable = NULL;
|
||||||
|
|
||||||
|
mPrint("vgId:%d, all child tables will be dropped from sdb", pVgroup->vgId);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
pIter = mgmtGetNextChildTable(pIter, &pTable);
|
||||||
|
if (pTable == NULL) break;
|
||||||
|
|
||||||
|
if (pTable->vgId == pVgroup->vgId) {
|
||||||
|
SSdbOper oper = {
|
||||||
|
.type = SDB_OPER_LOCAL,
|
||||||
|
.table = tsChildTableSdb,
|
||||||
|
.pObj = pTable,
|
||||||
|
};
|
||||||
|
sdbDeleteRow(&oper);
|
||||||
|
numOfTables++;
|
||||||
|
}
|
||||||
|
mgmtDecTableRef(pTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
sdbFreeIter(pIter);
|
||||||
|
|
||||||
|
mPrint("vgId:%d, all child tables is dropped from sdb", pVgroup->vgId);
|
||||||
|
}
|
||||||
|
|
||||||
void mgmtDropAllChildTables(SDbObj *pDropDb) {
|
void mgmtDropAllChildTables(SDbObj *pDropDb) {
|
||||||
void * pIter = NULL;
|
void * pIter = NULL;
|
||||||
int32_t numOfTables = 0;
|
int32_t numOfTables = 0;
|
||||||
|
|
|
@ -747,11 +747,14 @@ void mgmtDropAllDnodeVgroups(SDnodeObj *pDropDnode) {
|
||||||
SVgObj *pVgroup = NULL;
|
SVgObj *pVgroup = NULL;
|
||||||
int32_t numOfVgroups = 0;
|
int32_t numOfVgroups = 0;
|
||||||
|
|
||||||
|
mPrint("dnode:%d, all vgroups will be dropped from sdb", pDropDnode->dnodeId);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
pIter = mgmtGetNextVgroup(pIter, &pVgroup);
|
pIter = mgmtGetNextVgroup(pIter, &pVgroup);
|
||||||
if (pVgroup == NULL) break;
|
if (pVgroup == NULL) break;
|
||||||
|
|
||||||
if (pVgroup->vnodeGid[0].dnodeId == pDropDnode->dnodeId) {
|
if (pVgroup->vnodeGid[0].dnodeId == pDropDnode->dnodeId) {
|
||||||
|
mgmtDropAllChildTablesInVgroups(pVgroup);
|
||||||
SSdbOper oper = {
|
SSdbOper oper = {
|
||||||
.type = SDB_OPER_LOCAL,
|
.type = SDB_OPER_LOCAL,
|
||||||
.table = tsVgroupSdb,
|
.table = tsVgroupSdb,
|
||||||
|
@ -759,12 +762,13 @@ void mgmtDropAllDnodeVgroups(SDnodeObj *pDropDnode) {
|
||||||
};
|
};
|
||||||
sdbDeleteRow(&oper);
|
sdbDeleteRow(&oper);
|
||||||
numOfVgroups++;
|
numOfVgroups++;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
mgmtDecVgroupRef(pVgroup);
|
mgmtDecVgroupRef(pVgroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
sdbFreeIter(pIter);
|
sdbFreeIter(pIter);
|
||||||
|
|
||||||
|
mPrint("dnode:%d, all vgroups is dropped from sdb", pDropDnode->dnodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mgmtUpdateAllDbVgroups(SDbObj *pAlterDb) {
|
void mgmtUpdateAllDbVgroups(SDbObj *pAlterDb) {
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||||
|
system sh/deploy.sh -n dnode2 -i 2
|
||||||
|
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||||
|
|
||||||
|
print ========== prepare data
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
|
||||||
|
sleep 3000
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
sql create dnode $hostname2
|
||||||
|
sleep 2000
|
||||||
|
|
||||||
|
sql create database db maxTables 4
|
||||||
|
sql use db
|
||||||
|
|
||||||
|
print ========== step1
|
||||||
|
sql create table mt (ts timestamp, tbcol int) TAGS(tgcol int)
|
||||||
|
sql create table db.t1 using db.mt tags(1)
|
||||||
|
sql create table db.t2 using db.mt tags(2)
|
||||||
|
sql create table db.t3 using db.mt tags(3)
|
||||||
|
sql create table db.t4 using db.mt tags(4)
|
||||||
|
sql create table db.t5 using db.mt tags(5)
|
||||||
|
sql create table db.t6 using db.mt tags(6)
|
||||||
|
sql create table db.t7 using db.mt tags(7)
|
||||||
|
sql create table db.t8 using db.mt tags(8)
|
||||||
|
sql create table db.t9 using db.mt tags(9)
|
||||||
|
sql create table db.t10 using db.mt tags(10)
|
||||||
|
sql create table db.t11 using db.mt tags(11)
|
||||||
|
sql create table db.t12 using db.mt tags(12)
|
||||||
|
sql create table db.t13 using db.mt tags(13)
|
||||||
|
sql create table db.t14 using db.mt tags(14)
|
||||||
|
sql create table db.t15 using db.mt tags(15)
|
||||||
|
sql create table db.t16 using db.mt tags(16)
|
||||||
|
|
||||||
|
sql insert into db.t1 values(now, 1)
|
||||||
|
sql insert into db.t2 values(now, 1)
|
||||||
|
sql insert into db.t3 values(now, 1)
|
||||||
|
sql insert into db.t4 values(now, 1)
|
||||||
|
sql insert into db.t5 values(now, 1)
|
||||||
|
sql insert into db.t6 values(now, 1)
|
||||||
|
sql insert into db.t7 values(now, 1)
|
||||||
|
sql insert into db.t8 values(now, 1)
|
||||||
|
sql insert into db.t9 values(now, 1)
|
||||||
|
sql insert into db.t10 values(now, 1)
|
||||||
|
sql insert into db.t11 values(now, 1)
|
||||||
|
sql insert into db.t12 values(now, 1)
|
||||||
|
sql insert into db.t13 values(now, 1)
|
||||||
|
sql insert into db.t14 values(now, 1)
|
||||||
|
sql insert into db.t15 values(now, 1)
|
||||||
|
sql insert into db.t16 values(now, 1)
|
||||||
|
|
||||||
|
print ========== step2
|
||||||
|
sql show tables
|
||||||
|
print $rows
|
||||||
|
if $rows != 16 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from mt
|
||||||
|
print $rows
|
||||||
|
if $rows != 16 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ========== step3
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||||
|
sleep 500
|
||||||
|
sql drop dnode $hostname2
|
||||||
|
sleep 2000
|
||||||
|
|
||||||
|
print ========== step3
|
||||||
|
|
||||||
|
sql show tables
|
||||||
|
print $rows
|
||||||
|
if $rows != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from mt
|
||||||
|
print $rows
|
||||||
|
if $rows != 8 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from db.t5
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql select * from db.t13
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql_error select * from db.t1
|
||||||
|
sql_error select * from db.t9
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -61,6 +61,7 @@ cd ../../../debug; make
|
||||||
./test.sh -f general/db/delete_writing1.sim
|
./test.sh -f general/db/delete_writing1.sim
|
||||||
./test.sh -f general/db/delete_writing2.sim
|
./test.sh -f general/db/delete_writing2.sim
|
||||||
./test.sh -f general/db/delete.sim
|
./test.sh -f general/db/delete.sim
|
||||||
|
./test.sh -f general/db/dropdnodes.sim
|
||||||
./test.sh -f general/db/len.sim
|
./test.sh -f general/db/len.sim
|
||||||
./test.sh -f general/db/repeat.sim
|
./test.sh -f general/db/repeat.sim
|
||||||
./test.sh -f general/db/tables.sim
|
./test.sh -f general/db/tables.sim
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
cd ../../debug; cmake ..
|
||||||
|
cd ../../debug; make
|
||||||
|
cd ../../../debug; cmake ..
|
||||||
|
cd ../../../debug; make
|
||||||
|
|
||||||
|
./test.sh -u -f unique/cluster/balance1.sim
|
||||||
|
./test.sh -u -f unique/cluster/balance2.sim
|
||||||
|
./test.sh -u -f unique/cluster/balance3.sim
|
||||||
|
./test.sh -u -f unique/cluster/cache.sim
|
||||||
|
|
||||||
|
./test.sh -u -f unique/dnode/balance1.sim
|
||||||
|
./test.sh -u -f unique/dnode/balance2.sim
|
||||||
|
./test.sh -u -f unique/dnode/balance3.sim
|
||||||
|
./test.sh -u -f unique/dnode/balancex.sim
|
||||||
|
|
||||||
|
./test.sh -u -f unique/mnode/mgmt22.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt23.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt24.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt25.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt26.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt33.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmt34.sim
|
||||||
|
./test.sh -u -f unique/mnode/mgmtr2.sim
|
Loading…
Reference in New Issue