From 565c930f773064b5151da5aadea60d32f26bff29 Mon Sep 17 00:00:00 2001 From: dmchen Date: Wed, 10 May 2023 15:50:54 +0800 Subject: [PATCH] check 2 mnode --- include/util/taoserror.h | 1 + source/dnode/mnode/impl/src/mndDnode.c | 7 +++++++ source/util/src/terror.c | 3 +++ 3 files changed, 11 insertions(+) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 309b915845..fd408cda9f 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -406,6 +406,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_SNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0411) #define TSDB_CODE_MNODE_NOT_CATCH_UP TAOS_DEF_ERROR_CODE(0, 0x0412) // internal #define TSDB_CODE_MNODE_ALREADY_IS_VOTER TAOS_DEF_ERROR_CODE(0, 0x0413) // internal +#define TSDB_CODE_MNODE_ONLY_TWO_MNODE TAOS_DEF_ERROR_CODE(0, 0x0414) // internal // vnode // #define TSDB_CODE_VND_ACTION_IN_PROGRESS TAOS_DEF_ERROR_CODE(0, 0x0500) // 2.x diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 71c9aaa285..6172a7754e 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -612,6 +612,13 @@ static int32_t mndRestoreDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, if(restoreType == RESTORE_TYPE__ALL || restoreType == RESTORE_TYPE__MNODE) { + int32_t totalMnodes = sdbGetSize(pMnode->pSdb, SDB_MNODE); + if (totalMnodes == 2) { + mError("cant't restore mnode, since a mnode on it and replica is 2"); + terrno = TSDB_CODE_MNODE_ONLY_TWO_MNODE; + return -1; + } + SMnodeObj *mnodeObj = mndAcquireMnode(pMnode, pDnode->id); if(mnodeObj == NULL){ mError("trans:%d, no mnode exist on dnode:%s", pTrans->id, pDnode->ep); diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 5d3583c0e9..51aa5d33a7 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -320,6 +320,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QNODE_NOT_DEPLOYED, "Qnode not deployed") TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_NOT_FOUND, "Snode not found") TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_ALREADY_DEPLOYED, "Snode already deployed") TAOS_DEFINE_ERROR(TSDB_CODE_SNODE_NOT_DEPLOYED, "Snode not deployed") +TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_NOT_CATCH_UP, "Mnode didn't catch the leader") +TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_ALREADY_IS_VOTER, "Mnode already is a leader") +TAOS_DEFINE_ERROR(TSDB_CODE_MNODE_ONLY_TWO_MNODE, "Only two mnodes exist") // vnode TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_VGROUP_ID, "Vnode is closed or removed")