提交 6b14aeb2 编写于 作者: J Jeff Tao

allocate vnodeObj in standard way, not through hash function

上级 d4254489
...@@ -40,7 +40,7 @@ static void vnodeInit() { ...@@ -40,7 +40,7 @@ static void vnodeInit() {
vnodeInitWriteFp(); vnodeInitWriteFp();
tsDnodeVnodesHash = taosInitIntHash(TSDB_MAX_VNODES, sizeof(SVnodeObj), taosHashInt); tsDnodeVnodesHash = taosInitIntHash(TSDB_MAX_VNODES, sizeof(SVnodeObj *), taosHashInt);
if (tsDnodeVnodesHash == NULL) { if (tsDnodeVnodesHash == NULL) {
dError("failed to init vnode list"); dError("failed to init vnode list");
} }
...@@ -113,12 +113,12 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) { ...@@ -113,12 +113,12 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
char temp[TSDB_FILENAME_LEN]; char temp[TSDB_FILENAME_LEN];
pthread_once(&vnodeModuleInit, vnodeInit); pthread_once(&vnodeModuleInit, vnodeInit);
SVnodeObj vnodeObj = {0}; SVnodeObj *pVnode = calloc(sizeof(SVnodeObj), 1);
vnodeObj.vgId = vnode; pVnode->vgId = vnode;
vnodeObj.status = VN_STATUS_INIT; pVnode->status = VN_STATUS_INIT;
vnodeObj.refCount = 1; pVnode->refCount = 1;
vnodeObj.version = 0; pVnode->version = 0;
SVnodeObj *pVnode = (SVnodeObj *)taosAddIntHash(tsDnodeVnodesHash, vnodeObj.vgId, (char *)(&vnodeObj)); taosAddIntHash(tsDnodeVnodesHash, pVnode->vgId, (char *)(&pVnode));
sprintf(temp, "%s/tsdb", rootDir); sprintf(temp, "%s/tsdb", rootDir);
void *pTsdb = tsdbOpenRepo(temp); void *pTsdb = tsdbOpenRepo(temp);
...@@ -149,7 +149,7 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) { ...@@ -149,7 +149,7 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
int32_t vnodeClose(int32_t vgId) { int32_t vnodeClose(int32_t vgId) {
SVnodeObj *pVnode = (SVnodeObj *) taosGetIntHashData(tsDnodeVnodesHash, vgId); SVnodeObj *pVnode = *(SVnodeObj **)taosGetIntHashData(tsDnodeVnodesHash, vgId);
if (pVnode == NULL) return 0; if (pVnode == NULL) return 0;
dTrace("pVnode:%p vgId:%d, vnode will be closed", pVnode, pVnode->vgId); dTrace("pVnode:%p vgId:%d, vnode will be closed", pVnode, pVnode->vgId);
...@@ -182,7 +182,7 @@ void vnodeRelease(void *pVnodeRaw) { ...@@ -182,7 +182,7 @@ void vnodeRelease(void *pVnodeRaw) {
} }
dTrace("pVnode:%p vgId:%d, vnode is released", pVnode, pVnode->vgId); dTrace("pVnode:%p vgId:%d, vnode is released", pVnode, pVnode->vgId);
taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId); free(pVnode);
tsOpennedVnodes--; tsOpennedVnodes--;
if (tsOpennedVnodes <= 0) { if (tsOpennedVnodes <= 0) {
...@@ -193,17 +193,12 @@ void vnodeRelease(void *pVnodeRaw) { ...@@ -193,17 +193,12 @@ void vnodeRelease(void *pVnodeRaw) {
} }
void *vnodeGetVnode(int32_t vgId) { void *vnodeGetVnode(int32_t vgId) {
SVnodeObj *pVnode = (SVnodeObj *) taosGetIntHashData(tsDnodeVnodesHash, vgId); SVnodeObj *pVnode = *(SVnodeObj **) taosGetIntHashData(tsDnodeVnodesHash, vgId);
if (pVnode == NULL) { if (pVnode == NULL) {
terrno = TSDB_CODE_INVALID_VGROUP_ID; terrno = TSDB_CODE_INVALID_VGROUP_ID;
return NULL; return NULL;
} }
if (pVnode->status == VN_STATUS_CLOSING || pVnode->status == VN_STATUS_DELETING) {
terrno = TSDB_CODE_INVALID_VGROUP_ID;
return NULL;
}
atomic_add_fetch_32(&pVnode->refCount, 1); atomic_add_fetch_32(&pVnode->refCount, 1);
dTrace("pVnode:%p vgId:%d, get vnode, refCount:%d", pVnode, pVnode->vgId, pVnode->refCount); dTrace("pVnode:%p vgId:%d, get vnode, refCount:%d", pVnode, pVnode->vgId, pVnode->refCount);
...@@ -234,7 +229,7 @@ void vnodeBuildStatusMsg(void *param) { ...@@ -234,7 +229,7 @@ void vnodeBuildStatusMsg(void *param) {
} }
static void vnodeBuildVloadMsg(char *pNode, void * param) { static void vnodeBuildVloadMsg(char *pNode, void * param) {
SVnodeObj *pVnode = (SVnodeObj *) pNode; SVnodeObj *pVnode = *(SVnodeObj **) pNode;
if (pVnode->status == VN_STATUS_DELETING) return; if (pVnode->status == VN_STATUS_DELETING) return;
SDMStatusMsg *pStatus = param; SDMStatusMsg *pStatus = param;
...@@ -248,6 +243,8 @@ static void vnodeBuildVloadMsg(char *pNode, void * param) { ...@@ -248,6 +243,8 @@ static void vnodeBuildVloadMsg(char *pNode, void * param) {
static void vnodeCleanUp(SVnodeObj *pVnode) { static void vnodeCleanUp(SVnodeObj *pVnode) {
taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId);
//syncStop(pVnode->sync); //syncStop(pVnode->sync);
tsdbCloseRepo(pVnode->tsdb); tsdbCloseRepo(pVnode->tsdb);
walClose(pVnode->wal); walClose(pVnode->wal);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册