提交 43083fa3 编写于 作者: S Shengliang Guan

shm

上级 b16e6868
...@@ -158,6 +158,9 @@ int32_t dndInitWorker(void *param, SDnodeWorker *pWorker, EWorkerType type, cons ...@@ -158,6 +158,9 @@ int32_t dndInitWorker(void *param, SDnodeWorker *pWorker, EWorkerType type, cons
void dndCleanupWorker(SDnodeWorker *pWorker); void dndCleanupWorker(SDnodeWorker *pWorker);
int32_t dndWriteMsgToWorker(SDnodeWorker *pWorker, void *pCont, int32_t contLen); int32_t dndWriteMsgToWorker(SDnodeWorker *pWorker, void *pCont, int32_t contLen);
int32_t dndProcessCreateNodeMsg(SDnode *pDnode, SNodeMsg *pMsg);
int32_t dndProcessDropNodeMsg(SDnode *pDnode, SNodeMsg *pMsg);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "bm.h" #include "bm.h"
#include "dm.h" #include "dm.h"
#include "dndInt.h"
#include "mm.h" #include "mm.h"
#include "qmInt.h" #include "qmInt.h"
#include "smInt.h" #include "smInt.h"
......
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dndInt.h"
static SMgmtWrapper *dndGetWrapperFromMsg(SDnode *pDnode, SNodeMsg *pMsg) {
SMgmtWrapper *pWrapper = NULL;
switch (pMsg->rpcMsg.msgType) {
case TDMT_DND_CREATE_MNODE:
return dndGetWrapper(pDnode, MNODE);
case TDMT_DND_CREATE_QNODE:
return dndGetWrapper(pDnode, QNODE);
case TDMT_DND_CREATE_SNODE:
return dndGetWrapper(pDnode, SNODE);
case TDMT_DND_CREATE_BNODE:
return dndGetWrapper(pDnode, BNODE);
default:
return NULL;
}
}
int32_t dndProcessCreateNodeMsg(SDnode *pDnode, SNodeMsg *pMsg) {
SMgmtWrapper *pWrapper = dndGetWrapperFromMsg(pDnode, pMsg);
if (pWrapper->procType == PROC_SINGLE) {
switch (pMsg->rpcMsg.msgType) {
case TDMT_DND_CREATE_MNODE:
return mmProcessCreateReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_CREATE_QNODE:
return qmProcessCreateReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_CREATE_SNODE:
return smProcessCreateReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_CREATE_BNODE:
return bmProcessCreateReq(pWrapper->pMgmt, pMsg);
default:
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
return -1;
}
} else {
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
return -1;
}
}
int32_t dndProcessDropNodeMsg(SDnode *pDnode, SNodeMsg *pMsg) {
SMgmtWrapper *pWrapper = dndGetWrapperFromMsg(pDnode, pMsg);
switch (pMsg->rpcMsg.msgType) {
case TDMT_DND_DROP_MNODE:
return mmProcessDropReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_DROP_QNODE:
return qmProcessDropReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_DROP_SNODE:
return smProcessDropReq(pWrapper->pMgmt, pMsg);
case TDMT_DND_DROP_BNODE:
return bmProcessDropReq(pWrapper->pMgmt, pMsg);
default:
terrno = TSDB_CODE_MSG_NOT_PROCESSED;
return -1;
}
}
\ No newline at end of file
...@@ -53,62 +53,27 @@ static void *dmThreadRoutine(void *param) { ...@@ -53,62 +53,27 @@ static void *dmThreadRoutine(void *param) {
} }
static void dmProcessQueue(SDnodeMgmt *pMgmt, SNodeMsg *pMsg) { static void dmProcessQueue(SDnodeMgmt *pMgmt, SNodeMsg *pMsg) {
int32_t code = -1; int32_t code = -1;
tmsg_t msgType = pMsg->rpcMsg.msgType; tmsg_t msgType = pMsg->rpcMsg.msgType;
SDnode *pDnode = pMgmt->pDnode; SDnode *pDnode = pMgmt->pDnode;
SMgmtWrapper *pWrapper = NULL;
dTrace("msg:%p, will be processed", pMsg); dTrace("msg:%p, will be processed", pMsg);
switch (msgType) { switch (msgType) {
case TDMT_DND_CREATE_MNODE: case TDMT_DND_CREATE_MNODE:
pWrapper = dndGetWrapper(pDnode, MNODE);
code = mmProcessCreateReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_DROP_MNODE:
pWrapper = dndGetWrapper(pDnode, MNODE);
code = mmProcessDropReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_CREATE_QNODE: case TDMT_DND_CREATE_QNODE:
pWrapper = dndGetWrapper(pDnode, QNODE);
code = qmProcessCreateReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_DROP_QNODE:
pWrapper = dndGetWrapper(pDnode, QNODE);
code = qmProcessDropReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_CREATE_SNODE: case TDMT_DND_CREATE_SNODE:
pWrapper = dndGetWrapper(pDnode, SNODE);
code = smProcessCreateReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_DROP_SNODE:
pWrapper = dndGetWrapper(pDnode, SNODE);
code = smProcessDropReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_CREATE_BNODE: case TDMT_DND_CREATE_BNODE:
pWrapper = dndGetWrapper(pDnode, BNODE); code = dndProcessCreateNodeMsg(pMgmt->pDnode, pMsg);
code = bmProcessCreateReq(pWrapper->pMgmt, pMsg);
break; case TDMT_DND_DROP_MNODE:
case TDMT_DND_DROP_QNODE:
case TDMT_DND_DROP_SNODE:
case TDMT_DND_DROP_BNODE: case TDMT_DND_DROP_BNODE:
pWrapper = dndGetWrapper(pDnode, BNODE); code = dndProcessDropNodeMsg(pMgmt->pDnode, pMsg);
code = bmProcessDropReq(pWrapper->pMgmt, pMsg);
break;
case TDMT_DND_CONFIG_DNODE:
code = dmProcessConfigReq(pMgmt, pMsg);
break;
case TDMT_MND_STATUS_RSP:
code = dmProcessStatusRsp(pMgmt, pMsg);
break;
case TDMT_MND_AUTH_RSP:
code = dmProcessAuthRsp(pMgmt, pMsg);
break;
case TDMT_MND_GRANT_RSP:
code = dmProcessGrantRsp(pMgmt, pMsg);
break;
default: default:
terrno = TSDB_CODE_MSG_NOT_PROCESSED; terrno = TSDB_CODE_MSG_NOT_PROCESSED;
code = -1; code = -1;
dError("RPC %p, dnode msg:%s not processed", pMsg->rpcMsg.handle, TMSG_INFO(msgType)); dError("RPC %p, dnode msg:%s not processed", pMsg->rpcMsg.handle, TMSG_INFO(msgType));
break;
} }
if (msgType & 1u) { if (msgType & 1u) {
...@@ -117,10 +82,9 @@ static void dmProcessQueue(SDnodeMgmt *pMgmt, SNodeMsg *pMsg) { ...@@ -117,10 +82,9 @@ static void dmProcessQueue(SDnodeMgmt *pMgmt, SNodeMsg *pMsg) {
rpcSendResponse(&rsp); rpcSendResponse(&rsp);
} }
dTrace("msg:%p, is freed", pMsg);
rpcFreeCont(pMsg->rpcMsg.pCont); rpcFreeCont(pMsg->rpcMsg.pCont);
pMsg->rpcMsg.pCont = NULL;
taosFreeQitem(pMsg); taosFreeQitem(pMsg);
dTrace("msg:%p, is freed", pMsg);
} }
int32_t dmStartWorker(SDnodeMgmt *pMgmt) { int32_t dmStartWorker(SDnodeMgmt *pMgmt) {
......
...@@ -28,7 +28,7 @@ class TestServer { ...@@ -28,7 +28,7 @@ class TestServer {
private: private:
SDnode* pDnode; SDnode* pDnode;
pthread_t* threadId; pthread_t threadId;
char path[PATH_MAX]; char path[PATH_MAX];
char fqdn[TSDB_FQDN_LEN]; char fqdn[TSDB_FQDN_LEN];
char firstEp[TSDB_EP_LEN]; char firstEp[TSDB_EP_LEN];
......
...@@ -16,10 +16,9 @@ ...@@ -16,10 +16,9 @@
#include "sut.h" #include "sut.h"
void* serverLoop(void* param) { void* serverLoop(void* param) {
while (1) { SDnode* pDnode = (SDnode*)param;
taosMsleep(100); dndRun(pDnode);
pthread_testcancel(); return NULL;
}
} }
SDnodeOpt TestServer::BuildOption(const char* path, const char* fqdn, uint16_t port, const char* firstEp) { SDnodeOpt TestServer::BuildOption(const char* path, const char* fqdn, uint16_t port, const char* firstEp) {
...@@ -38,14 +37,16 @@ bool TestServer::DoStart() { ...@@ -38,14 +37,16 @@ bool TestServer::DoStart() {
taosMkDir(path); taosMkDir(path);
pDnode = dndCreate(&option); pDnode = dndCreate(&option);
if (pDnode != NULL) { if (pDnode == NULL) {
return false; return false;
} }
threadId = taosCreateThread(serverLoop, NULL); pthread_attr_t thAttr;
if (threadId != NULL) { pthread_attr_init(&thAttr);
return false; pthread_attr_setdetachstate(&thAttr, PTHREAD_CREATE_JOINABLE);
} pthread_create(&threadId, &thAttr, serverLoop, pDnode);
pthread_attr_destroy(&thAttr);
taosMsleep(1000);
return true; return true;
} }
...@@ -67,10 +68,8 @@ bool TestServer::Start(const char* path, const char* fqdn, uint16_t port, const ...@@ -67,10 +68,8 @@ bool TestServer::Start(const char* path, const char* fqdn, uint16_t port, const
} }
void TestServer::Stop() { void TestServer::Stop() {
if (threadId != NULL) { dndHandleEvent(pDnode, DND_EVENT_STOP);
taosDestoryThread(threadId); pthread_join(threadId, NULL);
threadId = NULL;
}
if (pDnode != NULL) { if (pDnode != NULL) {
dndClose(pDnode); dndClose(pDnode);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册