fix/block check to async check for mnode
This commit is contained in:
parent
a781d43577
commit
470fef6452
|
@ -20,6 +20,7 @@
|
||||||
#include "tmsg.h"
|
#include "tmsg.h"
|
||||||
#include "tmsgcb.h"
|
#include "tmsgcb.h"
|
||||||
#include "trpc.h"
|
#include "trpc.h"
|
||||||
|
#include "sync.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -73,6 +74,7 @@ int32_t mndStart(SMnode *pMnode);
|
||||||
void mndStop(SMnode *pMnode);
|
void mndStop(SMnode *pMnode);
|
||||||
|
|
||||||
int32_t mndIsCatchUp(SMnode *pMnode);
|
int32_t mndIsCatchUp(SMnode *pMnode);
|
||||||
|
ESyncRole mndGetRole(SMnode *pMnode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get mnode monitor info.
|
* @brief Get mnode monitor info.
|
||||||
|
|
|
@ -403,6 +403,8 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_SNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x040F)
|
#define TSDB_CODE_SNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x040F)
|
||||||
#define TSDB_CODE_SNODE_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0410)
|
#define TSDB_CODE_SNODE_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0410)
|
||||||
#define TSDB_CODE_SNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0411)
|
#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
|
||||||
|
|
||||||
// vnode
|
// vnode
|
||||||
// #define TSDB_CODE_VND_ACTION_IN_PROGRESS TAOS_DEF_ERROR_CODE(0, 0x0500) // 2.x
|
// #define TSDB_CODE_VND_ACTION_IN_PROGRESS TAOS_DEF_ERROR_CODE(0, 0x0500) // 2.x
|
||||||
|
|
|
@ -159,6 +159,10 @@ static int32_t mmSyncIsCatchUp(SMnodeMgmt *pMgmt) {
|
||||||
return mndIsCatchUp(pMgmt->pMnode);
|
return mndIsCatchUp(pMgmt->pMnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ESyncRole mmSyncGetRole(SMnodeMgmt *pMgmt) {
|
||||||
|
return mndGetRole(pMgmt->pMnode);
|
||||||
|
}
|
||||||
|
|
||||||
SMgmtFunc mmGetMgmtFunc() {
|
SMgmtFunc mmGetMgmtFunc() {
|
||||||
SMgmtFunc mgmtFunc = {0};
|
SMgmtFunc mgmtFunc = {0};
|
||||||
mgmtFunc.openFp = mmOpen;
|
mgmtFunc.openFp = mmOpen;
|
||||||
|
@ -170,6 +174,7 @@ SMgmtFunc mmGetMgmtFunc() {
|
||||||
mgmtFunc.requiredFp = mmRequire;
|
mgmtFunc.requiredFp = mmRequire;
|
||||||
mgmtFunc.getHandlesFp = mmGetMsgHandles;
|
mgmtFunc.getHandlesFp = mmGetMsgHandles;
|
||||||
mgmtFunc.isCatchUpFp = (NodeIsCatchUpFp)mmSyncIsCatchUp;
|
mgmtFunc.isCatchUpFp = (NodeIsCatchUpFp)mmSyncIsCatchUp;
|
||||||
|
mgmtFunc.nodeRoleFp = (NodeRole)mmSyncGetRole;
|
||||||
|
|
||||||
return mgmtFunc;
|
return mgmtFunc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -341,7 +341,9 @@ int32_t vmProcessAlterVnodeTypeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(vnodeGetRole(pVnode->pImpl) == TAOS_SYNC_ROLE_VOTER){
|
ESyncRole role = vnodeGetRole(pVnode->pImpl);
|
||||||
|
dInfo("vgId:%d, checking node role:%d", req.vgId, role);
|
||||||
|
if(role == TAOS_SYNC_ROLE_VOTER){
|
||||||
terrno = TSDB_CODE_VND_ALREADY_IS_VOTER;
|
terrno = TSDB_CODE_VND_ALREADY_IS_VOTER;
|
||||||
vmReleaseVnode(pMgmt, pVnode);
|
vmReleaseVnode(pMgmt, pVnode);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -214,9 +214,19 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) {
|
||||||
|
|
||||||
pWrapper = &pDnode->wrappers[ntype];
|
pWrapper = &pDnode->wrappers[ntype];
|
||||||
|
|
||||||
|
if(pWrapper->func.nodeRoleFp != NULL){
|
||||||
|
ESyncRole role = (*pWrapper->func.nodeRoleFp)(pWrapper->pMgmt);
|
||||||
|
dInfo("node:%s, checking node role:%d", pWrapper->name, role);
|
||||||
|
if(role == TAOS_SYNC_ROLE_VOTER){
|
||||||
|
terrno = TSDB_CODE_MNODE_ALREADY_IS_VOTER;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(pWrapper->func.isCatchUpFp != NULL){
|
if(pWrapper->func.isCatchUpFp != NULL){
|
||||||
dInfo("node:%s, checking node catch up", pWrapper->name);
|
dInfo("node:%s, checking node catch up", pWrapper->name);
|
||||||
if(!(*pWrapper->func.isCatchUpFp)(pWrapper->pMgmt) == 0){
|
if((*pWrapper->func.isCatchUpFp)(pWrapper->pMgmt) != 1){
|
||||||
|
terrno = TSDB_CODE_MNODE_NOT_CATCH_UP;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,7 @@ typedef int32_t (*NodeDropFp)(const SMgmtInputOpt *pInput, SRpcMsg *pMsg);
|
||||||
typedef int32_t (*NodeRequireFp)(const SMgmtInputOpt *pInput, bool *required);
|
typedef int32_t (*NodeRequireFp)(const SMgmtInputOpt *pInput, bool *required);
|
||||||
typedef SArray *(*NodeGetHandlesFp)(); // array of SMgmtHandle
|
typedef SArray *(*NodeGetHandlesFp)(); // array of SMgmtHandle
|
||||||
typedef bool (*NodeIsCatchUpFp)(void *pMgmt);
|
typedef bool (*NodeIsCatchUpFp)(void *pMgmt);
|
||||||
|
typedef bool (*NodeRole)(void *pMgmt);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
NodeOpenFp openFp;
|
NodeOpenFp openFp;
|
||||||
|
@ -146,6 +147,7 @@ typedef struct {
|
||||||
NodeRequireFp requiredFp;
|
NodeRequireFp requiredFp;
|
||||||
NodeGetHandlesFp getHandlesFp;
|
NodeGetHandlesFp getHandlesFp;
|
||||||
NodeIsCatchUpFp isCatchUpFp;
|
NodeIsCatchUpFp isCatchUpFp;
|
||||||
|
NodeRole nodeRoleFp;
|
||||||
} SMgmtFunc;
|
} SMgmtFunc;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -590,6 +590,11 @@ int32_t mndIsCatchUp(SMnode *pMnode) {
|
||||||
return syncIsCatchUp(rid);
|
return syncIsCatchUp(rid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ESyncRole mndGetRole(SMnode *pMnode){
|
||||||
|
int64_t rid = pMnode->syncMgmt.sync;
|
||||||
|
return syncGetRole(rid);
|
||||||
|
}
|
||||||
|
|
||||||
void mndStop(SMnode *pMnode) {
|
void mndStop(SMnode *pMnode) {
|
||||||
mndSetStop(pMnode);
|
mndSetStop(pMnode);
|
||||||
mndSyncStop(pMnode);
|
mndSyncStop(pMnode);
|
||||||
|
|
|
@ -322,7 +322,8 @@ static int32_t mndBuildAlterMnodeTypeRedoAction(STrans *pTrans,
|
||||||
.pCont = pReq,
|
.pCont = pReq,
|
||||||
.contLen = contLen,
|
.contLen = contLen,
|
||||||
.msgType = TDMT_DND_ALTER_MNODE_TYPE,
|
.msgType = TDMT_DND_ALTER_MNODE_TYPE,
|
||||||
.acceptableCode = TSDB_CODE_MNODE_ALREADY_DEPLOYED,
|
.retryCode = TSDB_CODE_MNODE_NOT_CATCH_UP,
|
||||||
|
.acceptableCode = TSDB_CODE_MNODE_ALREADY_IS_VOTER,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
||||||
|
|
Loading…
Reference in New Issue