From 115d67e0926d7bb6d89cf2cea9f84c0ed5672473 Mon Sep 17 00:00:00 2001 From: slguan Date: Mon, 6 Jan 2020 18:28:06 +0800 Subject: [PATCH] TBASE-1442 #1025 --- src/inc/taoserror.h | 2 +- src/inc/tstatus.h | 14 +++++++++----- src/rpc/src/tstring.c | 4 ++-- src/system/detail/src/mgmtDnodeInt.c | 12 ++++-------- src/system/detail/src/mgmtMeter.c | 12 +++--------- src/system/detail/src/vnodeFile.c | 2 +- src/system/detail/src/vnodeMeter.c | 14 ++++++++++---- src/system/detail/src/vnodeStore.c | 28 ++++++++++++++++------------ src/util/src/tstatus.c | 12 +++++++----- 9 files changed, 53 insertions(+), 47 deletions(-) diff --git a/src/inc/taoserror.h b/src/inc/taoserror.h index 5510212dbc..78aeaad475 100644 --- a/src/inc/taoserror.h +++ b/src/inc/taoserror.h @@ -91,7 +91,7 @@ extern "C" { #define TSDB_CODE_INVALID_QHANDLE 70 #define TSDB_CODE_RELATED_TABLES_EXIST 71 #define TSDB_CODE_MONITOR_DB_FORBEIDDEN 72 -#define TSDB_CODE_VG_COMMITLOG_INIT_FAILED 73 +#define TSDB_CODE_NO_DISK_PERMISSIONS 73 #define TSDB_CODE_VG_INIT_FAILED 74 #define TSDB_CODE_DATA_ALREADY_IMPORTED 75 #define TSDB_CODE_OPS_NOT_SUPPORT 76 diff --git a/src/inc/tstatus.h b/src/inc/tstatus.h index 53b5cb9547..58b98c59f8 100644 --- a/src/inc/tstatus.h +++ b/src/inc/tstatus.h @@ -16,16 +16,20 @@ #ifndef TDENGINE_TSTATUS_H #define TDENGINE_TSTATUS_H +#include "taoserror.h" + #ifdef __cplusplus extern "C" { #endif enum _TSDB_VG_STATUS { - TSDB_VG_STATUS_READY, - TSDB_VG_STATUS_IN_PROGRESS, - TSDB_VG_STATUS_COMMITLOG_INIT_FAILED, - TSDB_VG_STATUS_INIT_FAILED, - TSDB_VG_STATUS_FULL + TSDB_VG_STATUS_READY = TSDB_CODE_SUCCESS, + TSDB_VG_STATUS_IN_PROGRESS = TSDB_CODE_ACTION_IN_PROGRESS, + TSDB_VG_STATUS_NO_DISK_PERMISSIONS = TSDB_CODE_NO_DISK_PERMISSIONS, + TSDB_VG_STATUS_SERVER_NO_PACE = TSDB_CODE_SERVER_NO_SPACE, + TSDB_VG_STATUS_SERV_OUT_OF_MEMORY = TSDB_CODE_SERV_OUT_OF_MEMORY, + TSDB_VG_STATUS_INIT_FAILED = TSDB_CODE_VG_INIT_FAILED, + TSDB_VG_STATUS_FULL = TSDB_CODE_NO_ENOUGH_DNODES, }; enum _TSDB_DB_STATUS { diff --git a/src/rpc/src/tstring.c b/src/rpc/src/tstring.c index e3daca130a..cf40fb5058 100644 --- a/src/rpc/src/tstring.c +++ b/src/rpc/src/tstring.c @@ -197,7 +197,7 @@ char *tsError[] = {"success", "invalid query handle", // 70 "tables related to metric exist", "can't drop monitor database or tables", - "commit log init failed", + "no disk permissions", "vgroup init failed", "data is already imported", // 75 "not supported operation", @@ -234,7 +234,7 @@ char *tsError[] = {"success", "timestamp disordered in cache block", "timestamp disordered in file block", "invalid commit log", - "server no disk space", //110 + "no disk space on server", //110 "only super table has metric meta info", "tags value not unique for join", "invalid submit message", diff --git a/src/system/detail/src/mgmtDnodeInt.c b/src/system/detail/src/mgmtDnodeInt.c index 6b6571b06c..380cd2aff4 100644 --- a/src/system/detail/src/mgmtDnodeInt.c +++ b/src/system/detail/src/mgmtDnodeInt.c @@ -152,19 +152,15 @@ int mgmtProcessVPeersRsp(char *msg, int msgLen, SDnodeObj *pObj) { return 0; } - if (pRsp->code == 0) { + if (pRsp->code == TSDB_CODE_SUCCESS) { pDb->vgStatus = TSDB_VG_STATUS_READY; mTrace("dnode:%s, db:%s vgroup is created in dnode", taosIpStr(pObj->privateIp), pRsp->more); return 0; } - if (pRsp->code == TSDB_CODE_VG_COMMITLOG_INIT_FAILED) { - pDb->vgStatus = TSDB_VG_STATUS_COMMITLOG_INIT_FAILED; - mError("dnode:%s, db:%s vgroup commit log init failed, code:%d", taosIpStr(pObj->privateIp), pRsp->more, pRsp->code); - } else { - pDb->vgStatus = TSDB_VG_STATUS_INIT_FAILED; - mError("dnode:%s, db:%s vgroup init failed, code:%d", taosIpStr(pObj->privateIp), pRsp->more, pRsp->code); - } + pDb->vgStatus = pRsp->code; + mError("dnode:%s, db:%s vgroup init failed, code:%d %s", + taosIpStr(pObj->privateIp), pRsp->more, pRsp->code, taosGetVgroupStatusStr(pDb->vgStatus)); return 0; } diff --git a/src/system/detail/src/mgmtMeter.c b/src/system/detail/src/mgmtMeter.c index 7a2cdabea5..70c482d40c 100644 --- a/src/system/detail/src/mgmtMeter.c +++ b/src/system/detail/src/mgmtMeter.c @@ -657,16 +657,10 @@ int mgmtCreateMeter(SDbObj *pDb, SCreateTableMsg *pCreate) { return TSDB_CODE_NO_ENOUGH_DNODES; } - if (pDb->vgStatus == TSDB_VG_STATUS_COMMITLOG_INIT_FAILED) { + if (pDb->vgStatus < TSDB_VG_STATUS_FULL && pDb->vgStatus > TSDB_CODE_ACTION_IN_PROGRESS) { mgmtDestroyMeter(pMeter); - mError("table:%s, commit log init failed", pCreate->meterId); - return TSDB_CODE_VG_COMMITLOG_INIT_FAILED; - } - - if (pDb->vgStatus == TSDB_VG_STATUS_INIT_FAILED) { - mgmtDestroyMeter(pMeter); - mError("table:%s, vgroup init failed", pCreate->meterId); - return TSDB_CODE_VG_INIT_FAILED; + mError("table:%s, vgroup init failed, reason:%d %s", pCreate->meterId, pDb->vgStatus, taosGetVgroupStatusStr(pDb->vgStatus)); + return pDb->vgStatus; } if (pVgroup == NULL) { diff --git a/src/system/detail/src/vnodeFile.c b/src/system/detail/src/vnodeFile.c index 677a8d8a1e..860b7624da 100644 --- a/src/system/detail/src/vnodeFile.c +++ b/src/system/detail/src/vnodeFile.c @@ -1823,7 +1823,7 @@ int vnodeUpdateFileMagic(int vnode, int fileId) { } int vnodeInitFile(int vnode) { - int code = 0; + int code = TSDB_CODE_SUCCESS; SVnodeObj *pVnode = vnodeList + vnode; pVnode->maxFiles = pVnode->cfg.daysToKeep / pVnode->cfg.daysPerFile + 1; diff --git a/src/system/detail/src/vnodeMeter.c b/src/system/detail/src/vnodeMeter.c index 77bafd50d4..a5b9db2d9c 100644 --- a/src/system/detail/src/vnodeMeter.c +++ b/src/system/detail/src/vnodeMeter.c @@ -79,8 +79,14 @@ 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", vnode, fileName); - return -1; + dError("failed to create vnode:%d file:%s, reason:%s", vnode, fileName, 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; + } } else { vnodeCreateFileHeader(fp); vnodeUpdateVnodeFileHeader(fp, vnodeList + vnode); @@ -95,7 +101,7 @@ int vnodeCreateMeterObjFile(int vnode) { fclose(fp); } - return 0; + return TSDB_CODE_SUCCESS; } FILE *vnodeOpenMeterObjFile(int vnode) { @@ -273,7 +279,7 @@ int vnodeSaveVnodeCfg(int vnode, SVnodeCfg *pCfg, SVPeerDesc *pDesc) { /* vnodeUpdateFileCheckSum(fp); */ fclose(fp); - return 0; + return TSDB_CODE_SUCCESS; } int vnodeSaveVnodeInfo(int vnode) { diff --git a/src/system/detail/src/vnodeStore.c b/src/system/detail/src/vnodeStore.c index f2617f09b6..8568163333 100644 --- a/src/system/detail/src/vnodeStore.c +++ b/src/system/detail/src/vnodeStore.c @@ -45,24 +45,24 @@ static int vnodeInitStoreVnode(int vnode) { pVnode->pCachePool = vnodeOpenCachePool(vnode); if (pVnode->pCachePool == NULL) { dError("vid:%d, cache pool init failed.", pVnode->vnode); - return -1; + return TSDB_CODE_SERV_OUT_OF_MEMORY; } - if (vnodeInitFile(vnode) < 0) { + if (vnodeInitFile(vnode) != TSDB_CODE_SUCCESS) { dError("vid:%d, files init failed.", pVnode->vnode); - return -1; + return TSDB_CODE_VG_INIT_FAILED; } - if (vnodeInitCommit(vnode) < 0) { + if (vnodeInitCommit(vnode) != TSDB_CODE_SUCCESS) { dError("vid:%d, commit init failed.", pVnode->vnode); - return -1; + return TSDB_CODE_VG_INIT_FAILED; } pthread_mutex_init(&(pVnode->vmutex), NULL); dPrint("vid:%d, storage initialized, version:%ld fileId:%d numOfFiles:%d", vnode, pVnode->version, pVnode->fileId, pVnode->numOfFiles); - return 0; + return TSDB_CODE_SUCCESS; } int vnodeOpenVnode(int vnode) { @@ -192,16 +192,19 @@ int vnodeCreateVnode(int vnode, SVnodeCfg *pCfg, SVPeerDesc *pDesc) { mkdir(fileName, 0755); vnodeList[vnode].cfg = *pCfg; - if (vnodeCreateMeterObjFile(vnode) != 0) { - return TSDB_CODE_VG_INIT_FAILED; + int code = vnodeCreateMeterObjFile(vnode); + if (code != TSDB_CODE_SUCCESS) { + return code; } - if (vnodeSaveVnodeCfg(vnode, pCfg, pDesc) != 0) { + code = vnodeSaveVnodeCfg(vnode, pCfg, pDesc); + if (code != TSDB_CODE_SUCCESS) { return TSDB_CODE_VG_INIT_FAILED; } - if (vnodeInitStoreVnode(vnode) < 0) { - return TSDB_CODE_VG_COMMITLOG_INIT_FAILED; + code = vnodeInitStoreVnode(vnode); + if (code != TSDB_CODE_SUCCESS) { + return code; } return vnodeOpenVnode(vnode); @@ -294,7 +297,8 @@ int vnodeInitStore() { if (vnodeInitInfo() < 0) return -1; for (vnode = 0; vnode < TSDB_MAX_VNODES; ++vnode) { - if (vnodeInitStoreVnode(vnode) < 0) { + int code = vnodeInitStoreVnode(vnode); + if (code != TSDB_CODE_SUCCESS) { // one vnode is failed to recover from commit log, continue for remain return -1; } diff --git a/src/util/src/tstatus.c b/src/util/src/tstatus.c index 1ab007715d..21dbd8c67d 100644 --- a/src/util/src/tstatus.c +++ b/src/util/src/tstatus.c @@ -19,11 +19,13 @@ const char* taosGetVgroupStatusStr(int vgroupStatus) { switch (vgroupStatus) { - case TSDB_VG_STATUS_READY: return "ready"; - case TSDB_VG_STATUS_IN_PROGRESS: return "inprogress"; - case TSDB_VG_STATUS_COMMITLOG_INIT_FAILED: return "commitlog_init_failed"; - case TSDB_VG_STATUS_INIT_FAILED: return "init_failed"; - case TSDB_VG_STATUS_FULL: return "full"; + case TSDB_VG_STATUS_READY: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_IN_PROGRESS: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_NO_DISK_PERMISSIONS: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_SERVER_NO_PACE: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_SERV_OUT_OF_MEMORY: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_INIT_FAILED: return tsError[vgroupStatus]; + case TSDB_VG_STATUS_FULL: return tsError[vgroupStatus]; default: return "undefined"; } } -- GitLab