From 9362bfe5024d022ec2a72d1220555a137fbf6ddc Mon Sep 17 00:00:00 2001 From: slguan Date: Wed, 8 Jan 2020 18:01:06 +0800 Subject: [PATCH] TBASE-1398 #1073 --- src/system/detail/src/dnodeMgmt.c | 4 ++-- src/system/detail/src/mgmtMeter.c | 5 ++++- src/system/detail/src/vnodeMeter.c | 2 +- src/system/detail/src/vnodeStore.c | 21 ++++++++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/system/detail/src/dnodeMgmt.c b/src/system/detail/src/dnodeMgmt.c index a2496c6a42..69d4dc2c30 100644 --- a/src/system/detail/src/dnodeMgmt.c +++ b/src/system/detail/src/dnodeMgmt.c @@ -415,10 +415,10 @@ int vnodeProcessVPeerCfgRsp(char *msg, int msgLen, SMgmtObj *pMgmtObj) { int32_t *pint = (int32_t *)pRsp->more; int vnode = htonl(*pint); if (vnode < TSDB_MAX_VNODES && vnodeList[vnode].lastKey != 0) { - dError("vnode:%d not configured, it shall be empty"); + dError("vnode:%d not configured, it shall be empty, code:%d", vnode, pRsp->code); vnodeRemoveVnode(vnode); } else { - dTrace("vnode:%d is invalid", vnode); + dError("vnode:%d is invalid, code:%d", vnode, pRsp->code); } } diff --git a/src/system/detail/src/mgmtMeter.c b/src/system/detail/src/mgmtMeter.c index 70c482d40c..05ee0762be 100644 --- a/src/system/detail/src/mgmtMeter.c +++ b/src/system/detail/src/mgmtMeter.c @@ -657,7 +657,10 @@ int mgmtCreateMeter(SDbObj *pDb, SCreateTableMsg *pCreate) { return TSDB_CODE_NO_ENOUGH_DNODES; } - if (pDb->vgStatus < TSDB_VG_STATUS_FULL && pDb->vgStatus > TSDB_CODE_ACTION_IN_PROGRESS) { + if (pDb->vgStatus == TSDB_VG_STATUS_NO_DISK_PERMISSIONS || + pDb->vgStatus == TSDB_VG_STATUS_SERVER_NO_PACE || + pDb->vgStatus == TSDB_VG_STATUS_SERV_OUT_OF_MEMORY || + pDb->vgStatus == TSDB_VG_STATUS_INIT_FAILED ) { mgmtDestroyMeter(pMeter); mError("table:%s, vgroup init failed, reason:%d %s", pCreate->meterId, pDb->vgStatus, taosGetVgroupStatusStr(pDb->vgStatus)); return pDb->vgStatus; diff --git a/src/system/detail/src/vnodeMeter.c b/src/system/detail/src/vnodeMeter.c index a5b9db2d9c..a2da561434 100644 --- a/src/system/detail/src/vnodeMeter.c +++ b/src/system/detail/src/vnodeMeter.c @@ -79,7 +79,7 @@ int vnodeCreateMeterObjFile(int vnode) { sprintf(fileName, "%s/vnode%d/meterObj.v%d", tsDirectory, vnode, vnode); fp = fopen(fileName, "w+"); if (fp == NULL) { - dError("failed to create vnode:%d file:%s, reason:%s", vnode, fileName, strerror(errno)); + dError("failed to create vnode:%d file:%s, errno:%d, reason:%s", vnode, fileName, errno, strerror(errno)); if (errno == EACCES) { return TSDB_CODE_NO_DISK_PERMISSIONS; } else if (errno == ENOSPC) { diff --git a/src/system/detail/src/vnodeStore.c b/src/system/detail/src/vnodeStore.c index 8568163333..b0171fd073 100644 --- a/src/system/detail/src/vnodeStore.c +++ b/src/system/detail/src/vnodeStore.c @@ -186,10 +186,29 @@ int vnodeCreateVnode(int vnode, SVnodeCfg *pCfg, SVPeerDesc *pDesc) { vnodeList[vnode].vnodeStatus = TSDB_VN_STATUS_CREATING; sprintf(fileName, "%s/vnode%d", tsDirectory, vnode); - mkdir(fileName, 0755); + if (mkdir(fileName, 0755) != 0) { + dError("failed to create vnode:%d directory:%s, errno:%d, reason:%s", vnode, fileName, errno, strerror(errno)); + if (errno == EACCES) { + return TSDB_CODE_NO_DISK_PERMISSIONS; + } else if (errno == ENOSPC) { + return TSDB_CODE_SERVER_NO_SPACE; + } else { + return TSDB_CODE_VG_INIT_FAILED; + } + } sprintf(fileName, "%s/vnode%d/db", tsDirectory, vnode); mkdir(fileName, 0755); + if (mkdir(fileName, 0755) != 0) { + dError("failed to create vnode:%d directory:%s, errno:%d, reason:%s", vnode, fileName, errno, strerror(errno)); + if (errno == EACCES) { + return TSDB_CODE_NO_DISK_PERMISSIONS; + } else if (errno == ENOSPC) { + return TSDB_CODE_SERVER_NO_SPACE; + } else { + return TSDB_CODE_VG_INIT_FAILED; + } + } vnodeList[vnode].cfg = *pCfg; int code = vnodeCreateMeterObjFile(vnode);