add message queue for vnode
This commit is contained in:
parent
530ffb6cbc
commit
f1f666e780
|
@ -66,15 +66,26 @@ typedef struct SVnodeCfg {
|
||||||
SWalCfg walCfg;
|
SWalCfg walCfg;
|
||||||
} SVnodeCfg;
|
} SVnodeCfg;
|
||||||
|
|
||||||
|
typedef struct SDnode SDnode;
|
||||||
|
typedef void (*PutReqToVQueryQFp)(SDnode *pDnode, struct SRpcMsg *pReq);
|
||||||
|
typedef struct {
|
||||||
|
int32_t sver;
|
||||||
|
SDnode *pDnode;
|
||||||
|
char *timezone;
|
||||||
|
char *locale;
|
||||||
|
char *charset;
|
||||||
|
PutReqToVQueryQFp putReqToVQueryQFp;
|
||||||
|
uint16_t nthreads; // number of commit threads. 0 for no threads and a schedule queue should be given (TODO)
|
||||||
|
} SVnodeOpt;
|
||||||
|
|
||||||
/* ------------------------ SVnode ------------------------ */
|
/* ------------------------ SVnode ------------------------ */
|
||||||
/**
|
/**
|
||||||
* @brief Initialize the vnode module
|
* @brief Initialize the vnode module
|
||||||
*
|
*
|
||||||
* @param nthreads number of commit threads. 0 for no threads and
|
* @param pOption Option of the vnode mnodule
|
||||||
* a schedule queue should be given (TODO)
|
|
||||||
* @return int 0 for success and -1 for failure
|
* @return int 0 for success and -1 for failure
|
||||||
*/
|
*/
|
||||||
int vnodeInit(uint16_t nthreads);
|
int vnodeInit(const SVnodeOpt *pOption);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief clear a vnode
|
* @brief clear a vnode
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
#include "dndTransport.h"
|
#include "dndTransport.h"
|
||||||
#include "dndVnodes.h"
|
#include "dndVnodes.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
#include "wal.h"
|
|
||||||
#include "tfs.h"
|
#include "tfs.h"
|
||||||
|
#include "wal.h"
|
||||||
|
|
||||||
EStat dndGetStat(SDnode *pDnode) { return pDnode->stat; }
|
EStat dndGetStat(SDnode *pDnode) { return pDnode->stat; }
|
||||||
|
|
||||||
|
@ -153,6 +153,8 @@ static void dndCleanupEnv(SDnode *pDnode) {
|
||||||
taosStopCacheRefreshWorker();
|
taosStopCacheRefreshWorker();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dndPutMsgToVQueryQ(SDnode *pDnode, SRpcMsg *pRpcMsg) { dndProcessVnodeQueryMsg(pDnode, pRpcMsg, NULL); }
|
||||||
|
|
||||||
SDnode *dndInit(SDnodeOpt *pOption) {
|
SDnode *dndInit(SDnodeOpt *pOption) {
|
||||||
taosIgnSIGPIPE();
|
taosIgnSIGPIPE();
|
||||||
taosBlockSIGPIPE();
|
taosBlockSIGPIPE();
|
||||||
|
@ -196,7 +198,16 @@ SDnode *dndInit(SDnodeOpt *pOption) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vnodeInit(pDnode->opt.numOfCommitThreads) != 0) {
|
SVnodeOpt vnodeOpt = {
|
||||||
|
.sver = pDnode->opt.sver,
|
||||||
|
.pDnode = pDnode,
|
||||||
|
.timezone = pDnode->opt.timezone,
|
||||||
|
.locale = pDnode->opt.locale,
|
||||||
|
.charset = pDnode->opt.charset,
|
||||||
|
.putReqToVQueryQFp = dndPutMsgToVQueryQ,
|
||||||
|
.nthreads = pDnode->opt.numOfCommitThreads,
|
||||||
|
};
|
||||||
|
if (vnodeInit(&vnodeOpt) != 0) {
|
||||||
dError("failed to init vnode env");
|
dError("failed to init vnode env");
|
||||||
dndCleanup(pDnode);
|
dndCleanup(pDnode);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -57,6 +57,8 @@ typedef struct SVnodeMgr {
|
||||||
pthread_cond_t hasTask;
|
pthread_cond_t hasTask;
|
||||||
TD_DLIST(SVnodeTask) queue;
|
TD_DLIST(SVnodeTask) queue;
|
||||||
// For vnode Mgmt
|
// For vnode Mgmt
|
||||||
|
SDnode* pDnode;
|
||||||
|
PutReqToVQueryQFp putReqToVQueryQFp;
|
||||||
} SVnodeMgr;
|
} SVnodeMgr;
|
||||||
|
|
||||||
extern SVnodeMgr vnodeMgr;
|
extern SVnodeMgr vnodeMgr;
|
||||||
|
@ -79,6 +81,8 @@ struct SVnode {
|
||||||
|
|
||||||
int vnodeScheduleTask(SVnodeTask* task);
|
int vnodeScheduleTask(SVnodeTask* task);
|
||||||
|
|
||||||
|
void vnodePutReqToVQueryQ(struct SRpcMsg *pReq);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,17 +19,19 @@ SVnodeMgr vnodeMgr = {.vnodeInitFlag = TD_MOD_UNINITIALIZED};
|
||||||
|
|
||||||
static void* loop(void* arg);
|
static void* loop(void* arg);
|
||||||
|
|
||||||
int vnodeInit(uint16_t nthreads) {
|
int vnodeInit(const SVnodeOpt *pOption) {
|
||||||
if (TD_CHECK_AND_SET_MODE_INIT(&(vnodeMgr.vnodeInitFlag)) == TD_MOD_INITIALIZED) {
|
if (TD_CHECK_AND_SET_MODE_INIT(&(vnodeMgr.vnodeInitFlag)) == TD_MOD_INITIALIZED) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vnodeMgr.stop = false;
|
vnodeMgr.stop = false;
|
||||||
|
vnodeMgr.putReqToVQueryQFp = pOption->putReqToVQueryQFp;
|
||||||
|
vnodeMgr.pDnode = pOption->pDnode;
|
||||||
|
|
||||||
// Start commit handers
|
// Start commit handers
|
||||||
if (nthreads > 0) {
|
if (pOption->nthreads > 0) {
|
||||||
vnodeMgr.nthreads = nthreads;
|
vnodeMgr.nthreads = pOption->nthreads;
|
||||||
vnodeMgr.threads = (pthread_t*)calloc(nthreads, sizeof(pthread_t));
|
vnodeMgr.threads = (pthread_t*)calloc(pOption->nthreads, sizeof(pthread_t));
|
||||||
if (vnodeMgr.threads == NULL) {
|
if (vnodeMgr.threads == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -38,7 +40,7 @@ int vnodeInit(uint16_t nthreads) {
|
||||||
pthread_cond_init(&(vnodeMgr.hasTask), NULL);
|
pthread_cond_init(&(vnodeMgr.hasTask), NULL);
|
||||||
TD_DLIST_INIT(&(vnodeMgr.queue));
|
TD_DLIST_INIT(&(vnodeMgr.queue));
|
||||||
|
|
||||||
for (uint16_t i = 0; i < nthreads; i++) {
|
for (uint16_t i = 0; i < pOption->nthreads; i++) {
|
||||||
pthread_create(&(vnodeMgr.threads[i]), NULL, loop, NULL);
|
pthread_create(&(vnodeMgr.threads[i]), NULL, loop, NULL);
|
||||||
pthread_setname_np(vnodeMgr.threads[i], "VND Commit Thread");
|
pthread_setname_np(vnodeMgr.threads[i], "VND Commit Thread");
|
||||||
}
|
}
|
||||||
|
@ -89,6 +91,12 @@ int vnodeScheduleTask(SVnodeTask* pTask) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vnodePutReqToVQueryQ(struct SRpcMsg* pReq) {
|
||||||
|
if (vnodeMgr.putReqToVQueryQFp) {
|
||||||
|
(*vnodeMgr.putReqToVQueryQFp)(vnodeMgr.pDnode, pReq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------ STATIC METHODS ------------------------ */
|
/* ------------------------ STATIC METHODS ------------------------ */
|
||||||
static void* loop(void* arg) {
|
static void* loop(void* arg) {
|
||||||
SVnodeTask* pTask;
|
SVnodeTask* pTask;
|
||||||
|
|
Loading…
Reference in New Issue