From f99b20aaa98712a9178d3597f99608fec05a2dca Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Tue, 24 May 2022 17:28:33 +0800 Subject: [PATCH] refactor: add standby option for mnode --- include/dnode/mnode/mnode.h | 1 + source/dnode/mgmt/mgmt_mnode/src/mmInt.c | 42 +++++++++++++----------- source/dnode/mnode/impl/src/mndSync.c | 6 ++-- source/dnode/mnode/impl/src/mnode.c | 1 + 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/include/dnode/mnode/mnode.h b/include/dnode/mnode/mnode.h index f2c8c916c8..983c695786 100644 --- a/include/dnode/mnode/mnode.h +++ b/include/dnode/mnode/mnode.h @@ -29,6 +29,7 @@ extern "C" { typedef struct SMnode SMnode; typedef struct { + bool isStandBy; bool deploy; int8_t replica; int8_t selfIndex; diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmInt.c b/source/dnode/mgmt/mgmt_mnode/src/mmInt.c index 353bdc1363..22513bc2e4 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmInt.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmInt.c @@ -55,29 +55,31 @@ static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, const SMgmtInputOpt *pInpu static void mmBuildOptionForOpen(SMnodeMgmt *pMgmt, SMnodeOpt *pOption) { pOption->msgCb = pMgmt->msgCb; -#if 1 - pOption->replica = 1; - pOption->selfIndex = 0; - SReplica *pReplica = &pOption->replicas[0]; - for (int32_t i = 0; i < pMgmt->replica; ++i) { - if (pMgmt->replicas[i].id == pMgmt->pData->dnodeId) { - pReplica->id = pMgmt->replicas[i].id; - pReplica->port = pMgmt->replicas[i].port; - memcpy(pReplica->fqdn, pMgmt->replicas[i].fqdn, TSDB_FQDN_LEN); + + if (pMgmt->replica > 1) { + pOption->replica = 1; + pOption->selfIndex = 0; + SReplica *pReplica = &pOption->replicas[0]; + for (int32_t i = 0; i < pMgmt->replica; ++i) { + if (pMgmt->replicas[i].id == pMgmt->pData->dnodeId) { + pReplica->id = pMgmt->replicas[i].id; + pReplica->port = pMgmt->replicas[i].port; + memcpy(pReplica->fqdn, pMgmt->replicas[i].fqdn, TSDB_FQDN_LEN); + } } - } - pMgmt->selfIndex = pOption->selfIndex; -#else - pOption->replica = pMgmt->replica; - pOption->selfIndex = -1; - memcpy(&pOption->replicas, pMgmt->replicas, sizeof(SReplica) * TSDB_MAX_REPLICA); - for (int32_t i = 0; i < pOption->replica; ++i) { - if (pOption->replicas[i].id == pMgmt->pData->dnodeId) { - pOption->selfIndex = i; + pMgmt->selfIndex = pOption->selfIndex; + pOption->isStandBy = 1; + } else { + pOption->replica = pMgmt->replica; + pOption->selfIndex = -1; + memcpy(&pOption->replicas, pMgmt->replicas, sizeof(SReplica) * TSDB_MAX_REPLICA); + for (int32_t i = 0; i < pOption->replica; ++i) { + if (pOption->replicas[i].id == pMgmt->pData->dnodeId) { + pOption->selfIndex = i; + } } + pMgmt->selfIndex = pOption->selfIndex; } - pMgmt->selfIndex = pOption->selfIndex; -#endif pOption->deploy = false; } diff --git a/source/dnode/mnode/impl/src/mndSync.c b/source/dnode/mnode/impl/src/mndSync.c index a7cda9ea93..868558525a 100644 --- a/source/dnode/mnode/impl/src/mndSync.c +++ b/source/dnode/mnode/impl/src/mndSync.c @@ -121,7 +121,8 @@ int32_t mndInitSync(SMnode *pMnode) { SSyncCfg *pCfg = &syncInfo.syncCfg; pCfg->replicaNum = pMnode->replica; pCfg->myIndex = pMnode->selfIndex; - mInfo("start to open mnode sync, replica:%d myIndex:%d", pCfg->replicaNum, pCfg->myIndex); + mInfo("start to open mnode sync, replica:%d myIndex:%d standBy:%d", pCfg->replicaNum, pCfg->myIndex, + pMgmt->isStandBy); for (int32_t i = 0; i < pMnode->replica; ++i) { SNodeInfo *pNode = &pCfg->nodeInfo[i]; tstrncpy(pNode->nodeFqdn, pMnode->replicas[i].fqdn, sizeof(pNode->nodeFqdn)); @@ -201,7 +202,7 @@ bool mndIsMaster(SMnode *pMnode) { int32_t mndAlter(SMnode *pMnode, const SMnodeOpt *pOption) { SSyncCfg cfg = {.replicaNum = pOption->replica, .myIndex = pOption->selfIndex}; - mInfo("start to alter mnode sync, replica:%d myIndex:%d", cfg.replicaNum, cfg.myIndex); + mInfo("start to alter mnode sync, replica:%d myIndex:%d standBy:%d", cfg.replicaNum, cfg.myIndex, pOption->isStandBy); for (int32_t i = 0; i < pOption->replica; ++i) { SNodeInfo *pNode = &cfg.nodeInfo[i]; tstrncpy(pNode->nodeFqdn, pOption->replicas[i].fqdn, sizeof(pNode->nodeFqdn)); @@ -210,5 +211,6 @@ int32_t mndAlter(SMnode *pMnode, const SMnodeOpt *pOption) { } SSyncMgmt *pMgmt = &pMnode->syncMgmt; + pMgmt->isStandBy = pOption->isStandBy; return syncReconfig(pMgmt->sync, &cfg); } \ No newline at end of file diff --git a/source/dnode/mnode/impl/src/mnode.c b/source/dnode/mnode/impl/src/mnode.c index 090b17b289..d50f284b5c 100644 --- a/source/dnode/mnode/impl/src/mnode.c +++ b/source/dnode/mnode/impl/src/mnode.c @@ -263,6 +263,7 @@ static void mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) { memcpy(&pMnode->replicas, pOption->replicas, sizeof(SReplica) * TSDB_MAX_REPLICA); pMnode->msgCb = pOption->msgCb; pMnode->selfId = pOption->replicas[pOption->selfIndex].id; + pMnode->syncMgmt.isStandBy = pOption->isStandBy; } SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { -- GitLab