commit
d0a6935543
|
@ -935,13 +935,13 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
} SMCreateMnodeMsg, SMDropMnodeMsg, SDDropMnodeMsg;
|
} SMCreateMnodeReq, SMDropMnodeReq, SDDropMnodeReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
int8_t replica;
|
int8_t replica;
|
||||||
SReplica replicas[TSDB_MAX_REPLICA];
|
SReplica replicas[TSDB_MAX_REPLICA];
|
||||||
} SDCreateMnodeMsg, SDAlterMnodeMsg;
|
} SDCreateMnodeReq, SDAlterMnodeReq;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t dnodeId;
|
int32_t dnodeId;
|
||||||
|
|
|
@ -259,28 +259,24 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_DND_DNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0411)
|
#define TSDB_CODE_DND_DNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0411)
|
||||||
#define TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0420)
|
#define TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0420)
|
||||||
#define TSDB_CODE_DND_MNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0421)
|
#define TSDB_CODE_DND_MNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0421)
|
||||||
#define TSDB_CODE_DND_MNODE_ID_INVALID TAOS_DEF_ERROR_CODE(0, 0x0422)
|
#define TSDB_CODE_DND_MNODE_INVALID_OPTION TAOS_DEF_ERROR_CODE(0, 0x0422)
|
||||||
#define TSDB_CODE_DND_MNODE_ID_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0423)
|
#define TSDB_CODE_DND_MNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0423)
|
||||||
#define TSDB_CODE_DND_MNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0424)
|
#define TSDB_CODE_DND_MNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0424)
|
||||||
#define TSDB_CODE_DND_MNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0425)
|
|
||||||
#define TSDB_CODE_DND_QNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0430)
|
#define TSDB_CODE_DND_QNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0430)
|
||||||
#define TSDB_CODE_DND_QNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0431)
|
#define TSDB_CODE_DND_QNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0431)
|
||||||
#define TSDB_CODE_DND_QNODE_ID_INVALID TAOS_DEF_ERROR_CODE(0, 0x0432)
|
#define TSDB_CODE_DND_QNODE_INVALID_OPTION TAOS_DEF_ERROR_CODE(0, 0x0432)
|
||||||
#define TSDB_CODE_DND_QNODE_ID_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0433)
|
#define TSDB_CODE_DND_QNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0433)
|
||||||
#define TSDB_CODE_DND_QNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0434)
|
#define TSDB_CODE_DND_QNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0434)
|
||||||
#define TSDB_CODE_DND_QNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0435)
|
|
||||||
#define TSDB_CODE_DND_SNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0440)
|
#define TSDB_CODE_DND_SNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0440)
|
||||||
#define TSDB_CODE_DND_SNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0441)
|
#define TSDB_CODE_DND_SNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0441)
|
||||||
#define TSDB_CODE_DND_SNODE_ID_INVALID TAOS_DEF_ERROR_CODE(0, 0x0442)
|
#define TSDB_CODE_DND_SNODE_INVALID_OPTION TAOS_DEF_ERROR_CODE(0, 0x0442)
|
||||||
#define TSDB_CODE_DND_SNODE_ID_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0443)
|
#define TSDB_CODE_DND_SNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0443)
|
||||||
#define TSDB_CODE_DND_SNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0444)
|
#define TSDB_CODE_DND_SNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0444)
|
||||||
#define TSDB_CODE_DND_SNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0445)
|
|
||||||
#define TSDB_CODE_DND_BNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0450)
|
#define TSDB_CODE_DND_BNODE_ALREADY_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0450)
|
||||||
#define TSDB_CODE_DND_BNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0451)
|
#define TSDB_CODE_DND_BNODE_NOT_DEPLOYED TAOS_DEF_ERROR_CODE(0, 0x0451)
|
||||||
#define TSDB_CODE_DND_BNODE_ID_INVALID TAOS_DEF_ERROR_CODE(0, 0x0452)
|
#define TSDB_CODE_DND_BNODE_INVALID_OPTION TAOS_DEF_ERROR_CODE(0, 0x0452)
|
||||||
#define TSDB_CODE_DND_BNODE_ID_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0453)
|
#define TSDB_CODE_DND_BNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0453)
|
||||||
#define TSDB_CODE_DND_BNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0454)
|
#define TSDB_CODE_DND_BNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0454)
|
||||||
#define TSDB_CODE_DND_BNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0455)
|
|
||||||
#define TSDB_CODE_DND_VNODE_TOO_MANY_VNODES TAOS_DEF_ERROR_CODE(0, 0x0460)
|
#define TSDB_CODE_DND_VNODE_TOO_MANY_VNODES TAOS_DEF_ERROR_CODE(0, 0x0460)
|
||||||
#define TSDB_CODE_DND_VNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0461)
|
#define TSDB_CODE_DND_VNODE_READ_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0461)
|
||||||
#define TSDB_CODE_DND_VNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0462)
|
#define TSDB_CODE_DND_VNODE_WRITE_FILE_ERROR TAOS_DEF_ERROR_CODE(0, 0x0462)
|
||||||
|
|
|
@ -268,7 +268,7 @@ int32_t dndProcessCreateBnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_BNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_BNODE_INVALID_OPTION;
|
||||||
dError("failed to create bnode since %s", terrstr());
|
dError("failed to create bnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -281,7 +281,7 @@ int32_t dndProcessDropBnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_BNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_BNODE_INVALID_OPTION;
|
||||||
dError("failed to drop bnode since %s", terrstr());
|
dError("failed to drop bnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -305,25 +305,24 @@ static void dndBuildMnodeOpenOption(SDnode *pDnode, SMnodeOpt *pOption) {
|
||||||
memcpy(&pOption->replicas, pMgmt->replicas, sizeof(SReplica) * TSDB_MAX_REPLICA);
|
memcpy(&pOption->replicas, pMgmt->replicas, sizeof(SReplica) * TSDB_MAX_REPLICA);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t dndBuildMnodeOptionFromReq(SDnode *pDnode, SMnodeOpt *pOption, SDCreateMnodeMsg *pReq) {
|
static int32_t dndBuildMnodeOptionFromReq(SDnode *pDnode, SMnodeOpt *pOption, SDCreateMnodeReq *pCreate) {
|
||||||
dndInitMnodeOption(pDnode, pOption);
|
dndInitMnodeOption(pDnode, pOption);
|
||||||
pOption->dnodeId = dndGetDnodeId(pDnode);
|
pOption->dnodeId = dndGetDnodeId(pDnode);
|
||||||
pOption->clusterId = dndGetClusterId(pDnode);
|
pOption->clusterId = dndGetClusterId(pDnode);
|
||||||
|
|
||||||
pOption->replica = pReq->replica;
|
pOption->replica = pCreate->replica;
|
||||||
pOption->selfIndex = -1;
|
pOption->selfIndex = -1;
|
||||||
for (int32_t i = 0; i < pReq->replica; ++i) {
|
for (int32_t i = 0; i < pCreate->replica; ++i) {
|
||||||
SReplica *pReplica = &pOption->replicas[i];
|
SReplica *pReplica = &pOption->replicas[i];
|
||||||
pReplica->id = pReq->replicas[i].id;
|
pReplica->id = pCreate->replicas[i].id;
|
||||||
pReplica->port = pReq->replicas[i].port;
|
pReplica->port = pCreate->replicas[i].port;
|
||||||
memcpy(pReplica->fqdn, pReq->replicas[i].fqdn, TSDB_FQDN_LEN);
|
memcpy(pReplica->fqdn, pCreate->replicas[i].fqdn, TSDB_FQDN_LEN);
|
||||||
if (pReplica->id == pOption->dnodeId) {
|
if (pReplica->id == pOption->dnodeId) {
|
||||||
pOption->selfIndex = i;
|
pOption->selfIndex = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pOption->selfIndex == -1) {
|
if (pOption->selfIndex == -1) {
|
||||||
terrno = TSDB_CODE_DND_MNODE_ID_NOT_FOUND;
|
|
||||||
dError("failed to build mnode options since %s", terrstr());
|
dError("failed to build mnode options since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -423,8 +422,8 @@ static int32_t dndDropMnode(SDnode *pDnode) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SDCreateMnodeMsg *dndParseCreateMnodeReq(SRpcMsg *pReq) {
|
static SDCreateMnodeReq *dndParseCreateMnodeReq(SRpcMsg *pReq) {
|
||||||
SDCreateMnodeMsg *pCreate = pReq->pCont;
|
SDCreateMnodeReq *pCreate = pReq->pCont;
|
||||||
pCreate->dnodeId = htonl(pCreate->dnodeId);
|
pCreate->dnodeId = htonl(pCreate->dnodeId);
|
||||||
for (int32_t i = 0; i < pCreate->replica; ++i) {
|
for (int32_t i = 0; i < pCreate->replica; ++i) {
|
||||||
pCreate->replicas[i].id = htonl(pCreate->replicas[i].id);
|
pCreate->replicas[i].id = htonl(pCreate->replicas[i].id);
|
||||||
|
@ -435,51 +434,85 @@ static SDCreateMnodeMsg *dndParseCreateMnodeReq(SRpcMsg *pReq) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t dndProcessCreateMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
int32_t dndProcessCreateMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
||||||
SDCreateMnodeMsg *pCreate = dndParseCreateMnodeReq(pReq);
|
SDCreateMnodeReq *pCreate = dndParseCreateMnodeReq(pReq);
|
||||||
|
|
||||||
if (pCreate->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pCreate->replica <= 1 || pCreate->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_MNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_MNODE_INVALID_OPTION;
|
||||||
|
dError("failed to create mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
}
|
||||||
|
|
||||||
SMnodeOpt option = {0};
|
SMnodeOpt option = {0};
|
||||||
if (dndBuildMnodeOptionFromReq(pDnode, &option, pCreate) != 0) {
|
if (dndBuildMnodeOptionFromReq(pDnode, &option, pCreate) != 0) {
|
||||||
|
terrno = TSDB_CODE_DND_MNODE_INVALID_OPTION;
|
||||||
|
dError("failed to create mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dndOpenMnode(pDnode, &option);
|
SMnode *pMnode = dndAcquireMnode(pDnode);
|
||||||
|
if (pMnode != NULL) {
|
||||||
|
dndReleaseMnode(pDnode, pMnode);
|
||||||
|
terrno = TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED;
|
||||||
|
dError("failed to create mnode since %s", terrstr());
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dDebug("start to create mnode");
|
||||||
|
return dndOpenMnode(pDnode, &option);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t dndProcessAlterMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
int32_t dndProcessAlterMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
||||||
SDAlterMnodeMsg *pAlter = dndParseCreateMnodeReq(pReq);
|
SDAlterMnodeReq *pAlter = dndParseCreateMnodeReq(pReq);
|
||||||
|
|
||||||
if (pAlter->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pAlter->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_MNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_MNODE_INVALID_OPTION;
|
||||||
|
dError("failed to alter mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMnodeOpt option = {0};
|
SMnodeOpt option = {0};
|
||||||
if (dndBuildMnodeOptionFromReq(pDnode, &option, pAlter) != 0) {
|
if (dndBuildMnodeOptionFromReq(pDnode, &option, pAlter) != 0) {
|
||||||
|
terrno = TSDB_CODE_DND_MNODE_INVALID_OPTION;
|
||||||
|
dError("failed to alter mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dndAlterMnode(pDnode, &option) != 0) {
|
SMnode *pMnode = dndAcquireMnode(pDnode);
|
||||||
|
if (pMnode == NULL) {
|
||||||
|
terrno = TSDB_CODE_DND_MNODE_NOT_DEPLOYED;
|
||||||
|
dError("failed to alter mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dndWriteMnodeFile(pDnode);
|
dDebug("start to alter mnode");
|
||||||
|
int32_t code = dndAlterMnode(pDnode, &option);
|
||||||
|
dndReleaseMnode(pDnode, pMnode);
|
||||||
|
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t dndProcessDropMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
int32_t dndProcessDropMnodeReq(SDnode *pDnode, SRpcMsg *pReq) {
|
||||||
SDDropMnodeMsg *pDrop = pReq->pCont;
|
SDDropMnodeReq *pDrop = pReq->pCont;
|
||||||
pDrop->dnodeId = htonl(pDrop->dnodeId);
|
pDrop->dnodeId = htonl(pDrop->dnodeId);
|
||||||
|
|
||||||
if (pDrop->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pDrop->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_MNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_MNODE_INVALID_OPTION;
|
||||||
|
dError("failed to drop mnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
|
||||||
return dndDropMnode(pDnode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SMnode *pMnode = dndAcquireMnode(pDnode);
|
||||||
|
if (pMnode != NULL) {
|
||||||
|
terrno = TSDB_CODE_DND_MNODE_NOT_DEPLOYED;
|
||||||
|
dError("failed to drop mnode since %s", terrstr());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dDebug("start to drop mnode");
|
||||||
|
int32_t code = dndDropMnode(pDnode);
|
||||||
|
dndReleaseMnode(pDnode, pMnode);
|
||||||
|
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dndProcessMnodeQueue(SDnode *pDnode, SMnodeMsg *pMsg) {
|
static void dndProcessMnodeQueue(SDnode *pDnode, SMnodeMsg *pMsg) {
|
||||||
|
@ -506,6 +539,7 @@ static void dndWriteMnodeMsgToWorker(SDnode *pDnode, SDnodeWorker *pWorker, SRpc
|
||||||
code = TSDB_CODE_OUT_OF_MEMORY;
|
code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
} else {
|
} else {
|
||||||
code = dndWriteMsgToWorker(pWorker, pMsg, 0);
|
code = dndWriteMsgToWorker(pWorker, pMsg, 0);
|
||||||
|
if (code != 0) code = terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
|
|
|
@ -274,7 +274,7 @@ int32_t dndProcessCreateQnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_QNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_QNODE_INVALID_OPTION;
|
||||||
dError("failed to create qnode since %s", terrstr());
|
dError("failed to create qnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -287,7 +287,7 @@ int32_t dndProcessDropQnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_QNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_QNODE_INVALID_OPTION;
|
||||||
dError("failed to drop qnode since %s", terrstr());
|
dError("failed to drop qnode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -268,7 +268,7 @@ int32_t dndProcessCreateSnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_SNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_SNODE_INVALID_OPTION;
|
||||||
dError("failed to create snode since %s", terrstr());
|
dError("failed to create snode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -281,7 +281,7 @@ int32_t dndProcessDropSnodeReq(SDnode *pDnode, SRpcMsg *pRpcMsg) {
|
||||||
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
pMsg->dnodeId = htonl(pMsg->dnodeId);
|
||||||
|
|
||||||
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
if (pMsg->dnodeId != dndGetDnodeId(pDnode)) {
|
||||||
terrno = TSDB_CODE_DND_SNODE_ID_INVALID;
|
terrno = TSDB_CODE_DND_SNODE_INVALID_OPTION;
|
||||||
dError("failed to drop snode since %s", terrstr());
|
dError("failed to drop snode since %s", terrstr());
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -197,6 +197,10 @@ static void dndCloseVnode(SDnode *pDnode, SVnodeObj *pVnode) {
|
||||||
dndFreeVnodeWriteQueue(pDnode, pVnode);
|
dndFreeVnodeWriteQueue(pDnode, pVnode);
|
||||||
dndFreeVnodeApplyQueue(pDnode, pVnode);
|
dndFreeVnodeApplyQueue(pDnode, pVnode);
|
||||||
dndFreeVnodeSyncQueue(pDnode, pVnode);
|
dndFreeVnodeSyncQueue(pDnode, pVnode);
|
||||||
|
|
||||||
|
vnodeClose(pVnode->pImpl);
|
||||||
|
pVnode->pImpl = NULL;
|
||||||
|
|
||||||
free(pVnode->path);
|
free(pVnode->path);
|
||||||
free(pVnode->db);
|
free(pVnode->db);
|
||||||
free(pVnode);
|
free(pVnode);
|
||||||
|
|
|
@ -34,7 +34,7 @@ TEST_F(DndTestBnode, 01_Create_Bnode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_BNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_BNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_BNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ TEST_F(DndTestBnode, 01_Drop_Bnode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_BNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_BNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_BNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,10 +13,20 @@
|
||||||
|
|
||||||
class DndTestMnode : public ::testing::Test {
|
class DndTestMnode : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
static void SetUpTestSuite() { test.Init("/tmp/dnode_test_mnode", 9113); }
|
static void SetUpTestSuite() {
|
||||||
static void TearDownTestSuite() { test.Cleanup(); }
|
test.Init("/tmp/dnode_test_mnode", 9113);
|
||||||
|
const char* fqdn = "localhost";
|
||||||
|
const char* firstEp = "localhost:9113";
|
||||||
|
|
||||||
|
server2.Start("/tmp/dnode_test_mnode2", fqdn, 9114, firstEp);
|
||||||
|
}
|
||||||
|
static void TearDownTestSuite() {
|
||||||
|
server2.Stop();
|
||||||
|
test.Cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
static Testbase test;
|
static Testbase test;
|
||||||
|
static TestServer server2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void SetUp() override {}
|
void SetUp() override {}
|
||||||
|
@ -24,18 +34,39 @@ class DndTestMnode : public ::testing::Test {
|
||||||
};
|
};
|
||||||
|
|
||||||
Testbase DndTestMnode::test;
|
Testbase DndTestMnode::test;
|
||||||
|
TestServer DndTestMnode::server2;
|
||||||
|
|
||||||
|
TEST_F(DndTestMnode, 01_Create_Dnode) {
|
||||||
|
int32_t contLen = sizeof(SCreateDnodeReq);
|
||||||
|
|
||||||
|
SCreateDnodeReq* pReq = (SCreateDnodeReq*)rpcMallocCont(contLen);
|
||||||
|
strcpy(pReq->fqdn, "localhost");
|
||||||
|
pReq->port = htonl(9114);
|
||||||
|
|
||||||
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_DNODE, pReq, contLen);
|
||||||
|
ASSERT_NE(pRsp, nullptr);
|
||||||
|
ASSERT_EQ(pRsp->code, 0);
|
||||||
|
|
||||||
|
taosMsleep(1300);
|
||||||
|
test.SendShowMetaReq(TSDB_MGMT_TABLE_DNODE, "");
|
||||||
|
test.SendShowRetrieveReq();
|
||||||
|
EXPECT_EQ(test.GetShowRows(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
TEST_F(DndTestMnode, 01_Create_Mnode) {
|
TEST_F(DndTestMnode, 01_Create_Mnode) {
|
||||||
{
|
{
|
||||||
int32_t contLen = sizeof(SDCreateMnodeReq);
|
int32_t contLen = sizeof(SDCreateMnodeReq);
|
||||||
|
|
||||||
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(2);
|
pReq->dnodeId = htonl(2);
|
||||||
|
pReq->replica = 1;
|
||||||
|
pReq->replicas[0].id = htonl(1);
|
||||||
|
pReq->replicas[0].port = htonl(9113);
|
||||||
|
strcpy(pReq->replicas[0].fqdn, "localhost");
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -43,10 +74,14 @@ TEST_F(DndTestMnode, 01_Create_Mnode) {
|
||||||
|
|
||||||
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(1);
|
pReq->dnodeId = htonl(1);
|
||||||
|
pReq->replica = 1;
|
||||||
|
pReq->replicas[0].id = htonl(2);
|
||||||
|
pReq->replicas[0].port = htonl(9113);
|
||||||
|
strcpy(pReq->replicas[0].fqdn, "localhost");
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, 0);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -54,26 +89,63 @@ TEST_F(DndTestMnode, 01_Create_Mnode) {
|
||||||
|
|
||||||
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(1);
|
pReq->dnodeId = htonl(1);
|
||||||
|
pReq->replica = 2;
|
||||||
|
pReq->replicas[0].id = htonl(1);
|
||||||
|
pReq->replicas[0].port = htonl(9113);
|
||||||
|
strcpy(pReq->replicas[0].fqdn, "localhost");
|
||||||
|
pReq->replicas[1].id = htonl(1);
|
||||||
|
pReq->replicas[1].port = htonl(9114);
|
||||||
|
strcpy(pReq->replicas[1].fqdn, "localhost");
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED);
|
||||||
}
|
}
|
||||||
|
|
||||||
test.Restart();
|
// {
|
||||||
|
// int32_t contLen = sizeof(SDCreateMnodeReq);
|
||||||
|
|
||||||
{
|
// SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
int32_t contLen = sizeof(SDCreateMnodeReq);
|
// pReq->dnodeId = htonl(1);
|
||||||
|
// pReq->replica = 2;
|
||||||
|
// pReq->replicas[0].id = htonl(1);
|
||||||
|
// pReq->replicas[0].port = htonl(9113);
|
||||||
|
// pReq->replicas[0].id = htonl(1);
|
||||||
|
// pReq->replicas[0].port = htonl(9113);
|
||||||
|
// strcpy(pReq->replicas[0].fqdn, "localhost");
|
||||||
|
|
||||||
SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
// SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
pReq->dnodeId = htonl(1);
|
// ASSERT_NE(pRsp, nullptr);
|
||||||
|
// ASSERT_EQ(pRsp->code, 0);
|
||||||
|
// }
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
// {
|
||||||
ASSERT_NE(pRsp, nullptr);
|
// int32_t contLen = sizeof(SDCreateMnodeReq);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED);
|
|
||||||
}
|
// SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
|
// pReq->dnodeId = htonl(1);
|
||||||
|
|
||||||
|
// SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
|
// ASSERT_NE(pRsp, nullptr);
|
||||||
|
// ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// test.Restart();
|
||||||
|
|
||||||
|
// {
|
||||||
|
// int32_t contLen = sizeof(SDCreateMnodeReq);
|
||||||
|
|
||||||
|
// SDCreateMnodeReq* pReq = (SDCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
|
// pReq->dnodeId = htonl(1);
|
||||||
|
|
||||||
|
// SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_MNODE, pReq, contLen);
|
||||||
|
// ASSERT_NE(pRsp, nullptr);
|
||||||
|
// ASSERT_EQ(pRsp->code, TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
TEST_F(DndTestMnode, 02_Alter_Mnode) {
|
TEST_F(DndTestMnode, 02_Alter_Mnode) {
|
||||||
{
|
{
|
||||||
int32_t contLen = sizeof(SDCreateMnodeReq);
|
int32_t contLen = sizeof(SDCreateMnodeReq);
|
||||||
|
@ -122,6 +194,7 @@ TEST_F(DndTestMnode, 02_Alter_Mnode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST_F(DndTestMnode, 03_Drop_Mnode) {
|
TEST_F(DndTestMnode, 03_Drop_Mnode) {
|
||||||
{
|
{
|
||||||
int32_t contLen = sizeof(SDDropMnodeReq);
|
int32_t contLen = sizeof(SDDropMnodeReq);
|
||||||
|
|
|
@ -34,7 +34,7 @@ TEST_F(DndTestQnode, 01_Create_Qnode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_QNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_QNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ TEST_F(DndTestQnode, 02_Drop_Qnode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_QNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_QNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_QNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,7 @@ TEST_F(DndTestSnode, 01_Create_Snode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_CREATE_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_SNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_SNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@ TEST_F(DndTestSnode, 01_Drop_Snode) {
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_DND_DROP_SNODE, pReq, contLen);
|
||||||
ASSERT_NE(pRsp, nullptr);
|
ASSERT_NE(pRsp, nullptr);
|
||||||
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_SNODE_ID_INVALID);
|
ASSERT_EQ(pRsp->code, TSDB_CODE_DND_SNODE_INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include "sut.h"
|
#include "sut.h"
|
||||||
|
|
||||||
void Testbase::InitLog(const char* path) {
|
void Testbase::InitLog(const char* path) {
|
||||||
dDebugFlag = 0;
|
dDebugFlag = 143;
|
||||||
vDebugFlag = 0;
|
vDebugFlag = 0;
|
||||||
mDebugFlag = 143;
|
mDebugFlag = 143;
|
||||||
cDebugFlag = 0;
|
cDebugFlag = 0;
|
||||||
|
|
|
@ -277,7 +277,7 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
int32_t numOfReplicas = 0;
|
int32_t numOfReplicas = 0;
|
||||||
|
|
||||||
SDCreateMnodeMsg createMsg = {0};
|
SDCreateMnodeReq createMsg = {0};
|
||||||
while (1) {
|
while (1) {
|
||||||
SMnodeObj *pMObj = NULL;
|
SMnodeObj *pMObj = NULL;
|
||||||
pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pMObj);
|
pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pMObj);
|
||||||
|
@ -307,18 +307,18 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
|
||||||
|
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
|
|
||||||
SDAlterMnodeMsg *pMsg = malloc(sizeof(SDAlterMnodeMsg));
|
SDAlterMnodeReq *pMsg = malloc(sizeof(SDAlterMnodeReq));
|
||||||
if (pMsg == NULL) {
|
if (pMsg == NULL) {
|
||||||
sdbCancelFetch(pSdb, pIter);
|
sdbCancelFetch(pSdb, pIter);
|
||||||
sdbRelease(pSdb, pMObj);
|
sdbRelease(pSdb, pMObj);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memcpy(pMsg, &createMsg, sizeof(SDAlterMnodeMsg));
|
memcpy(pMsg, &createMsg, sizeof(SDAlterMnodeReq));
|
||||||
|
|
||||||
pMsg->dnodeId = htonl(pMObj->id);
|
pMsg->dnodeId = htonl(pMObj->id);
|
||||||
action.epSet = mndGetDnodeEpset(pMObj->pDnode);
|
action.epSet = mndGetDnodeEpset(pMObj->pDnode);
|
||||||
action.pCont = pMsg;
|
action.pCont = pMsg;
|
||||||
action.contLen = sizeof(SDAlterMnodeMsg);
|
action.contLen = sizeof(SDAlterMnodeReq);
|
||||||
action.msgType = TDMT_DND_ALTER_MNODE;
|
action.msgType = TDMT_DND_ALTER_MNODE;
|
||||||
|
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
||||||
|
@ -335,14 +335,14 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
|
||||||
SDCreateMnodeMsg *pMsg = malloc(sizeof(SDCreateMnodeMsg));
|
SDCreateMnodeReq *pMsg = malloc(sizeof(SDCreateMnodeReq));
|
||||||
if (pMsg == NULL) return -1;
|
if (pMsg == NULL) return -1;
|
||||||
memcpy(pMsg, &createMsg, sizeof(SDAlterMnodeMsg));
|
memcpy(pMsg, &createMsg, sizeof(SDAlterMnodeReq));
|
||||||
pMsg->dnodeId = htonl(pObj->id);
|
pMsg->dnodeId = htonl(pObj->id);
|
||||||
|
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
action.pCont = pMsg;
|
action.pCont = pMsg;
|
||||||
action.contLen = sizeof(SDCreateMnodeMsg);
|
action.contLen = sizeof(SDCreateMnodeReq);
|
||||||
action.msgType = TDMT_DND_CREATE_MNODE;
|
action.msgType = TDMT_DND_CREATE_MNODE;
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
||||||
free(pMsg);
|
free(pMsg);
|
||||||
|
@ -353,7 +353,7 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mndCreateMnode(SMnode *pMnode, SMnodeMsg *pMsg, SDnodeObj *pDnode, SMCreateMnodeMsg *pCreate) {
|
static int32_t mndCreateMnode(SMnode *pMnode, SMnodeMsg *pMsg, SDnodeObj *pDnode, SMCreateMnodeReq *pCreate) {
|
||||||
SMnodeObj mnodeObj = {0};
|
SMnodeObj mnodeObj = {0};
|
||||||
mnodeObj.id = pDnode->id;
|
mnodeObj.id = pDnode->id;
|
||||||
mnodeObj.createdTime = taosGetTimestampMs();
|
mnodeObj.createdTime = taosGetTimestampMs();
|
||||||
|
@ -396,7 +396,7 @@ CREATE_MNODE_OVER:
|
||||||
|
|
||||||
static int32_t mndProcessCreateMnodeReq(SMnodeMsg *pMsg) {
|
static int32_t mndProcessCreateMnodeReq(SMnodeMsg *pMsg) {
|
||||||
SMnode *pMnode = pMsg->pMnode;
|
SMnode *pMnode = pMsg->pMnode;
|
||||||
SMCreateMnodeMsg *pCreate = pMsg->rpcMsg.pCont;
|
SMCreateMnodeReq *pCreate = pMsg->rpcMsg.pCont;
|
||||||
|
|
||||||
pCreate->dnodeId = htonl(pCreate->dnodeId);
|
pCreate->dnodeId = htonl(pCreate->dnodeId);
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
|
||||||
void *pIter = NULL;
|
void *pIter = NULL;
|
||||||
int32_t numOfReplicas = 0;
|
int32_t numOfReplicas = 0;
|
||||||
|
|
||||||
SDAlterMnodeMsg alterMsg = {0};
|
SDAlterMnodeReq alterMsg = {0};
|
||||||
while (1) {
|
while (1) {
|
||||||
SMnodeObj *pMObj = NULL;
|
SMnodeObj *pMObj = NULL;
|
||||||
pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pMObj);
|
pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pMObj);
|
||||||
|
@ -475,18 +475,18 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
|
||||||
if (pMObj->id != pObj->id) {
|
if (pMObj->id != pObj->id) {
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
|
|
||||||
SDAlterMnodeMsg *pMsg = malloc(sizeof(SDAlterMnodeMsg));
|
SDAlterMnodeReq *pMsg = malloc(sizeof(SDAlterMnodeReq));
|
||||||
if (pMsg == NULL) {
|
if (pMsg == NULL) {
|
||||||
sdbCancelFetch(pSdb, pIter);
|
sdbCancelFetch(pSdb, pIter);
|
||||||
sdbRelease(pSdb, pMObj);
|
sdbRelease(pSdb, pMObj);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memcpy(pMsg, &alterMsg, sizeof(SDAlterMnodeMsg));
|
memcpy(pMsg, &alterMsg, sizeof(SDAlterMnodeReq));
|
||||||
|
|
||||||
pMsg->dnodeId = htonl(pMObj->id);
|
pMsg->dnodeId = htonl(pMObj->id);
|
||||||
action.epSet = mndGetDnodeEpset(pMObj->pDnode);
|
action.epSet = mndGetDnodeEpset(pMObj->pDnode);
|
||||||
action.pCont = pMsg;
|
action.pCont = pMsg;
|
||||||
action.contLen = sizeof(SDAlterMnodeMsg);
|
action.contLen = sizeof(SDAlterMnodeReq);
|
||||||
action.msgType = TDMT_DND_ALTER_MNODE;
|
action.msgType = TDMT_DND_ALTER_MNODE;
|
||||||
|
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
||||||
|
@ -504,7 +504,7 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
|
||||||
STransAction action = {0};
|
STransAction action = {0};
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
|
|
||||||
SDDropMnodeMsg *pMsg = malloc(sizeof(SDDropMnodeMsg));
|
SDDropMnodeReq *pMsg = malloc(sizeof(SDDropMnodeReq));
|
||||||
if (pMsg == NULL) {
|
if (pMsg == NULL) {
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -513,7 +513,7 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode
|
||||||
|
|
||||||
action.epSet = mndGetDnodeEpset(pDnode);
|
action.epSet = mndGetDnodeEpset(pDnode);
|
||||||
action.pCont = pMsg;
|
action.pCont = pMsg;
|
||||||
action.contLen = sizeof(SDDropMnodeMsg);
|
action.contLen = sizeof(SDDropMnodeReq);
|
||||||
action.msgType = TDMT_DND_DROP_MNODE;
|
action.msgType = TDMT_DND_DROP_MNODE;
|
||||||
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
if (mndTransAppendRedoAction(pTrans, &action) != 0) {
|
||||||
free(pMsg);
|
free(pMsg);
|
||||||
|
@ -563,7 +563,7 @@ DROP_MNODE_OVER:
|
||||||
|
|
||||||
static int32_t mndProcessDropMnodeReq(SMnodeMsg *pMsg) {
|
static int32_t mndProcessDropMnodeReq(SMnodeMsg *pMsg) {
|
||||||
SMnode *pMnode = pMsg->pMnode;
|
SMnode *pMnode = pMsg->pMnode;
|
||||||
SMDropMnodeMsg *pDrop = pMsg->rpcMsg.pCont;
|
SMDropMnodeReq *pDrop = pMsg->rpcMsg.pCont;
|
||||||
pDrop->dnodeId = htonl(pDrop->dnodeId);
|
pDrop->dnodeId = htonl(pDrop->dnodeId);
|
||||||
|
|
||||||
mDebug("mnode:%d, start to drop", pDrop->dnodeId);
|
mDebug("mnode:%d, start to drop", pDrop->dnodeId);
|
||||||
|
|
|
@ -86,10 +86,6 @@ static int32_t mndRestoreWal(SMnode *pMnode) {
|
||||||
|
|
||||||
mndTransPullup(pMnode);
|
mndTransPullup(pMnode);
|
||||||
|
|
||||||
if (walBeginSnapshot(pWal, sdbVer) < 0) {
|
|
||||||
goto WAL_RESTORE_OVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sdbVer != lastSdbVer) {
|
if (sdbVer != lastSdbVer) {
|
||||||
mInfo("sdb restored from %" PRId64 " to %" PRId64 ", write file", lastSdbVer, sdbVer);
|
mInfo("sdb restored from %" PRId64 " to %" PRId64 ", write file", lastSdbVer, sdbVer);
|
||||||
if (sdbWriteFile(pSdb) != 0) {
|
if (sdbWriteFile(pSdb) != 0) {
|
||||||
|
@ -97,6 +93,10 @@ static int32_t mndRestoreWal(SMnode *pMnode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (walBeginSnapshot(pWal, sdbVer) < 0) {
|
||||||
|
goto WAL_RESTORE_OVER;
|
||||||
|
}
|
||||||
|
|
||||||
if (walEndSnapshot(pWal) < 0) {
|
if (walEndSnapshot(pWal) < 0) {
|
||||||
goto WAL_RESTORE_OVER;
|
goto WAL_RESTORE_OVER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,9 +72,9 @@ TEST_F(MndTestMnode, 01_ShowDnode) {
|
||||||
|
|
||||||
TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
||||||
{
|
{
|
||||||
int32_t contLen = sizeof(SMCreateMnodeMsg);
|
int32_t contLen = sizeof(SMCreateMnodeReq);
|
||||||
|
|
||||||
SMCreateMnodeMsg* pReq = (SMCreateMnodeMsg*)rpcMallocCont(contLen);
|
SMCreateMnodeReq* pReq = (SMCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(1);
|
pReq->dnodeId = htonl(1);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
|
@ -85,9 +85,9 @@ TEST_F(MndTestMnode, 02_Create_Mnode_Invalid_Id) {
|
||||||
|
|
||||||
TEST_F(MndTestMnode, 03_Create_Mnode_Invalid_Id) {
|
TEST_F(MndTestMnode, 03_Create_Mnode_Invalid_Id) {
|
||||||
{
|
{
|
||||||
int32_t contLen = sizeof(SMCreateMnodeMsg);
|
int32_t contLen = sizeof(SMCreateMnodeReq);
|
||||||
|
|
||||||
SMCreateMnodeMsg* pReq = (SMCreateMnodeMsg*)rpcMallocCont(contLen);
|
SMCreateMnodeReq* pReq = (SMCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(2);
|
pReq->dnodeId = htonl(2);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
|
@ -117,9 +117,9 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
|
|
||||||
{
|
{
|
||||||
// create mnode
|
// create mnode
|
||||||
int32_t contLen = sizeof(SMCreateMnodeMsg);
|
int32_t contLen = sizeof(SMCreateMnodeReq);
|
||||||
|
|
||||||
SMCreateMnodeMsg* pReq = (SMCreateMnodeMsg*)rpcMallocCont(contLen);
|
SMCreateMnodeReq* pReq = (SMCreateMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(2);
|
pReq->dnodeId = htonl(2);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_MNODE, pReq, contLen);
|
||||||
|
@ -144,9 +144,9 @@ TEST_F(MndTestMnode, 04_Create_Mnode) {
|
||||||
|
|
||||||
{
|
{
|
||||||
// drop mnode
|
// drop mnode
|
||||||
int32_t contLen = sizeof(SMDropMnodeMsg);
|
int32_t contLen = sizeof(SMDropMnodeReq);
|
||||||
|
|
||||||
SMDropMnodeMsg* pReq = (SMDropMnodeMsg*)rpcMallocCont(contLen);
|
SMDropMnodeReq* pReq = (SMDropMnodeReq*)rpcMallocCont(contLen);
|
||||||
pReq->dnodeId = htonl(2);
|
pReq->dnodeId = htonl(2);
|
||||||
|
|
||||||
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_MNODE, pReq, contLen);
|
||||||
|
|
|
@ -259,26 +259,22 @@ TAOS_DEFINE_ERROR(TSDB_CODE_DND_DNODE_READ_FILE_ERROR, "Read dnode.json error
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_DNODE_WRITE_FILE_ERROR, "Write dnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_DNODE_WRITE_FILE_ERROR, "Write dnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED, "Mnode already deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_ALREADY_DEPLOYED, "Mnode already deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_NOT_DEPLOYED, "Mnode not deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_NOT_DEPLOYED, "Mnode not deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_ID_INVALID, "Mnode Id invalid")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_INVALID_OPTION, "Mnode option invalid")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_ID_NOT_FOUND, "Mnode Id not found")
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_READ_FILE_ERROR, "Read mnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_READ_FILE_ERROR, "Read mnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_WRITE_FILE_ERROR, "Write mnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MNODE_WRITE_FILE_ERROR, "Write mnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_ALREADY_DEPLOYED, "Qnode already deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_ALREADY_DEPLOYED, "Qnode already deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_NOT_DEPLOYED, "Qnode not deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_NOT_DEPLOYED, "Qnode not deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_ID_INVALID, "Qnode Id invalid")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_INVALID_OPTION, "Qnode option invalid")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_ID_NOT_FOUND, "Qnode Id not found")
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_READ_FILE_ERROR, "Read qnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_READ_FILE_ERROR, "Read qnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_WRITE_FILE_ERROR, "Write qnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_QNODE_WRITE_FILE_ERROR, "Write qnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_ALREADY_DEPLOYED, "Snode already deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_ALREADY_DEPLOYED, "Snode already deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_NOT_DEPLOYED, "Snode not deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_NOT_DEPLOYED, "Snode not deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_ID_INVALID, "Snode Id invalid")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_INVALID_OPTION, "Snode option invalid")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_ID_NOT_FOUND, "Snode Id not found")
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_READ_FILE_ERROR, "Read snode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_READ_FILE_ERROR, "Read snode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_WRITE_FILE_ERROR, "Write snode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_SNODE_WRITE_FILE_ERROR, "Write snode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_ALREADY_DEPLOYED, "Bnode already deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_ALREADY_DEPLOYED, "Bnode already deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_NOT_DEPLOYED, "Bnode not deployed")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_NOT_DEPLOYED, "Bnode not deployed")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_ID_INVALID, "Bnode Id invalid")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_INVALID_OPTION, "Bnode option invalid")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_ID_NOT_FOUND, "Bnode Id not found")
|
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_READ_FILE_ERROR, "Read bnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_READ_FILE_ERROR, "Read bnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_WRITE_FILE_ERROR, "Write bnode.json error")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_BNODE_WRITE_FILE_ERROR, "Write bnode.json error")
|
||||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_VNODE_TOO_MANY_VNODES, "Too many vnode directories")
|
TAOS_DEFINE_ERROR(TSDB_CODE_DND_VNODE_TOO_MANY_VNODES, "Too many vnode directories")
|
||||||
|
|
|
@ -62,13 +62,12 @@ print $data00 $data01 $data02
|
||||||
print $data10 $data11 $data22
|
print $data10 $data11 $data22
|
||||||
print $data20 $data11 $data22
|
print $data20 $data11 $data22
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
print =============== insert data
|
print =============== insert data
|
||||||
sql insert into c1 values(now+1s, 1)
|
sql insert into c1 values(now+1s, 1)
|
||||||
sql insert into c1 values(now+2s, 2)
|
sql insert into c1 values(now+2s, 2)
|
||||||
sql insert into c1 values(now+3s, 3)
|
sql insert into c1 values(now+3s, 3)
|
||||||
|
|
||||||
|
return
|
||||||
print =============== query data
|
print =============== query data
|
||||||
sql select * from c1
|
sql select * from c1
|
||||||
if $rows != 3 then
|
if $rows != 3 then
|
||||||
|
|
Loading…
Reference in New Issue