Merge branch 'fix/mnode' of https://github.com/taosdata/TDengine into mnode

This commit is contained in:
yihaoDeng 2022-05-26 21:29:12 +08:00
commit 3ba372a836
9 changed files with 232 additions and 156 deletions

View File

@ -92,6 +92,13 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) {
SEpSet epSet = {0}; SEpSet epSet = {0};
dmGetMnodeEpSet(pMgmt->pData, &epSet); dmGetMnodeEpSet(pMgmt->pData, &epSet);
rpcSendRecv(pMgmt->msgCb.clientRpc, &epSet, &rpcMsg, &rpcRsp); rpcSendRecv(pMgmt->msgCb.clientRpc, &epSet, &rpcMsg, &rpcRsp);
if (rpcRsp.code != 0) {
dError("failed to send status msg since %s, numOfEps:%d inUse:%d", tstrerror(rpcRsp.code), epSet.numOfEps,
epSet.inUse);
for (int32_t i = 0; i < epSet.numOfEps; ++i) {
dDebug("index:%d, mnode ep:%s:%u", i, epSet.eps[i].fqdn, epSet.eps[i].port);
}
}
dmProcessStatusRsp(pMgmt, &rpcRsp); dmProcessStatusRsp(pMgmt, &rpcRsp);
} }

View File

@ -144,6 +144,7 @@ _OVER:
static int32_t mndClusterActionInsert(SSdb *pSdb, SClusterObj *pCluster) { static int32_t mndClusterActionInsert(SSdb *pSdb, SClusterObj *pCluster) {
mTrace("cluster:%" PRId64 ", perform insert action, row:%p", pCluster->id, pCluster); mTrace("cluster:%" PRId64 ", perform insert action, row:%p", pCluster->id, pCluster);
pSdb->pMnode->clusterId = pCluster->id;
return 0; return 0;
} }

View File

@ -441,7 +441,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) {
pDnode->numOfSupportVnodes = statusReq.numOfSupportVnodes; pDnode->numOfSupportVnodes = statusReq.numOfSupportVnodes;
SStatusRsp statusRsp = {0}; SStatusRsp statusRsp = {0};
statusRsp.dnodeVer = sdbGetTableVer(pMnode->pSdb, SDB_DNODE); statusRsp.dnodeVer = sdbGetTableVer(pMnode->pSdb, SDB_DNODE) + sdbGetTableVer(pMnode->pSdb, SDB_MNODE);
statusRsp.dnodeCfg.dnodeId = pDnode->id; statusRsp.dnodeCfg.dnodeId = pDnode->id;
statusRsp.dnodeCfg.clusterId = pMnode->clusterId; statusRsp.dnodeCfg.clusterId = pMnode->clusterId;
statusRsp.pDnodeEps = taosArrayInit(mndGetDnodeSize(pMnode), sizeof(SDnodeEp)); statusRsp.pDnodeEps = taosArrayInit(mndGetDnodeSize(pMnode), sizeof(SDnodeEp));

View File

@ -233,7 +233,7 @@ void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet) {
if (pObj->pDnode == NULL) { if (pObj->pDnode == NULL) {
mError("mnode:%d, no corresponding dnode exists", pObj->id); mError("mnode:%d, no corresponding dnode exists", pObj->id);
} else { } else {
if (pObj->state == TAOS_SYNC_STATE_LEADER) { if (pObj->id == pMnode->selfDnodeId || pObj->state == TAOS_SYNC_STATE_LEADER) {
pEpSet->inUse = pEpSet->numOfEps; pEpSet->inUse = pEpSet->numOfEps;
} }
addEpIntoEpSet(pEpSet, pObj->pDnode->fqdn, pObj->pDnode->port); addEpIntoEpSet(pEpSet, pObj->pDnode->fqdn, pObj->pDnode->port);

View File

@ -363,28 +363,32 @@ int32_t syncNodeOnAppendEntriesCb(SSyncNode* ths, SyncAppendEntries* pMsg) {
break; break;
} }
} }
ASSERT(hit == true);
SReConfigCbMeta cbMeta = {0};
bool isDrop; bool isDrop;
syncNodeUpdateConfig(ths, &newSyncCfg, &isDrop);
// change isStandBy to normal // I am in newConfig
if (!isDrop) { if (hit) {
if (ths->state == TAOS_SYNC_STATE_LEADER) { syncNodeUpdateConfig(ths, &newSyncCfg, &isDrop);
syncNodeBecomeLeader(ths);
} else { // change isStandBy to normal
syncNodeBecomeFollower(ths); if (!isDrop) {
if (ths->state == TAOS_SYNC_STATE_LEADER) {
syncNodeBecomeLeader(ths);
} else {
syncNodeBecomeFollower(ths);
}
} }
char* sOld = syncCfg2Str(&oldSyncCfg);
char* sNew = syncCfg2Str(&newSyncCfg);
sInfo("==config change== 0x11 old:%s new:%s isDrop:%d \n", sOld, sNew, isDrop);
taosMemoryFree(sOld);
taosMemoryFree(sNew);
} }
char* sOld = syncCfg2Str(&oldSyncCfg); // always call FpReConfigCb
char* sNew = syncCfg2Str(&newSyncCfg);
sInfo("==config change== 0x11 old:%s new:%s isDrop:%d \n", sOld, sNew, isDrop);
taosMemoryFree(sOld);
taosMemoryFree(sNew);
if (ths->pFsm->FpReConfigCb != NULL) { if (ths->pFsm->FpReConfigCb != NULL) {
SReConfigCbMeta cbMeta = {0};
cbMeta.code = 0; cbMeta.code = 0;
cbMeta.currentTerm = ths->pRaftStore->currentTerm; cbMeta.currentTerm = ths->pRaftStore->currentTerm;
cbMeta.index = pEntry->index; cbMeta.index = pEntry->index;

View File

@ -141,7 +141,10 @@ void syncMaybeAdvanceCommitIndex(SSyncNode* pSyncNode) {
break; break;
} }
} }
ASSERT(hit == true);
if (pSyncNode->state == TAOS_SYNC_STATE_LEADER) {
ASSERT(hit == true);
}
bool isDrop; bool isDrop;
syncNodeUpdateConfig(pSyncNode, &newSyncCfg, &isDrop); syncNodeUpdateConfig(pSyncNode, &newSyncCfg, &isDrop);

View File

@ -6,15 +6,6 @@ system sh/exec.sh -n dnode2 -s start
sql connect sql connect
print =============== show dnodes print =============== show dnodes
sql show dnodes;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
sql show mnodes; sql show mnodes;
if $rows != 1 then if $rows != 1 then
return -1 return -1
@ -30,63 +21,55 @@ endi
print =============== create dnodes print =============== create dnodes
sql create dnode $hostname port 7200 sql create dnode $hostname port 7200
sleep 2000 $x = 0
step1:
sql show dnodes; $x = $x + 1
if $rows != 2 then sleep 500
return -1 if $x == 20 then
return -1
endi
sql show dnodes -x step1
if $data(1)[4] != ready then
goto step1
endi endi
if $data(2)[4] != ready then
if $data00 != 1 then goto step1
return -1
endi
if $data10 != 2 then
return -1
endi
print $data02
if $data02 != 0 then
return -1
endi
if $data12 != 0 then
return -1
endi
if $data04 != ready then
return -1
endi
if $data14 != ready then
return -1
endi
sql show mnodes;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data02 != LEADER then
return -1
endi endi
print =============== create drop mnode 1 print =============== create drop mnode 1
sql_error create mnode on dnode 1 sql_error create mnode on dnode 1
sql_error drop mnode on dnode 1 sql_error drop mnode on dnode 1
print =============== create drop mnode 2
sql create mnode on dnode 2 sql create mnode on dnode 2
$x = 0
step1:
$x = $x + 1
sleep 1000
if $x == 20 then
return -1
endi
sql show mnodes sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
if $rows != 2 then if $rows != 2 then
return -1 return -1
endi endi
sql_error create mnode on dnode 2 if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] != LEADER then
return -1
endi
if $data(2)[0] != 2 then
return -1
endi
if $data(2)[2] != FOLLOWER then
goto step1
endi
sleep 2000
print ============ drop mnodes
sql drop mnode on dnode 2 sql drop mnode on dnode 2
sql show mnodes sql show mnodes
if $rows != 1 then if $rows != 1 then
@ -94,6 +77,35 @@ if $rows != 1 then
endi endi
sql_error drop mnode on dnode 2 sql_error drop mnode on dnode 2
$x = 0
step2:
$x = $x + 1
sleep 1000
if $x == 20 then
return -1
endi
sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
if $rows != 2 then
return -1
endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] != LEADER then
return -1
endi
if $data(2)[0] != NULL then
goto step2
endi
if $data(2)[2] != NULL then
goto step2
endi
sleep 2000
print =============== create drop mnodes print =============== create drop mnodes
sql create mnode on dnode 2 sql create mnode on dnode 2
sql show mnodes sql show mnodes
@ -101,17 +113,32 @@ if $rows != 2 then
return -1 return -1
endi endi
print =============== restart $x = 0
system sh/exec.sh -n dnode1 -s stop -x SIGINT step3:
system sh/exec.sh -n dnode2 -s stop -x SIGINT $x = $x + 1
system sh/exec.sh -n dnode1 -s start sleep 1000
system sh/exec.sh -n dnode2 -s start if $x == 20 then
return -1
sleep 2000 endi
sql show mnodes sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
if $rows != 2 then if $rows != 2 then
return -1 return -1
endi endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] != LEADER then
return -1
endi
if $data(2)[0] != 2 then
return -1
endi
if $data(2)[2] != FOLLOWER then
goto step3
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT system sh/exec.sh -n dnode2 -s stop -x SIGINT

View File

@ -21,29 +21,31 @@ endi
print =============== create dnodes print =============== create dnodes
sql create dnode $hostname port 7200 sql create dnode $hostname port 7200
sql create dnode $hostname port 7300 $x = 0
sleep 2000 step1:
$x = $x + 1
sql show dnodes; sleep 500
if $rows != 3 then if $x == 20 then
return -1 return -1
endi
sql show dnodes -x step1
if $data(1)[4] != ready then
goto step1
endi endi
if $data(2)[4] != ready then
sql show mnodes; goto step1
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data02 != LEADER then
return -1
endi endi
print =============== create mnode 2 print =============== create mnode 2
sql create mnode on dnode 2 sql create mnode on dnode 2
$x = 0
step1:
$x = $x + 1
sleep 1000
if $x == 20 then
return -1
endi
sql show mnodes sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2] print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2] print $data(2)[0] $data(2)[1] $data(2)[2]
@ -60,8 +62,8 @@ endi
if $data(2)[0] != 2 then if $data(2)[0] != 2 then
return -1 return -1
endi endi
if $data(2)[2] == LEADER then if $data(2)[2] != FOLLOWER then
return -1 goto step1
endi endi
print =============== create user print =============== create user
@ -71,45 +73,47 @@ if $rows != 2 then
return -1 return -1
endi endi
#sql create database db sql create database db
#sql show databases sql show databases
#if $rows != 3 then if $rows != 3 then
# return -1 return -1
#endi endi
sleep 5000 sleep 5000
print =============== restart
system sh/exec.sh -n dnode1 -s stop system sh/exec.sh -n dnode1 -s stop
system sh/exec.sh -n dnode2 -s stop system sh/exec.sh -n dnode2 -s stop
sleep 100
return
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode2 -s start
sql connect sql connect
sql show mnodes sql show mnodes
if $rows != 2 then if $rows != 2 then
return -1 return -1
endi endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] != LEADER then
return -1
endi
sql show users sql show users
if $rows != 2 then if $rows != 2 then
return -1 return -1
endi endi
#sql show databases sql show databases
#if $rows != 3 then if $rows != 3 then
# return -1 return -1
#endi endi
return sql show dnodes
if $data(1)[4] != ready then
return -1
endi
if $data(2)[4] != ready then
return -1
endi
print =============== insert data
sql create table db.stb (ts timestamp, i int) tags (j int)
sql create table db.ctb using db.stb tags(1);
system sh/exec.sh -n dnode1 -s stop system sh/exec.sh -n dnode1 -s stop
system sh/exec.sh -n dnode2 -s stop system sh/exec.sh -n dnode2 -s stop

View File

@ -15,11 +15,10 @@ $x = 0
step1: step1:
$x = $x + 1 $x = $x + 1
sleep 1000 sleep 1000
if $x == 10 then if $x == 20 then
return -1 return -1
endi endi
sql show dnodes -x step1
sql show dnodes
if $data(1)[4] != ready then if $data(1)[4] != ready then
goto step1 goto step1
endi endi
@ -38,15 +37,10 @@ $x = 0
step2: step2:
$x = $x + 1 $x = $x + 1
sleep 1000 sleep 1000
if $x == 10 then if $x == 20 then
return -1 return -1
endi endi
sql show mnodes -x step2
sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
print $data(3)[0] $data(3)[1] $data(3)[2]
if $data(1)[2] != LEADER then if $data(1)[2] != LEADER then
goto step2 goto step2
endi endi
@ -64,44 +58,80 @@ if $rows != 2 then
return -1 return -1
endi endi
# wait mnode2 mnode3 recv data finish
sleep 10000 sleep 10000
print =============== step4: stop dnode1 print =============== step4: stop dnode1
system sh/exec.sh -n dnode1 -s stop system sh/exec.sh -n dnode1 -s stop
$x = 0
return step4:
system sh/exec.sh -n dnode2 -s stop $x = $x + 1
sleep 100 sleep 1000
return if $x == 20 then
system sh/exec.sh -n dnode1 -s start return -1
system sh/exec.sh -n dnode2 -s start endi
sql show mnodes -x step4
sleep 10000 print $data(1)[0] $data(1)[1] $data(1)[2]
sql connect print $data(2)[0] $data(2)[1] $data(2)[2]
print $data(3)[0] $data(3)[1] $data(3)[2]
sql show mnodes
if $rows != 2 then
return -1
endi
if $data(1)[0] != 1 then
return -1
endi
if $data(1)[2] != LEADER then
return -1
endi
sql show users sql show users
if $rows != 2 then if $rows != 2 then
return -1 return -1
endi endi
#sql show databases sleep 1000
#if $rows != 3 then sql show dnodes
# return -1 if $data(2)[4] != ready then
#endi return -1
endi
if $data(3)[4] != ready then
return -1
endi
return print =============== step5: stop dnode1
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s stop
$x = 0
step5:
$x = $x + 1
sleep 1000
if $x == 20 then
return -1
endi
sql show mnodes -x step5
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
print $data(3)[0] $data(3)[1] $data(3)[2]
sql show users
if $rows != 2 then
return -1
endi
print =============== step6: stop dnode1
system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s stop
$x = 0
step6:
$x = $x + 1
sleep 1000
if $x == 20 then
return -1
endi
sql show mnodes -x step6
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
print $data(3)[0] $data(3)[1] $data(3)[2]
sql show users
if $rows != 2 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop system sh/exec.sh -n dnode1 -s stop
system sh/exec.sh -n dnode2 -s stop system sh/exec.sh -n dnode2 -s stop
system sh/exec.sh -n dnode3 -s stop