From 1547b7ba8819c651709f7f589f70ae28ebf1671e Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 17 Jul 2024 17:57:14 +0800 Subject: [PATCH 01/16] enh: return with code --- include/util/tutil.h | 12 ++++ source/dnode/mnode/impl/inc/mndUser.h | 8 +-- source/dnode/mnode/impl/src/mndDb.c | 11 ++-- source/dnode/mnode/impl/src/mndProfile.c | 4 +- source/dnode/mnode/impl/src/mndStb.c | 3 +- source/dnode/mnode/impl/src/mndUser.c | 83 ++++++++++++------------ 6 files changed, 65 insertions(+), 56 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index 31ce34f667..0a4c6fd73c 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -172,6 +172,18 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, } \ } while (0) +#define TAOS_CHECK_EXEC_GOTO(CMD, LINO, EXEC, LABEL) \ + do { \ + code = (CMD); \ + if (code != TSDB_CODE_SUCCESS) { \ + if (LINO) { \ + *((int32_t *)(LINO)) = __LINE__; \ + } \ + (EXEC); \ + goto LABEL; \ + } \ + } while (0) + #ifdef __cplusplus } #endif diff --git a/source/dnode/mnode/impl/inc/mndUser.h b/source/dnode/mnode/impl/inc/mndUser.h index eda39dd29f..a443673a35 100644 --- a/source/dnode/mnode/impl/inc/mndUser.h +++ b/source/dnode/mnode/impl/inc/mndUser.h @@ -29,14 +29,14 @@ enum { }; int32_t mndInitUser(SMnode *pMnode); void mndCleanupUser(SMnode *pMnode); -SUserObj *mndAcquireUser(SMnode *pMnode, const char *userName); +int32_t mndAcquireUser(SMnode *pMnode, const char *userName, SUserObj **ppUser); void mndReleaseUser(SMnode *pMnode, SUserObj *pUser); // for trans test SSdbRaw *mndUserActionEncode(SUserObj *pUser); -SHashObj *mndDupDbHash(SHashObj *pOld); -SHashObj *mndDupTableHash(SHashObj *pOld); -SHashObj *mndDupTopicHash(SHashObj *pOld); +int32_t mndDupDbHash(SHashObj *pOld, SHashObj **ppNew); +int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew); +int32_t mndDupTopicHash(SHashObj *pOld, SHashObj **ppNew); int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_t numOfUses, void **ppRsp, int32_t *pRspLen, int64_t ipWhiteListVer); int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db); diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 8432855c6f..10adf6546c 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -871,6 +871,7 @@ _exit: static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; int32_t code = -1; + int32_t lino = 0; SDbObj *pDb = NULL; SUserObj *pUser = NULL; SCreateDbReq createReq = {0}; @@ -931,10 +932,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { goto _OVER; } - pUser = mndAcquireUser(pMnode, pReq->info.conn.user); - if (pUser == NULL) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndAcquireUser(pMnode, pReq->info.conn.user, &pUser), &lino, _OVER); code = mndCreateDb(pMnode, pReq, &createReq, pUser); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; @@ -946,7 +944,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { _OVER: if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("db:%s, failed to create since %s", createReq.db, terrstr()); + mError("db:%s, failed to create at line %d since %s", createReq.db, lino, terrstr()); } mndReleaseDb(pMnode, pDb); @@ -2397,9 +2395,10 @@ static int32_t mndRetrieveDbs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBloc SSdb *pSdb = pMnode->pSdb; int32_t numOfRows = 0; SDbObj *pDb = NULL; + SUserObj *pUser = NULL; ESdbStatus objStatus = 0; - SUserObj *pUser = mndAcquireUser(pMnode, pReq->info.conn.user); + (void)mndAcquireUser(pMnode, pReq->info.conn.user, &pUser); if (pUser == NULL) return 0; bool sysinfo = pUser->sysInfo; diff --git a/source/dnode/mnode/impl/src/mndProfile.c b/source/dnode/mnode/impl/src/mndProfile.c index 4224d79391..3376ecf130 100644 --- a/source/dnode/mnode/impl/src/mndProfile.c +++ b/source/dnode/mnode/impl/src/mndProfile.c @@ -251,9 +251,9 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) { goto _OVER; } - pUser = mndAcquireUser(pMnode, pReq->info.conn.user); + code = mndAcquireUser(pMnode, pReq->info.conn.user, &pUser); if (pUser == NULL) { - mGError("user:%s, failed to login from %s while acquire user since %s", pReq->info.conn.user, ip, terrstr()); + mGError("user:%s, failed to login from %s while acquire user since %s", pReq->info.conn.user, ip, tstrerror(code)); goto _OVER; } diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 73542bbb1e..3fac879ca9 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -2851,8 +2851,9 @@ static int32_t mndProcessTableMetaReq(SRpcMsg *pReq) { int32_t code = -1; STableInfoReq infoReq = {0}; STableMetaRsp metaRsp = {0}; + SUserObj *pUser = NULL; - SUserObj *pUser = mndAcquireUser(pMnode, pReq->info.conn.user); + code = mndAcquireUser(pMnode, pReq->info.conn.user, &pUser); if (pUser == NULL) return 0; bool sysinfo = pUser->sysInfo; diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index fd5267e471..333761fc00 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -1305,12 +1305,13 @@ static int32_t mndUserActionInsert(SSdb *pSdb, SUserObj *pUser) { return 0; } -SHashObj *mndDupTableHash(SHashObj *pOld) { - SHashObj *pNew = +int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew) { + *ppNew = taosHashInit(taosHashGetSize(pOld), taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); - if (pNew == NULL) { + if (*ppNew == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; + TAOS_CHECK_RETURN(NULL); } char *tb = taosHashIterate(pOld, NULL); @@ -1443,17 +1444,18 @@ static int32_t mndUserActionUpdate(SSdb *pSdb, SUserObj *pOld, SUserObj *pNew) { return 0; } -SUserObj *mndAcquireUser(SMnode *pMnode, const char *userName) { +int32_t mndAcquireUser(SMnode *pMnode, const char *userName, SUserObj **ppUser) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; SUserObj *pUser = sdbAcquire(pSdb, SDB_USER, userName); if (pUser == NULL) { - if (terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) { - terrno = TSDB_CODE_MND_USER_NOT_EXIST; + if (code == TSDB_CODE_SDB_OBJ_NOT_THERE) { + code = TSDB_CODE_MND_USER_NOT_EXIST; } else { - terrno = TSDB_CODE_MND_USER_NOT_AVAILABLE; + code = TSDB_CODE_MND_USER_NOT_AVAILABLE; } } - return pUser; + TAOS_RETURN(code); } void mndReleaseUser(SMnode *pMnode, SUserObj *pUser) { @@ -1552,21 +1554,21 @@ _OVER: static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; - int32_t code = -1; + int32_t code = 0; + int32_t lino = 0; SUserObj *pUser = NULL; SUserObj *pOperUser = NULL; SCreateUserReq createReq = {0}; if (tDeserializeSCreateUserReq(pReq->pCont, pReq->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_MSG, &lino, _OVER); } mInfo("user:%s, start to create, createdb:%d, is_import:%d", createReq.user, createReq.isImport, createReq.createDb); #ifndef TD_ENTERPRISE if (createReq.isImport == 1) { - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OPS_NOT_SUPPORT, &lino, _OVER); // enterprise feature } #endif @@ -1599,15 +1601,15 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) { } } - pUser = mndAcquireUser(pMnode, createReq.user); + code = mndAcquireUser(pMnode, createReq.user, &pUser); if (pUser != NULL) { terrno = TSDB_CODE_MND_USER_ALREADY_EXIST; goto _OVER; } - pOperUser = mndAcquireUser(pMnode, pReq->info.conn.user); + code = mndAcquireUser(pMnode, pReq->info.conn.user, &pOperUser); if (pOperUser == NULL) { - terrno = TSDB_CODE_MND_NO_USER_FROM_CONN; + code = TSDB_CODE_MND_NO_USER_FROM_CONN; goto _OVER; } @@ -1615,6 +1617,7 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) { code = terrno; goto _OVER; } + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_USER), &lino, _OVER); code = mndCreateUser(pMnode, pOperUser->acct, &createReq, pReq); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; @@ -1640,7 +1643,7 @@ _OVER: mndReleaseUser(pMnode, pOperUser); tFreeSCreateUserReq(&createReq); - return code; + TAOS_RETURN(code); } int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq) { @@ -1681,7 +1684,7 @@ int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq) { _OVER: mndReleaseUser(pMnode, pUser); tFreeSGetUserWhiteListRsp(&wlRsp); - return code; + TAOS_RETURN(code); } int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq) { @@ -1736,32 +1739,34 @@ static int32_t mndAlterUser(SMnode *pMnode, SUserObj *pOld, SUserObj *pNew, SRpc return 0; } -SHashObj *mndDupObjHash(SHashObj *pOld, int32_t dataLen) { - SHashObj *pNew = +static int32_t mndDupObjHash(SHashObj *pOld, int32_t dataLen, SHashObj **ppNew) { + int32_t code = 0; + + *ppNew = taosHashInit(taosHashGetSize(pOld), taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); - if (pNew == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + if (*ppNew == NULL) { + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } char *db = taosHashIterate(pOld, NULL); while (db != NULL) { int32_t len = strlen(db) + 1; - if (taosHashPut(pNew, db, len, db, dataLen) != 0) { + if ((code = taosHashPut(*ppNew, db, len, db, dataLen)) != 0) { + if (terrno != 0) code = terrno; // TODO: remove this line after terrno is removed taosHashCancelIterate(pOld, db); - taosHashCleanup(pNew); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + taosHashCleanup(*ppNew); + TAOS_RETURN(code); } db = taosHashIterate(pOld, db); } - return pNew; + TAOS_RETURN(code); } -SHashObj *mndDupDbHash(SHashObj *pOld) { return mndDupObjHash(pOld, TSDB_DB_FNAME_LEN); } +int32_t mndDupDbHash(SHashObj *pOld, SHashObj **ppNew) { return mndDupObjHash(pOld, TSDB_DB_FNAME_LEN, ppNew); } -SHashObj *mndDupTopicHash(SHashObj *pOld) { return mndDupObjHash(pOld, TSDB_TOPIC_FNAME_LEN); } +int32_t mndDupTopicHash(SHashObj *pOld, SHashObj **ppNew) { return mndDupObjHash(pOld, TSDB_TOPIC_FNAME_LEN, ppNew); } static int32_t mndTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj *useDbHash, SAlterUserReq *alterReq, SSdb *pSdb) { @@ -2300,7 +2305,7 @@ _OVER: static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; - int32_t code = -1; + int32_t code = 0; SUserObj *pUser = NULL; SGetUserAuthReq authReq = {0}; SGetUserAuthRsp authRsp = {0}; @@ -2312,25 +2317,17 @@ static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { mTrace("user:%s, start to get auth", authReq.user); - pUser = mndAcquireUser(pMnode, authReq.user); - if (pUser == NULL) { - terrno = TSDB_CODE_MND_USER_NOT_EXIST; - goto _OVER; - } + TAOS_CHECK_GOTO(mndAcquireUser(pMnode, authReq.user, &pUser), NULL, _OVER); - code = mndSetUserAuthRsp(pMnode, pUser, &authRsp); - if (code) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndSetUserAuthRsp(pMnode, pUser, &authRsp), NULL, _OVER); int32_t contLen = tSerializeSGetUserAuthRsp(NULL, 0, &authRsp); void *pRsp = rpcMallocCont(contLen); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } - tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp); + TAOS_CHECK_GOTO(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp), NULL, _OVER); pReq->info.rsp = pRsp; pReq->info.rspLen = contLen; @@ -2341,7 +2338,7 @@ _OVER: mndReleaseUser(pMnode, pUser); tFreeSGetUserAuthRsp(&authRsp); - return code; + TAOS_RETURN(code); } static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { From b2c60945d7581c9b9a8cd689309ed90055bba0b9 Mon Sep 17 00:00:00 2001 From: kailixu Date: Fri, 19 Jul 2024 18:10:43 +0800 Subject: [PATCH 02/16] enh: return error code --- include/util/tutil.h | 12 -- source/dnode/mnode/impl/inc/mndUser.h | 28 ++--- source/dnode/mnode/impl/src/mndUser.c | 169 ++++++++++++++------------ source/libs/tfs/inc/tfsInt.h | 14 +-- source/libs/tfs/src/tfs.c | 46 +++---- source/libs/tfs/src/tfsDisk.c | 40 +++--- source/libs/tfs/src/tfsTier.c | 38 +++--- 7 files changed, 184 insertions(+), 163 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index b97d2ff39d..2aa28ac1df 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -172,18 +172,6 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, } \ } while (0) -#define TAOS_CHECK_EXEC_GOTO(CMD, LINO, EXEC, LABEL) \ - do { \ - code = (CMD); \ - if (code != TSDB_CODE_SUCCESS) { \ - if (LINO) { \ - *((int32_t *)(LINO)) = __LINE__; \ - } \ - (EXEC); \ - goto LABEL; \ - } \ - } while (0) - #define TAOS_UNUSED(expr) (void)(expr) #ifdef __cplusplus diff --git a/source/dnode/mnode/impl/inc/mndUser.h b/source/dnode/mnode/impl/inc/mndUser.h index a443673a35..5043f6da3d 100644 --- a/source/dnode/mnode/impl/inc/mndUser.h +++ b/source/dnode/mnode/impl/inc/mndUser.h @@ -27,22 +27,22 @@ enum { IP_WHITE_ADD, IP_WHITE_DROP, }; -int32_t mndInitUser(SMnode *pMnode); -void mndCleanupUser(SMnode *pMnode); -int32_t mndAcquireUser(SMnode *pMnode, const char *userName, SUserObj **ppUser); -void mndReleaseUser(SMnode *pMnode, SUserObj *pUser); +int32_t mndInitUser(SMnode *pMnode); +void mndCleanupUser(SMnode *pMnode); +int32_t mndAcquireUser(SMnode *pMnode, const char *userName, SUserObj **ppUser); +void mndReleaseUser(SMnode *pMnode, SUserObj *pUser); // for trans test -SSdbRaw *mndUserActionEncode(SUserObj *pUser); -int32_t mndDupDbHash(SHashObj *pOld, SHashObj **ppNew); -int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew); -int32_t mndDupTopicHash(SHashObj *pOld, SHashObj **ppNew); -int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_t numOfUses, void **ppRsp, - int32_t *pRspLen, int64_t ipWhiteListVer); -int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db); -int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb); -int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view); -int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic); +SSdbRaw *mndUserActionEncode(SUserObj *pUser); +int32_t mndDupDbHash(SHashObj *pOld, SHashObj **ppNew); +int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew); +int32_t mndDupTopicHash(SHashObj *pOld, SHashObj **ppNew); +int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_t numOfUses, void **ppRsp, + int32_t *pRspLen, int64_t ipWhiteListVer); +int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db); +int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb); +int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view); +int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic); int32_t mndUserDupObj(SUserObj *pUser, SUserObj *pNew); void mndUserFreeObj(SUserObj *pUser); diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index c47e2e03a7..a019533133 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -95,11 +95,11 @@ #define ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(_type, _priv) \ (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv)) -static SIpWhiteList *createDefaultIpWhiteList(); -SIpWhiteList *createIpWhiteList(void *buf, int32_t len); -static bool updateIpWhiteList(SIpWhiteList *pOld, SIpWhiteList *pNew); -static bool isIpWhiteListEqual(SIpWhiteList *a, SIpWhiteList *b); -static bool isIpRangeEqual(SIpV4Range *a, SIpV4Range *b); +static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList); +SIpWhiteList *createIpWhiteList(void *buf, int32_t len); +static bool updateIpWhiteList(SIpWhiteList *pOld, SIpWhiteList *pNew); +static bool isIpWhiteListEqual(SIpWhiteList *a, SIpWhiteList *b); +static bool isIpRangeEqual(SIpV4Range *a, SIpV4Range *b); void destroyIpWhiteTab(SHashObj *pIpWhiteTab); @@ -645,20 +645,24 @@ SIpWhiteList *createIpWhiteList(void *buf, int32_t len) { return p; } -static SIpWhiteList *createDefaultIpWhiteList() { - SIpWhiteList *pWhiteList = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * 1); - pWhiteList->num = 1; - SIpV4Range *range = &(pWhiteList->pIpRange[0]); +static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList) { + *ppWhiteList = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * 1); + if (*ppWhiteList == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + (*ppWhiteList)->num = 1; + SIpV4Range *range = &((*ppWhiteList)->pIpRange[0]); struct in_addr addr; if (uv_inet_pton(AF_INET, "127.0.0.1", &addr) == 0) { range->ip = addr.s_addr; range->mask = 32; } - return pWhiteList; + return 0; } static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char *pass) { + int32_t code = 0; SUserObj userObj = {0}; taosEncryptPass_c((uint8_t *)pass, strlen(pass), userObj.pass); tstrncpy(userObj.user, user, TSDB_USER_LEN); @@ -668,7 +672,7 @@ static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char userObj.sysInfo = 1; userObj.enable = 1; userObj.ipWhiteListVer = taosGetTimestampMs(); - userObj.pIpWhiteList = createDefaultIpWhiteList(); + TAOS_CHECK_RETURN(createDefaultIpWhiteList(&userObj.pIpWhiteList)); if (strcmp(user, TSDB_DEFAULT_USER) == 0) { userObj.superUser = 1; userObj.createdb = 1; @@ -830,7 +834,10 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { } SSdbRaw *pRaw = sdbAllocRaw(SDB_USER, USER_VER_NUMBER, size); - if (pRaw == NULL) goto _OVER; + if (pRaw == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } int32_t dataPos = 0; SDB_SET_BINARY(pRaw, dataPos, pUser->user, TSDB_USER_LEN, _OVER) @@ -973,6 +980,10 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { int32_t num = pUser->pIpWhiteList->num; int32_t tlen = sizeof(SIpWhiteList) + num * sizeof(SIpV4Range) + 4; char *buf = taosMemoryCalloc(1, tlen); + if (buf == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } int32_t len = tSerializeIpWhiteList(buf, tlen, pUser->pIpWhiteList); SDB_SET_INT32(pRaw, dataPos, len, _OVER); @@ -1306,12 +1317,11 @@ static int32_t mndUserActionInsert(SSdb *pSdb, SUserObj *pUser) { } int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew) { + int32_t code = 0; *ppNew = taosHashInit(taosHashGetSize(pOld), taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); if (*ppNew == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; - TAOS_CHECK_RETURN(NULL); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } char *tb = taosHashIterate(pOld, NULL); @@ -1320,24 +1330,24 @@ int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew) { char *key = taosHashGetKey(tb, &keyLen); int32_t valueLen = strlen(tb) + 1; - if (taosHashPut(pNew, key, keyLen, tb, valueLen) != 0) { + if ((code = taosHashPut(*ppNew, key, keyLen, tb, valueLen)) != 0) { taosHashCancelIterate(pOld, tb); - taosHashCleanup(pNew); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + taosHashCleanup(*ppNew); + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line after terrno is removed + TAOS_RETURN(code); } tb = taosHashIterate(pOld, tb); } - return pNew; + TAOS_RETURN(code); } -SHashObj *mndDupUseDbHash(SHashObj *pOld) { - SHashObj *pNew = +int32_t mndDupUseDbHash(SHashObj *pOld, SHashObj **ppNew) { + int32_t code = 0; + *ppNew = taosHashInit(taosHashGetSize(pOld), taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); - if (pNew == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + if (*ppNew == NULL) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } int32_t *db = taosHashIterate(pOld, NULL); @@ -1345,42 +1355,43 @@ SHashObj *mndDupUseDbHash(SHashObj *pOld) { size_t keyLen = 0; char *key = taosHashGetKey(db, &keyLen); - if (taosHashPut(pNew, key, keyLen, db, sizeof(*db)) != 0) { + if ((code = taosHashPut(*ppNew, key, keyLen, db, sizeof(*db))) != 0) { taosHashCancelIterate(pOld, db); - taosHashCleanup(pNew); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + taosHashCleanup(*ppNew); + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line after terrno is removed + TAOS_RETURN(code); } db = taosHashIterate(pOld, db); } - return pNew; + TAOS_RETURN(code); } int32_t mndUserDupObj(SUserObj *pUser, SUserObj *pNew) { + int32_t code = 0; memcpy(pNew, pUser, sizeof(SUserObj)); pNew->authVersion++; pNew->updateTime = taosGetTimestampMs(); taosRLockLatch(&pUser->lock); - pNew->readDbs = mndDupDbHash(pUser->readDbs); - pNew->writeDbs = mndDupDbHash(pUser->writeDbs); - pNew->readTbs = mndDupTableHash(pUser->readTbs); - pNew->writeTbs = mndDupTableHash(pUser->writeTbs); - pNew->alterTbs = mndDupTableHash(pUser->alterTbs); - pNew->readViews = mndDupTableHash(pUser->readViews); - pNew->writeViews = mndDupTableHash(pUser->writeViews); - pNew->alterViews = mndDupTableHash(pUser->alterViews); - pNew->topics = mndDupTopicHash(pUser->topics); - pNew->useDbs = mndDupUseDbHash(pUser->useDbs); + TAOS_CHECK_GOTO(mndDupDbHash(pUser->readDbs, &pNew->readDbs), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupDbHash(pUser->writeDbs, &pNew->writeDbs), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->readTbs, &pNew->readTbs), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->writeTbs, &pNew->writeTbs), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->alterTbs, &pNew->alterTbs), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->readViews, &pNew->readViews), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->writeViews, &pNew->writeViews), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTableHash(pUser->alterViews, &pNew->alterViews), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupTopicHash(pUser->topics, &pNew->topics), NULL, _OVER); + TAOS_CHECK_GOTO(mndDupUseDbHash(pUser->useDbs, &pNew->useDbs), NULL, _OVER); pNew->pIpWhiteList = cloneIpWhiteList(pUser->pIpWhiteList); - - taosRUnLockLatch(&pUser->lock); - - if (pNew->readDbs == NULL || pNew->writeDbs == NULL || pNew->topics == NULL) { - return -1; + if (pNew->pIpWhiteList == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; } - return 0; + +_OVER: + taosRUnLockLatch(&pUser->lock); + TAOS_RETURN(code); } void mndUserFreeObj(SUserObj *pUser) { @@ -1436,6 +1447,10 @@ static int32_t mndUserActionUpdate(SSdb *pSdb, SUserObj *pOld, SUserObj *pNew) { int32_t sz = sizeof(SIpWhiteList) + pNew->pIpWhiteList->num * sizeof(SIpV4Range); pOld->pIpWhiteList = taosMemoryRealloc(pOld->pIpWhiteList, sz); + if (pOld->pIpWhiteList == NULL) { + taosWUnLockLatch(&pOld->lock); + return TSDB_CODE_OUT_OF_MEMORY; + } memcpy(pOld->pIpWhiteList, pNew->pIpWhiteList, sz); pOld->ipWhiteListVer = pNew->ipWhiteListVer; @@ -1464,6 +1479,7 @@ void mndReleaseUser(SMnode *pMnode, SUserObj *pUser) { } static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate, SRpcMsg *pReq) { + int32_t code = 0; SUserObj userObj = {0}; if (pCreate->isImport != 1) { taosEncryptPass_c((uint8_t *)pCreate->pass, strlen(pCreate->pass), userObj.pass); @@ -1481,14 +1497,16 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate userObj.createdb = pCreate->createDb; if (pCreate->numIpRanges == 0) { - userObj.pIpWhiteList = createDefaultIpWhiteList(); - + TAOS_CHECK_RETURN(createDefaultIpWhiteList(&userObj.pIpWhiteList)); } else { SHashObj *pUniqueTab = taosHashInit(64, MurmurHash3_32, false, HASH_NO_LOCK); + if(pUniqueTab == NULL){ + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } int32_t dummpy = 0; for (int i = 0; i < pCreate->numIpRanges; i++) { SIpV4Range range = {.ip = pCreate->pIpRanges[i].ip, .mask = pCreate->pIpRanges[i].mask}; - taosHashPut(pUniqueTab, &range, sizeof(range), &dummpy, sizeof(dummpy)); + if(code = taosHashPut(pUniqueTab, &range, sizeof(range), &dummpy, sizeof(dummpy)); } taosHashPut(pUniqueTab, &defaultIpRange, sizeof(defaultIpRange), &dummpy, sizeof(dummpy)); @@ -2575,6 +2593,7 @@ static void mndLoopHash(SHashObj *hash, char *priType, SSDataBlock *pBlock, int3 } static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { + int32_t code = 0; SMnode *pMnode = pReq->info.node; SSdb *pSdb = pMnode->pSdb; int32_t numOfRows = 0; @@ -2806,15 +2825,15 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ SUserAuthBatchRsp batchRsp = {0}; batchRsp.pArray = taosArrayInit(numOfUses, sizeof(SGetUserAuthRsp)); if (batchRsp.pArray == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } int32_t code = 0; for (int32_t i = 0; i < numOfUses; ++i) { - SUserObj *pUser = mndAcquireUser(pMnode, pUsers[i].user); + SUserObj *pUser = NULL; + code = mndAcquireUser(pMnode, pUsers[i].user, &pUser); if (pUser == NULL) { - if (TSDB_CODE_MND_USER_NOT_EXIST == terrno) { + if (TSDB_CODE_MND_USER_NOT_EXIST == code) { SGetUserAuthRsp rsp = {.dropped = 1}; memcpy(rsp.user, pUsers[i].user, TSDB_USER_LEN); taosArrayPush(batchRsp.pArray, &rsp); @@ -2837,7 +2856,7 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ goto _OVER; } - taosArrayPush(batchRsp.pArray, &rsp); + (void)taosArrayPush(batchRsp.pArray, &rsp); mndReleaseUser(pMnode, pUser); } @@ -2852,9 +2871,7 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ int32_t rspLen = tSerializeSUserAuthBatchRsp(NULL, 0, &batchRsp); void *pRsp = taosMemoryMalloc(rspLen); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - tFreeSUserAuthBatchRsp(&batchRsp); - return -1; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } tSerializeSUserAuthBatchRsp(pRsp, rspLen, &batchRsp); @@ -2870,7 +2887,7 @@ _OVER: *pRspLen = 0; tFreeSUserAuthBatchRsp(&batchRsp); - return code; + TAOS_RETURN(code); } int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { @@ -2885,8 +2902,7 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pUser); if (pIter == NULL) break; - code = -1; - if (mndUserDupObj(pUser, &newUser) != 0) { + if ((code = mndUserDupObj(pUser, &newUser)) != 0) { break; } @@ -2897,7 +2913,8 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { (void)taosHashRemove(newUser.writeDbs, db, len); SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); - if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { + if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -2905,13 +2922,12 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { mndUserFreeObj(&newUser); sdbRelease(pSdb, pUser); - code = 0; } if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); - return code; + TAOS_RETURN(code); } int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { @@ -2926,8 +2942,7 @@ int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pUser); if (pIter == NULL) break; - code = -1; - if (mndUserDupObj(pUser, &newUser) != 0) { + if ((code = mndUserDupObj(pUser, &newUser)) != 0) { break; } @@ -2940,7 +2955,8 @@ int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { (void)taosHashRemove(newUser.alterTbs, stb, len); SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); - if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { + if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -2948,13 +2964,12 @@ int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { mndUserFreeObj(&newUser); sdbRelease(pSdb, pUser); - code = 0; } if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); - return code; + TAOS_RETURN(code); } int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { @@ -2969,8 +2984,7 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pUser); if (pIter == NULL) break; - code = -1; - if (mndUserDupObj(pUser, &newUser) != 0) { + if ((code = mndUserDupObj(pUser, &newUser)) != 0) { break; } @@ -2983,7 +2997,8 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { (void)taosHashRemove(newUser.alterViews, view, len); SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); - if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { + if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -2991,13 +3006,12 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { mndUserFreeObj(&newUser); sdbRelease(pSdb, pUser); - code = 0; } if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); - return code; + TAOS_RETURN(code); } int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { @@ -3014,8 +3028,7 @@ int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { break; } - code = -1; - if (mndUserDupObj(pUser, &newUser) != 0) { + if ((code = mndUserDupObj(pUser, &newUser)) != 0) { break; } @@ -3023,7 +3036,8 @@ int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { if (inTopic) { (void)taosHashRemove(newUser.topics, topic, len); SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); - if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { + if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { + code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -3031,13 +3045,12 @@ int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { mndUserFreeObj(&newUser); sdbRelease(pSdb, pUser); - code = 0; } if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); - return code; + TAOS_RETURN(code); } int64_t mndGetUserIpWhiteListVer(SMnode *pMnode, SUserObj *pUser) { diff --git a/source/libs/tfs/inc/tfsInt.h b/source/libs/tfs/inc/tfsInt.h index b3bde3abba..3c2b67da01 100644 --- a/source/libs/tfs/inc/tfsInt.h +++ b/source/libs/tfs/inc/tfsInt.h @@ -74,16 +74,16 @@ typedef struct STfs { SHashObj *hash; // name to did map } STfs; -STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *dir); +int32_t tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *dir, STfsDisk **ppDisk); STfsDisk *tfsFreeDisk(STfsDisk *pDisk); int32_t tfsUpdateDiskSize(STfsDisk *pDisk); -int32_t tfsInitTier(STfsTier *pTier, int32_t level); -void tfsDestroyTier(STfsTier *pTier); -STfsDisk *tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg); -void tfsUpdateTierSize(STfsTier *pTier); -int32_t tfsAllocDiskOnTier(STfsTier *pTier); -void tfsPosNextId(STfsTier *pTier); +int32_t tfsInitTier(STfsTier *pTier, int32_t level); +void tfsDestroyTier(STfsTier *pTier); +int32_t tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg, STfsDisk **ppDisk); +void tfsUpdateTierSize(STfsTier *pTier); +int32_t tfsAllocDiskOnTier(STfsTier *pTier); +void tfsPosNextId(STfsTier *pTier); #define tfsLockTier(pTier) taosThreadSpinLock(&(pTier)->lock) #define tfsUnLockTier(pTier) taosThreadSpinUnlock(&(pTier)->lock) diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 1c64885bf5..3432b2a069 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -495,7 +495,9 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { } SDiskID did = {.level = pCfg->level}; - STfsDisk *pDisk = tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg); + STfsDisk *pDisk = NULL; + + tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg, &pDisk); if (pDisk == NULL) { fError("failed to mount disk %s to level %d since %s", pCfg->dir, pCfg->level, terrstr()); return -1; @@ -515,33 +517,28 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { if (pCfg->level < 0 || pCfg->level >= TFS_MAX_TIERS) { fError("failed to mount %s to FS since invalid level %d", pCfg->dir, pCfg->level); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (pCfg->primary < 0 || pCfg->primary > 1) { fError("failed to mount %s to FS since invalid primary %d", pCfg->dir, pCfg->primary); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (pCfg->disable < 0 || pCfg->disable > 1) { fError("failed to mount %s to FS since invalid disable %" PRIi8, pCfg->dir, pCfg->disable); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (pCfg->primary) { if (pCfg->level != 0) { fError("failed to mount %s to FS since disk is primary but level %d not 0", pCfg->dir, pCfg->level); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (TFS_PRIMARY_DISK(pTfs) != NULL) { fError("failed to mount %s to FS since duplicate primary mount", pCfg->dir); - terrno = TSDB_CODE_FS_DUP_PRIMARY; - return -1; + TAOS_RETURN(TSDB_CODE_FS_DUP_PRIMARY); } } @@ -578,15 +575,14 @@ static int32_t tfsFormatDir(char *idir, char *odir) { int32_t code = wordexp(idir, &wep, 0); if (code != 0) { - terrno = TAOS_SYSTEM_ERROR(code); - return -1; + TAOS_RETURN(TAOS_SYSTEM_ERROR(code)); } char tmp[PATH_MAX] = {0}; if (taosRealPath(wep.we_wordv[0], tmp, PATH_MAX) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); wordfree(&wep); - return -1; + TAOS_RETURN(code); } strcpy(odir, tmp); @@ -597,23 +593,20 @@ static int32_t tfsFormatDir(char *idir, char *odir) { static int32_t tfsCheck(STfs *pTfs) { if (TFS_PRIMARY_DISK(pTfs) == NULL) { fError("no primary disk is set"); - terrno = TSDB_CODE_FS_NO_PRIMARY_DISK; - return -1; + TAOS_RETURN(TSDB_CODE_FS_NO_PRIMARY_DISK); } for (int32_t level = 0; level < pTfs->nlevel; level++) { if (TFS_TIER_AT(pTfs, level)->ndisk == 0) { fError("no disk at level %d", level); - terrno = TSDB_CODE_FS_NO_MOUNT_AT_TIER; - return -1; + TAOS_RETURN(TSDB_CODE_FS_NO_MOUNT_AT_TIER); } if (level == 0) { tfsUpdateTierSize(TFS_TIER_AT(pTfs, level)); if (TFS_TIER_AT(pTfs, level)->nAvailDisks == 0) { fError("no disk to create new file at level %d", level); - terrno = TSDB_CODE_FS_NO_VALID_DISK; - return -1; + TAOS_RETURN(TSDB_CODE_FS_NO_VALID_DISK); } } } @@ -684,7 +677,9 @@ static STfsDisk *tfsNextDisk(STfs *pTfs, SDiskIter *pIter) { int32_t tfsGetMonitorInfo(STfs *pTfs, SMonDiskInfo *pInfo) { pInfo->datadirs = taosArrayInit(32, sizeof(SMonDiskDesc)); - if (pInfo->datadirs == NULL) return -1; + if (pInfo->datadirs == NULL) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } tfsUpdateSize(pTfs); @@ -697,7 +692,12 @@ int32_t tfsGetMonitorInfo(STfs *pTfs, SMonDiskInfo *pInfo) { dinfo.size = pDisk->size; dinfo.level = pDisk->level; tstrncpy(dinfo.name, pDisk->path, sizeof(dinfo.name)); - taosArrayPush(pInfo->datadirs, &dinfo); + if (taosArrayPush(pInfo->datadirs, &dinfo) == NULL) { + tfsUnLock(pTfs); + taosArrayDestroy(pInfo->datadirs); + pInfo->datadirs = NULL; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } } } tfsUnLock(pTfs); diff --git a/source/libs/tfs/src/tfsDisk.c b/source/libs/tfs/src/tfsDisk.c index 06eb1cd42e..424eb886ba 100644 --- a/source/libs/tfs/src/tfsDisk.c +++ b/source/libs/tfs/src/tfsDisk.c @@ -16,25 +16,34 @@ #define _DEFAULT_SOURCE #include "tfsInt.h" -STfsDisk *tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path) { - STfsDisk *pDisk = taosMemoryCalloc(1, sizeof(STfsDisk)); - if (pDisk == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; +int32_t tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path, STfsDisk **ppDisk) { + int32_t code = 0; + int32_t lino = 0; + STfsDisk *pDisk = NULL; + + if ((pDisk = taosMemoryCalloc(1, sizeof(STfsDisk))) == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - pDisk->path = taosStrdup(path); - if (pDisk->path == NULL) { - taosMemoryFree(pDisk); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + if ((pDisk->path = taosStrdup(path)) == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } pDisk->level = level; pDisk->id = id; pDisk->disable = disable; - taosGetDiskSize(pDisk->path, &pDisk->size); - return pDisk; + if (taosGetDiskSize(pDisk->path, &pDisk->size) < 0) { + code = TAOS_SYSTEM_ERROR(errno); // TODO: refactor this line + TAOS_CHECK_GOTO(code, &lino, _OVER); + } +_OVER: + if (code != 0) { + pDisk = tfsFreeDisk(pDisk); + fError("%s failed at line %d since %s, disk:%s level:%d id:%d ", __func__, lino, tstrerror(code), path, level, id); + } + *ppDisk = pDisk; + + TAOS_RETURN(code); } STfsDisk *tfsFreeDisk(STfsDisk *pDisk) { @@ -48,9 +57,10 @@ STfsDisk *tfsFreeDisk(STfsDisk *pDisk) { int32_t tfsUpdateDiskSize(STfsDisk *pDisk) { if (taosGetDiskSize(pDisk->path, &pDisk->size) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - fError("failed to get disk:%s size, level:%d id:%d since %s", pDisk->path, pDisk->level, pDisk->id, terrstr()); - return -1; + int32_t code = TAOS_SYSTEM_ERROR(errno); // TODO: refactor this line + fError("failed to get disk:%s size, level:%d id:%d since %s", pDisk->path, pDisk->level, pDisk->id, + tstrerror(code)); + TAOS_RETURN(code); } return 0; diff --git a/source/libs/tfs/src/tfsTier.c b/source/libs/tfs/src/tfsTier.c index cb79c334bf..a0fece3691 100644 --- a/source/libs/tfs/src/tfsTier.c +++ b/source/libs/tfs/src/tfsTier.c @@ -22,8 +22,7 @@ int32_t tfsInitTier(STfsTier *pTier, int32_t level) { memset(pTier, 0, sizeof(STfsTier)); if (taosThreadSpinInit(&pTier->lock, 0) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } pTier->level = level; @@ -39,10 +38,13 @@ void tfsDestroyTier(STfsTier *pTier) { taosThreadSpinDestroy(&pTier->lock); } -STfsDisk *tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg) { +int32_t tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg, STfsDisk **ppDisk) { + int32_t code = 0; + int32_t lino = 0; + STfsDisk *pDisk = NULL; + if (pTier->ndisk >= TFS_MAX_DISKS_PER_TIER) { - terrno = TSDB_CODE_FS_TOO_MANY_MOUNT; - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _OVER); } int32_t id = 0; @@ -61,18 +63,25 @@ STfsDisk *tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg) { } if (id >= TFS_MAX_DISKS_PER_TIER) { - terrno = TSDB_CODE_FS_TOO_MANY_MOUNT; - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _OVER); } - STfsDisk *pDisk = tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir); - if (pDisk == NULL) return NULL; + TAOS_CHECK_GOTO(tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir, &pDisk), &lino, _OVER); pTier->disks[id] = pDisk; pTier->ndisk++; - fDebug("disk %s is mounted to tier level %d id %d", pCfg->dir, pCfg->level, id); - return pTier->disks[id]; +_OVER: + if (code != 0) { + pDisk = tfsFreeDisk(pDisk); + fError("%s failed at line %d since %s, disk:%s level:%d id:%d", __func__, lino, tstrerror(code), pCfg->dir, + pCfg->level, id); + } else { + *ppDisk = pTier->disks[id]; + fDebug("disk %s is mounted to tier level %d id %d", pCfg->dir, pCfg->level, id); + } + + TAOS_RETURN(code); } void tfsUpdateTierSize(STfsTier *pTier) { @@ -100,13 +109,11 @@ void tfsUpdateTierSize(STfsTier *pTier) { // Round-Robin to allocate disk on a tier int32_t tfsAllocDiskOnTier(STfsTier *pTier) { - terrno = TSDB_CODE_FS_NO_VALID_DISK; - tfsLockTier(pTier); if (pTier->ndisk <= 0 || pTier->nAvailDisks <= 0) { tfsUnLockTier(pTier); - return -1; + TAOS_RETURN(TSDB_CODE_FS_NO_VALID_DISK); } int32_t retId = -1; @@ -149,6 +156,9 @@ int32_t tfsAllocDiskOnTier(STfsTier *pTier) { } tfsUnLockTier(pTier); + if (retId < 0) { + TAOS_RETURN(TSDB_CODE_FS_NO_VALID_DISK); + } return retId; } From cd8a54cbf7dfd9adb80091323950eec814c8540f Mon Sep 17 00:00:00 2001 From: kailixu Date: Sun, 21 Jul 2024 11:43:39 +0800 Subject: [PATCH 03/16] enh: return error code --- include/libs/tfs/tfs.h | 6 +- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 7 +- source/dnode/mnode/impl/src/mndUser.c | 16 +- source/dnode/vnode/src/sma/smaCommit.c | 13 +- source/dnode/vnode/src/tsdb/tsdbFS2.c | 8 +- source/dnode/vnode/src/vnd/vnodeOpen.c | 3 +- source/dnode/vnode/test/tsdbSmaTest.cpp | 2 +- source/libs/tfs/src/tfs.c | 218 ++++++++++++------------ source/libs/tfs/src/tfsDisk.c | 8 +- source/libs/tfs/src/tfsTier.c | 8 +- source/libs/tfs/test/tfsTest.cpp | 33 ++-- 11 files changed, 167 insertions(+), 155 deletions(-) diff --git a/include/libs/tfs/tfs.h b/include/libs/tfs/tfs.h index 2b90e3226c..446c1d6fd7 100644 --- a/include/libs/tfs/tfs.h +++ b/include/libs/tfs/tfs.h @@ -44,9 +44,9 @@ typedef struct { * * @param pCfg Config of the fs. * @param ndisk Length of the config. - * @return STfs* The fs object. + * @param ppTfs The fs object. */ -STfs *tfsOpen(SDiskCfg *pCfg, int32_t ndisk); +int32_t tfsOpen(SDiskCfg *pCfg, int32_t ndisk, STfs **ppTfs); /** * @brief Close a fs. @@ -275,7 +275,7 @@ int32_t tfsCopyFile(const STfsFile *pFile1, const STfsFile *pFile2); * @param rname The rel name of file. * @return STfsDir* The dir object. */ -STfsDir *tfsOpendir(STfs *pTfs, const char *rname); +int32_t tfsOpendir(STfs *pTfs, const char *rname, STfsDir **ppDir); /** * @brief Get a file from dir and move to next pos. diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index f636629b3a..fa73b608e5 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -110,6 +110,7 @@ static bool dmCheckDiskSpace() { } int32_t dmDiskInit() { + int32_t code = 0; SDnode *pDnode = dmInstance(); SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0}; tstrncpy(dCfg.dir, tsDataDir, TSDB_FILENAME_LEN); @@ -120,10 +121,10 @@ int32_t dmDiskInit() { numOfDisks = 1; } - pDnode->pTfs = tfsOpen(pDisks, numOfDisks); + code = tfsOpen(pDisks, numOfDisks, &pDnode->pTfs); if (pDnode->pTfs == NULL) { - dError("failed to init tfs since %s", terrstr()); - return -1; + dError("failed to init tfs since %s", tstrerror(code)); + TAOS_RETURN(code); } return 0; } diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index a019533133..12c365ce46 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -648,7 +648,7 @@ SIpWhiteList *createIpWhiteList(void *buf, int32_t len) { static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList) { *ppWhiteList = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * 1); if (*ppWhiteList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } (*ppWhiteList)->num = 1; SIpV4Range *range = &((*ppWhiteList)->pIpRange[0]); @@ -722,7 +722,7 @@ static int32_t mndCreateDefaultUsers(SMnode *pMnode) { } SSdbRaw *mndUserActionEncode(SUserObj *pUser) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + int32_t code = TSDB_CODE_OUT_OF_MEMORY; int32_t ipWhiteReserve = pUser->pIpWhiteList ? (sizeof(SIpV4Range) * pUser->pIpWhiteList->num + sizeof(SIpWhiteList) + 4) : 16; @@ -835,8 +835,7 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { SSdbRaw *pRaw = sdbAllocRaw(SDB_USER, USER_VER_NUMBER, size); if (pRaw == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } int32_t dataPos = 0; @@ -981,8 +980,7 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { int32_t tlen = sizeof(SIpWhiteList) + num * sizeof(SIpV4Range) + 4; char *buf = taosMemoryCalloc(1, tlen); if (buf == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } int32_t len = tSerializeIpWhiteList(buf, tlen, pUser->pIpWhiteList); @@ -995,11 +993,11 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { SDB_SET_RESERVE(pRaw, dataPos, USER_RESERVE_SIZE, _OVER) SDB_SET_DATALEN(pRaw, dataPos, _OVER) - terrno = 0; + code = 0; _OVER: - if (terrno != 0) { - mError("user:%s, failed to encode to raw:%p since %s", pUser->user, pRaw, terrstr()); + if (code != 0) { + mError("user:%s, failed to encode to raw:%p since %s", pUser->user, pRaw, tstrerror(code)); sdbFreeRaw(pRaw); return NULL; } diff --git a/source/dnode/vnode/src/sma/smaCommit.c b/source/dnode/vnode/src/sma/smaCommit.c index 3512f1476f..e707f2150d 100644 --- a/source/dnode/vnode/src/sma/smaCommit.c +++ b/source/dnode/vnode/src/sma/smaCommit.c @@ -99,8 +99,7 @@ int32_t smaBegin(SSma *pSma) { } } _exit: - terrno = code; - return code; + TAOS_RETURN(code); } extern int32_t tsdbCommitCommit(STsdb *tsdb); @@ -119,7 +118,7 @@ _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); } - return code; + TAOS_RETURN(code); } /** @@ -202,7 +201,7 @@ _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s(%d)", SMA_VID(pSma), __func__, lino, tstrerror(code), isCommit); } - return code; + TAOS_RETURN(code); } /** @@ -229,7 +228,7 @@ _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); } - return code; + TAOS_RETURN(code); } /** @@ -241,7 +240,7 @@ _exit: static int32_t tdProcessRSmaAsyncPostCommitImpl(SSma *pSma) { SSmaEnv *pEnv = SMA_RSMA_ENV(pSma); if (!pEnv) { - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } SRSmaStat *pRSmaStat = (SRSmaStat *)SMA_ENV_STAT(pEnv); @@ -276,5 +275,5 @@ static int32_t tdProcessRSmaAsyncPostCommitImpl(SSma *pSma) { atomic_store_8(RSMA_COMMIT_STAT(pRSmaStat), 0); - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index 9b8a979d01..7742e55db7 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -523,12 +523,8 @@ static int32_t tsdbFSDoSanAndFix(STFileSystem *fs) { } { // clear unreferenced files - STfsDir *dir = tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path); - if (dir == NULL) { - code = TAOS_SYSTEM_ERROR(terrno); - lino = __LINE__; - goto _exit; - } + STfsDir *dir = NULL; + TAOS_CHECK_GOTO(tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path, &dir), &lino, _exit); STFileHash fobjHash = {0}; code = tsdbFSCreateFileObjHash(fs, &fobjHash); diff --git a/source/dnode/vnode/src/vnd/vnodeOpen.c b/source/dnode/vnode/src/vnd/vnodeOpen.c index ea9209c6b4..a2b39e5284 100644 --- a/source/dnode/vnode/src/vnd/vnodeOpen.c +++ b/source/dnode/vnode/src/vnd/vnodeOpen.c @@ -175,7 +175,8 @@ int32_t vnodeRenameVgroupId(const char *srcPath, const char *dstPath, int32_t sr snprintf(tsdbFilePrefix, TSDB_FILENAME_LEN, "tsdb%sv", TD_DIRSEP); int32_t prefixLen = strlen(tsdbFilePrefix); - STfsDir *tsdbDir = tfsOpendir(pTfs, tsdbPath); + STfsDir *tsdbDir = NULL; + (void)tfsOpendir(pTfs, tsdbPath, &tsdbDir); if (tsdbDir == NULL) return 0; while (1) { diff --git a/source/dnode/vnode/test/tsdbSmaTest.cpp b/source/dnode/vnode/test/tsdbSmaTest.cpp index 8b19c0dc95..15e8d666c1 100644 --- a/source/dnode/vnode/test/tsdbSmaTest.cpp +++ b/source/dnode/vnode/test/tsdbSmaTest.cpp @@ -371,7 +371,7 @@ TEST(testCase, tSma_Data_Insert_Query_Test) { pDisks.disable = 0; strncpy(pDisks.dir, TD_DATA_DIR_PATH, TSDB_FILENAME_LEN); int32_t numOfDisks = 1; - pTsdb->pTfs = tfsOpen(&pDisks, numOfDisks); + (void)tfsOpen(&pDisks, numOfDisks, &pTsdb->pTfs); EXPECT_NE(pTsdb->pTfs, nullptr); // generate SSubmitReq msg and update expire window diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 3432b2a069..07c1fab54f 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -21,61 +21,56 @@ static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg); static int32_t tfsCheck(STfs *pTfs); static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg); static int32_t tfsFormatDir(char *idir, char *odir); -static STfsDisk *tfsGetDiskByName(STfs *pTfs, const char *dir); +static int32_t tfsGetDiskByName(STfs *pTfs, const char *dir, STfsDisk **ppDisk); static int32_t tfsOpendirImpl(STfs *pTfs, STfsDir *pDir); static STfsDisk *tfsNextDisk(STfs *pTfs, SDiskIter *pIter); -STfs *tfsOpen(SDiskCfg *pCfg, int32_t ndisk) { +int32_t tfsOpen(SDiskCfg *pCfg, int32_t ndisk, STfs **ppTfs) { + int32_t code = 0; + int32_t lino = 0; + STfs *pTfs = NULL; + if (ndisk <= 0 || ndisk > TFS_MAX_DISKS) { - terrno = TSDB_CODE_INVALID_PARA; - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_PARA, &lino, _exit); } - STfs *pTfs = taosMemoryCalloc(1, sizeof(STfs)); + pTfs = taosMemoryCalloc(1, sizeof(STfs)); if (pTfs == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } if (taosThreadSpinInit(&pTfs->lock, 0) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - tfsClose(pTfs); - return NULL; + TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _exit); } for (int32_t level = 0; level < TFS_MAX_TIERS; level++) { STfsTier *pTier = &pTfs->tiers[level]; - if (tfsInitTier(pTier, level) < 0) { - tfsClose(pTfs); - return NULL; - } + TAOS_CHECK_GOTO(tfsInitTier(pTier, level), &lino, _exit); } pTfs->hash = taosHashInit(TFS_MAX_DISKS * 2, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); if (pTfs->hash == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - tfsClose(pTfs); - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } for (int32_t idisk = 0; idisk < ndisk; idisk++) { - if (tfsMount(pTfs, &pCfg[idisk]) < 0) { - tfsClose(pTfs); - return NULL; - } + TAOS_CHECK_GOTO(tfsMount(pTfs, &pCfg[idisk]), &lino, _exit); } - if (tfsCheck(pTfs) < 0) { - tfsClose(pTfs); - return NULL; - } + TAOS_CHECK_GOTO(tfsCheck(pTfs) < 0, &lino, _exit); tfsUpdateSize(pTfs); for (int32_t level = 0; level < pTfs->nlevel; level++) { tfsPosNextId(&pTfs->tiers[level]); } - return pTfs; +_exit: + if (code != 0) { + tfsClose(pTfs); + pTfs = NULL; + } + *ppTfs = pTfs; + TAOS_RETURN(code); } void tfsClose(STfs *pTfs) { @@ -149,7 +144,7 @@ bool tfsDiskSpaceSufficient(STfs *pTfs, int32_t level, int32_t disk) { int32_t tfsGetDisksAtLevel(STfs *pTfs, int32_t level) { if (level < 0 || level >= pTfs->nlevel) { - return 0; + TAOS_RETURN(0); } STfsTier *pTier = TFS_TIER_AT(pTfs, level); @@ -177,10 +172,10 @@ int32_t tfsAllocDisk(STfs *pTfs, int32_t expLevel, SDiskID *pDiskId) { continue; } - return (terrno = 0); + TAOS_RETURN(0); } - return (terrno = TSDB_CODE_FS_NO_VALID_DISK); + TAOS_RETURN(TSDB_CODE_FS_NO_VALID_DISK); } const char *tfsGetPrimaryPath(STfs *pTfs) { return TFS_PRIMARY_DISK(pTfs)->path; } @@ -270,22 +265,27 @@ int32_t tfsMkdirAt(STfs *pTfs, const char *rname, SDiskID diskId) { char aname[TMPNAME_LEN]; if (pDisk == NULL) { - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } snprintf(aname, TMPNAME_LEN, "%s%s%s", pDisk->path, TD_DIRSEP, rname); if (taosMkDir(aname) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } - return 0; + TAOS_RETURN(0); } int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) { - if (tfsMkdirAt(pTfs, rname, diskId) < 0) { + int32_t code = 0; + int32_t lino = 0; + char *s = NULL; + char *dir = NULL; + if ((code = tfsMkdirAt(pTfs, rname, diskId)) < 0) { if (errno == ENOENT) { // Try to create upper - char *s = taosStrdup(rname); + if ((s = taosStrdup(rname)) == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } // Make a copy of dirname(s) because the implementation of 'dirname' differs on different platforms. // Some platform may modify the contents of the string passed into dirname(). Others may return a pointer to @@ -293,25 +293,30 @@ int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) { // the pointer directly in this recursion. // See // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html - char *dir = taosStrdup(taosDirName(s)); - if (strlen(dir) >= strlen(rname) || tfsMkdirRecurAt(pTfs, dir, diskId) < 0) { - taosMemoryFree(s); - taosMemoryFree(dir); - return -1; + if ((dir = taosStrdup(taosDirName(s))) == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } - taosMemoryFree(s); - taosMemoryFree(dir); - if (tfsMkdirAt(pTfs, rname, diskId) < 0) { - return -1; + if (strlen(dir) >= strlen(rname)) { // TODO: check if it is necessary for equal length + TAOS_CHECK_GOTO(TSDB_CODE_APP_ERROR, &lino, _exit); } + TAOS_CHECK_GOTO(tfsMkdirRecurAt(pTfs, dir, diskId), &lino, _exit); + TAOS_CHECK_GOTO(tfsMkdirAt(pTfs, rname, diskId), &lino, _exit); } else { - return -1; + TAOS_CHECK_GOTO(code, &lino, _exit); } + } else { + TAOS_RETURN(code); } - return 0; +_exit: + if (code != 0) { + fError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + taosMemoryFree(s); + taosMemoryFree(dir); + TAOS_RETURN(code); } int32_t tfsMkdirRecur(STfs *pTfs, const char *rname) { @@ -319,13 +324,11 @@ int32_t tfsMkdirRecur(STfs *pTfs, const char *rname) { STfsTier *pTier = TFS_TIER_AT(pTfs, level); for (int32_t id = 0; id < pTier->ndisk; id++) { SDiskID did = {.id = id, .level = level}; - if (tfsMkdirRecurAt(pTfs, rname, did) < 0) { - return -1; - } + TAOS_CHECK_RETURN(tfsMkdirRecurAt(pTfs, rname, did)); } } - return 0; + TAOS_RETURN(0); } int32_t tfsMkdir(STfs *pTfs, const char *rname) { @@ -333,13 +336,11 @@ int32_t tfsMkdir(STfs *pTfs, const char *rname) { STfsTier *pTier = TFS_TIER_AT(pTfs, level); for (int32_t id = 0; id < pTier->ndisk; id++) { SDiskID did = {.id = id, .level = level}; - if (tfsMkdirAt(pTfs, rname, did) < 0) { - return -1; - } + TAOS_CHECK_RETURN(tfsMkdirAt(pTfs, rname, did)); } } - return 0; + TAOS_RETURN(0); } bool tfsDirExistAt(STfs *pTfs, const char *rname, SDiskID diskId) { @@ -352,7 +353,7 @@ bool tfsDirExistAt(STfs *pTfs, const char *rname, SDiskID diskId) { int32_t tfsRmdir(STfs *pTfs, const char *rname) { if (rname[0] == 0) { - return 0; + TAOS_RETURN(0); } char aname[TMPNAME_LEN] = "\0"; @@ -367,7 +368,7 @@ int32_t tfsRmdir(STfs *pTfs, const char *rname) { } } - return 0; + TAOS_RETURN(0); } static int32_t tfsRenameAt(STfs *pTfs, SDiskID diskId, const char *orname, const char *nrname) { @@ -382,12 +383,12 @@ static int32_t tfsRenameAt(STfs *pTfs, SDiskID diskId, const char *orname, const snprintf(naname, TMPNAME_LEN, "%s%s%s", pDisk->path, TD_DIRSEP, nrname); if (taosRenameFile(oaname, naname) != 0 && errno != ENOENT) { - terrno = TAOS_SYSTEM_ERROR(errno); - fError("failed to rename %s to %s since %s", oaname, naname, terrstr()); - return -1; + int32_t code = TAOS_SYSTEM_ERROR(errno); + fError("%s failed to rename %s to %s since %s", __func__, oaname, naname, tstrerror(code)); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(0); } int32_t tfsRename(STfs *pTfs, int32_t diskPrimary, const char *orname, const char *nrname) { @@ -399,14 +400,12 @@ int32_t tfsRename(STfs *pTfs, int32_t diskPrimary, const char *orname, const cha } SDiskID diskId = {.level = level, .id = id}; - if (tfsRenameAt(pTfs, diskId, orname, nrname)) { - return -1; - } + TAOS_CHECK_RETURN(tfsRenameAt(pTfs, diskId, orname, nrname)); } } SDiskID diskId = {.level = 0, .id = diskPrimary}; - return tfsRenameAt(pTfs, diskId, orname, nrname); + TAOS_RETURN(tfsRenameAt(pTfs, diskId, orname, nrname)); } int32_t tfsSearch(STfs *pTfs, int32_t level, const char *fname) { @@ -426,11 +425,11 @@ int32_t tfsSearch(STfs *pTfs, int32_t level, const char *fname) { return -1; } -STfsDir *tfsOpendir(STfs *pTfs, const char *rname) { +int32_t tfsOpendir(STfs *pTfs, const char *rname, STfsDir **ppDir) { + int32_t code = 0; STfsDir *pDir = taosMemoryCalloc(1, sizeof(STfsDir)); if (pDir == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _exit); } SDiskID diskId = {.id = 0, .level = 0}; @@ -438,12 +437,11 @@ STfsDir *tfsOpendir(STfs *pTfs, const char *rname) { pDir->pTfs = pTfs; tstrncpy(pDir->dirName, rname, TSDB_FILENAME_LEN); - if (tfsOpendirImpl(pTfs, pDir) < 0) { - taosMemoryFree(pDir); - return NULL; - } + TAOS_CHECK_GOTO(tfsOpendirImpl(pTfs, pDir), NULL, _exit); - return pDir; +_exit: + taosMemoryFree(pDir); + TAOS_RETURN(code); } const STfsFile *tfsReaddir(STfsDir *pTfsDir) { @@ -490,30 +488,35 @@ void tfsClosedir(STfsDir *pTfsDir) { } static int32_t tfsMount(STfs *pTfs, SDiskCfg *pCfg) { - if (tfsCheckAndFormatCfg(pTfs, pCfg) < 0) { - return -1; - } + int32_t code = 0; + int32_t lino = 0; + + TAOS_CHECK_GOTO(tfsCheckAndFormatCfg(pTfs, pCfg), &lino, _exit); SDiskID did = {.level = pCfg->level}; STfsDisk *pDisk = NULL; - - tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg, &pDisk); - if (pDisk == NULL) { - fError("failed to mount disk %s to level %d since %s", pCfg->dir, pCfg->level, terrstr()); - return -1; - } + + TAOS_CHECK_GOTO(tfsMountDiskToTier(TFS_TIER_AT(pTfs, did.level), pCfg, &pDisk), &lino, _exit); did.id = pDisk->id; - taosHashPut(pTfs->hash, (void *)(pCfg->dir), strnlen(pCfg->dir, TSDB_FILENAME_LEN), (void *)(&did), sizeof(did)); + if (taosHashPut(pTfs->hash, (void *)(pCfg->dir), strnlen(pCfg->dir, TSDB_FILENAME_LEN), (void *)(&did), + sizeof(did)) != 0) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } if (pTfs->nlevel < pCfg->level + 1) { pTfs->nlevel = pCfg->level + 1; } - return 0; +_exit: + if (code != 0) { + fError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + TAOS_RETURN(code); } static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { - char dirName[TSDB_FILENAME_LEN] = "\0"; + int32_t code = 0; + char dirName[TSDB_FILENAME_LEN] = "\0"; if (pCfg->level < 0 || pCfg->level >= TFS_MAX_TIERS) { fError("failed to mount %s to FS since invalid level %d", pCfg->dir, pCfg->level); @@ -542,32 +545,34 @@ static int32_t tfsCheckAndFormatCfg(STfs *pTfs, SDiskCfg *pCfg) { } } - if (tfsFormatDir(pCfg->dir, dirName) < 0) { - fError("failed to mount %s to FS since %s", pCfg->dir, terrstr()); - return -1; + if ((code = tfsFormatDir(pCfg->dir, dirName)) < 0) { + fError("failed to mount %s to FS since %s", pCfg->dir, tstrerror(code)); + TAOS_RETURN(code); } - if (tfsGetDiskByName(pTfs, dirName) != NULL) { + STfsDisk *pDisk = NULL; + if ((code = tfsGetDiskByName(pTfs, dirName, NULL)) != 0) { + fError("failed to mount %s to FS since %s", pCfg->dir, tstrerror(code)); + TAOS_RETURN(code); + } + if (pDisk != NULL) { fError("failed to mount %s to FS since duplicate mount", pCfg->dir); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (!taosCheckAccessFile(dirName, TD_FILE_ACCESS_EXIST_OK | TD_FILE_ACCESS_READ_OK | TD_FILE_ACCESS_WRITE_OK)) { fError("failed to mount %s to FS since no R/W access rights", pCfg->dir); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } if (!taosIsDir(dirName)) { fError("failed to mount %s to FS since not a directory", pCfg->dir); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + TAOS_RETURN(TSDB_CODE_FS_INVLD_CFG); } strncpy(pCfg->dir, dirName, TSDB_FILENAME_LEN); - return 0; + TAOS_RETURN(0); } static int32_t tfsFormatDir(char *idir, char *odir) { @@ -587,7 +592,7 @@ static int32_t tfsFormatDir(char *idir, char *odir) { strcpy(odir, tmp); wordfree(&wep); - return 0; + TAOS_RETURN(0); } static int32_t tfsCheck(STfs *pTfs) { @@ -611,17 +616,19 @@ static int32_t tfsCheck(STfs *pTfs) { } } - return 0; + TAOS_RETURN(0); } -static STfsDisk *tfsGetDiskByName(STfs *pTfs, const char *dir) { +static int32_t tfsGetDiskByName(STfs *pTfs, const char *dir, STfsDisk **ppDisk) { void *pr = taosHashGet(pTfs->hash, (void *)dir, strnlen(dir, TSDB_FILENAME_LEN)); - if (pr == NULL) return NULL; + if (pr == NULL) { + TAOS_RETURN(terrno); + } - SDiskID did = *(SDiskID *)pr; - STfsDisk *pDisk = TFS_DISK_AT(pTfs, did); + SDiskID did = *(SDiskID *)pr; + *ppDisk = TFS_DISK_AT(pTfs, did); - return pDisk; + TAOS_RETURN(0); } static int32_t tfsOpendirImpl(STfs *pTfs, STfsDir *pTfsDir) { @@ -635,7 +642,7 @@ static int32_t tfsOpendirImpl(STfs *pTfs, STfsDir *pTfsDir) { while (true) { pDisk = tfsNextDisk(pTfs, &pTfsDir->iter); - if (pDisk == NULL) return 0; + if (pDisk == NULL) TAOS_RETURN(0); pTfsDir->did.level = pDisk->level; pTfsDir->did.id = pDisk->id; @@ -647,9 +654,10 @@ static int32_t tfsOpendirImpl(STfs *pTfs, STfsDir *pTfsDir) { } pTfsDir->pDir = taosOpenDir(adir); if (pTfsDir->pDir != NULL) break; + fWarn("%s failed to open dir %s since %s", __func__, adir, tstrerror(TAOS_SYSTEM_ERROR(errno))); } - return 0; + TAOS_RETURN(0); } static STfsDisk *tfsNextDisk(STfs *pTfs, SDiskIter *pIter) { @@ -702,5 +710,5 @@ int32_t tfsGetMonitorInfo(STfs *pTfs, SMonDiskInfo *pInfo) { } tfsUnLock(pTfs); - return 0; + TAOS_RETURN(0); } diff --git a/source/libs/tfs/src/tfsDisk.c b/source/libs/tfs/src/tfsDisk.c index 424eb886ba..07fa8d79b9 100644 --- a/source/libs/tfs/src/tfsDisk.c +++ b/source/libs/tfs/src/tfsDisk.c @@ -22,11 +22,11 @@ int32_t tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path, STfsDisk *pDisk = NULL; if ((pDisk = taosMemoryCalloc(1, sizeof(STfsDisk))) == NULL) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } if ((pDisk->path = taosStrdup(path)) == NULL) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } pDisk->level = level; @@ -34,9 +34,9 @@ int32_t tfsNewDisk(int32_t level, int32_t id, int8_t disable, const char *path, pDisk->disable = disable; if (taosGetDiskSize(pDisk->path, &pDisk->size) < 0) { code = TAOS_SYSTEM_ERROR(errno); // TODO: refactor this line - TAOS_CHECK_GOTO(code, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _exit); } -_OVER: +_exit: if (code != 0) { pDisk = tfsFreeDisk(pDisk); fError("%s failed at line %d since %s, disk:%s level:%d id:%d ", __func__, lino, tstrerror(code), path, level, id); diff --git a/source/libs/tfs/src/tfsTier.c b/source/libs/tfs/src/tfsTier.c index a0fece3691..685f95c517 100644 --- a/source/libs/tfs/src/tfsTier.c +++ b/source/libs/tfs/src/tfsTier.c @@ -44,7 +44,7 @@ int32_t tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg, STfsDisk **ppDisk) { STfsDisk *pDisk = NULL; if (pTier->ndisk >= TFS_MAX_DISKS_PER_TIER) { - TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _OVER); + TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _exit); } int32_t id = 0; @@ -63,15 +63,15 @@ int32_t tfsMountDiskToTier(STfsTier *pTier, SDiskCfg *pCfg, STfsDisk **ppDisk) { } if (id >= TFS_MAX_DISKS_PER_TIER) { - TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _OVER); + TAOS_CHECK_GOTO(TSDB_CODE_FS_TOO_MANY_MOUNT, &lino, _exit); } - TAOS_CHECK_GOTO(tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir, &pDisk), &lino, _OVER); + TAOS_CHECK_GOTO(tfsNewDisk(pCfg->level, id, pCfg->disable, pCfg->dir, &pDisk), &lino, _exit); pTier->disks[id] = pDisk; pTier->ndisk++; -_OVER: +_exit: if (code != 0) { pDisk = tfsFreeDisk(pDisk); fError("%s failed at line %d since %s, disk:%s level:%d id:%d", __func__, lino, tstrerror(code), pCfg->dir, diff --git a/source/libs/tfs/test/tfsTest.cpp b/source/libs/tfs/test/tfsTest.cpp index d8c117818e..bb89fbe69f 100644 --- a/source/libs/tfs/test/tfsTest.cpp +++ b/source/libs/tfs/test/tfsTest.cpp @@ -40,11 +40,12 @@ TEST_F(TfsTest, 01_Open_Close) { dCfg.disable = 0; taosRemoveDir(root); - STfs *pTfs = tfsOpen(&dCfg, 1); + STfs *pTfs = NULL; + (void)tfsOpen(&dCfg, 1, &pTfs); ASSERT_EQ(pTfs, nullptr); taosMulMkDir(root); - pTfs = tfsOpen(&dCfg, 1); + (void)tfsOpen(&dCfg, 1, &pTfs); ASSERT_NE(pTfs, nullptr); tfsUpdateSize(pTfs); @@ -68,7 +69,8 @@ TEST_F(TfsTest, 02_AllocDisk) { taosRemoveDir(root); taosMkDir(root); - STfs *pTfs = tfsOpen(&dCfg, 1); + STfs *pTfs = NULL; + (void)tfsOpen(&dCfg, 1, &pTfs); ASSERT_NE(pTfs, nullptr); SDiskID did; @@ -120,7 +122,8 @@ TEST_F(TfsTest, 03_Dir) { taosRemoveDir(root); taosMkDir(root); - STfs *pTfs = tfsOpen(&dCfg, 1); + STfs *pTfs = NULL; + (void)tfsOpen(&dCfg, 1, &pTfs); ASSERT_NE(pTfs, nullptr); char p1[] = "p1"; @@ -175,7 +178,8 @@ TEST_F(TfsTest, 04_File) { taosRemoveDir(root); taosMkDir(root); - STfs *pTfs = tfsOpen(&dCfg, 1); + STfs *pTfs = NULL; + (void)tfsOpen(&dCfg, 1, &pTfs); ASSERT_NE(pTfs, nullptr); STfsFile file0; @@ -264,7 +268,8 @@ TEST_F(TfsTest, 04_File) { EXPECT_NE(taosDirExist(af2), 1); { - STfsDir *pDir = tfsOpendir(pTfs, "t3"); + STfsDir *pDir = NULL; + tfsOpendir(pTfs, "t3", &pDir); const STfsFile *pf1 = tfsReaddir(pDir); EXPECT_NE(pf1, nullptr); @@ -281,7 +286,8 @@ TEST_F(TfsTest, 04_File) { EXPECT_GT(tfsCopyFile(&f1, &f2), 0); { - STfsDir *pDir = tfsOpendir(pTfs, "t3"); + STfsDir *pDir = NULL; + tfsOpendir(pTfs, "t3", &pDir); const STfsFile *pf1 = tfsReaddir(pDir); EXPECT_NE(pf1, nullptr); @@ -386,17 +392,18 @@ TEST_F(TfsTest, 05_MultiDisk) { taosMkDir(root22); taosMkDir(root23); - STfs *pTfs = tfsOpen(dCfg, 9); + STfs *pTfs = NULL; + (void)tfsOpen(dCfg, 9, &pTfs); ASSERT_EQ(pTfs, nullptr); dCfg[0].primary = 1; dCfg[1].primary = 1; - pTfs = tfsOpen(dCfg, 9); + (void)tfsOpen(dCfg, 9, &pTfs); ASSERT_EQ(pTfs, nullptr); dCfg[0].primary = 0; dCfg[1].primary = 1; - pTfs = tfsOpen(dCfg, 9); + (void)tfsOpen(dCfg, 9, &pTfs); ASSERT_NE(pTfs, nullptr); tfsUpdateSize(pTfs); @@ -693,7 +700,8 @@ TEST_F(TfsTest, 05_MultiDisk) { tfsRemoveFile(&f2); { - STfsDir *pDir = tfsOpendir(pTfs, "t3"); + STfsDir *pDir = NULL; + tfsOpendir(pTfs, "t3", &pDir); const STfsFile *pf1 = tfsReaddir(pDir); EXPECT_NE(pf1, nullptr); @@ -711,7 +719,8 @@ TEST_F(TfsTest, 05_MultiDisk) { EXPECT_GT(tfsCopyFile(&f1, &f2), 0); { - STfsDir *pDir = tfsOpendir(pTfs, "t3"); + STfsDir *pDir = NULL; + tfsOpendir(pTfs, "t3", &pDir); const STfsFile *pf1 = tfsReaddir(pDir); EXPECT_NE(pf1, nullptr); From 98a1145091cc0ad9d50e5fcdef841e53be3a7a12 Mon Sep 17 00:00:00 2001 From: kailixu Date: Sun, 21 Jul 2024 23:45:59 +0800 Subject: [PATCH 04/16] enh: return error code --- source/common/src/trow.c | 288 ++++++----------------- source/dnode/mnode/impl/inc/mndShow.h | 7 +- source/dnode/mnode/impl/src/mndCluster.c | 19 +- source/dnode/mnode/impl/src/mndUser.c | 34 ++- source/dnode/mnode/sdb/src/sdb.c | 5 +- source/dnode/vnode/src/sma/smaEnv.c | 109 +++++---- source/dnode/vnode/src/sma/smaSnapshot.c | 43 ++-- source/dnode/vnode/src/sma/smaUtil.c | 7 +- 8 files changed, 191 insertions(+), 321 deletions(-) diff --git a/source/common/src/trow.c b/source/common/src/trow.c index 3c38c89e7f..075f29454f 100644 --- a/source/common/src/trow.c +++ b/source/common/src/trow.c @@ -17,8 +17,8 @@ #include "trow.h" #include "tlog.h" -static bool tdSTSRowIterGetTpVal(STSRowIter *pIter, col_type_t colType, int32_t offset, SCellVal *pVal); -static bool tdSTSRowIterGetKvVal(STSRowIter *pIter, col_id_t colId, col_id_t *nIdx, SCellVal *pVal); +static bool tdSTSRowIterGetTpVal(STSRowIter *pIter, col_type_t colType, int32_t offset, SCellVal *pVal); +static bool tdSTSRowIterGetKvVal(STSRowIter *pIter, col_id_t colId, col_id_t *nIdx, SCellVal *pVal); void tdSTSRowIterInit(STSRowIter *pIter, STSchema *pSchema) { pIter->pSchema = pSchema; @@ -110,8 +110,7 @@ bool tdSTSRowIterGetTpVal(STSRowIter *pIter, col_type_t colType, int32_t offset, int32_t tdGetBitmapValTypeII(const void *pBitmap, int16_t colIdx, TDRowValT *pValType) { if (!pBitmap || colIdx < 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } int16_t nBytes = colIdx / TD_VTYPE_PARTS; int16_t nOffset = colIdx & TD_VTYPE_OPTR; @@ -131,55 +130,11 @@ int32_t tdGetBitmapValTypeII(const void *pBitmap, int16_t colIdx, TDRowValT *pVa *pValType = ((*pDestByte) & 0x03); break; default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } -#if 0 -int32_t tdGetBitmapValTypeI(const void *pBitmap, int16_t colIdx, TDRowValT *pValType) { - if (!pBitmap || colIdx < 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; - } - int16_t nBytes = colIdx / TD_VTYPE_PARTS_I; - int16_t nOffset = colIdx & TD_VTYPE_OPTR_I; - char *pDestByte = (char *)POINTER_SHIFT(pBitmap, nBytes); - // use literal value directly and not use formula to simplify the codes - switch (nOffset) { - case 0: - *pValType = (((*pDestByte) & 0x80) >> 7); - break; - case 1: - *pValType = (((*pDestByte) & 0x40) >> 6); - break; - case 2: - *pValType = (((*pDestByte) & 0x20) >> 5); - break; - case 3: - *pValType = (((*pDestByte) & 0x10) >> 4); - break; - case 4: - *pValType = (((*pDestByte) & 0x08) >> 3); - break; - case 5: - *pValType = (((*pDestByte) & 0x04) >> 2); - break; - case 6: - *pValType = (((*pDestByte) & 0x02) >> 1); - break; - case 7: - *pValType = ((*pDestByte) & 0x01); - break; - default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; - } - return TSDB_CODE_SUCCESS; -} -#endif - int32_t tdGetBitmapValType(const void *pBitmap, int16_t colIdx, TDRowValT *pValType, int8_t bitmapMode) { switch (bitmapMode) { case 0: @@ -192,10 +147,9 @@ int32_t tdGetBitmapValType(const void *pBitmap, int16_t colIdx, TDRowValT *pValT break; #endif default: - terrno = TSDB_CODE_INVALID_PARA; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } bool tdSTSRowIterGetKvVal(STSRowIter *pIter, col_id_t colId, col_id_t *nIdx, SCellVal *pVal) { @@ -416,7 +370,6 @@ bool tdSTpRowGetVal(STSRow *pRow, col_id_t colId, col_type_t colType, int32_t fl return true; } - bool tdSTSRowIterNext(STSRowIter *pIter, SCellVal *pVal) { if (pIter->colIdx >= pIter->pSchema->numOfCols) { return false; @@ -452,6 +405,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r int32_t maxVarDataLen = 0; int32_t iColVal = 0; int32_t nBound = 0; + int32_t code = 0; void *varBuf = NULL; bool isAlloc = false; @@ -481,7 +435,8 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r } } else { varDataLen += sizeof(VarDataLenT); - if (pTColumn->type == TSDB_DATA_TYPE_VARCHAR || pTColumn->type == TSDB_DATA_TYPE_VARBINARY || pTColumn->type == TSDB_DATA_TYPE_GEOMETRY) { + if (pTColumn->type == TSDB_DATA_TYPE_VARCHAR || pTColumn->type == TSDB_DATA_TYPE_VARBINARY || + pTColumn->type == TSDB_DATA_TYPE_GEOMETRY) { varDataLen += CHAR_BYTES; if (maxVarDataLen < CHAR_BYTES + sizeof(VarDataLenT)) { maxVarDataLen = CHAR_BYTES + sizeof(VarDataLenT); @@ -494,7 +449,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r } } } else { - if(pColVal && COL_VAL_IS_VALUE(pColVal)) { + if (pColVal && COL_VAL_IS_VALUE(pColVal)) { nonVarDataLen += TYPE_BYTES[pTColumn->type]; } } @@ -516,8 +471,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r } if (!(*ppRow)) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } if (maxVarDataLen > 0) { @@ -526,8 +480,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r if (isAlloc) { taosMemoryFreeClear(*ppRow); } - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } } @@ -567,18 +520,28 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r } if (TD_IS_TP_ROW(rb.pBuf)) { - tdAppendColValToRow(&rb, pTColumn->colId, pTColumn->type, valType, val, true, pTColumn->offset, iColVal); + TAOS_CHECK_GOTO( + tdAppendColValToRow(&rb, pTColumn->colId, pTColumn->type, valType, val, true, pTColumn->offset, iColVal), + NULL, _exit); } else { - tdAppendColValToRow(&rb, pTColumn->colId, pTColumn->type, valType, val, true, rb.offset, iBound - 1); + TAOS_CHECK_GOTO( + tdAppendColValToRow(&rb, pTColumn->colId, pTColumn->type, valType, val, true, rb.offset, iBound - 1), NULL, + _exit); } ++iColVal; } tdSRowEnd(&rb); +_exit: taosMemoryFreeClear(varBuf); + if (code != 0) { + if (isAlloc) { + taosMemoryFreeClear(*ppRow); + } + } - return 0; + TAOS_RETURN(code); } static FORCE_INLINE int32_t tdCompareColId(const void *arg1, const void *arg2) { @@ -632,83 +595,31 @@ bool tdSTSRowGetVal(STSRowIter *pIter, col_id_t colId, col_type_t colType, SCell return true; } -#if 0 -int32_t tdSetBitmapValTypeI(void *pBitmap, int16_t colIdx, TDRowValT valType) { - if (!pBitmap || colIdx < 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; - } - int16_t nBytes = colIdx / TD_VTYPE_PARTS_I; - int16_t nOffset = colIdx & TD_VTYPE_OPTR_I; - char *pDestByte = (char *)POINTER_SHIFT(pBitmap, nBytes); - // use literal value directly and not use formula to simplify the codes - switch (nOffset) { - case 0: - *pDestByte = ((*pDestByte) & 0x7F) | (valType << 7); - // set the value and clear other partitions for offset 0 - // *pDestByte |= (valType << 7); - break; - case 1: - *pDestByte = ((*pDestByte) & 0xBF) | (valType << 6); - // *pDestByte |= (valType << 6); - break; - case 2: - *pDestByte = ((*pDestByte) & 0xDF) | (valType << 5); - // *pDestByte |= (valType << 5); - break; - case 3: - *pDestByte = ((*pDestByte) & 0xEF) | (valType << 4); - // *pDestByte |= (valType << 4); - break; - case 4: - *pDestByte = ((*pDestByte) & 0xF7) | (valType << 3); - // *pDestByte |= (valType << 3); - break; - case 5: - *pDestByte = ((*pDestByte) & 0xFB) | (valType << 2); - // *pDestByte |= (valType << 2); - break; - case 6: - *pDestByte = ((*pDestByte) & 0xFD) | (valType << 1); - // *pDestByte |= (valType << 1); - break; - case 7: - *pDestByte = ((*pDestByte) & 0xFE) | valType; - // *pDestByte |= (valType); - break; - default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; - } - return TSDB_CODE_SUCCESS; -} -#endif int32_t tdGetKvRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int32_t offset, int16_t colIdx) { #ifdef TD_SUPPORT_BITMAP ASSERT(colIdx < tdRowGetNCols(pRow) - 1); - if (tdGetBitmapValType(pBitmap, colIdx, &output->valType, 0) != TSDB_CODE_SUCCESS) { + int32_t code = 0; + if ((code = tdGetBitmapValType(pBitmap, colIdx, &output->valType, 0)) != TSDB_CODE_SUCCESS) { output->valType = TD_VTYPE_NONE; - return terrno; + TAOS_RETURN(code); } if (tdValTypeIsNorm(output->valType)) { if (offset < 0) { - terrno = TSDB_CODE_INVALID_PARA; output->valType = TD_VTYPE_NONE; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } output->val = POINTER_SHIFT(pRow, offset); } #else if (offset < 0) { - terrno = TSDB_CODE_INVALID_PARA; output->valType = TD_VTYPE_NONE; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } output->val = POINTER_SHIFT(pRow, offset); output->valType = isNull(output->val, colType) ? TD_VTYPE_NULL : TD_VTYPE_NORM; #endif - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdGetTpRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int8_t colType, int32_t offset, @@ -720,12 +631,13 @@ int32_t tdGetTpRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int8_t } else { output->val = POINTER_SHIFT(TD_ROW_DATA(pRow), offset); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } - if (tdGetBitmapValType(pBitmap, colIdx, &output->valType, 0) != TSDB_CODE_SUCCESS) { + int32_t code = 0; + if ((code = tdGetBitmapValType(pBitmap, colIdx, &output->valType, 0)) != TSDB_CODE_SUCCESS) { output->valType = TD_VTYPE_NONE; - return terrno; + TAOS_RETURN(code); } if (output->valType == TD_VTYPE_NORM) { @@ -736,7 +648,7 @@ int32_t tdGetTpRowValOfCol(SCellVal *output, STSRow *pRow, void *pBitmap, int8_t } } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colType, TDRowValT valType, const void *val, @@ -745,23 +657,21 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp if (!val) { #ifdef TD_SUPPORT_BITMAP if (valType == TD_VTYPE_NORM) { - terrno = TSDB_CODE_INVALID_PTR; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } #else - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); + d #endif } // TS KEY is stored in STSRow.ts and not included in STSRow.data field. if (colId == PRIMARYKEY_TIMESTAMP_COL_ID) { if (!val) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } TD_ROW_KEY(pRow) = *(TSKEY *)val; // The primary TS key is Norm all the time, thus its valType is not stored in bitmap. - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } // TODO: We can avoid the type judegement by FP, but would prevent the inline scheme. @@ -773,10 +683,9 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp break; case TD_VTYPE_NONE: if (!pBuilder->hasNone) pBuilder->hasNone = true; - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } if (TD_IS_TP_ROW(pRow)) { @@ -784,22 +693,19 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp } else { tdAppendColValToKvRow(pBuilder, valType, val, isCopyVarData, colType, colIdx, offset, colId); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdAppendColValToKvRow(SRowBuilder *pBuilder, TDRowValT valType, const void *val, bool isCopyVarData, int8_t colType, int16_t colIdx, int32_t offset, col_id_t colId) { if (colIdx < 1) { - terrno = TSDB_CODE_INVALID_PARA; ASSERTS(0, "colIdx is %" PRIi64, colIdx); - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } --colIdx; #ifdef TD_SUPPORT_BITMAP - if (tdSetBitmapValType(pBuilder->pBitmap, colIdx, valType, 0) != TSDB_CODE_SUCCESS) { - return terrno; - } + TAOS_CHECK_RETURN(tdSetBitmapValType(pBuilder->pBitmap, colIdx, valType, 0)); #endif STSRow *row = pBuilder->pBuf; @@ -821,21 +727,18 @@ int32_t tdAppendColValToKvRow(SRowBuilder *pBuilder, TDRowValT valType, const vo } } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdAppendColValToTpRow(SRowBuilder *pBuilder, TDRowValT valType, const void *val, bool isCopyVarData, int8_t colType, int16_t colIdx, int32_t offset) { if (colIdx < 1) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } --colIdx; #ifdef TD_SUPPORT_BITMAP - if (tdSetBitmapValType(pBuilder->pBitmap, colIdx, valType, 0) != TSDB_CODE_SUCCESS) { - return terrno; - } + TAOS_CHECK_RETURN(tdSetBitmapValType(pBuilder->pBitmap, colIdx, valType, 0)); #endif STSRow *row = pBuilder->pBuf; @@ -857,51 +760,13 @@ int32_t tdAppendColValToTpRow(SRowBuilder *pBuilder, TDRowValT valType, const vo } } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } -#if 0 -int32_t tdSRowSetExtendedInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t nBoundCols, int32_t flen, - int32_t allNullLen, int32_t boundNullLen) { - if ((boundNullLen > 0) && (allNullLen > 0) && (nBoundCols > 0)) { - uint32_t tpLen = allNullLen; - uint32_t kvLen = sizeof(col_id_t) + sizeof(SKvRowIdx) * nBoundCols + boundNullLen; - if (isSelectKVRow(kvLen, tpLen)) { - pBuilder->rowType = TD_ROW_KV; - } else { - pBuilder->rowType = TD_ROW_TP; - } - - } else { - pBuilder->rowType = TD_ROW_TP; - } - pBuilder->flen = flen; - pBuilder->nCols = nCols; - pBuilder->nBoundCols = nBoundCols; - if (pBuilder->flen <= 0 || pBuilder->nCols <= 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; - } -#ifdef TD_SUPPORT_BITMAP - // the primary TS key is stored separatedly - pBuilder->nBitmaps = (col_id_t)TD_BITMAP_BYTES(pBuilder->nCols - 1); - if (nBoundCols > 0) { - pBuilder->nBoundBitmaps = (col_id_t)TD_BITMAP_BYTES(pBuilder->nBoundCols - 1); - } else { - pBuilder->nBoundBitmaps = 0; - } -#else - pBuilder->nBitmaps = 0; - pBuilder->nBoundBitmaps = 0; -#endif - return TSDB_CODE_SUCCESS; -} -#endif int32_t tdSRowResetBuf(SRowBuilder *pBuilder, void *pBuf) { pBuilder->pBuf = (STSRow *)pBuf; if (!pBuilder->pBuf) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } if (pBuilder->hasNone) pBuilder->hasNone = false; @@ -937,18 +802,16 @@ int32_t tdSRowResetBuf(SRowBuilder *pBuilder, void *pBuf) { pBuilder->offset = 0; break; default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdSRowGetBuf(SRowBuilder *pBuilder, void *pBuf) { pBuilder->pBuf = (STSRow *)pBuf; if (!pBuilder->pBuf) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } ASSERT(pBuilder->nBitmaps > 0 && pBuilder->flen > 0); @@ -966,10 +829,9 @@ int32_t tdSRowGetBuf(SRowBuilder *pBuilder, void *pBuf) { #endif break; default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } void tdSRowReset(SRowBuilder *pBuilder) { @@ -985,8 +847,7 @@ int32_t tdSRowSetTpInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t flen) { pBuilder->flen = flen; pBuilder->nCols = nCols; if (pBuilder->flen <= 0 || pBuilder->nCols <= 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } #ifdef TD_SUPPORT_BITMAP // the primary TS key is stored separatedly @@ -995,7 +856,7 @@ int32_t tdSRowSetTpInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t flen) { pBuilder->nBitmaps = 0; pBuilder->nBoundBitmaps = 0; #endif - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdSRowSetInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t nBoundCols, int32_t flen) { @@ -1003,8 +864,7 @@ int32_t tdSRowSetInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t nBoundCols, pBuilder->nCols = nCols; pBuilder->nBoundCols = nBoundCols; if (pBuilder->flen <= 0 || pBuilder->nCols <= 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } #ifdef TD_SUPPORT_BITMAP // the primary TS key is stored separatedly @@ -1018,24 +878,12 @@ int32_t tdSRowSetInfo(SRowBuilder *pBuilder, int32_t nCols, int32_t nBoundCols, pBuilder->nBitmaps = 0; pBuilder->nBoundBitmaps = 0; #endif - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } -#if 0 -bool tdIsBitmapValTypeNorm(const void *pBitmap, int16_t idx, int8_t bitmapMode) { - TDRowValT valType = 0; - tdGetBitmapValType(pBitmap, idx, &valType, bitmapMode); - if (tdValTypeIsNorm(valType)) { - return true; - } - return false; -} -#endif - int32_t tdSetBitmapValTypeII(void *pBitmap, int16_t colIdx, TDRowValT valType) { if (!pBitmap || colIdx < 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } int16_t nBytes = colIdx / TD_VTYPE_PARTS; int16_t nOffset = colIdx & TD_VTYPE_OPTR; @@ -1060,10 +908,9 @@ int32_t tdSetBitmapValTypeII(void *pBitmap, int16_t colIdx, TDRowValT valType) { // *pDestByte |= (valType); break; default: - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdSetBitmapValType(void *pBitmap, int16_t colIdx, TDRowValT valType, int8_t bitmapMode) { @@ -1078,14 +925,11 @@ int32_t tdSetBitmapValType(void *pBitmap, int16_t colIdx, TDRowValT valType, int break; #endif default: - terrno = TSDB_CODE_INVALID_PARA; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } - - void tTSRowGetVal(STSRow *pRow, STSchema *pTSchema, int16_t iCol, SColVal *pColVal) { STColumn *pTColumn = &pTSchema->columns[iCol]; SCellVal cv = {0}; diff --git a/source/dnode/mnode/impl/inc/mndShow.h b/source/dnode/mnode/impl/inc/mndShow.h index de7068e9ad..c47b5d1e7b 100644 --- a/source/dnode/mnode/impl/inc/mndShow.h +++ b/source/dnode/mnode/impl/inc/mndShow.h @@ -23,11 +23,14 @@ extern "C" { #endif -#define COL_DATA_SET_VAL_RET(pData, isNull, pObj) \ +#define COL_DATA_SET_VAL_GOTO(pData, isNull, pObj, LINO) \ do { \ if ((code = colDataSetVal(pColInfo, numOfRows, (pData), (isNull))) != 0) { \ if (pObj) sdbRelease(pSdb, (pObj)); \ - return code; \ + if (LINO) { \ + *((int32_t *)(LINO)) = __LINE__; \ + } \ + goto _OVER; \ } \ } while (0) diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index 74e0940cba..26d2bc2c44 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -281,6 +281,7 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * SMnode *pMnode = pMsg->info.node; SSdb *pSdb = pMnode->pSdb; int32_t code = 0; + int32_t lino = 0; int32_t numOfRows = 0; int32_t cols = 0; SClusterObj *pCluster = NULL; @@ -291,31 +292,31 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_RET((const char *)&pCluster->id, false, pCluster); + COL_DATA_SET_VAL_GOTO((const char *)&pCluster->id, false, pCluster, &lino); char buf[tListLen(pCluster->name) + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(buf, pCluster->name, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_RET(buf, false, pCluster); + COL_DATA_SET_VAL_GOTO(buf, false, pCluster, &lino); int32_t upTime = mndGetClusterUpTimeImp(pCluster); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_RET((const char *)&upTime, false, pCluster); + COL_DATA_SET_VAL_GOTO((const char *)&upTime, false, pCluster, &lino); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_RET((const char *)&pCluster->createdTime, false, pCluster); + COL_DATA_SET_VAL_GOTO((const char *)&pCluster->createdTime, false, pCluster, &lino); char ver[12] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ver, tsVersionName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_RET((const char *)ver, false, pCluster); + COL_DATA_SET_VAL_GOTO((const char *)ver, false, pCluster, &lino); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); if (tsExpireTime <= 0) { colDataSetNULL(pColInfo, numOfRows); } else { - COL_DATA_SET_VAL_RET((const char *)&tsExpireTime, false, pCluster); + COL_DATA_SET_VAL_GOTO((const char *)&tsExpireTime, false, pCluster, &lino); } sdbRelease(pSdb, pCluster); @@ -323,6 +324,12 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * } pShow->numOfRows += numOfRows; + +_OVER: + if (code != 0) { + mError("failed to retrieve cluster info at line %d since %s", lino, tstrerror(code)); + TAOS_RETURN(code); + } return numOfRows; } diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 12c365ce46..2335bf7bf8 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -123,7 +123,7 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBloc static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter); SHashObj *mndFetchAllIpWhite(SMnode *pMnode); static int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq); -bool mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type); +static int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, int8_t *pUpdate); void ipWhiteMgtUpdateAll(SMnode *pMnode); typedef struct { @@ -136,8 +136,11 @@ static SIpWhiteMgt ipWhiteMgt; const static SIpV4Range defaultIpRange = {.ip = 16777343, .mask = 32}; -void ipWhiteMgtInit() { +static int32_t ipWhiteMgtInit() { ipWhiteMgt.pIpWhiteTab = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), 1, HASH_ENTRY_LOCK); + if (ipWhiteMgt.pIpWhiteTab == NULL) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } ipWhiteMgt.ver = 0; taosThreadRwlockInit(&ipWhiteMgt.rw, NULL); } @@ -147,13 +150,21 @@ void ipWhiteMgtCleanup() { } int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { - bool update = true; + int32_t code = 0; + int32_t lino = 0; + bool update = true; taosThreadRwlockWrlock(&ipWhiteMgt.rw); SIpWhiteList **ppList = taosHashGet(ipWhiteMgt.pIpWhiteTab, user, strlen(user)); if (ppList == NULL || *ppList == NULL) { SIpWhiteList *p = cloneIpWhiteList(pNew); - taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *)); + if (p == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + if ((code = taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *))) != 0) { + taosMemoryFree(p); + TAOS_CHECK_GOTO(code, &lino, _OVER); + } } else { SIpWhiteList *pOld = *ppList; if (isIpWhiteListEqual(pOld, pNew)) { @@ -161,7 +172,13 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { } else { taosMemoryFree(pOld); SIpWhiteList *p = cloneIpWhiteList(pNew); - taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *)); + if (p == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + if ((code = taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *))) != 0) { + taosMemoryFree(p); + TAOS_CHECK_GOTO(code, &lino, _OVER); + } } } SArray *fqdns = mndGetAllDnodeFqdns(pMnode); @@ -185,6 +202,7 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { if (update) ipWhiteMgt.ver++; +_OVER: taosThreadRwlockUnlock(&ipWhiteMgt.rw); return 0; } @@ -212,6 +230,7 @@ bool isRangeInWhiteList(SIpWhiteList *pList, SIpV4Range *range) { } return false; } +#if 0 int32_t ipWhiteUpdateForAllUser(SIpWhiteList *pList) { taosThreadRwlockWrlock(&ipWhiteMgt.rw); @@ -256,6 +275,7 @@ int32_t ipWhiteUpdateForAllUser(SIpWhiteList *pList) { taosThreadRwlockUnlock(&ipWhiteMgt.rw); return 0; } +#endif void ipWhiteMgtUpdateAll(SMnode *pMnode) { ipWhiteMgt.ver++; @@ -292,7 +312,7 @@ int64_t mndGetIpWhiteVer(SMnode *pMnode) { return ver; } -bool mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type) { +int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, bool *pUpdate) { bool update = false; SIpV4Range range = {.ip = taosGetIpv4FromFqdn(fqdn), .mask = 32}; mDebug("ip-white-list may update for user: %s, fqdn: %s", user, fqdn); @@ -500,7 +520,7 @@ SHashObj *mndFetchAllIpWhite(SMnode *pMnode) { } int32_t mndInitUser(SMnode *pMnode) { - ipWhiteMgtInit(); + TAOS_CHECK_REUTNR(ipWhiteMgtInit()); SSdbTable table = { .sdbType = SDB_USER, diff --git a/source/dnode/mnode/sdb/src/sdb.c b/source/dnode/mnode/sdb/src/sdb.c index c4b32fe87c..2e4790dac8 100644 --- a/source/dnode/mnode/sdb/src/sdb.c +++ b/source/dnode/mnode/sdb/src/sdb.c @@ -134,15 +134,14 @@ int32_t sdbSetTable(SSdb *pSdb, SSdbTable table) { SHashObj *hash = taosHashInit(64, taosGetDefaultHashFunction(hashType), true, HASH_ENTRY_LOCK); if (hash == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } pSdb->maxId[sdbType] = 0; pSdb->hashObjs[sdbType] = hash; mInfo("sdb table:%s is initialized", sdbTableName(sdbType)); - return 0; + TAOS_RETURN(0); } static int32_t sdbCreateDir(SSdb *pSdb) { diff --git a/source/dnode/vnode/src/sma/smaEnv.c b/source/dnode/vnode/src/sma/smaEnv.c index dd12f2bca2..b3e072f823 100644 --- a/source/dnode/vnode/src/sma/smaEnv.c +++ b/source/dnode/vnode/src/sma/smaEnv.c @@ -39,6 +39,7 @@ static void tdDestroyRSmaStat(void *pRSmaStat); */ // implementation int32_t smaInit() { + int32_t code = 0; int8_t old; int32_t nLoops = 0; while (1) { @@ -56,8 +57,9 @@ int32_t smaInit() { if (smaMgmt.rsetId < 0) { atomic_store_8(&smaMgmt.inited, 0); - smaError("failed to init sma rset since %s", terrstr()); - return TSDB_CODE_FAILED; + code = terrno; + smaError("failed to init sma rset since %s", tstrerror(code)); + TAOS_RETURN(code); } int32_t type = (8 == POINTER_BYTES) ? TSDB_DATA_TYPE_UBIGINT : TSDB_DATA_TYPE_UINT; @@ -66,21 +68,22 @@ int32_t smaInit() { smaMgmt.tmrHandle = taosTmrInit(10000, 100, 10000, "RSMA"); if (!smaMgmt.refHash || !smaMgmt.tmrHandle) { + code = terrno; taosCloseRef(smaMgmt.rsetId); if (smaMgmt.refHash) { taosHashCleanup(smaMgmt.refHash); smaMgmt.refHash = NULL; } atomic_store_8(&smaMgmt.inited, 0); - smaError("failed to init sma tmr handle since %s", terrstr()); - return TSDB_CODE_FAILED; + smaError("failed to init sma tmr handle since %s", tstrerror(code)); + TAOS_RETURN(code); } atomic_store_8(&smaMgmt.inited, 1); smaInfo("sma mgmt env is initialized, rsetId:%d, tmrHandle:%p", smaMgmt.rsetId, smaMgmt.tmrHandle); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } /** @@ -110,13 +113,13 @@ void smaCleanUp() { } static int32_t tdNewSmaEnv(SSma *pSma, int8_t smaType, SSmaEnv **ppEnv) { + int32_t code = 0; SSmaEnv *pEnv = NULL; pEnv = (SSmaEnv *)taosMemoryCalloc(1, sizeof(SSmaEnv)); *ppEnv = pEnv; if (!pEnv) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } SMA_ENV_TYPE(pEnv) = smaType; @@ -126,26 +129,23 @@ static int32_t tdNewSmaEnv(SSma *pSma, int8_t smaType, SSmaEnv **ppEnv) { (smaType == TSDB_SMA_TYPE_TIME_RANGE) ? atomic_store_ptr(&SMA_TSMA_ENV(pSma), *ppEnv) : atomic_store_ptr(&SMA_RSMA_ENV(pSma), *ppEnv); - if ((terrno = tdInitSmaStat(&SMA_ENV_STAT(pEnv), smaType, pSma)) != TSDB_CODE_SUCCESS) { + if ((code = tdInitSmaStat(&SMA_ENV_STAT(pEnv), smaType, pSma)) != TSDB_CODE_SUCCESS) { tdFreeSmaEnv(pEnv); *ppEnv = NULL; (smaType == TSDB_SMA_TYPE_TIME_RANGE) ? atomic_store_ptr(&SMA_TSMA_ENV(pSma), NULL) : atomic_store_ptr(&SMA_RSMA_ENV(pSma), NULL); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } static int32_t tdInitSmaEnv(SSma *pSma, int8_t smaType, SSmaEnv **ppEnv) { - if (!(*ppEnv)) { - if (tdNewSmaEnv(pSma, smaType, ppEnv) != TSDB_CODE_SUCCESS) { - return TSDB_CODE_FAILED; - } + TAOS_CHECK_RETURN(tdNewSmaEnv(pSma, smaType, ppEnv)); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } /** @@ -187,9 +187,8 @@ static int32_t tdInitSmaStat(SSmaStat **pSmaStat, int8_t smaType, const SSma *pS int32_t code = 0; int32_t lino = 0; - - if (*pSmaStat) { // no lock - return code; // success, return directly + if (*pSmaStat) { // no lock + TAOS_RETURN(code); // success, return directly } /** @@ -201,7 +200,7 @@ static int32_t tdInitSmaStat(SSmaStat **pSmaStat, int8_t smaType, const SSma *pS *pSmaStat = (SSmaStat *)taosMemoryCalloc(1, sizeof(SSmaStat) + sizeof(TdThread) * tsNumOfVnodeRsmaThreads); if (!(*pSmaStat)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } if (smaType == TSDB_SMA_TYPE_ROLLUP) { @@ -211,20 +210,20 @@ static int32_t tdInitSmaStat(SSmaStat **pSmaStat, int8_t smaType, const SSma *pS tsem_init(&pRSmaStat->notEmpty, 0, 0); if (!(pRSmaStat->blocks = taosArrayInit(1, sizeof(SSDataBlock)))) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } SSDataBlock datablock = {.info.type = STREAM_CHECKPOINT}; - taosArrayPush(pRSmaStat->blocks, &datablock); + (void)taosArrayPush(pRSmaStat->blocks, &datablock); // init smaMgmt smaInit(); int64_t refId = taosAddRef(smaMgmt.rsetId, pRSmaStat); if (refId < 0) { - smaError("vgId:%d, taosAddRef refId:%" PRIi64 " to rsetId rsetId:%d max:%d failed since:%s", SMA_VID(pSma), - refId, smaMgmt.rsetId, SMA_MGMT_REF_NUM, tstrerror(terrno)); code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); + smaError("vgId:%d, taosAddRef refId:%" PRIi64 " to rsetId rsetId:%d max:%d failed since:%s", SMA_VID(pSma), + refId, smaMgmt.rsetId, SMA_MGMT_REF_NUM, tstrerror(code)); + TAOS_CHECK_GOTO(code, &lino, _exit); } else { smaDebug("vgId:%d, taosAddRef refId:%" PRIi64 " to rsetId rsetId:%d max:%d succeed", SMA_VID(pSma), refId, smaMgmt.rsetId, SMA_MGMT_REF_NUM); @@ -236,14 +235,11 @@ static int32_t tdInitSmaStat(SSmaStat **pSmaStat, int8_t smaType, const SSma *pS RSMA_TASK_INFO_HASH_SLOT, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_ENTRY_LOCK); if (!RSMA_INFO_HASH(pRSmaStat)) { code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } taosHashSetFreeFp(RSMA_INFO_HASH(pRSmaStat), tRSmaInfoHashFreeNode); - if (tdRsmaStartExecutor(pSma) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_GOTO(tdRsmaStartExecutor(pSma), &lino, _exit); taosInitRWLatch(RSMA_FS_LOCK(pRSmaStat)); } else if (smaType == TSDB_SMA_TYPE_TIME_RANGE) { @@ -256,7 +252,7 @@ _exit: } else { smaDebug("vgId:%d, %s succeed, type:%" PRIi8, SMA_VID(pSma), __func__, smaType); } - return code; + TAOS_RETURN(code); } static void tdDestroyTSmaStat(STSmaStat *pStat) { @@ -340,45 +336,45 @@ static int32_t tdDestroySmaState(SSmaStat *pSmaStat, int8_t smaType) { } int32_t tdLockSma(SSma *pSma) { - int code = taosThreadMutexLock(&pSma->mutex); - if (code != 0) { - smaError("vgId:%d, failed to lock since %s", SMA_VID(pSma), strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(code); - return -1; + int errCode = taosThreadMutexLock(&pSma->mutex); + if (errCode != 0) { + int32_t code = TAOS_SYSTEM_ERROR(errCode); + smaError("vgId:%d, failed to lock since %s", SMA_VID(pSma), tstrerror(code)); + TAOS_RETURN(code); } pSma->locked = true; - return 0; + TAOS_RETURN(0); } int32_t tdUnLockSma(SSma *pSma) { - pSma->locked = false; - int code = taosThreadMutexUnlock(&pSma->mutex); - if (code != 0) { - terrno = TAOS_SYSTEM_ERROR(code); - smaError("vgId:%d, failed to unlock since %s", SMA_VID(pSma), strerror(errno)); - return -1; + int errCode = taosThreadMutexUnlock(&pSma->mutex); + if (errCode != 0) { + int32_t code = TAOS_SYSTEM_ERROR(errCode); + smaError("vgId:%d, failed to unlock since %s", SMA_VID(pSma), tstrerror(code)); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t tdCheckAndInitSmaEnv(SSma *pSma, int8_t smaType) { + int32_t code = 0; SSmaEnv *pEnv = NULL; switch (smaType) { case TSDB_SMA_TYPE_TIME_RANGE: if ((pEnv = (SSmaEnv *)atomic_load_ptr(&SMA_TSMA_ENV(pSma)))) { - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } break; case TSDB_SMA_TYPE_ROLLUP: if ((pEnv = (SSmaEnv *)atomic_load_ptr(&SMA_RSMA_ENV(pSma)))) { - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } break; default: smaError("vgId:%d, undefined smaType:%" PRIi8, SMA_VID(pSma), smaType); - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_INVALID_PARA); } // init sma env @@ -386,15 +382,15 @@ int32_t tdCheckAndInitSmaEnv(SSma *pSma, int8_t smaType) { pEnv = (smaType == TSDB_SMA_TYPE_TIME_RANGE) ? atomic_load_ptr(&SMA_TSMA_ENV(pSma)) : atomic_load_ptr(&SMA_RSMA_ENV(pSma)); if (!pEnv) { - if (tdInitSmaEnv(pSma, smaType, &pEnv) < 0) { + if ((code = tdInitSmaEnv(pSma, smaType, &pEnv)) < 0) { tdUnLockSma(pSma); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } } tdUnLockSma(pSma); - return TSDB_CODE_SUCCESS; -}; + TAOS_RETURN(TSDB_CODE_SUCCESS); +} void *tdRSmaExecutorFunc(void *param) { setThreadName("vnode-rsma"); @@ -404,6 +400,7 @@ void *tdRSmaExecutorFunc(void *param) { } static int32_t tdRsmaStartExecutor(const SSma *pSma) { + int32_t code = 0; TdThreadAttr thAttr = {0}; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); @@ -414,15 +411,15 @@ static int32_t tdRsmaStartExecutor(const SSma *pSma) { for (int32_t i = 0; i < tsNumOfVnodeRsmaThreads; ++i) { if (taosThreadCreate(&pthread[i], &thAttr, tdRSmaExecutorFunc, (void *)pSma) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - smaError("vgId:%d, failed to create pthread for rsma since %s", SMA_VID(pSma), terrstr()); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + smaError("vgId:%d, failed to create pthread for rsma since %s", SMA_VID(pSma), tstrerror(code)); + TAOS_RETURN(code); } smaDebug("vgId:%d, success to create pthread for rsma", SMA_VID(pSma)); } taosThreadAttrDestroy(&thAttr); - return 0; + TAOS_RETURN(code); } static int32_t tdRsmaStopExecutor(const SSma *pSma) { @@ -433,7 +430,7 @@ static int32_t tdRsmaStopExecutor(const SSma *pSma) { TdThread *pthread = NULL; if (!(pEnv = SMA_RSMA_ENV(pSma)) || !(pStat = SMA_ENV_STAT(pEnv))) { - return 0; + TAOS_RETURN(0); } pEnv->flag |= SMA_ENV_FLG_CLOSE; @@ -453,5 +450,5 @@ static int32_t tdRsmaStopExecutor(const SSma *pSma) { smaInfo("vgId:%d, rsma executor stopped, number:%d", SMA_VID(pSma), tsNumOfVnodeRsmaThreads); } - return 0; + TAOS_RETURN(0); } diff --git a/source/dnode/vnode/src/sma/smaSnapshot.c b/source/dnode/vnode/src/sma/smaSnapshot.c index c93d9a7de6..cd8a334f4a 100644 --- a/source/dnode/vnode/src/sma/smaSnapshot.c +++ b/source/dnode/vnode/src/sma/smaSnapshot.c @@ -38,8 +38,7 @@ int32_t rsmaSnapReaderOpen(SSma* pSma, int64_t sver, int64_t ever, SRSmaSnapRead // alloc pReader = (SRSmaSnapReader*)taosMemoryCalloc(1, sizeof(*pReader)); if (pReader == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } pReader->pSma = pSma; pReader->sver = sver; @@ -50,7 +49,7 @@ int32_t rsmaSnapReaderOpen(SSma* pSma, int64_t sver, int64_t ever, SRSmaSnapRead if (pSma->pRSmaTsdb[i]) { code = tsdbSnapReaderOpen(pSma->pRSmaTsdb[i], sver, ever, (i == 0 ? SNAP_DATA_RSMA1 : SNAP_DATA_RSMA2), NULL, &pReader->pDataReader[i]); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } } @@ -61,7 +60,7 @@ _exit: *ppReader = NULL; smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); } - return code; + TAOS_RETURN(code); } int32_t rsmaSnapRead(SRSmaSnapReader* pReader, uint8_t** ppData) { @@ -80,7 +79,7 @@ int32_t rsmaSnapRead(SRSmaSnapReader* pReader, uint8_t** ppData) { if (!pReader->rsmaDataDone[i]) { smaInfo("vgId:%d, vnode snapshot rsma read level %d not done", SMA_VID(pReader->pSma), i); code = tsdbSnapRead(pTsdbSnapReader, ppData); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); if (*ppData) { goto _exit; } else { @@ -93,12 +92,12 @@ int32_t rsmaSnapRead(SRSmaSnapReader* pReader, uint8_t** ppData) { _exit: if (code) { - smaError("vgId:%d, vnode snapshot rsma read failed since %s", SMA_VID(pReader->pSma), tstrerror(code)); + smaError("vgId:%d, %s failed at line %d since %s", SMA_VID(pReader->pSma), __func__, lino, tstrerror(code)); rsmaSnapReaderClose(&pReader); } else { smaInfo("vgId:%d, vnode snapshot rsma read succeed", SMA_VID(pReader->pSma)); } - return code; + TAOS_RETURN(code); } int32_t rsmaSnapReaderClose(SRSmaSnapReader** ppReader) { @@ -114,7 +113,7 @@ int32_t rsmaSnapReaderClose(SRSmaSnapReader** ppReader) { smaInfo("vgId:%d, vnode snapshot rsma reader closed", SMA_VID(pReader->pSma)); taosMemoryFreeClear(*ppReader); - return code; + TAOS_RETURN(code); } // SRSmaSnapWriter ======================================== @@ -137,8 +136,7 @@ int32_t rsmaSnapWriterOpen(SSma* pSma, int64_t sver, int64_t ever, void** ppRang // alloc pWriter = (SRSmaSnapWriter*)taosMemoryCalloc(1, sizeof(*pWriter)); if (!pWriter) { - code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } pWriter->pSma = pSma; pWriter->sver = sver; @@ -148,7 +146,7 @@ int32_t rsmaSnapWriterOpen(SSma* pSma, int64_t sver, int64_t ever, void** ppRang for (int32_t i = 0; i < TSDB_RETENTION_L2; ++i) { if (pSma->pRSmaTsdb[i]) { code = tsdbSnapWriterOpen(pSma->pRSmaTsdb[i], sver, ever, ((void**)ppRanges)[i], &pWriter->pDataWriter[i]); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } } @@ -162,7 +160,7 @@ _exit: } else { smaInfo("vgId:%d, rsma snapshot writer open succeed", TD_VID(pSma->pVnode)); } - return code; + TAOS_RETURN(code); } int32_t rsmaSnapWriterPrepareClose(SRSmaSnapWriter* pWriter) { @@ -171,13 +169,13 @@ int32_t rsmaSnapWriterPrepareClose(SRSmaSnapWriter* pWriter) { if (pWriter->pDataWriter[i]) { code = tsdbSnapWriterPrepareClose(pWriter->pDataWriter[i]); if (code) { - smaError("vgId:%d, failed to prepare close tsdbSnapWriter since %s. i: %d", SMA_VID(pWriter->pSma), terrstr(), - i); - return -1; + smaError("vgId:%d, failed to prepare close tsdbSnapWriter since %s. i: %d", SMA_VID(pWriter->pSma), + tstrerror(code), i); + TAOS_RETURN(code); } } } - return code; + TAOS_RETURN(code); } int32_t rsmaSnapWriterClose(SRSmaSnapWriter** ppWriter, int8_t rollback) { @@ -206,13 +204,13 @@ int32_t rsmaSnapWriterClose(SRSmaSnapWriter** ppWriter, int8_t rollback) { for (int32_t i = 0; i < TSDB_RETENTION_L2; ++i) { if (pWriter->pDataWriter[i]) { code = tsdbSnapWriterClose(&pWriter->pDataWriter[i], rollback); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); } } // rsma restore code = tdRSmaRestore(pWriter->pSma, RSMA_RESTORE_SYNC, pWriter->ever, rollback); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); smaInfo("vgId:%d, vnode snapshot rsma writer restore from sync succeed", SMA_VID(pSma)); _exit: @@ -221,12 +219,13 @@ _exit: if (code) { if (pOutFD) taosCloseFile(&pOutFD); if (pInFD) taosCloseFile(&pInFD); - smaError("vgId:%d, vnode snapshot rsma writer close failed since %s", SMA_VID(pSma), tstrerror(code)); + smaError("vgId:%d, vnode snapshot rsma writer close failed at line %d since %s", SMA_VID(pSma), lino, + tstrerror(code)); } else { smaInfo("vgId:%d, vnode snapshot rsma writer close succeed", pSma ? SMA_VID(pSma) : 0); } - return code; + TAOS_RETURN(code); } int32_t rsmaSnapWrite(SRSmaSnapWriter* pWriter, uint8_t* pData, uint32_t nData) { @@ -244,7 +243,7 @@ int32_t rsmaSnapWrite(SRSmaSnapWriter* pWriter, uint8_t* pData, uint32_t nData) } else { code = TSDB_CODE_RSMA_FS_SYNC; } - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_GOTO(code, &lino, _exit); _exit: if (code) { @@ -253,5 +252,5 @@ _exit: } else { smaInfo("vgId:%d, rsma snapshot write for data type %" PRIi8 " succeed", SMA_VID(pWriter->pSma), pHdr->type); } - return code; + TAOS_RETURN(code); } diff --git a/source/dnode/vnode/src/sma/smaUtil.c b/source/dnode/vnode/src/sma/smaUtil.c index e45cbac329..d94e58f954 100644 --- a/source/dnode/vnode/src/sma/smaUtil.c +++ b/source/dnode/vnode/src/sma/smaUtil.c @@ -39,9 +39,10 @@ void *tdAcquireSmaRef(int32_t rsetId, int64_t refId) { return taosAcquireRef(rse int32_t tdReleaseSmaRef(int32_t rsetId, int64_t refId) { if (taosReleaseRef(rsetId, refId) < 0) { - smaWarn("rsma release ref for rsetId:%d refId:%" PRIi64 " failed since %s", rsetId, refId, terrstr()); - return TSDB_CODE_FAILED; + int32_t code = terrno; + smaWarn("rsma release ref for rsetId:%d refId:%" PRIi64 " failed since %s", rsetId, refId, tstrerror(code)); + TAOS_RETURN(code); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } From b337fa628b58cd7d4ec6602c957b64071b163ca7 Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 22 Jul 2024 15:29:37 +0800 Subject: [PATCH 05/16] enh: return error code --- include/util/tbase58.h | 4 +- include/util/tbase64.h | 4 +- source/dnode/mgmt/node_util/src/dmFile.c | 5 +- source/dnode/mnode/impl/inc/mndDnode.h | 2 +- source/dnode/mnode/impl/inc/mndUser.h | 2 +- source/dnode/mnode/impl/src/mndDnode.c | 18 +- source/dnode/mnode/impl/src/mndUser.c | 404 ++++++++++++++++++----- source/util/src/tbase58.c | 56 ++-- source/util/src/tbase64.c | 30 +- source/util/test/tbaseCodecTest.cpp | 12 +- 10 files changed, 397 insertions(+), 140 deletions(-) diff --git a/include/util/tbase58.h b/include/util/tbase58.h index ab62e1926e..8210cbf4ba 100644 --- a/include/util/tbase58.h +++ b/include/util/tbase58.h @@ -25,8 +25,8 @@ extern "C" { #define TBASE_MAX_ILEN 4096 #define TBASE_MAX_OLEN 5653 -uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen); -char *base58_encode(const uint8_t *value, int32_t vlen); +int32_t base58_decode(const char *value, size_t inlen, int32_t *outlen, uint8_t **result); +int32_t base58_encode(const uint8_t *value, int32_t vlen, char **result); #ifdef __cplusplus } diff --git a/include/util/tbase64.h b/include/util/tbase64.h index 22b8f95c5a..e342e6a0fa 100644 --- a/include/util/tbase64.h +++ b/include/util/tbase64.h @@ -22,8 +22,8 @@ extern "C" { #endif -uint8_t *base64_decode(const char *value, int32_t inlen, int32_t *outlen); -char *base64_encode(const uint8_t *value, int32_t vlen); +int32_t base64_decode(const char *value, int32_t inlen, int32_t *outlen, uint8_t **result); +int32_t base64_encode(const uint8_t *value, int32_t vlen, char **result); #ifdef __cplusplus } diff --git a/source/dnode/mgmt/node_util/src/dmFile.c b/source/dnode/mgmt/node_util/src/dmFile.c index 752abb83a2..a062b96a3d 100644 --- a/source/dnode/mgmt/node_util/src/dmFile.c +++ b/source/dnode/mgmt/node_util/src/dmFile.c @@ -308,6 +308,7 @@ _OVER: int32_t dmUpdateEncryptKey(char *key, bool toLogFile) { #ifdef TD_ENTERPRISE int32_t code = -1; + int32_t lino = 0; char *machineId = NULL; char *encryptCode = NULL; @@ -344,9 +345,7 @@ int32_t dmUpdateEncryptKey(char *key, bool toLogFile) { goto _OVER; } - if (generateEncryptCode(key, machineId, &encryptCode) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(generateEncryptCode(key, machineId, &encryptCode), &lino, _OVER); if(dmWriteEncryptCodeFile(encryptFile, realEncryptFile, encryptCode, toLogFile) != 0){ goto _OVER; diff --git a/source/dnode/mnode/impl/inc/mndDnode.h b/source/dnode/mnode/impl/inc/mndDnode.h index ab104e316e..7708b954b7 100644 --- a/source/dnode/mnode/impl/inc/mndDnode.h +++ b/source/dnode/mnode/impl/inc/mndDnode.h @@ -30,7 +30,7 @@ SEpSet mndGetDnodeEpset(SDnodeObj *pDnode); SEpSet mndGetDnodeEpsetById(SMnode *pMnode, int32_t dnodeId); int32_t mndGetDnodeSize(SMnode *pMnode); bool mndIsDnodeOnline(SDnodeObj *pDnode, int64_t curMs); -void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo); +int32_t mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndUser.h b/source/dnode/mnode/impl/inc/mndUser.h index 5043f6da3d..0048a0badd 100644 --- a/source/dnode/mnode/impl/inc/mndUser.h +++ b/source/dnode/mnode/impl/inc/mndUser.h @@ -49,7 +49,7 @@ void mndUserFreeObj(SUserObj *pUser); int64_t mndGetIpWhiteVer(SMnode *pMnode); -void mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_t type, int8_t lock); +int32_t mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_t type, int8_t lock); int32_t mndRefreshUserIpWhiteList(SMnode *pMnode); diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 73addea6fe..879f533635 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -175,7 +175,7 @@ static int32_t mndCreateDefaultDnode(SMnode *pMnode) { if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; - mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, dnodeObj.fqdn, IP_WHITE_ADD, 1); + mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, dnodeObj.fqdn, IP_WHITE_ADD, 1); // TODO: check the return value _OVER: mndTransDrop(pTrans); @@ -417,8 +417,9 @@ static void mndGetDnodeEps(SMnode *pMnode, SArray *pDnodeEps) { } } -void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) { - SSdb *pSdb = pMnode->pSdb; +int32_t mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) { + SSdb *pSdb = pMnode->pSdb; + int32_t code = 0; int32_t numOfEps = 0; void *pIter = NULL; @@ -440,8 +441,13 @@ void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeInfo) { dInfo.isMnode = 0; } - taosArrayPush(pDnodeInfo, &dInfo); + if(taosArrayPush(pDnodeInfo, &dInfo) == NULL){ + code = TSDB_CODE_OUT_OF_MEMORY; + sdbCancelFetch(pSdb, pIter); + break; + } } + TAOS_RETURN(code); } #define CHECK_MONITOR_PARA(para,err) \ @@ -883,7 +889,7 @@ static int32_t mndCreateDnode(SMnode *pMnode, SRpcMsg *pReq, SCreateDnodeReq *pC if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; - mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, dnodeObj.fqdn, IP_WHITE_ADD, 1); + mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, dnodeObj.fqdn, IP_WHITE_ADD, 1); // TODO: check the return value _OVER: mndTransDrop(pTrans); sdbFreeRaw(pRaw); @@ -1165,7 +1171,7 @@ static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SM if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; - mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, pDnode->fqdn, IP_WHITE_DROP, 1); + mndUpdateIpWhiteForAllUser(pMnode, TSDB_DEFAULT_USER, pDnode->fqdn, IP_WHITE_DROP, 1); // TODO: check the return value code = 0; _OVER: diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 2335bf7bf8..bae617013c 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -96,7 +96,7 @@ (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv)) static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList); -SIpWhiteList *createIpWhiteList(void *buf, int32_t len); +static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppWhiteList); static bool updateIpWhiteList(SIpWhiteList *pOld, SIpWhiteList *pNew); static bool isIpWhiteListEqual(SIpWhiteList *a, SIpWhiteList *b); static bool isIpRangeEqual(SIpV4Range *a, SIpV4Range *b); @@ -121,11 +121,11 @@ static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock static void mndCancelGetNextUser(SMnode *pMnode, void *pIter); static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows); static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter); -SHashObj *mndFetchAllIpWhite(SMnode *pMnode); +static int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab); static int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq); -static int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, int8_t *pUpdate); +static int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, bool *pUpdate); -void ipWhiteMgtUpdateAll(SMnode *pMnode); +static int32_t ipWhiteMgtUpdateAll(SMnode *pMnode); typedef struct { SHashObj *pIpWhiteTab; int64_t ver; @@ -159,9 +159,11 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { if (ppList == NULL || *ppList == NULL) { SIpWhiteList *p = cloneIpWhiteList(pNew); if (p == NULL) { + update = false; TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } if ((code = taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *))) != 0) { + update = false; taosMemoryFree(p); TAOS_CHECK_GOTO(code, &lino, _OVER); } @@ -173,20 +175,26 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { taosMemoryFree(pOld); SIpWhiteList *p = cloneIpWhiteList(pNew); if (p == NULL) { + update = false; TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } if ((code = taosHashPut(ipWhiteMgt.pIpWhiteTab, user, strlen(user), &p, sizeof(void *))) != 0) { + update = false; taosMemoryFree(p); TAOS_CHECK_GOTO(code, &lino, _OVER); } } } - SArray *fqdns = mndGetAllDnodeFqdns(pMnode); + SArray *fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: update this line after refactor api for (int i = 0; i < taosArrayGetSize(fqdns); i++) { char *fqdn = taosArrayGetP(fqdns, i); - update |= mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, TSDB_DEFAULT_USER, fqdn, IP_WHITE_ADD); - update |= mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, user, fqdn, IP_WHITE_ADD); + bool upd = false; + TAOS_CHECK_GOTO(mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, TSDB_DEFAULT_USER, fqdn, IP_WHITE_ADD, &upd), &lino, + _OVER); + update |= upd; + TAOS_CHECK_GOTO(mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, user, fqdn, IP_WHITE_ADD, &upd), &lino, _OVER); + update |= upd; } for (int i = 0; i < taosArrayGetSize(fqdns); i++) { @@ -204,7 +212,10 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { _OVER: taosThreadRwlockUnlock(&ipWhiteMgt.rw); - return 0; + if (code != 0) { + mError("failed to update ip white list for user: %s at line %d since %s", user, lino, tstrerror(code)); + } + TAOS_RETURN(code); } int32_t ipWhiteMgtRemove(char *user) { bool update = true; @@ -277,14 +288,17 @@ int32_t ipWhiteUpdateForAllUser(SIpWhiteList *pList) { } #endif -void ipWhiteMgtUpdateAll(SMnode *pMnode) { - ipWhiteMgt.ver++; - SHashObj *pNew = mndFetchAllIpWhite(pMnode); +static int32_t ipWhiteMgtUpdateAll(SMnode *pMnode) { + SHashObj *pNew = NULL; + TAOS_CHECK_RETURN(mndFetchAllIpWhite(pMnode, &pNew)); + SHashObj *pOld = ipWhiteMgt.pIpWhiteTab; ipWhiteMgt.pIpWhiteTab = pNew; + ipWhiteMgt.ver++; destroyIpWhiteTab(pOld); + TAOS_RETURN(0); } void ipWhiteMgtUpdate2(SMnode *pMnode) { taosThreadRwlockWrlock(&ipWhiteMgt.rw); @@ -313,6 +327,8 @@ int64_t mndGetIpWhiteVer(SMnode *pMnode) { } int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, bool *pUpdate) { + int32_t code = 0; + int32_t lino = 0; bool update = false; SIpV4Range range = {.ip = taosGetIpv4FromFqdn(fqdn), .mask = 32}; mDebug("ip-white-list may update for user: %s, fqdn: %s", user, fqdn); @@ -325,22 +341,34 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 if (type == IP_WHITE_ADD) { if (pList == NULL) { SIpWhiteList *pNewList = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range)); + if(pNewList == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memcpy(pNewList->pIpRange, &range, sizeof(SIpV4Range)); pNewList->num = 1; - taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)); + if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)) != 0) { + taosMemoryFree(pNewList); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } update = true; } else { if (!isRangeInWhiteList(pList, &range)) { int32_t sz = sizeof(SIpWhiteList) + sizeof(SIpV4Range) * (pList->num + 1); SIpWhiteList *pNewList = taosMemoryCalloc(1, sz); + if (pNewList == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memcpy(pNewList->pIpRange, pList->pIpRange, sizeof(SIpV4Range) * (pList->num)); pNewList->pIpRange[pList->num].ip = range.ip; pNewList->pIpRange[pList->num].mask = range.mask; pNewList->num = pList->num + 1; - taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)); + if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)) != 0) { + taosMemoryFree(pNewList); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(pList); update = true; } @@ -355,6 +383,9 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 int32_t idx = 0; int32_t sz = sizeof(SIpWhiteList) + sizeof(SIpV4Range) * (pList->num - 1); SIpWhiteList *pNewList = taosMemoryCalloc(1, sz); + if(pNewList == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } for (int i = 0; i < pList->num; i++) { SIpV4Range *e = &pList->pIpRange[i]; if (!isIpRangeEqual(e, &range)) { @@ -364,7 +395,10 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 } } pNewList->num = idx; - taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)); + if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *) != 0)) { + taosMemoryFree(pNewList); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(pList); } update = true; @@ -375,29 +409,44 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 mDebug("ip-white-list update for user: %s, fqdn: %s", user, fqdn); } - return update; +_OVER: + if (pUpdate) *pUpdate = update; + if (code != 0) { + mError("failed to update ip-white-list for user: %s, fqdn: %s at line %d since %s", user, fqdn, lino, + tstrerror(code)); + } + TAOS_RETURN(code); } int32_t mndRefreshUserIpWhiteList(SMnode *pMnode) { + int32_t code = 0; taosThreadRwlockWrlock(&ipWhiteMgt.rw); - ipWhiteMgtUpdateAll(pMnode); + if ((code = ipWhiteMgtUpdateAll(pMnode)) != 0) { + taosThreadRwlockUnlock(&ipWhiteMgt.rw); + TAOS_RETURN(code); + } ipWhiteMgt.ver = taosGetTimestampMs(); taosThreadRwlockUnlock(&ipWhiteMgt.rw); - return 0; + TAOS_RETURN(code); } -void mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_t type, int8_t lock) { + +int32_t mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_t type, int8_t lock) { + int32_t code = 0; + int32_t lino = 0; + bool update = false; + if (lock) { taosThreadRwlockWrlock(&ipWhiteMgt.rw); if (ipWhiteMgt.ver == 0) { - ipWhiteMgtUpdateAll(pMnode); + TAOS_CHECK_GOTO(ipWhiteMgtUpdateAll(pMnode), &lino, _OVER); ipWhiteMgt.ver = taosGetTimestampMs(); - mInfo("ip-white-list, user: %" PRId64 "", ipWhiteMgt.ver); + mInfo("update ip-white-list, user: %s, ver: %" PRId64, user, ipWhiteMgt.ver); } } - bool update = mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, user, fqdn, type); + TAOS_CHECK_GOTO(mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, user, fqdn, type, &update), &lino, _OVER); void *pIter = taosHashIterate(ipWhiteMgt.pIpWhiteTab, NULL); while (pIter) { @@ -405,24 +454,43 @@ void mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_t t char *key = taosHashGetKey(pIter, &klen); char *keyDup = taosMemoryCalloc(1, klen + 1); + if (keyDup == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memcpy(keyDup, key, klen); - update |= mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, keyDup, fqdn, type); + code = mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, keyDup, fqdn, type, &update); + if (code != 0) { + update = false; + taosMemoryFree(keyDup); + TAOS_CHECK_GOTO(code, &lino, _OVER); + } taosMemoryFree(keyDup); pIter = taosHashIterate(ipWhiteMgt.pIpWhiteTab, pIter); } +_OVER: if (update) ipWhiteMgt.ver++; - if (lock) taosThreadRwlockUnlock(&ipWhiteMgt.rw); + if (code != 0) { + mError("failed to update ip-white-list for user: %s, fqdn: %s at line %d since %s", user, fqdn, lino, + tstrerror(code)); + } + + TAOS_RETURN(code); } -int64_t ipWhiteMgtFillMsg(SUpdateIpWhite *pUpdate) { + +static int64_t ipWhiteMgtFillMsg(SUpdateIpWhite *pUpdate) { int64_t ver = 0; taosThreadRwlockWrlock(&ipWhiteMgt.rw); ver = ipWhiteMgt.ver; int32_t num = taosHashGetSize(ipWhiteMgt.pIpWhiteTab); pUpdate->pUserIpWhite = taosMemoryCalloc(1, num * sizeof(SUpdateUserIpWhite)); + if (pUpdate->pUserIpWhite == NULL) { + taosThreadRwlockUnlock(&ipWhiteMgt.rw); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } void *pIter = taosHashIterate(ipWhiteMgt.pIpWhiteTab, NULL); int32_t i = 0; @@ -437,6 +505,11 @@ int64_t ipWhiteMgtFillMsg(SUpdateIpWhite *pUpdate) { memcpy(pUser->user, key, klen); pUser->numOfRange = list->num; pUser->pIpRanges = taosMemoryCalloc(1, list->num * sizeof(SIpV4Range)); + if (pUser->pIpRanges == NULL) { + taosThreadRwlockUnlock(&ipWhiteMgt.rw); + tFreeSUpdateIpWhiteReq(pUpdate); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } memcpy(pUser->pIpRanges, list->pIpRange, list->num * sizeof(SIpV4Range)); i++; } @@ -446,7 +519,7 @@ int64_t ipWhiteMgtFillMsg(SUpdateIpWhite *pUpdate) { pUpdate->ver = ver; taosThreadRwlockUnlock(&ipWhiteMgt.rw); - return 0; + TAOS_RETURN(0); } void destroyIpWhiteTab(SHashObj *pIpWhiteTab) { @@ -461,22 +534,54 @@ void destroyIpWhiteTab(SHashObj *pIpWhiteTab) { taosHashCleanup(pIpWhiteTab); } -SHashObj *mndFetchAllIpWhite(SMnode *pMnode) { +int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { + int32_t code = 0; + int32_t lino = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; - SHashObj *pIpWhiteTab = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), 1, HASH_ENTRY_LOCK); + SHashObj *pIpWhiteTab = NULL; + SArray *pUserNames = NULL; + SArray *fqdns = NULL; + + pIpWhiteTab = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), 1, HASH_ENTRY_LOCK); + if (pIpWhiteTab == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + pUserNames = taosArrayInit(8, sizeof(void *)); + if(pUserNames == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } - SArray *pUserNames = taosArrayInit(8, sizeof(void *)); while (1) { SUserObj *pUser = NULL; pIter = sdbFetch(pSdb, SDB_USER, pIter, (void **)&pUser); if (pIter == NULL) break; SIpWhiteList *pWhiteList = cloneIpWhiteList(pUser->pIpWhiteList); - taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *)); + if (pWhiteList == NULL) { + sdbRelease(pSdb, pUser); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + if(taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *)) != 0) { + taosMemoryFree(pWhiteList); + sdbRelease(pSdb, pUser); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } char *name = taosStrdup(pUser->user); - taosArrayPush(pUserNames, &name); + if(name == NULL) { + sdbRelease(pSdb, pUser); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + if(taosArrayPush(pUserNames, &name) == NULL){ + taosMemoryFree(name); + sdbRelease(pSdb, pUser); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } sdbRelease(pSdb, pUser); } @@ -491,20 +596,27 @@ SHashObj *mndFetchAllIpWhite(SMnode *pMnode) { } if (found == false) { char *name = taosStrdup(TSDB_DEFAULT_USER); - taosArrayPush(pUserNames, &name); + if (name == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + if (taosArrayPush(pUserNames, &name) == NULL) { + taosMemoryFree(name); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } } - SArray *fqdns = mndGetAllDnodeFqdns(pMnode); + fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: refactor this line after refactor api for (int i = 0; i < taosArrayGetSize(fqdns); i++) { char *fqdn = taosArrayGetP(fqdns, i); for (int j = 0; j < taosArrayGetSize(pUserNames); j++) { char *name = taosArrayGetP(pUserNames, j); - mndUpdateIpWhiteImpl(pIpWhiteTab, name, fqdn, IP_WHITE_ADD); + TAOS_CHECK_GOTO(mndUpdateIpWhiteImpl(pIpWhiteTab, name, fqdn, IP_WHITE_ADD, NULL), &lino, _OVER); } } +_OVER: for (int i = 0; i < taosArrayGetSize(fqdns); i++) { char *fqdn = taosArrayGetP(fqdns, i); taosMemoryFree(fqdn); @@ -516,11 +628,17 @@ SHashObj *mndFetchAllIpWhite(SMnode *pMnode) { } taosArrayDestroy(pUserNames); - return pIpWhiteTab; + if (code != 0) { + mError("failed to fetch all ip white list at line %d since %s", lino, tstrerror(code)); + destroyIpWhiteTab(pIpWhiteTab); + pIpWhiteTab = NULL; + } + *ppIpWhiteTab = pIpWhiteTab; + TAOS_RETURN(code); } int32_t mndInitUser(SMnode *pMnode) { - TAOS_CHECK_REUTNR(ipWhiteMgtInit()); + TAOS_CHECK_RETURN(ipWhiteMgtInit()); SSdbTable table = { .sdbType = SDB_USER, @@ -634,34 +752,50 @@ int32_t tSerializeIpWhiteList(void *buf, int32_t len, SIpWhiteList *pList) { } int32_t tDerializeIpWhileList(void *buf, int32_t len, SIpWhiteList *pList) { + int32_t code = 0; + int32_t lino = 0; SDecoder decoder = {0}; tDecoderInit(&decoder, buf, len); - if (tStartDecode(&decoder) < 0) return -1; - if (tDecodeI32(&decoder, &pList->num) < 0) return -1; + TAOS_CHECK_GOTO(tStartDecode(&decoder), &lino, _OVER); + TAOS_CHECK_GOTO(tDecodeI32(&decoder, &pList->num), &lino, _OVER); for (int i = 0; i < pList->num; i++) { SIpV4Range *pRange = &(pList->pIpRange[i]); - if (tDecodeU32(&decoder, &pRange->ip) < 0) return -1; - if (tDecodeU32(&decoder, &pRange->mask) < 0) return -1; + TAOS_CHECK_GOTO(tDecodeU32(&decoder, &pRange->ip), &lino, _OVER); + TAOS_CHECK_GOTO(tDecodeU32(&decoder, &pRange->mask), &lino, _OVER); } + +_OVER: tEndDecode(&decoder); tDecoderClear(&decoder); + if(code != 0) { + mError("failed to deserialize ip white list at line %d since %s", lino, tstrerror(code)); + } - return 0; + TAOS_RETURN(code); } -SIpWhiteList *createIpWhiteList(void *buf, int32_t len) { - int32_t num = 0; - SDecoder decoder = {0}; + +static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppList) { + int32_t code = 0; + int32_t lino = 0; + int32_t num = 0; + SIpWhiteList *p = NULL; + SDecoder decoder = {0}; tDecoderInit(&decoder, buf, len); - if (tStartDecode(&decoder) < 0) return NULL; - if (tDecodeI32(&decoder, &num) < 0) return NULL; + TAOS_CHECK_GOTO(tStartDecode(&decoder), &lino, _OVER), &lino, _OVER); + TAOS_CHECK_GOTO(tDecodeI32(&decoder, &num), &lino, _OVER), &lino, _OVER); + + p = taosMemoryCalloc(1, sizeof(SIpWhiteList) + num * sizeof(SIpV4Range)); + if(p == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + TAOS_CHECK_GOTO(tDerializeIpWhileList(buf, len, p), &lino, _OVER); + +_OVER: tEndDecode(&decoder); tDecoderClear(&decoder); - - SIpWhiteList *p = taosMemoryCalloc(1, sizeof(SIpWhiteList) + num * sizeof(SIpV4Range)); - tDerializeIpWhileList(buf, len, p); return p; } @@ -1027,23 +1161,29 @@ _OVER: } static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + int32_t code = 0; + int32_t lino = 0; SSdbRow *pRow = NULL; SUserObj *pUser = NULL; int8_t sver = 0; - if (sdbGetRawSoftVer(pRaw, &sver) != 0) goto _OVER; + if (sdbGetRawSoftVer(pRaw, &sver) != 0) { + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_PTR, &lino, _OVER); + } if (sver < 1 || sver > USER_VER_NUMBER) { - terrno = TSDB_CODE_SDB_INVALID_DATA_VER; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_SDB_INVALID_DATA_VER, &lino, _OVER); } pRow = sdbAllocRow(sizeof(SUserObj)); - if (pRow == NULL) goto _OVER; + if (pRow == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } pUser = sdbGetRowObj(pRow); - if (pUser == NULL) goto _OVER; + if (pUser == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } int32_t dataPos = 0; SDB_GET_BINARY(pRaw, dataPos, pUser->user, TSDB_USER_LEN, _OVER) @@ -1074,20 +1214,23 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { pUser->writeDbs = taosHashInit(numOfWriteDbs, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); pUser->topics = taosHashInit(numOfTopics, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); - if (pUser->readDbs == NULL || pUser->writeDbs == NULL || pUser->topics == NULL) goto _OVER; + if (pUser->readDbs == NULL || pUser->writeDbs == NULL || pUser->topics == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + goto _OVER; + } for (int32_t i = 0; i < numOfReadDbs; ++i) { char db[TSDB_DB_FNAME_LEN] = {0}; SDB_GET_BINARY(pRaw, dataPos, db, TSDB_DB_FNAME_LEN, _OVER) int32_t len = strlen(db) + 1; - taosHashPut(pUser->readDbs, db, len, db, TSDB_DB_FNAME_LEN); + TAOS_CHECK_GOTO(taosHashPut(pUser->readDbs, db, len, db, TSDB_DB_FNAME_LEN), &lino, _OVER); } for (int32_t i = 0; i < numOfWriteDbs; ++i) { char db[TSDB_DB_FNAME_LEN] = {0}; SDB_GET_BINARY(pRaw, dataPos, db, TSDB_DB_FNAME_LEN, _OVER) int32_t len = strlen(db) + 1; - taosHashPut(pUser->writeDbs, db, len, db, TSDB_DB_FNAME_LEN); + TAOS_CHECK_GOTO(taosHashPut(pUser->writeDbs, db, len, db, TSDB_DB_FNAME_LEN), &lino, _OVER); } if (sver >= 2) { @@ -1095,7 +1238,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { char topic[TSDB_TOPIC_FNAME_LEN] = {0}; SDB_GET_BINARY(pRaw, dataPos, topic, TSDB_TOPIC_FNAME_LEN, _OVER) int32_t len = strlen(topic) + 1; - taosHashPut(pUser->topics, topic, len, topic, TSDB_TOPIC_FNAME_LEN); + TAOS_CHECK_GOTO(taosHashPut(pUser->topics, topic, len, topic, TSDB_TOPIC_FNAME_LEN), &lino, _OVER); } } @@ -1133,21 +1276,38 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { pUser->useDbs = taosHashInit(numOfUseDbs, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); + if (pUser->readTbs == NULL || pUser->writeTbs == NULL || pUser->alterTbs == NULL || pUser->readViews == NULL || + pUser->writeViews == NULL || pUser->alterViews == NULL || pUser->useDbs == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + goto _OVER; + } + for (int32_t i = 0; i < numOfReadTbs; ++i) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->readTbs, key, keyLen, value, valuelen); + if (taosHashPut(pUser->readTbs, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1158,16 +1318,27 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->writeTbs, key, keyLen, value, valuelen); + if (taosHashPut(pUser->writeTbs, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1179,16 +1350,27 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->alterTbs, key, keyLen, value, valuelen); + if (taosHashPut(pUser->alterTbs, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1199,16 +1381,27 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->readViews, key, keyLen, value, valuelen); + if (taosHashPut(pUser->readViews, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1219,16 +1412,27 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->writeViews, key, keyLen, value, valuelen); + if (taosHashPut(pUser->writeViews, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1239,16 +1443,27 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); char *value = taosMemoryCalloc(valuelen, sizeof(char)); + if (value == NULL) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - taosHashPut(pUser->alterViews, key, keyLen, value, valuelen); + if (taosHashPut(pUser->alterViews, key, keyLen, value, valuelen) != 0) { + taosMemoryFree(key); + taosMemoryFree(value); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); taosMemoryFree(value); @@ -1260,13 +1475,19 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); char *key = taosMemoryCalloc(keyLen, sizeof(char)); + if (key == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } memset(key, 0, keyLen); SDB_GET_BINARY(pRaw, dataPos, key, keyLen, _OVER); int32_t ref = 0; SDB_GET_INT32(pRaw, dataPos, &ref, _OVER); - taosHashPut(pUser->useDbs, key, keyLen, &ref, sizeof(ref)); + if (taosHashPut(pUser->useDbs, key, keyLen, &ref, sizeof(ref)) != 0) { + taosMemoryFree(key); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } taosMemoryFree(key); } } @@ -1276,17 +1497,19 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &len, _OVER); char *buf = taosMemoryMalloc(len); - if (buf == NULL) goto _OVER; + if(buf == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } SDB_GET_BINARY(pRaw, dataPos, buf, len, _OVER); - pUser->pIpWhiteList = createIpWhiteList(buf, len); + code = createIpWhiteList(buf, len, &pUser->pIpWhiteList); taosMemoryFree(buf); SDB_GET_INT64(pRaw, dataPos, &pUser->ipWhiteListVer, _OVER); } if (pUser->pIpWhiteList == NULL) { - pUser->pIpWhiteList = createDefaultIpWhiteList(); + createDefaultIpWhiteList(&pUser->pIpWhiteList); pUser->ipWhiteListVer = taosGetTimestampMs(); } @@ -1724,29 +1947,50 @@ _OVER: } int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq) { + int32_t code = 0; + int32_t lino = 0; + int32_t len = 0; + void *pRsp = NULL; + SUpdateIpWhite ipWhite = {0}; + // impl later SRetrieveIpWhiteReq req = {0}; if (tDeserializeRetrieveIpWhite(pReq->pCont, pReq->contLen, &req) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; + code = TSDB_CODE_INVALID_MSG; + TAOS_CHECK_GOTO(code, &lino, _OVER); } - SUpdateIpWhite ipWhite = {0}; - ipWhiteMgtFillMsg(&ipWhite); + TAOS_CHECK_GOTO(ipWhiteMgtFillMsg(&ipWhite), &lino, _OVER); - int32_t len = tSerializeSUpdateIpWhite(NULL, 0, &ipWhite); + len = tSerializeSUpdateIpWhite(NULL, 0, &ipWhite); + if (len < 0) { + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_CHECK_GOTO(code, &lino, _OVER); + } - void *pRsp = rpcMallocCont(len); - tSerializeSUpdateIpWhite(pRsp, len, &ipWhite); + pRsp = rpcMallocCont(len); + if (!pRsp) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + len = tSerializeSUpdateIpWhite(pRsp, len, &ipWhite); + if (len < 0) { + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_CHECK_GOTO(code, &lino, _OVER); + } +_OVER: + if (code != 0) { + mError("failed to process retrieve ip white request at line %d since %s", lino, tstrerror(code)); + rpcFreeCont(pRsp); + pRsp = NULL; + len = 0; + } + pReq->code = code; pReq->info.rsp = pRsp; pReq->info.rspLen = len; - //} - tFreeSUpdateIpWhiteReq(&ipWhite); - return 0; -_OVER: - return -1; + tFreeSUpdateIpWhiteReq(&ipWhite); + TAOS_RETURN(code); } static int32_t mndAlterUser(SMnode *pMnode, SUserObj *pOld, SUserObj *pNew, SRpcMsg *pReq) { diff --git a/source/util/src/tbase58.c b/source/util/src/tbase58.c index 5eb72879c3..274249badf 100644 --- a/source/util/src/tbase58.c +++ b/source/util/src/tbase58.c @@ -21,7 +21,7 @@ #define TBASE_BUF_SIZE 256 static const char *basis_58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; -char *base58_encode(const uint8_t *value, int32_t vlen) { +int32_t base58_encode(const uint8_t *value, int32_t vlen, char **result) { const uint8_t *pb = value; const uint8_t *pe = pb + vlen; uint8_t buf[TBASE_BUF_SIZE] = {0}; @@ -29,9 +29,10 @@ char *base58_encode(const uint8_t *value, int32_t vlen) { bool bfree = false; int32_t nz = 0, size = 0, len = 0; + *result = NULL; + if (vlen > TBASE_MAX_ILEN) { - terrno = TSDB_CODE_INVALID_PARA; - return NULL; + return TSDB_CODE_INVALID_PARA; } while (pb != pe && *pb == 0) { @@ -42,8 +43,7 @@ char *base58_encode(const uint8_t *value, int32_t vlen) { size = (pe - pb) * 69 / 50 + 1; if (size > TBASE_BUF_SIZE) { if (!(pbuf = taosMemoryCalloc(1, size))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } bfree = true; } @@ -62,17 +62,17 @@ char *base58_encode(const uint8_t *value, int32_t vlen) { const uint8_t *pi = pbuf + (size - len); while (pi != pbuf + size && *pi == 0) ++pi; - uint8_t *result = taosMemoryCalloc(1, nz + (pbuf + size - pi) + 1); - if (!result) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + uint8_t *pResult = taosMemoryCalloc(1, nz + (pbuf + size - pi) + 1); + if (!pResult) { if (bfree) taosMemoryFree(pbuf); - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } - memset(result, '1', nz); - while (pi != pbuf + size) result[nz++] = basis_58[*pi++]; + memset(pResult, '1', nz); + while (pi != pbuf + size) pResult[nz++] = basis_58[*pi++]; if (bfree) taosMemoryFree(pbuf); - return result; + *result = pResult; + return 0; } static const signed char index_58[256] = { @@ -86,7 +86,7 @@ static const signed char index_58[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; -uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) { +int32_t base58_decode(const char *value, size_t inlen, int32_t *outlen, uint8_t **result) { const char *pb = value; const char *pe = value + inlen; uint8_t buf[TBASE_BUF_SIZE] = {0}; @@ -94,15 +94,15 @@ uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) { bool bfree = false; int32_t nz = 0, size = 0, len = 0; + *result = NULL; + if (inlen > TBASE_MAX_OLEN) { - terrno = TSDB_CODE_INVALID_PARA; - return NULL; + return TSDB_CODE_INVALID_PARA; } while (pb != pe) { if (*pb == 0) { - terrno = TSDB_CODE_INVALID_PARA; - return NULL; + return TSDB_CODE_INVALID_PARA; } ++pb; } @@ -117,8 +117,7 @@ uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) { size = (int32_t)(pe - pb) * 733 / 1000 + 1; if (size > TBASE_BUF_SIZE) { if (!(pbuf = taosMemoryCalloc(1, size))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } bfree = true; } @@ -126,9 +125,8 @@ uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) { while (pb != pe && *pb && !isspace(*pb)) { int32_t num = index_58[(uint8_t)*pb]; if (num == -1) { - terrno = TSDB_CODE_INVALID_PARA; if (bfree) taosMemoryFree(pbuf); - return NULL; + return TSDB_CODE_INVALID_PARA; } int32_t i = 0; for (int32_t j = size - 1; (num != 0 || i < len) && (j >= 0); --j, ++i) { @@ -143,23 +141,23 @@ uint8_t *base58_decode(const char *value, size_t inlen, int32_t *outlen) { while (pb != pe && isspace(*pb)) ++pb; if (*pb != 0) { if (bfree) taosMemoryFree(pbuf); - return NULL; + return TSDB_CODE_INVALID_DATA_FMT; } const uint8_t *it = pbuf + (size - len); while (it != pbuf + size && *it == 0) ++it; - uint8_t *result = taosMemoryCalloc(1, nz + (pbuf + size - it) + 1); - if (!result) { + uint8_t *pResult = taosMemoryCalloc(1, nz + (pbuf + size - it) + 1); + if (!pResult) { if (bfree) taosMemoryFree(pbuf); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } - memset(result, 0, nz); - while (it != pbuf + size) result[nz++] = *it++; + memset(pResult, 0, nz); + while (it != pbuf + size) pResult[nz++] = *it++; if (outlen) *outlen = nz; if (bfree) taosMemoryFree(pbuf); - return result; + *result = pResult; + return 0; } \ No newline at end of file diff --git a/source/util/src/tbase64.c b/source/util/src/tbase64.c index a2f4ddbc51..86b069b853 100644 --- a/source/util/src/tbase64.c +++ b/source/util/src/tbase64.c @@ -18,10 +18,13 @@ static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -char *base64_encode(const uint8_t *value, int32_t vlen) { +int32_t base64_encode(const uint8_t *value, int32_t vlen, char **result) { uint8_t oval = 0; - char *result = (char *)taosMemoryMalloc((size_t)(vlen * 4) / 3 + 10); - char *out = result; + *result = (char *)taosMemoryMalloc((size_t)(vlen * 4) / 3 + 10); + if (*result == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + char *out = *result; while (vlen >= 3) { *out++ = basis_64[value[0] >> 2]; *out++ = basis_64[((value[0] << 4) & 0x30) | (value[1] >> 4)]; @@ -39,7 +42,7 @@ char *base64_encode(const uint8_t *value, int32_t vlen) { *out++ = '='; } *out = '\0'; - return result; + return 0; } #define CHAR64(c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)]) @@ -51,17 +54,20 @@ static signed char index_64[128] = { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1}; -uint8_t *base64_decode(const char *value, int32_t inlen, int32_t *outlen) { - int32_t c1, c2, c3, c4; - uint8_t *result = (uint8_t *)taosMemoryMalloc((size_t)(inlen * 3) / 4 + 1); - uint8_t *out = result; +int32_t base64_decode(const char *value, int32_t inlen, int32_t *outlen, uint8_t **result) { + int32_t c1, c2, c3, c4; + *result = (uint8_t *)taosMemoryMalloc((size_t)(inlen * 3) / 4 + 1); + if (*result == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + uint8_t *out = *result; *outlen = 0; while (1) { if (value[0] == 0) { *out = '\0'; - return result; + return 0; } // skip \r\n @@ -93,9 +99,9 @@ uint8_t *base64_decode(const char *value, int32_t inlen, int32_t *outlen) { } base64_decode_error: - taosMemoryFree(result); - result = 0; + taosMemoryFree(*result); + *result = 0; *outlen = 0; - return result; + return TSDB_CODE_INVALID_DATA_FMT; } diff --git a/source/util/test/tbaseCodecTest.cpp b/source/util/test/tbaseCodecTest.cpp index 63bbfcaa68..da6135ea66 100644 --- a/source/util/test/tbaseCodecTest.cpp +++ b/source/util/test/tbaseCodecTest.cpp @@ -19,14 +19,16 @@ using namespace std; static void checkBase58Codec(uint8_t *pRaw, int32_t rawLen, int32_t index) { int64_t start = taosGetTimestampUs(); - char *pEnc = base58_encode((const uint8_t *)pRaw, rawLen); + char *pEnc = NULL; + (void)base58_encode((const uint8_t *)pRaw, rawLen, &pEnc); ASSERT_NE(nullptr, pEnc); int32_t encLen = strlen(pEnc); int64_t endOfEnc = taosGetTimestampUs(); std::cout << "index:" << index << ", encLen is " << encLen << ", cost:" << endOfEnc - start << " us" << std::endl; int32_t decLen = 0; - char *pDec = (char *)base58_decode((const char *)pEnc, encLen, &decLen); + char *pDec = NULL; + (void)base58_decode((const char *)pEnc, encLen, &decLen, (uint8_t**)&pDec); std::cout << "index:" << index << ", decLen is " << decLen << ", cost:" << taosGetTimestampUs() - endOfEnc << " us" << std::endl; ASSERT_NE(nullptr, pDec); @@ -68,9 +70,11 @@ TEST(TD_BASE_CODEC_TEST, tbase58_test) { // 2. overflow case char tmp[1]; - char *pEnc = base58_encode((const uint8_t *)tmp, TBASE_MAX_ILEN + 1); + char *pEnc = NULL; + (void)base58_encode((const uint8_t *)tmp, TBASE_MAX_ILEN + 1, &pEnc); ASSERT_EQ(nullptr, pEnc); - char *pDec = (char *)base58_decode((const char *)tmp, TBASE_MAX_OLEN + 1, NULL); + char *pDec = NULL; + (void)base58_decode((const char *)tmp, TBASE_MAX_OLEN + 1, NULL, (uint8_t**)&pDec); ASSERT_EQ(nullptr, pDec); taosMemoryFreeClear(pRaw); From 280c5d4b3db4acebba17b5a7428c3e13ffdab6f6 Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 22 Jul 2024 16:33:42 +0800 Subject: [PATCH 06/16] enh: return error code --- source/dnode/mnode/impl/src/mndAcct.c | 4 ++ source/dnode/mnode/impl/src/mndArbGroup.c | 4 ++ source/dnode/mnode/impl/src/mndCluster.c | 4 ++ source/dnode/mnode/impl/src/mndCompact.c | 4 ++ .../dnode/mnode/impl/src/mndCompactDetail.c | 10 +++-- source/dnode/mnode/impl/src/mndConsumer.c | 4 ++ source/dnode/mnode/impl/src/mndDb.c | 4 ++ source/dnode/mnode/impl/src/mndDnode.c | 4 ++ source/dnode/mnode/impl/src/mndFunc.c | 4 ++ source/dnode/mnode/impl/src/mndIndex.c | 4 ++ source/dnode/mnode/impl/src/mndMnode.c | 4 ++ source/dnode/mnode/impl/src/mndQnode.c | 4 ++ source/dnode/mnode/impl/src/mndSma.c | 4 ++ source/dnode/mnode/impl/src/mndSnode.c | 4 ++ source/dnode/mnode/impl/src/mndStb.c | 4 ++ source/dnode/mnode/impl/src/mndStream.c | 2 + source/dnode/mnode/impl/src/mndStreamTrans.c | 2 + source/dnode/mnode/impl/src/mndSubscribe.c | 4 ++ source/dnode/mnode/impl/src/mndTopic.c | 4 ++ source/dnode/mnode/impl/src/mndTrans.c | 9 +++- source/dnode/mnode/impl/src/mndUser.c | 40 +++++++++++------ source/dnode/mnode/impl/src/mndVgroup.c | 4 ++ source/dnode/mnode/sdb/inc/sdb.h | 43 +++++++++++-------- 23 files changed, 138 insertions(+), 36 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndAcct.c b/source/dnode/mnode/impl/src/mndAcct.c index 99f545ba74..425624d717 100644 --- a/source/dnode/mnode/impl/src/mndAcct.c +++ b/source/dnode/mnode/impl/src/mndAcct.c @@ -113,6 +113,8 @@ static int32_t mndCreateDefaultAcct(SMnode *pMnode) { } static SSdbRaw *mndAcctActionEncode(SAcctObj *pAcct) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_ACCT, ACCT_VER_NUMBER, sizeof(SAcctObj) + ACCT_RESERVE_SIZE); @@ -153,6 +155,8 @@ _OVER: } static SSdbRow *mndAcctActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SAcctObj *pAcct = NULL; SSdbRow *pRow = NULL; diff --git a/source/dnode/mnode/impl/src/mndArbGroup.c b/source/dnode/mnode/impl/src/mndArbGroup.c index c3c150ba50..2adb420abe 100644 --- a/source/dnode/mnode/impl/src/mndArbGroup.c +++ b/source/dnode/mnode/impl/src/mndArbGroup.c @@ -114,6 +114,8 @@ void mndArbGroupInitFromVgObj(SVgObj *pVgObj, SArbGroup *outGroup) { } SSdbRaw *mndArbGroupActionEncode(SArbGroup *pGroup) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; int32_t size = sizeof(SArbGroup) + ARBGROUP_RESERVE_SIZE; @@ -152,6 +154,8 @@ _OVER: } SSdbRow *mndArbGroupActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SArbGroup *pGroup = NULL; diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index 47f289dcfd..366e4543fe 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -144,6 +144,8 @@ int64_t mndGetClusterUpTime(SMnode *pMnode) { } static SSdbRaw *mndClusterActionEncode(SClusterObj *pCluster) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_CLUSTER, CLUSTER_VER_NUMBE, sizeof(SClusterObj) + CLUSTER_RESERVE_SIZE); @@ -172,6 +174,8 @@ _OVER: } static SSdbRow *mndClusterActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SClusterObj *pCluster = NULL; SSdbRow *pRow = NULL; diff --git a/source/dnode/mnode/impl/src/mndCompact.c b/source/dnode/mnode/impl/src/mndCompact.c index 065a9a327d..cdb4680ad6 100644 --- a/source/dnode/mnode/impl/src/mndCompact.c +++ b/source/dnode/mnode/impl/src/mndCompact.c @@ -88,6 +88,8 @@ int32_t tDeserializeSCompactObj(void *buf, int32_t bufLen, SCompactObj *pObj) { } SSdbRaw *mndCompactActionEncode(SCompactObj *pCompact) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_SUCCESS; void *buf = NULL; @@ -136,6 +138,8 @@ OVER: } SSdbRow *mndCompactActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; SSdbRow *pRow = NULL; SCompactObj *pCompact = NULL; void *buf = NULL; diff --git a/source/dnode/mnode/impl/src/mndCompactDetail.c b/source/dnode/mnode/impl/src/mndCompactDetail.c index 7d73cf8dcd..c68fbfac2d 100644 --- a/source/dnode/mnode/impl/src/mndCompactDetail.c +++ b/source/dnode/mnode/impl/src/mndCompactDetail.c @@ -144,6 +144,8 @@ int32_t tDeserializeSCompactDetailObj(void *buf, int32_t bufLen, SCompactDetailO } SSdbRaw *mndCompactDetailActionEncode(SCompactDetailObj *pCompact) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_SUCCESS; void *buf = NULL; @@ -193,9 +195,11 @@ OVER: } SSdbRow *mndCompactDetailActionDecode(SSdbRaw *pRaw) { - SSdbRow *pRow = NULL; - SCompactDetailObj *pCompact = NULL; - void *buf = NULL; + int32_t code = 0; + int32_t lino = 0; + SSdbRow *pRow = NULL; + SCompactDetailObj *pCompact = NULL; + void *buf = NULL; terrno = TSDB_CODE_SUCCESS; int8_t sver = 0; diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c index 7788bf005a..384bfb6747 100644 --- a/source/dnode/mnode/impl/src/mndConsumer.c +++ b/source/dnode/mnode/impl/src/mndConsumer.c @@ -700,6 +700,8 @@ _over: } SSdbRaw *mndConsumerActionEncode(SMqConsumerObj *pConsumer) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; void *buf = NULL; @@ -736,6 +738,8 @@ CM_ENCODE_OVER: } SSdbRow *mndConsumerActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; SSdbRow *pRow = NULL; SMqConsumerObj *pConsumer = NULL; void *buf = NULL; diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 1c9be5cf81..da041bc0dd 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -88,6 +88,8 @@ int32_t mndInitDb(SMnode *pMnode) { void mndCleanupDb(SMnode *pMnode) {} SSdbRaw *mndDbActionEncode(SDbObj *pDb) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; int32_t size = sizeof(SDbObj) + pDb->cfg.numOfRetensions * sizeof(SRetention) + DB_RESERVE_SIZE; @@ -166,6 +168,8 @@ _OVER: } static SSdbRow *mndDbActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SDbObj *pDb = NULL; diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 879f533635..c49c295234 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -184,6 +184,8 @@ _OVER: } static SSdbRaw *mndDnodeActionEncode(SDnodeObj *pDnode) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_DNODE, TSDB_DNODE_VER_NUMBER, sizeof(SDnodeObj) + TSDB_DNODE_RESERVE_SIZE); @@ -215,6 +217,8 @@ _OVER: } static SSdbRow *mndDnodeActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SDnodeObj *pDnode = NULL; diff --git a/source/dnode/mnode/impl/src/mndFunc.c b/source/dnode/mnode/impl/src/mndFunc.c index 333fdf83bb..ffbfc7fef7 100644 --- a/source/dnode/mnode/impl/src/mndFunc.c +++ b/source/dnode/mnode/impl/src/mndFunc.c @@ -61,6 +61,8 @@ int32_t mndInitFunc(SMnode *pMnode) { void mndCleanupFunc(SMnode *pMnode) {} static SSdbRaw *mndFuncActionEncode(SFuncObj *pFunc) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; int32_t size = pFunc->commentSize + pFunc->codeSize + sizeof(SFuncObj) + SDB_FUNC_RESERVE_SIZE; @@ -101,6 +103,8 @@ _OVER: } static SSdbRow *mndFuncActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SFuncObj *pFunc = NULL; diff --git a/source/dnode/mnode/impl/src/mndIndex.c b/source/dnode/mnode/impl/src/mndIndex.c index bb77f6c69b..acb8a23756 100644 --- a/source/dnode/mnode/impl/src/mndIndex.c +++ b/source/dnode/mnode/impl/src/mndIndex.c @@ -207,6 +207,8 @@ void mndCleanupIdx(SMnode *pMnode) { } static SSdbRaw *mndIdxActionEncode(SIdxObj *pIdx) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; // int32_t size = @@ -244,6 +246,8 @@ _OVER: } static SSdbRow *mndIdxActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SIdxObj *pIdx = NULL; diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index 7b1ca9c625..014d6468ff 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -127,6 +127,8 @@ static int32_t mndCreateDefaultMnode(SMnode *pMnode) { } static SSdbRaw *mndMnodeActionEncode(SMnodeObj *pObj) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_MNODE, MNODE_VER_NUMBER, sizeof(SMnodeObj) + MNODE_RESERVE_SIZE); @@ -154,6 +156,8 @@ _OVER: } static SSdbRow *mndMnodeActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SMnodeObj *pObj = NULL; diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index 6cf0fbd387..d6647f88f2 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -75,6 +75,8 @@ void mndReleaseQnode(SMnode *pMnode, SQnodeObj *pObj) { } static SSdbRaw *mndQnodeActionEncode(SQnodeObj *pObj) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_QNODE, QNODE_VER_NUMBER, sizeof(SQnodeObj) + QNODE_RESERVE_SIZE); @@ -100,6 +102,8 @@ _OVER: } static SSdbRow *mndQnodeActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SQnodeObj *pObj = NULL; diff --git a/source/dnode/mnode/impl/src/mndSma.c b/source/dnode/mnode/impl/src/mndSma.c index 946df84a0f..001ad83388 100644 --- a/source/dnode/mnode/impl/src/mndSma.c +++ b/source/dnode/mnode/impl/src/mndSma.c @@ -112,6 +112,8 @@ int32_t mndInitSma(SMnode *pMnode) { void mndCleanupSma(SMnode *pMnode) {} static SSdbRaw *mndSmaActionEncode(SSmaObj *pSma) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; int32_t size = @@ -173,6 +175,8 @@ _OVER: } static SSdbRow *mndSmaActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SSmaObj *pSma = NULL; diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index 4243ccb77c..3f65e1c58b 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -79,6 +79,8 @@ void mndReleaseSnode(SMnode *pMnode, SSnodeObj *pObj) { } static SSdbRaw *mndSnodeActionEncode(SSnodeObj *pObj) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_SNODE, SNODE_VER_NUMBER, sizeof(SSnodeObj) + SNODE_RESERVE_SIZE); @@ -104,6 +106,8 @@ _OVER: } static SSdbRow *mndSnodeActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SSnodeObj *pObj = NULL; diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 3fac879ca9..c5e6f38238 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -115,6 +115,8 @@ int32_t mndInitStb(SMnode *pMnode) { void mndCleanupStb(SMnode *pMnode) {} SSdbRaw *mndStbActionEncode(SStbObj *pStb) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; int32_t size = sizeof(SStbObj) + (pStb->numOfColumns + pStb->numOfTags) * sizeof(SSchema) + pStb->commentLen + @@ -205,6 +207,8 @@ _OVER: } static SSdbRow *mndStbActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SStbObj *pStb = NULL; diff --git a/source/dnode/mnode/impl/src/mndStream.c b/source/dnode/mnode/impl/src/mndStream.c index d57dc6e52e..32a76afa5b 100644 --- a/source/dnode/mnode/impl/src/mndStream.c +++ b/source/dnode/mnode/impl/src/mndStream.c @@ -160,6 +160,8 @@ void mndCleanupStream(SMnode *pMnode) { } SSdbRow *mndStreamActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; diff --git a/source/dnode/mnode/impl/src/mndStreamTrans.c b/source/dnode/mnode/impl/src/mndStreamTrans.c index f252791618..b39487b79f 100644 --- a/source/dnode/mnode/impl/src/mndStreamTrans.c +++ b/source/dnode/mnode/impl/src/mndStreamTrans.c @@ -177,6 +177,8 @@ STrans *doCreateTrans(SMnode *pMnode, SStreamObj *pStream, SRpcMsg *pReq, ETrnCo } SSdbRaw *mndStreamActionEncode(SStreamObj *pStream) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; void *buf = NULL; diff --git a/source/dnode/mnode/impl/src/mndSubscribe.c b/source/dnode/mnode/impl/src/mndSubscribe.c index e2bedc258a..43e291dc6b 100644 --- a/source/dnode/mnode/impl/src/mndSubscribe.c +++ b/source/dnode/mnode/impl/src/mndSubscribe.c @@ -1096,6 +1096,8 @@ end: void mndCleanupSubscribe(SMnode *pMnode) {} static SSdbRaw *mndSubActionEncode(SMqSubscribeObj *pSub) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; void *buf = NULL; int32_t tlen = tEncodeSubscribeObj(NULL, pSub); @@ -1132,6 +1134,8 @@ SUB_ENCODE_OVER: } static SSdbRow *mndSubActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SMqSubscribeObj *pSub = NULL; diff --git a/source/dnode/mnode/impl/src/mndTopic.c b/source/dnode/mnode/impl/src/mndTopic.c index bcb38a3902..2c7f83729a 100644 --- a/source/dnode/mnode/impl/src/mndTopic.c +++ b/source/dnode/mnode/impl/src/mndTopic.c @@ -76,6 +76,8 @@ const char *mndTopicGetShowName(const char topic[TSDB_TOPIC_FNAME_LEN]) { } SSdbRaw *mndTopicActionEncode(SMqTopicObj *pTopic) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; void *swBuf = NULL; @@ -163,6 +165,8 @@ TOPIC_ENCODE_OVER: } SSdbRow *mndTopicActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SMqTopicObj *pTopic = NULL; diff --git a/source/dnode/mnode/impl/src/mndTrans.c b/source/dnode/mnode/impl/src/mndTrans.c index 58dab20859..49d1a4ca97 100644 --- a/source/dnode/mnode/impl/src/mndTrans.c +++ b/source/dnode/mnode/impl/src/mndTrans.c @@ -105,6 +105,8 @@ static int32_t mndTransGetActionsSize(SArray *pArray) { } static int32_t mndTransEncodeAction(SSdbRaw *pRaw, int32_t *offset, SArray *pActions, int32_t actionsNum) { + int32_t code = 0; + int32_t lino = 0; int32_t dataPos = *offset; int8_t unused = 0; int32_t ret = -1; @@ -142,6 +144,8 @@ _OVER: } SSdbRaw *mndTransEncode(STrans *pTrans) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_INVALID_MSG; int8_t sver = taosArrayGetSize(pTrans->prepareActions) ? TRANS_VER2_NUMBER : TRANS_VER1_NUMBER; @@ -225,6 +229,8 @@ _OVER: } static int32_t mndTransDecodeAction(SSdbRaw *pRaw, int32_t *offset, SArray *pActions, int32_t actionNum) { + int32_t code = 0; + int32_t lino = 0; STransAction action = {0}; int32_t dataPos = *offset; int8_t unused = 0; @@ -279,7 +285,8 @@ _OVER: SSdbRow *mndTransDecode(SSdbRaw *pRaw) { terrno = TSDB_CODE_INVALID_MSG; - + int32_t code = 0; + int32_t lino = 0; SSdbRow *pRow = NULL; STrans *pTrans = NULL; char *pData = NULL; diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index bae617013c..32b82633fe 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -784,11 +784,11 @@ static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppList) SDecoder decoder = {0}; tDecoderInit(&decoder, buf, len); - TAOS_CHECK_GOTO(tStartDecode(&decoder), &lino, _OVER), &lino, _OVER); - TAOS_CHECK_GOTO(tDecodeI32(&decoder, &num), &lino, _OVER), &lino, _OVER); + TAOS_CHECK_GOTO(tStartDecode(&decoder), &lino, _OVER); + TAOS_CHECK_GOTO(tDecodeI32(&decoder, &num), &lino, _OVER); p = taosMemoryCalloc(1, sizeof(SIpWhiteList) + num * sizeof(SIpV4Range)); - if(p == NULL) { + if (p == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } TAOS_CHECK_GOTO(tDerializeIpWhileList(buf, len, p), &lino, _OVER); @@ -796,7 +796,12 @@ static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppList) _OVER: tEndDecode(&decoder); tDecoderClear(&decoder); - return p; + if (code != 0) { + taosMemoryFreeClear(p); + mError("failed to create ip white list at line %d since %s", lino, tstrerror(code)); + } + *ppList = p; + TAOS_RETURN(code); } static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList) { @@ -876,7 +881,8 @@ static int32_t mndCreateDefaultUsers(SMnode *pMnode) { } SSdbRaw *mndUserActionEncode(SUserObj *pUser) { - int32_t code = TSDB_CODE_OUT_OF_MEMORY; + int32_t code = 0; + int32_t lino = 0; int32_t ipWhiteReserve = pUser->pIpWhiteList ? (sizeof(SIpV4Range) * pUser->pIpWhiteList->num + sizeof(SIpWhiteList) + 4) : 16; @@ -989,7 +995,7 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { SSdbRaw *pRaw = sdbAllocRaw(SDB_USER, USER_VER_NUMBER, size); if (pRaw == NULL) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } int32_t dataPos = 0; @@ -1744,21 +1750,30 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate if(pUniqueTab == NULL){ TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - int32_t dummpy = 0; + int32_t dummpy = 0; for (int i = 0; i < pCreate->numIpRanges; i++) { SIpV4Range range = {.ip = pCreate->pIpRanges[i].ip, .mask = pCreate->pIpRanges[i].mask}; - if(code = taosHashPut(pUniqueTab, &range, sizeof(range), &dummpy, sizeof(dummpy)); + if ((code = taosHashPut(pUniqueTab, &range, sizeof(range), &dummpy, sizeof(dummpy))) != 0) { + taosHashCleanup(pUniqueTab); + TAOS_RETURN(code); + } + } + if ((code = taosHashPut(pUniqueTab, &defaultIpRange, sizeof(defaultIpRange), &dummpy, sizeof(dummpy))) != 0) { + taosHashCleanup(pUniqueTab); + TAOS_RETURN(code); } - taosHashPut(pUniqueTab, &defaultIpRange, sizeof(defaultIpRange), &dummpy, sizeof(dummpy)); if (taosHashGetSize(pUniqueTab) > MND_MAX_USE_HOST) { - terrno = TSDB_CODE_MND_TOO_MANY_USER_HOST; taosHashCleanup(pUniqueTab); - return terrno; + TAOS_RETURN(TSDB_CODE_MND_TOO_MANY_USER_HOST); } int32_t numOfRanges = taosHashGetSize(pUniqueTab); SIpWhiteList *p = taosMemoryCalloc(1, sizeof(SIpWhiteList) + numOfRanges * sizeof(SIpV4Range)); + if (p == NULL) { + taosHashCleanup(pUniqueTab); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } void *pIter = taosHashIterate(pUniqueTab, NULL); int32_t i = 0; while (pIter) { @@ -1781,9 +1796,8 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "create-user"); if (pTrans == NULL) { mError("user:%s, failed to create since %s", pCreate->user, terrstr()); - taosMemoryFree(userObj.pIpWhiteList); - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } mInfo("trans:%d, used to create user:%s", pTrans->id, pCreate->user); diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c index 0422bfabff..160d16667f 100644 --- a/source/dnode/mnode/impl/src/mndVgroup.c +++ b/source/dnode/mnode/impl/src/mndVgroup.c @@ -89,6 +89,8 @@ int32_t mndInitVgroup(SMnode *pMnode) { void mndCleanupVgroup(SMnode *pMnode) {} SSdbRaw *mndVgroupActionEncode(SVgObj *pVgroup) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRaw *pRaw = sdbAllocRaw(SDB_VGROUP, VGROUP_VER_NUMBER, sizeof(SVgObj) + VGROUP_RESERVE_SIZE); @@ -127,6 +129,8 @@ _OVER: } SSdbRow *mndVgroupActionDecode(SSdbRaw *pRaw) { + int32_t code = 0; + int32_t lino = 0; terrno = TSDB_CODE_OUT_OF_MEMORY; SSdbRow *pRow = NULL; SVgObj *pVgroup = NULL; diff --git a/source/dnode/mnode/sdb/inc/sdb.h b/source/dnode/mnode/sdb/inc/sdb.h index fc9b89a141..5bb8ae2b5e 100644 --- a/source/dnode/mnode/sdb/inc/sdb.h +++ b/source/dnode/mnode/sdb/inc/sdb.h @@ -39,18 +39,20 @@ extern "C" { #define SDB_GET_VAL(pData, dataPos, val, pos, func, type) \ { \ - if (func(pRaw, dataPos, val) != 0) { \ + if ((code = func(pRaw, dataPos, val)) != 0) { \ + lino = __LINE__; \ goto pos; \ } \ dataPos += sizeof(type); \ } -#define SDB_GET_BINARY(pRaw, dataPos, val, valLen, pos) \ - { \ - if (sdbGetRawBinary(pRaw, dataPos, val, valLen) != 0) { \ - goto pos; \ - } \ - dataPos += valLen; \ +#define SDB_GET_BINARY(pRaw, dataPos, val, valLen, pos) \ + { \ + if ((code = sdbGetRawBinary(pRaw, dataPos, val, valLen)) != 0) { \ + lino = __LINE__; \ + goto pos; \ + } \ + dataPos += valLen; \ } #define SDB_GET_INT64(pData, dataPos, val, pos) SDB_GET_VAL(pData, dataPos, val, pos, sdbGetRawInt64, int64_t) @@ -67,7 +69,8 @@ extern "C" { #define SDB_SET_VAL(pRaw, dataPos, val, pos, func, type) \ { \ - if (func(pRaw, dataPos, val) != 0) { \ + if ((code = func(pRaw, dataPos, val)) != 0) { \ + lino = __LINE__; \ goto pos; \ } \ dataPos += sizeof(type); \ @@ -79,12 +82,13 @@ extern "C" { #define SDB_SET_INT8(pRaw, dataPos, val, pos) SDB_SET_VAL(pRaw, dataPos, val, pos, sdbSetRawInt8, int8_t) #define SDB_SET_UINT8(pRaw, dataPos, val, pos) SDB_SET_VAL(pRaw, dataPos, val, pos, sdbSetRawUInt8, uint8_t) -#define SDB_SET_BINARY(pRaw, dataPos, val, valLen, pos) \ - { \ - if (sdbSetRawBinary(pRaw, dataPos, val, valLen) != 0) { \ - goto pos; \ - } \ - dataPos += valLen; \ +#define SDB_SET_BINARY(pRaw, dataPos, val, valLen, pos) \ + { \ + if ((code = sdbSetRawBinary(pRaw, dataPos, val, valLen)) != 0) { \ + lino = __LINE__; \ + goto pos; \ + } \ + dataPos += valLen; \ } #define SDB_SET_RESERVE(pRaw, dataPos, valLen, pos) \ @@ -93,11 +97,12 @@ extern "C" { SDB_SET_BINARY(pRaw, dataPos, val, valLen, pos) \ } -#define SDB_SET_DATALEN(pRaw, dataLen, pos) \ - { \ - if (sdbSetRawDataLen(pRaw, dataLen) != 0) { \ - goto pos; \ - } \ +#define SDB_SET_DATALEN(pRaw, dataLen, pos) \ + { \ + if ((code = sdbSetRawDataLen(pRaw, dataLen)) != 0) { \ + lino = __LINE__; \ + goto pos; \ + } \ } typedef struct SMnode SMnode; From 67aeb8d27110f728212073da0f0bddb12af5671c Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 22 Jul 2024 19:24:00 +0800 Subject: [PATCH 07/16] enh: return error code --- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 9 +- source/dnode/mnode/impl/src/mndUser.c | 319 +++++++++++++----------- 2 files changed, 169 insertions(+), 159 deletions(-) diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index fcb21267e8..e5f601abfe 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -109,13 +109,6 @@ static int32_t dmCheckDiskSpace() { return code; } -int32_t tfsOpenWrapper(SDiskCfg *pCfg, int32_t ndisk, STfs **tfs) { - *tfs = tfsOpen(pCfg, ndisk); - if (*tfs == NULL) { - return terrno; - } - return 0; -} int32_t dmDiskInit() { SDnode *pDnode = dmInstance(); SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0}; @@ -127,7 +120,7 @@ int32_t dmDiskInit() { numOfDisks = 1; } - int32_t code = tfsOpenWrapper(pDisks, numOfDisks, &pDnode->pTfs); + int32_t code = tfsOpen(pDisks, numOfDisks, &pDnode->pTfs); if (code != 0) { dError("failed to init tfs since %s", tstrerror(code)); TAOS_RETURN(code); diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 32b82633fe..8e7ad30332 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -143,6 +143,7 @@ static int32_t ipWhiteMgtInit() { } ipWhiteMgt.ver = 0; taosThreadRwlockInit(&ipWhiteMgt.rw, NULL); + TAOS_RETURN(0); } void ipWhiteMgtCleanup() { destroyIpWhiteTab(ipWhiteMgt.pIpWhiteTab); @@ -731,24 +732,32 @@ int32_t convertIpWhiteListToStr(SIpWhiteList *pList, char **buf) { } return strlen(*buf); } -int32_t tSerializeIpWhiteList(void *buf, int32_t len, SIpWhiteList *pList) { +int32_t tSerializeIpWhiteList(void *buf, int32_t len, SIpWhiteList *pList, uint32_t *pLen) { + int32_t code = 0; + int32_t lino = 0; + int32_t tlen = 0; SEncoder encoder = {0}; tEncoderInit(&encoder, buf, len); - if (tStartEncode(&encoder) < 0) return -1; - if (tEncodeI32(&encoder, pList->num) < 0) return -1; + TAOS_CHECK_GOTO(tStartEncode(&encoder), &lino, _OVER); + TAOS_CHECK_GOTO(tEncodeI32(&encoder, pList->num), &lino, _OVER); for (int i = 0; i < pList->num; i++) { SIpV4Range *pRange = &(pList->pIpRange[i]); - if (tEncodeU32(&encoder, pRange->ip) < 0) return -1; - if (tEncodeU32(&encoder, pRange->mask) < 0) return -1; + TAOS_CHECK_GOTO(tEncodeU32(&encoder, pRange->ip), &lino, _OVER); + TAOS_CHECK_GOTO(tEncodeU32(&encoder, pRange->mask), &lino, _OVER); } tEndEncode(&encoder); - int32_t tlen = encoder.pos; + tlen = encoder.pos; +_OVER: tEncoderClear(&encoder); - return tlen; + if (code != 0) { + mError("failed to serialize ip white list at line %d since %s", lino, tstrerror(code)); + } + if (pLen) *pLen = tlen; + TAOS_RETURN(code); } int32_t tDerializeIpWhileList(void *buf, int32_t len, SIpWhiteList *pList) { @@ -869,7 +878,7 @@ static int32_t mndCreateDefaultUser(SMnode *pMnode, char *acct, char *user, char return 0; _ERROR: taosMemoryFree(userObj.pIpWhiteList); - return -1; + TAOS_RETURN(terrno ? terrno : -1); } static int32_t mndCreateDefaultUsers(SMnode *pMnode) { @@ -883,7 +892,6 @@ static int32_t mndCreateDefaultUsers(SMnode *pMnode) { SSdbRaw *mndUserActionEncode(SUserObj *pUser) { int32_t code = 0; int32_t lino = 0; - int32_t ipWhiteReserve = pUser->pIpWhiteList ? (sizeof(SIpV4Range) * pUser->pIpWhiteList->num + sizeof(SIpWhiteList) + 4) : 16; int32_t numOfReadDbs = taosHashGetSize(pUser->readDbs); @@ -898,6 +906,8 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { int32_t numOfUseDbs = taosHashGetSize(pUser->useDbs); int32_t size = sizeof(SUserObj) + USER_RESERVE_SIZE + (numOfReadDbs + numOfWriteDbs) * TSDB_DB_FNAME_LEN + numOfTopics * TSDB_TOPIC_FNAME_LEN + ipWhiteReserve; + char *buf = NULL; + SSdbRaw *pRaw = NULL; char *stb = taosHashIterate(pUser->readTbs, NULL); while (stb != NULL) { @@ -993,7 +1003,7 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { useDb = taosHashIterate(pUser->useDbs, useDb); } - SSdbRaw *pRaw = sdbAllocRaw(SDB_USER, USER_VER_NUMBER, size); + pRaw = sdbAllocRaw(SDB_USER, USER_VER_NUMBER, size); if (pRaw == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1138,31 +1148,32 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { // save white list int32_t num = pUser->pIpWhiteList->num; int32_t tlen = sizeof(SIpWhiteList) + num * sizeof(SIpV4Range) + 4; - char *buf = taosMemoryCalloc(1, tlen); - if (buf == NULL) { + if ((buf = taosMemoryCalloc(1, tlen)) == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } - int32_t len = tSerializeIpWhiteList(buf, tlen, pUser->pIpWhiteList); + int32_t len = 0; + TAOS_CHECK_GOTO(tSerializeIpWhiteList(buf, tlen, pUser->pIpWhiteList, &len), &lino, _OVER); SDB_SET_INT32(pRaw, dataPos, len, _OVER); SDB_SET_BINARY(pRaw, dataPos, buf, len, _OVER); - taosMemoryFree(buf); + SDB_SET_INT64(pRaw, dataPos, pUser->ipWhiteListVer, _OVER); SDB_SET_RESERVE(pRaw, dataPos, USER_RESERVE_SIZE, _OVER) SDB_SET_DATALEN(pRaw, dataPos, _OVER) - code = 0; - _OVER: + taosMemoryFree(buf); if (code != 0) { - mError("user:%s, failed to encode to raw:%p since %s", pUser->user, pRaw, tstrerror(code)); + mError("user:%s, failed to encode user action to raw:%p at line %d since %s", pUser->user, pRaw, lino, + tstrerror(code)); sdbFreeRaw(pRaw); - return NULL; + pRaw = NULL; + terrno = code; } - mTrace("user:%s, encode to raw:%p, row:%p", pUser->user, pRaw, pUser); + mTrace("user:%s, encode user action to raw:%p, row:%p", pUser->user, pRaw, pUser); return pRaw; } @@ -1921,42 +1932,53 @@ _OVER: int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; - int32_t code = -1; + int32_t code = 0; + int32_t lino = 0; + int32_t contLen = 0; + void *pRsp = NULL; SUserObj *pUser = NULL; SGetUserWhiteListReq wlReq = {0}; SGetUserWhiteListRsp wlRsp = {0}; if (tDeserializeSGetUserWhiteListReq(pReq->pCont, pReq->contLen, &wlReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_MSG, &lino, _OVER); } mTrace("user: %s, start to get whitelist", wlReq.user); - pUser = mndAcquireUser(pMnode, wlReq.user); + code = mndAcquireUser(pMnode, wlReq.user, &pUser); if (pUser == NULL) { - terrno = TSDB_CODE_MND_USER_NOT_EXIST; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_USER_NOT_EXIST, &lino, _OVER); } - code = mndSetUserWhiteListRsp(pMnode, pUser, &wlRsp); - if (code) { - goto _OVER; + TAOS_CHECK_GOTO(mndSetUserWhiteListRsp(pMnode, pUser, &wlRsp), &lino, _OVER); + + contLen = tSerializeSGetUserWhiteListRsp(NULL, 0, &wlRsp); + if (contLen < 0) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - int32_t contLen = tSerializeSGetUserWhiteListRsp(NULL, 0, &wlRsp); - void *pRsp = rpcMallocCont(contLen); + pRsp = rpcMallocCont(contLen); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - tSerializeSGetUserWhiteListRsp(pRsp, contLen, &wlRsp); + contLen = tSerializeSGetUserWhiteListRsp(pRsp, contLen, &wlRsp); + if(contLen < 0) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } - pReq->info.rsp = pRsp; - pReq->info.rspLen = contLen; - code = 0; _OVER: mndReleaseUser(pMnode, pUser); tFreeSGetUserWhiteListRsp(&wlRsp); + if (code != 0) { + mError("user:%s, failed to get whitelist at line %d since %s", wlReq.user, lino, tstrerror(code)); + rpcFreeCont(pRsp); + pRsp = NULL; + contLen = 0; + } + pReq->code = code; + pReq->info.rsp = pRsp; + pReq->info.rspLen = contLen; + TAOS_RETURN(code); } @@ -2073,18 +2095,13 @@ static int32_t mndTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj *useD if (alterReq->tagCond != NULL && alterReq->tagCondLen != 0) { char *value = taosHashGet(hash, tbFName, len); if (value != NULL) { - terrno = TSDB_CODE_MND_PRIVILEDGE_EXIST; - return -1; + TAOS_RETURN(TSDB_CODE_MND_PRIVILEDGE_EXIST); } int32_t condLen = alterReq->tagCondLen; - if (taosHashPut(hash, tbFName, len, alterReq->tagCond, condLen) != 0) { - return -1; - } + TAOS_CHECK_RETURN(taosHashPut(hash, tbFName, len, alterReq->tagCond, condLen)); } else { - if (taosHashPut(hash, tbFName, len, alterReq->isView ? "v" : "t", 2) != 0) { - return -1; - } + TAOS_CHECK_RETURN(taosHashPut(hash, tbFName, len, alterReq->isView ? "v" : "t", 2)); } int32_t dbKeyLen = strlen(alterReq->objname) + 1; @@ -2093,11 +2110,9 @@ static int32_t mndTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj *useD if (NULL != currRef) { ref = (*currRef) + 1; } - if (taosHashPut(useDbHash, alterReq->objname, dbKeyLen, &ref, sizeof(ref)) != 0) { - return -1; - } + TAOS_CHECK_RETURN(taosHashPut(useDbHash, alterReq->objname, dbKeyLen, &ref, sizeof(ref))); - return 0; + TAOS_RETURN(0); } static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj *useDbHash, SAlterUserReq *alterReq, @@ -2108,7 +2123,7 @@ static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj int32_t len = strlen(tbFName) + 1; if (taosHashRemove(hash, tbFName, len) != 0) { - return -1; + TAOS_RETURN(TSDB_CODE_NOT_FOUND); } int32_t dbKeyLen = strlen(alterReq->objname) + 1; @@ -2119,14 +2134,12 @@ static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj if (1 == *currRef) { if (taosHashRemove(useDbHash, alterReq->objname, dbKeyLen) != 0) { - return -1; + TAOS_RETURN(TSDB_CODE_NOT_FOUND); } return 0; } int32_t ref = (*currRef) - 1; - if (taosHashPut(useDbHash, alterReq->objname, dbKeyLen, &ref, sizeof(ref)) != 0) { - return -1; - } + TAOS_CHECK_RETURN(taosHashPut(useDbHash, alterReq->objname, dbKeyLen, &ref, sizeof(ref))); return 0; } @@ -2151,8 +2164,10 @@ static char *mndUserAuditTypeStr(int32_t type) { } static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode *pMnode, SUserObj *pNewUser) { - SSdb *pSdb = pMnode->pSdb; - void *pIter = NULL; + SSdb *pSdb = pMnode->pSdb; + void *pIter = NULL; + int32_t code = 0; + int32_t lino = 0; if (ALTER_USER_ADD_READ_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_DB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { @@ -2161,11 +2176,12 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_RETURN(terrno); } - if (taosHashPut(pNewUser->readDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN) != 0) { + if ((code = taosHashPut(pNewUser->readDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN)) != + 0) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_CHECK_GOTO(code, &lino, _OVER); } mndReleaseDb(pMnode, pDb); } else { @@ -2174,7 +2190,11 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode pIter = sdbFetch(pSdb, SDB_DB, pIter, (void **)&pDb); if (pIter == NULL) break; int32_t len = strlen(pDb->name) + 1; - taosHashPut(pNewUser->readDbs, pDb->name, len, pDb->name, TSDB_DB_FNAME_LEN); + if ((code = taosHashPut(pNewUser->readDbs, pDb->name, len, pDb->name, TSDB_DB_FNAME_LEN)) != 0) { + sdbRelease(pSdb, pDb); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(code, &lino, _OVER); + } sdbRelease(pSdb, pDb); } } @@ -2187,11 +2207,12 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_CHECK_GOTO(terrno, &lino, _OVER); } - if (taosHashPut(pNewUser->writeDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN) != 0) { + if ((code = taosHashPut(pNewUser->writeDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN)) != + 0) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_CHECK_GOTO(code, &lino, _OVER); } mndReleaseDb(pMnode, pDb); } else { @@ -2200,7 +2221,11 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode pIter = sdbFetch(pSdb, SDB_DB, pIter, (void **)&pDb); if (pIter == NULL) break; int32_t len = strlen(pDb->name) + 1; - taosHashPut(pNewUser->writeDbs, pDb->name, len, pDb->name, TSDB_DB_FNAME_LEN); + if ((code = taosHashPut(pNewUser->writeDbs, pDb->name, len, pDb->name, TSDB_DB_FNAME_LEN)) != 0) { + sdbRelease(pSdb, pDb); + sdbCancelFetch(pSdb, pIter); + TAOS_CHECK_GOTO(code, &lino, _OVER); + } sdbRelease(pSdb, pDb); } } @@ -2213,7 +2238,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_CHECK_GOTO(terrno, &lino, _OVER); } taosHashRemove(pNewUser->readDbs, pAlterReq->objname, len); mndReleaseDb(pMnode, pDb); @@ -2229,7 +2254,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - return -1; + TAOS_CHECK_GOTO(terrno, &lino, _OVER); } taosHashRemove(pNewUser->writeDbs, pAlterReq->objname, len); mndReleaseDb(pMnode, pDb); @@ -2252,32 +2277,32 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode if (ALTER_USER_ADD_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_ADD_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_ADD_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_ADD_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_DEL_READ_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndRemoveTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndRemoveTablePriviledge(pMnode, pReadTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_DEL_WRITE_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndRemoveTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndRemoveTablePriviledge(pMnode, pWriteTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_DEL_ALTER_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName) || ALTER_USER_DEL_ALL_TB_PRIV(pAlterReq->alterType, pAlterReq->privileges, pAlterReq->tabName)) { - if (mndRemoveTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb) != 0) return -1; + TAOS_CHECK_GOTO(mndRemoveTablePriviledge(pMnode, pAlterTbs, pNewUser->useDbs, pAlterReq, pSdb), &lino, _OVER); } if (ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(pAlterReq->alterType, pAlterReq->privileges)) { @@ -2285,9 +2310,12 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SMqTopicObj *pTopic = mndAcquireTopic(pMnode, pAlterReq->objname); if (pTopic == NULL) { mndReleaseTopic(pMnode, pTopic); - return -1; + TAOS_CHECK_GOTO(terrno, &lino, _OVER); + } + if ((code = taosHashPut(pNewUser->topics, pTopic->name, len, pTopic->name, TSDB_TOPIC_FNAME_LEN)) != 0) { + mndReleaseTopic(pMnode, pTopic); + TAOS_CHECK_GOTO(code, &lino, _OVER); } - taosHashPut(pNewUser->topics, pTopic->name, len, pTopic->name, TSDB_TOPIC_FNAME_LEN); mndReleaseTopic(pMnode, pTopic); } @@ -2296,60 +2324,53 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SMqTopicObj *pTopic = mndAcquireTopic(pMnode, pAlterReq->objname); if (pTopic == NULL) { mndReleaseTopic(pMnode, pTopic); - return -1; + TAOS_CHECK_GOTO(terrno, &lino, _OVER); } taosHashRemove(pNewUser->topics, pAlterReq->objname, len); mndReleaseTopic(pMnode, pTopic); } - return TSDB_CODE_SUCCESS; +_OVER: + if (code != 0) { + mError("user:%s, failed to alter user privileges at line %d since %s", pAlterReq->user, lino, terrstr()); + } + TAOS_RETURN(code); } static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; - int32_t code = -1; + int32_t code = 0; + int32_t lino = 0; SUserObj *pUser = NULL; SUserObj *pOperUser = NULL; SUserObj newUser = {0}; SAlterUserReq alterReq = {0}; - if (tDeserializeSAlterUserReq(pReq->pCont, pReq->contLen, &alterReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSAlterUserReq(pReq->pCont, pReq->contLen, &alterReq), &lino, _OVER); mInfo("user:%s, start to alter", alterReq.user); if (alterReq.user[0] == 0) { - terrno = TSDB_CODE_MND_INVALID_USER_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_USER_FORMAT, &lino, _OVER); } if (TSDB_ALTER_USER_PASSWD == alterReq.alterType && (alterReq.pass[0] == 0 || strlen(alterReq.pass) >= TSDB_PASSWORD_LEN)) { - terrno = TSDB_CODE_MND_INVALID_PASS_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_PASS_FORMAT, &lino, _OVER); } - pUser = mndAcquireUser(pMnode, alterReq.user); - if (pUser == NULL) { - terrno = TSDB_CODE_MND_USER_NOT_EXIST; - goto _OVER; - } + TAOS_CHECK_GOTO(mndAcquireUser(pMnode, alterReq.user, &pUser), &lino, _OVER); - pOperUser = mndAcquireUser(pMnode, pReq->info.conn.user); + mndAcquireUser(pMnode, pReq->info.conn.user, &pOperUser); if (pOperUser == NULL) { - terrno = TSDB_CODE_MND_NO_USER_FROM_CONN; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_NO_USER_FROM_CONN, &lino, _OVER); } - if (mndCheckAlterUserPrivilege(pOperUser, pUser, &alterReq) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckAlterUserPrivilege(pOperUser, pUser, &alterReq), &lino, _OVER); - if (mndUserDupObj(pUser, &newUser) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndUserDupObj(pUser, &newUser), &lino, _OVER); if (alterReq.alterType == TSDB_ALTER_USER_PASSWD) { char pass[TSDB_PASSWORD_LEN + 1] = {0}; @@ -2377,16 +2398,19 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { } if (ALTER_USER_ADD_PRIVS(alterReq.alterType) || ALTER_USER_DEL_PRIVS(alterReq.alterType)) { - if (0 != mndProcessAlterUserPrivilegesReq(&alterReq, pMnode, &newUser)) goto _OVER; + TAOS_CHECK_GOTO(mndProcessAlterUserPrivilegesReq(&alterReq, pMnode, &newUser), &lino, _OVER); } if (alterReq.alterType == TSDB_ALTER_USER_ADD_WHITE_LIST) { taosMemoryFreeClear(newUser.pIpWhiteList); - int32_t num = pUser->pIpWhiteList->num + alterReq.numIpRanges; - - SIpWhiteList *pNew = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * num); + int32_t num = pUser->pIpWhiteList->num + alterReq.numIpRanges; int32_t idx = pUser->pIpWhiteList->num; + SIpWhiteList *pNew = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * num); + + if (pNew == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } bool exist = false; memcpy(pNew->pIpRange, pUser->pIpWhiteList->pIpRange, sizeof(SIpV4Range) * idx); @@ -2403,27 +2427,27 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { } if (exist) { taosMemoryFree(pNew); - terrno = TSDB_CODE_MND_USER_HOST_EXIST; - code = terrno; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_USER_HOST_EXIST, &lino, _OVER); } pNew->num = idx; newUser.pIpWhiteList = pNew; newUser.ipWhiteListVer = pUser->ipWhiteListVer + 1; if (pNew->num > MND_MAX_USE_HOST) { - terrno = TSDB_CODE_MND_TOO_MANY_USER_HOST; - code = terrno; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_TOO_MANY_USER_HOST, &lino, _OVER); } } if (alterReq.alterType == TSDB_ALTER_USER_DROP_WHITE_LIST) { taosMemoryFreeClear(newUser.pIpWhiteList); int32_t num = pUser->pIpWhiteList->num; - SIpWhiteList *pNew = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * num); bool noexist = true; bool localHost = false; + SIpWhiteList *pNew = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * num); + + if(pNew == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } if (pUser->pIpWhiteList->num > 0) { int idx = 0; @@ -2461,14 +2485,10 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { } if (localHost) { - terrno = TSDB_CODE_MND_USER_LOCAL_HOST_NOT_DROP; - code = terrno; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_USER_LOCAL_HOST_NOT_DROP, &lino, _OVER); } if (noexist) { - terrno = TSDB_CODE_MND_USER_HOST_NOT_EXIST; - code = terrno; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_USER_HOST_NOT_EXIST, &lino, _OVER); } } @@ -2525,14 +2545,14 @@ _OVER: mndReleaseUser(pMnode, pUser); mndUserFreeObj(&newUser); - return code; + TAOS_RETURN(code); } static int32_t mndDropUser(SMnode *pMnode, SRpcMsg *pReq, SUserObj *pUser) { STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "drop-user"); if (pTrans == NULL) { mError("user:%s, failed to drop since %s", pUser->user, terrstr()); - return -1; + TAOS_RETURN(terrno); } mInfo("trans:%d, used to drop user:%s", pTrans->id, pUser->user); @@ -2540,97 +2560,94 @@ static int32_t mndDropUser(SMnode *pMnode, SRpcMsg *pReq, SUserObj *pUser) { if (pCommitRaw == NULL || mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { mError("trans:%d, failed to append commit log since %s", pTrans->id, terrstr()); mndTransDrop(pTrans); - return -1; + TAOS_RETURN(terrno); } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED); if (mndTransPrepare(pMnode, pTrans) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); mndTransDrop(pTrans); - return -1; + TAOS_RETURN(terrno); } ipWhiteMgtRemove(pUser->user); mndTransDrop(pTrans); - return 0; + TAOS_RETURN(0); } static int32_t mndProcessDropUserReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; - int32_t code = -1; + int32_t code = 0; + int32_t lino = 0; SUserObj *pUser = NULL; SDropUserReq dropReq = {0}; - if (tDeserializeSDropUserReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSDropUserReq(pReq->pCont, pReq->contLen, &dropReq), &lino, _OVER); mInfo("user:%s, start to drop", dropReq.user); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_USER) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_USER), &lino, _OVER); if (dropReq.user[0] == 0) { - terrno = TSDB_CODE_MND_INVALID_USER_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_USER_FORMAT, &lino, _OVER); } - pUser = mndAcquireUser(pMnode, dropReq.user); - if (pUser == NULL) { - terrno = TSDB_CODE_MND_USER_NOT_EXIST; - goto _OVER; - } + TAOS_CHECK_GOTO(mndAcquireUser(pMnode, dropReq.user, &pUser), &lino, _OVER); - code = mndDropUser(pMnode, pReq, pUser); + TAOS_CHECK_GOTO(mndDropUser(pMnode, pReq, pUser), &lino, _OVER); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; auditRecord(pReq, pMnode->clusterId, "dropUser", "", dropReq.user, dropReq.sql, dropReq.sqlLen); _OVER: if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("user:%s, failed to drop since %s", dropReq.user, terrstr()); + mError("user:%s, failed to drop at line %d since %s", dropReq.user, lino, tstrerror(code)); } mndReleaseUser(pMnode, pUser); tFreeSDropUserReq(&dropReq); - return code; + TAOS_RETURN(code); } static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; int32_t code = 0; + int32_t lino = 0; + int32_t contLen = 0; + void *pRsp = NULL; SUserObj *pUser = NULL; SGetUserAuthReq authReq = {0}; SGetUserAuthRsp authRsp = {0}; - if (tDeserializeSGetUserAuthReq(pReq->pCont, pReq->contLen, &authReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } - + TAOS_CHECK_GOTO(tDeserializeSGetUserAuthReq(pReq->pCont, pReq->contLen, &authReq), &lino, _OVER); mTrace("user:%s, start to get auth", authReq.user); - TAOS_CHECK_GOTO(mndAcquireUser(pMnode, authReq.user, &pUser), NULL, _OVER); + TAOS_CHECK_GOTO(mndAcquireUser(pMnode, authReq.user, &pUser), &lino, _OVER); - TAOS_CHECK_GOTO(mndSetUserAuthRsp(pMnode, pUser, &authRsp), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetUserAuthRsp(pMnode, pUser, &authRsp), &lino, _OVER); - int32_t contLen = tSerializeSGetUserAuthRsp(NULL, 0, &authRsp); - void *pRsp = rpcMallocCont(contLen); + contLen = tSerializeSGetUserAuthRsp(NULL, 0, &authRsp); + if (contLen < 0) { + TAOS_CHECK_GOTO(contLen, &lino, _OVER); + } + pRsp = rpcMallocCont(contLen); if (pRsp == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); } - TAOS_CHECK_GOTO(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp), NULL, _OVER); - - pReq->info.rsp = pRsp; - pReq->info.rspLen = contLen; - code = 0; + TAOS_CHECK_GOTO(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp), &lino, _OVER); _OVER: - mndReleaseUser(pMnode, pUser); tFreeSGetUserAuthRsp(&authRsp); + if (code != 0) { + mError("user:%s, failed to get auth at line %d since %s", authReq.user, lino, tstrerror(code)); + rpcFreeCont(pRsp); + pRsp = NULL; + contLen = 0; + } + pReq->info.rsp = pRsp; + pReq->info.rspLen = contLen; + pReq->code = code; TAOS_RETURN(code); } From 2ddf03fd74c7d6899d815d8de16119d4488eabec Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 23 Jul 2024 00:43:33 +0800 Subject: [PATCH 08/16] enh: return error code --- include/util/tutil.h | 9 +++++++++ source/dnode/mnode/impl/inc/mndShow.h | 8 +++----- source/dnode/mnode/impl/src/mndCluster.c | 12 ++++++------ source/dnode/mnode/impl/src/mndUser.c | 9 +++++---- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index 5af79dfc49..0e79480bfe 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -176,6 +176,15 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, } \ } while (0) +#define TAOS_CHECK_EXIT(CMD) \ + do { \ + code = (CMD); \ + if (code < TSDB_CODE_SUCCESS) { \ + lino = __LINE__; \ + goto _exit; \ + } \ + } while (0) + #define TAOS_UNUSED(expr) (void)(expr) #ifdef __cplusplus diff --git a/source/dnode/mnode/impl/inc/mndShow.h b/source/dnode/mnode/impl/inc/mndShow.h index c47b5d1e7b..25268c52bb 100644 --- a/source/dnode/mnode/impl/inc/mndShow.h +++ b/source/dnode/mnode/impl/inc/mndShow.h @@ -23,14 +23,12 @@ extern "C" { #endif -#define COL_DATA_SET_VAL_GOTO(pData, isNull, pObj, LINO) \ +#define COL_DATA_SET_VAL_GOTO(pData, isNull, pObj, LABEL) \ do { \ if ((code = colDataSetVal(pColInfo, numOfRows, (pData), (isNull))) != 0) { \ if (pObj) sdbRelease(pSdb, (pObj)); \ - if (LINO) { \ - *((int32_t *)(LINO)) = __LINE__; \ - } \ - goto _OVER; \ + lino = __LINE__; \ + goto LABEL; \ } \ } while (0) diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index 366e4543fe..6a6285e68e 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -302,31 +302,31 @@ static int32_t mndRetrieveClusters(SRpcMsg *pMsg, SShowObj *pShow, SSDataBlock * cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_GOTO((const char *)&pCluster->id, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO((const char *)&pCluster->id, false, pCluster, _OVER); char buf[tListLen(pCluster->name) + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(buf, pCluster->name, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_GOTO(buf, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO(buf, false, pCluster, _OVER); int32_t upTime = mndGetClusterUpTimeImp(pCluster); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_GOTO((const char *)&upTime, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO((const char *)&upTime, false, pCluster, _OVER); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_GOTO((const char *)&pCluster->createdTime, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO((const char *)&pCluster->createdTime, false, pCluster, _OVER); char ver[12] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(ver, tsVersionName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - COL_DATA_SET_VAL_GOTO((const char *)ver, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO((const char *)ver, false, pCluster, _OVER); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); if (tsExpireTime <= 0) { colDataSetNULL(pColInfo, numOfRows); } else { - COL_DATA_SET_VAL_GOTO((const char *)&tsExpireTime, false, pCluster, &lino); + COL_DATA_SET_VAL_GOTO((const char *)&tsExpireTime, false, pCluster, _OVER); } sdbRelease(pSdb, pCluster); diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 8e7ad30332..a7ba8a846e 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -1718,10 +1718,11 @@ static int32_t mndUserActionUpdate(SSdb *pSdb, SUserObj *pOld, SUserObj *pNew) { } int32_t mndAcquireUser(SMnode *pMnode, const char *userName, SUserObj **ppUser) { - int32_t code = 0; - SSdb *pSdb = pMnode->pSdb; - SUserObj *pUser = sdbAcquire(pSdb, SDB_USER, userName); - if (pUser == NULL) { + int32_t code = 0; + SSdb *pSdb = pMnode->pSdb; + + *ppUser = sdbAcquire(pSdb, SDB_USER, userName); + if (*ppUser == NULL) { if (code == TSDB_CODE_SDB_OBJ_NOT_THERE) { code = TSDB_CODE_MND_USER_NOT_EXIST; } else { From aaf01291cfcee2238cb92ba9146055336fa98f5f Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 23 Jul 2024 18:05:56 +0800 Subject: [PATCH 09/16] enh: refactor return code --- include/os/osMemory.h | 10 + include/util/tutil.h | 14 +- source/common/src/trow.c | 2 +- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 2 +- source/dnode/mnode/impl/src/mndDb.c | 9 +- source/dnode/mnode/impl/src/mndUser.c | 485 ++++++++++++----------- 6 files changed, 274 insertions(+), 248 deletions(-) diff --git a/include/os/osMemory.h b/include/os/osMemory.h index 7f2963f15a..0cb4534d83 100644 --- a/include/os/osMemory.h +++ b/include/os/osMemory.h @@ -65,6 +65,16 @@ void *taosMemoryMallocAlign(uint32_t alignment, int64_t size); } \ } while (0) +#define TAOS_MEMORY_REALLOC(ptr, len) \ + do { \ + void *tmp = taosMemoryRealloc(ptr, (len)); \ + if (tmp) { \ + (ptr) = tmp; \ + } else { \ + taosMemoryFreeClear(ptr); \ + } \ + } while (0) + #ifdef __cplusplus } #endif diff --git a/include/util/tutil.h b/include/util/tutil.h index 0e79480bfe..823ffba23b 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -157,18 +157,18 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, return (terrno = (code)); \ } while (0) -#define TAOS_CHECK_RETURN(CMD) \ - do { \ - int32_t code = (CMD); \ - if (code != TSDB_CODE_SUCCESS) { \ - TAOS_RETURN(code); \ - } \ +#define TAOS_CHECK_RETURN(CMD) \ + do { \ + int32_t code = (CMD); \ + if (code < TSDB_CODE_SUCCESS) { \ + TAOS_RETURN(code); \ + } \ } while (0) #define TAOS_CHECK_GOTO(CMD, LINO, LABEL) \ do { \ code = (CMD); \ - if (code != TSDB_CODE_SUCCESS) { \ + if (code < TSDB_CODE_SUCCESS) { \ if (LINO) { \ *((int32_t *)(LINO)) = __LINE__; \ } \ diff --git a/source/common/src/trow.c b/source/common/src/trow.c index 075f29454f..7234e5c5f6 100644 --- a/source/common/src/trow.c +++ b/source/common/src/trow.c @@ -535,7 +535,7 @@ int32_t tdSTSRowNew(SArray *pArray, STSchema *pTSchema, STSRow **ppRow, int8_t r _exit: taosMemoryFreeClear(varBuf); - if (code != 0) { + if (code < 0) { if (isAlloc) { taosMemoryFreeClear(*ppRow); } diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index 498ccd7c0c..ccbfeb5aa5 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -182,7 +182,7 @@ int32_t dmInitVars(SDnode *pDnode) { code = 0; strncpy(tsEncryptKey, tsAuthCode, 16); - if(code != 0) { + if (code != 0) { if(code == -1){ terrno = TSDB_CODE_DNODE_NO_ENCRYPT_KEY; dError("machine code changed, can't get crypt key"); diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index da041bc0dd..a6d37a5566 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -735,8 +735,9 @@ static int32_t mndSetCreateDbUndoActions(SMnode *pMnode, STrans *pTrans, SDbObj } static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, SUserObj *pUser) { - int32_t code = -1; - SDbObj dbObj = {0}; + int32_t code = 0; + SUserObj newUserObj = {0}; + SDbObj dbObj = {0}; memcpy(dbObj.name, pCreate->db, TSDB_DB_FNAME_LEN); memcpy(dbObj.acct, pUser->acct, TSDB_USER_LEN); dbObj.createdTime = taosGetTimestampMs(); @@ -816,7 +817,7 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, } // add database privileges for user - SUserObj newUserObj = {0}, *pNewUserDuped = NULL; + SUserObj *pNewUserDuped = NULL; if (!pUser->superUser) { TAOS_CHECK_GOTO(mndUserDupObj(pUser, &newUserObj), NULL, _OVER); taosHashPut(newUserObj.readDbs, dbObj.name, strlen(dbObj.name) + 1, dbObj.name, TSDB_FILENAME_LEN); @@ -845,8 +846,6 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, TAOS_CHECK_GOTO(mndSetCreateDbUndoActions(pMnode, pTrans, &dbObj, pVgroups), NULL, _OVER); TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); - code = 0; - _OVER: taosMemoryFree(pVgroups); mndUserFreeObj(&newUserObj); diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index add46bf1d6..1e6d09df44 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -96,7 +96,7 @@ (ALTER_USER_DEL_PRIVS(_type) && ALTER_USER_SUBSCRIBE_PRIV(_priv)) static int32_t createDefaultIpWhiteList(SIpWhiteList **ppWhiteList); -static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppWhiteList); +static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppWhiteList); static bool updateIpWhiteList(SIpWhiteList *pOld, SIpWhiteList *pNew); static bool isIpWhiteListEqual(SIpWhiteList *a, SIpWhiteList *b); static bool isIpRangeEqual(SIpV4Range *a, SIpV4Range *b); @@ -121,7 +121,7 @@ static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock static void mndCancelGetNextUser(SMnode *pMnode, void *pIter); static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows); static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter); -static int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab); +static int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab); static int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq); static int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8_t type, bool *pUpdate); @@ -154,6 +154,7 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { int32_t code = 0; int32_t lino = 0; bool update = true; + SArray *fqdns = NULL; taosThreadRwlockWrlock(&ipWhiteMgt.rw); SIpWhiteList **ppList = taosHashGet(ipWhiteMgt.pIpWhiteTab, user, strlen(user)); @@ -186,7 +187,12 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { } } } - SArray *fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: update this line after refactor api + + fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: update this line after refactor api + if (fqdns == NULL) { + update = false; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } for (int i = 0; i < taosArrayGetSize(fqdns); i++) { char *fqdn = taosArrayGetP(fqdns, i); @@ -198,12 +204,6 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { update |= upd; } - for (int i = 0; i < taosArrayGetSize(fqdns); i++) { - char *fqdn = taosArrayGetP(fqdns, i); - taosMemoryFree(fqdn); - } - taosArrayDestroy(fqdns); - // for (int i = 0; i < taosArrayGetSize(pUserNames); i++) { // taosMemoryFree(taosArrayGetP(pUserNames, i)); // } @@ -213,7 +213,8 @@ int32_t ipWhiteMgtUpdate(SMnode *pMnode, char *user, SIpWhiteList *pNew) { _OVER: taosThreadRwlockUnlock(&ipWhiteMgt.rw); - if (code != 0) { + taosArrayDestroyP(fqdns, (FDelete)taosMemoryFree); + if (code < 0) { mError("failed to update ip white list for user: %s at line %d since %s", user, lino, tstrerror(code)); } TAOS_RETURN(code); @@ -301,6 +302,8 @@ static int32_t ipWhiteMgtUpdateAll(SMnode *pMnode) { destroyIpWhiteTab(pOld); TAOS_RETURN(0); } + +#if 0 void ipWhiteMgtUpdate2(SMnode *pMnode) { taosThreadRwlockWrlock(&ipWhiteMgt.rw); @@ -308,13 +311,19 @@ void ipWhiteMgtUpdate2(SMnode *pMnode) { taosThreadRwlockUnlock(&ipWhiteMgt.rw); } +#endif int64_t mndGetIpWhiteVer(SMnode *pMnode) { int64_t ver = 0; + int32_t code = 0; taosThreadRwlockWrlock(&ipWhiteMgt.rw); if (ipWhiteMgt.ver == 0) { // get user and dnode ip white list - ipWhiteMgtUpdateAll(pMnode); + if ((code = ipWhiteMgtUpdateAll(pMnode)) != 0) { + taosThreadRwlockUnlock(&ipWhiteMgt.rw); + mError("%s failed to update ip white list since %s", __func__, tstrerror(code)); + return ver; + } ipWhiteMgt.ver = taosGetTimestampMs(); } ver = ipWhiteMgt.ver; @@ -342,7 +351,7 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 if (type == IP_WHITE_ADD) { if (pList == NULL) { SIpWhiteList *pNewList = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range)); - if(pNewList == NULL) { + if (pNewList == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memcpy(pNewList->pIpRange, &range, sizeof(SIpV4Range)); @@ -384,7 +393,7 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 int32_t idx = 0; int32_t sz = sizeof(SIpWhiteList) + sizeof(SIpV4Range) * (pList->num - 1); SIpWhiteList *pNewList = taosMemoryCalloc(1, sz); - if(pNewList == NULL) { + if (pNewList == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } for (int i = 0; i < pList->num; i++) { @@ -412,7 +421,7 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 _OVER: if (pUpdate) *pUpdate = update; - if (code != 0) { + if (code < 0) { mError("failed to update ip-white-list for user: %s, fqdn: %s at line %d since %s", user, fqdn, lino, tstrerror(code)); } @@ -459,9 +468,10 @@ int32_t mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_ TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memcpy(keyDup, key, klen); - code = mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, keyDup, fqdn, type, &update); - if (code != 0) { - update = false; + bool upd = false; + code = mndUpdateIpWhiteImpl(ipWhiteMgt.pIpWhiteTab, keyDup, fqdn, type, &upd); + update |= upd; + if (code < 0) { taosMemoryFree(keyDup); TAOS_CHECK_GOTO(code, &lino, _OVER); } @@ -473,7 +483,7 @@ int32_t mndUpdateIpWhiteForAllUser(SMnode *pMnode, char *user, char *fqdn, int8_ _OVER: if (update) ipWhiteMgt.ver++; if (lock) taosThreadRwlockUnlock(&ipWhiteMgt.rw); - if (code != 0) { + if (code < 0) { mError("failed to update ip-white-list for user: %s, fqdn: %s at line %d since %s", user, fqdn, lino, tstrerror(code)); } @@ -508,7 +518,6 @@ static int64_t ipWhiteMgtFillMsg(SUpdateIpWhite *pUpdate) { pUser->pIpRanges = taosMemoryCalloc(1, list->num * sizeof(SIpV4Range)); if (pUser->pIpRanges == NULL) { taosThreadRwlockUnlock(&ipWhiteMgt.rw); - tFreeSUpdateIpWhiteReq(pUpdate); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } memcpy(pUser->pIpRanges, list->pIpRange, list->num * sizeof(SIpV4Range)); @@ -549,7 +558,7 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } pUserNames = taosArrayInit(8, sizeof(void *)); - if(pUserNames == NULL) { + if (pUserNames == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -564,7 +573,7 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { sdbCancelFetch(pSdb, pIter); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - if(taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *)) != 0) { + if (taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *)) != 0) { taosMemoryFree(pWhiteList); sdbRelease(pSdb, pUser); sdbCancelFetch(pSdb, pIter); @@ -572,12 +581,12 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { } char *name = taosStrdup(pUser->user); - if(name == NULL) { + if (name == NULL) { sdbRelease(pSdb, pUser); sdbCancelFetch(pSdb, pIter); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - if(taosArrayPush(pUserNames, &name) == NULL){ + if (taosArrayPush(pUserNames, &name) == NULL) { taosMemoryFree(name); sdbRelease(pSdb, pUser); sdbCancelFetch(pSdb, pIter); @@ -606,7 +615,10 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { } } - fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: refactor this line after refactor api + fqdns = mndGetAllDnodeFqdns(pMnode); // TODO: refactor this line after refactor api + if (fqdns == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } for (int i = 0; i < taosArrayGetSize(fqdns); i++) { char *fqdn = taosArrayGetP(fqdns, i); @@ -618,18 +630,10 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { } _OVER: - for (int i = 0; i < taosArrayGetSize(fqdns); i++) { - char *fqdn = taosArrayGetP(fqdns, i); - taosMemoryFree(fqdn); - } - taosArrayDestroy(fqdns); + taosArrayDestroyP(fqdns, taosMemoryFree); + taosArrayDestroyP(pUserNames, taosMemoryFree); - for (int i = 0; i < taosArrayGetSize(pUserNames); i++) { - taosMemoryFree(taosArrayGetP(pUserNames, i)); - } - taosArrayDestroy(pUserNames); - - if (code != 0) { + if (code < 0) { mError("failed to fetch all ip white list at line %d since %s", lino, tstrerror(code)); destroyIpWhiteTab(pIpWhiteTab); pIpWhiteTab = NULL; @@ -725,9 +729,12 @@ int32_t convertIpWhiteListToStr(SIpWhiteList *pList, char **buf) { return 0; } *buf = taosMemoryCalloc(1, pList->num * 36); + if (*buf == NULL) { + return 0; + } int32_t len = ipRangeListToStr(pList->pIpRange, pList->num, *buf); if (len == 0) { - taosMemoryFree(*buf); + taosMemoryFreeClear(*buf); return 0; } return strlen(*buf); @@ -753,7 +760,7 @@ int32_t tSerializeIpWhiteList(void *buf, int32_t len, SIpWhiteList *pList, uint3 tlen = encoder.pos; _OVER: tEncoderClear(&encoder); - if (code != 0) { + if (code < 0) { mError("failed to serialize ip white list at line %d since %s", lino, tstrerror(code)); } if (pLen) *pLen = tlen; @@ -778,7 +785,7 @@ int32_t tDerializeIpWhileList(void *buf, int32_t len, SIpWhiteList *pList) { _OVER: tEndDecode(&decoder); tDecoderClear(&decoder); - if(code != 0) { + if (code < 0) { mError("failed to deserialize ip white list at line %d since %s", lino, tstrerror(code)); } @@ -805,7 +812,7 @@ static int32_t createIpWhiteList(void *buf, int32_t len, SIpWhiteList **ppList) _OVER: tEndDecode(&decoder); tDecoderClear(&decoder); - if (code != 0) { + if (code < 0) { taosMemoryFreeClear(p); mError("failed to create ip white list at line %d since %s", lino, tstrerror(code)); } @@ -1152,7 +1159,6 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { SDB_SET_INT32(pRaw, dataPos, len, _OVER); SDB_SET_BINARY(pRaw, dataPos, buf, len, _OVER); - SDB_SET_INT64(pRaw, dataPos, pUser->ipWhiteListVer, _OVER); @@ -1161,7 +1167,7 @@ SSdbRaw *mndUserActionEncode(SUserObj *pUser) { _OVER: taosMemoryFree(buf); - if (code != 0) { + if (code < 0) { mError("user:%s, failed to encode user action to raw:%p at line %d since %s", pUser->user, pRaw, lino, tstrerror(code)); sdbFreeRaw(pRaw); @@ -1178,6 +1184,8 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t lino = 0; SSdbRow *pRow = NULL; SUserObj *pUser = NULL; + char *key = NULL; + char *value = NULL; int8_t sver = 0; if (sdbGetRawSoftVer(pRaw, &sver) != 0) { @@ -1299,7 +1307,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1308,29 +1316,23 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->readTbs, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } for (int32_t i = 0; i < numOfWriteTbs; ++i) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1339,22 +1341,16 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->writeTbs, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } if (sver >= 6) { @@ -1362,7 +1358,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1371,29 +1367,23 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->alterTbs, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } for (int32_t i = 0; i < numOfReadViews; ++i) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1402,29 +1392,23 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->readViews, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } for (int32_t i = 0; i < numOfWriteViews; ++i) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1433,29 +1417,23 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->writeViews, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } for (int32_t i = 0; i < numOfAlterViews; ++i) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1464,22 +1442,16 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t valuelen = 0; SDB_GET_INT32(pRaw, dataPos, &valuelen, _OVER); - char *value = taosMemoryCalloc(valuelen, sizeof(char)); + TAOS_MEMORY_REALLOC(value, valuelen * sizeof(char)); if (value == NULL) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) if (taosHashPut(pUser->alterViews, key, keyLen, value, valuelen) != 0) { - taosMemoryFree(key); - taosMemoryFree(value); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - - taosMemoryFree(key); - taosMemoryFree(value); } } @@ -1487,7 +1459,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t keyLen = 0; SDB_GET_INT32(pRaw, dataPos, &keyLen, _OVER); - char *key = taosMemoryCalloc(keyLen, sizeof(char)); + TAOS_MEMORY_REALLOC(key, keyLen * sizeof(char)); if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -1498,10 +1470,8 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { SDB_GET_INT32(pRaw, dataPos, &ref, _OVER); if (taosHashPut(pUser->useDbs, key, keyLen, &ref, sizeof(ref)) != 0) { - taosMemoryFree(key); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - taosMemoryFree(key); } } // decoder white list @@ -1509,31 +1479,32 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t len = 0; SDB_GET_INT32(pRaw, dataPos, &len, _OVER); - char *buf = taosMemoryMalloc(len); - if(buf == NULL) { + TAOS_MEMORY_REALLOC(key, len); + if (key == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - SDB_GET_BINARY(pRaw, dataPos, buf, len, _OVER); + SDB_GET_BINARY(pRaw, dataPos, key, len, _OVER); - code = createIpWhiteList(buf, len, &pUser->pIpWhiteList); - taosMemoryFree(buf); + TAOS_CHECK_GOTO(createIpWhiteList(key, len, &pUser->pIpWhiteList), &lino, _OVER); SDB_GET_INT64(pRaw, dataPos, &pUser->ipWhiteListVer, _OVER); } if (pUser->pIpWhiteList == NULL) { - createDefaultIpWhiteList(&pUser->pIpWhiteList); + TAOS_CHECK_GOTO(createDefaultIpWhiteList(&pUser->pIpWhiteList), &lino, _OVER); pUser->ipWhiteListVer = taosGetTimestampMs(); } SDB_GET_RESERVE(pRaw, dataPos, USER_RESERVE_SIZE, _OVER) taosInitRWLatch(&pUser->lock); - terrno = 0; - _OVER: - if (terrno != 0) { - mError("user:%s, failed to decode from raw:%p since %s", pUser == NULL ? "null" : pUser->user, pRaw, terrstr()); + taosMemoryFree(key); + taosMemoryFree(value); + if (code < 0) { + terrno = code; + mError("user:%s, failed to decode at line %d from raw:%p since %s", pUser == NULL ? "null" : pUser->user, lino, + pRaw, tstrerror(code)); if (pUser != NULL) { taosHashCleanup(pUser->readDbs); taosHashCleanup(pUser->writeDbs); @@ -1587,7 +1558,6 @@ int32_t mndDupTableHash(SHashObj *pOld, SHashObj **ppNew) { if ((code = taosHashPut(*ppNew, key, keyLen, tb, valueLen)) != 0) { taosHashCancelIterate(pOld, tb); taosHashCleanup(*ppNew); - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line after terrno is removed TAOS_RETURN(code); } tb = taosHashIterate(pOld, tb); @@ -1612,7 +1582,6 @@ int32_t mndDupUseDbHash(SHashObj *pOld, SHashObj **ppNew) { if ((code = taosHashPut(*ppNew, key, keyLen, db, sizeof(*db))) != 0) { taosHashCancelIterate(pOld, db); taosHashCleanup(*ppNew); - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line after terrno is removed TAOS_RETURN(code); } db = taosHashIterate(pOld, db); @@ -1700,7 +1669,7 @@ static int32_t mndUserActionUpdate(SSdb *pSdb, SUserObj *pOld, SUserObj *pNew) { TSWAP(pOld->useDbs, pNew->useDbs); int32_t sz = sizeof(SIpWhiteList) + pNew->pIpWhiteList->num * sizeof(SIpV4Range); - pOld->pIpWhiteList = taosMemoryRealloc(pOld->pIpWhiteList, sz); + TAOS_MEMORY_REALLOC(pOld->pIpWhiteList, sz); if (pOld->pIpWhiteList == NULL) { taosWUnLockLatch(&pOld->lock); return TSDB_CODE_OUT_OF_MEMORY; @@ -1756,7 +1725,7 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate TAOS_CHECK_RETURN(createDefaultIpWhiteList(&userObj.pIpWhiteList)); } else { SHashObj *pUniqueTab = taosHashInit(64, MurmurHash3_32, false, HASH_NO_LOCK); - if(pUniqueTab == NULL){ + if (pUniqueTab == NULL) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } int32_t dummpy = 0; @@ -1783,8 +1752,8 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate taosHashCleanup(pUniqueTab); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - void *pIter = taosHashIterate(pUniqueTab, NULL); - int32_t i = 0; + void *pIter = taosHashIterate(pUniqueTab, NULL); + int32_t i = 0; while (pIter) { size_t len = 0; SIpV4Range *key = taosHashGetKey(pIter, &len); @@ -1858,50 +1827,38 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) { #endif if (createReq.isImport != 1) { - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_USER) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_USER), &lino, _OVER); } else { if (strcmp(pReq->info.conn.user, "root") != 0) { mError("The operation is not permitted, user:%s", pReq->info.conn.user); - code = TSDB_CODE_MND_NO_RIGHTS; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_NO_RIGHTS, &lino, _OVER); } } if (createReq.user[0] == 0) { - code = TSDB_CODE_MND_INVALID_USER_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_USER_FORMAT, &lino, _OVER); } if (createReq.pass[0] == 0) { - code = TSDB_CODE_MND_INVALID_PASS_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_INVALID_PASS_FORMAT, &lino, _OVER); } if (createReq.isImport != 1) { if (strlen(createReq.pass) >= TSDB_PASSWORD_LEN) { - code = TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_PAR_NAME_OR_PASSWD_TOO_LONG, &lino, _OVER); } } code = mndAcquireUser(pMnode, createReq.user, &pUser); if (pUser != NULL) { - code = TSDB_CODE_MND_USER_ALREADY_EXIST; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_USER_ALREADY_EXIST, &lino, _OVER); } code = mndAcquireUser(pMnode, pReq->info.conn.user, &pOperUser); if (pOperUser == NULL) { - code = TSDB_CODE_MND_NO_USER_FROM_CONN; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_MND_NO_USER_FROM_CONN, &lino, _OVER); } - if ((terrno = grantCheck(TSDB_GRANT_USER)) != 0) { - code = terrno; - goto _OVER; - } TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_USER), &lino, _OVER); code = mndCreateUser(pMnode, pOperUser->acct, &createReq, pReq); @@ -1920,8 +1877,8 @@ static int32_t mndProcessCreateUserReq(SRpcMsg *pReq) { auditRecord(pReq, pMnode->clusterId, operation, "", createReq.user, detail, strlen(detail)); _OVER: - if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("user:%s, failed to create since %s", createReq.user, terrstr()); + if (code < 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { + mError("user:%s, failed to create at line %d since %s", createReq.user, lino, tstrerror(code)); } mndReleaseUser(pMnode, pUser); @@ -1963,14 +1920,14 @@ int32_t mndProcessGetUserWhiteListReq(SRpcMsg *pReq) { } contLen = tSerializeSGetUserWhiteListRsp(pRsp, contLen, &wlRsp); - if(contLen < 0) { + if (contLen < 0) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } _OVER: mndReleaseUser(pMnode, pUser); tFreeSGetUserWhiteListRsp(&wlRsp); - if (code != 0) { + if (code < 0) { mError("user:%s, failed to get whitelist at line %d since %s", wlReq.user, lino, tstrerror(code)); rpcFreeCont(pRsp); pRsp = NULL; @@ -2016,7 +1973,7 @@ int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq) { } _OVER: - if (code != 0) { + if (code < 0) { mError("failed to process retrieve ip white request at line %d since %s", lino, tstrerror(code)); rpcFreeCont(pRsp); pRsp = NULL; @@ -2074,7 +2031,6 @@ static int32_t mndDupObjHash(SHashObj *pOld, int32_t dataLen, SHashObj **ppNew) while (db != NULL) { int32_t len = strlen(db) + 1; if ((code = taosHashPut(*ppNew, db, len, db, dataLen)) != 0) { - if (terrno != 0) code = terrno; // TODO: remove this line after terrno is removed taosHashCancelIterate(pOld, db); taosHashCleanup(*ppNew); TAOS_RETURN(code); @@ -2181,7 +2137,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - TAOS_RETURN(terrno); + TAOS_CHECK_GOTO(terrno, &lino, _OVER); } if ((code = taosHashPut(pNewUser->readDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN)) != 0) { @@ -2336,7 +2292,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode } _OVER: - if (code != 0) { + if (code < 0) { mError("user:%s, failed to alter user privileges at line %d since %s", pAlterReq->user, lino, terrstr()); } TAOS_RETURN(code); @@ -2450,7 +2406,7 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { bool localHost = false; SIpWhiteList *pNew = taosMemoryCalloc(1, sizeof(SIpWhiteList) + sizeof(SIpV4Range) * num); - if(pNew == NULL) { + if (pNew == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } @@ -2541,8 +2497,8 @@ static int32_t mndProcessAlterUserReq(SRpcMsg *pReq) { } _OVER: - if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("user:%s, failed to alter since %s", alterReq.user, terrstr()); + if (code < 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { + mError("user:%s, failed to alter at line %d since %s", alterReq.user, lino, tstrerror(code)); } tFreeSAlterUserReq(&alterReq); @@ -2604,7 +2560,7 @@ static int32_t mndProcessDropUserReq(SRpcMsg *pReq) { auditRecord(pReq, pMnode->clusterId, "dropUser", "", dropReq.user, dropReq.sql, dropReq.sqlLen); _OVER: - if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { + if (code < 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { mError("user:%s, failed to drop at line %d since %s", dropReq.user, lino, tstrerror(code)); } @@ -2644,7 +2600,7 @@ static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { _OVER: mndReleaseUser(pMnode, pUser); tFreeSGetUserAuthRsp(&authRsp); - if (code != 0) { + if (code < 0) { mError("user:%s, failed to get auth at line %d since %s", authReq.user, lino, tstrerror(code)); rpcFreeCont(pRsp); pRsp = NULL; @@ -2666,7 +2622,9 @@ static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl SUserObj *pUser = NULL; int32_t cols = 0; int8_t flag = 0; - char *pWrite; + char *pWrite = NULL; + char *buf = NULL; + char *varstr = NULL; while (numOfRows < rows) { pShow->pIter = sdbFetch(pSdb, SDB_USER, pShow->pIter, (void **)&pUser); @@ -2676,47 +2634,49 @@ static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols); char name[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(name, pUser->user, pShow->pMeta->pSchemas[cols].bytes); - colDataSetVal(pColInfo, numOfRows, (const char *)name, false); + COL_DATA_SET_VAL_GOTO((const char *)name, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->superUser, false); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->superUser, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->enable, false); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->enable, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->sysInfo, false); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->sysInfo, false, pUser, _exit); cols++; flag = pUser->createdb ? 1 : 0; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)&flag, false); + COL_DATA_SET_VAL_GOTO((const char *)&flag, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->createdTime, false); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->createdTime, false, pUser, _exit); cols++; - char *buf = NULL; int32_t tlen = convertIpWhiteListToStr(pUser->pIpWhiteList, &buf); // int32_t tlen = mndFetchIpWhiteList(pUser->pIpWhiteList, &buf); if (tlen != 0) { - char *varstr = taosMemoryCalloc(1, VARSTR_HEADER_SIZE + tlen); + TAOS_MEMORY_REALLOC(varstr, VARSTR_HEADER_SIZE + tlen); + if (varstr == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } varDataSetLen(varstr, tlen); memcpy(varDataVal(varstr), buf, tlen); pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)varstr, false); + COL_DATA_SET_VAL_GOTO((const char *)varstr, false, pUser, _exit); - taosMemoryFree(varstr); - taosMemoryFree(buf); + taosMemoryFreeClear(buf); } else { pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - colDataSetVal(pColInfo, numOfRows, (const char *)NULL, true); + COL_DATA_SET_VAL_GOTO((const char *)NULL, true, pUser, _exit); } numOfRows++; @@ -2725,7 +2685,9 @@ static int32_t mndRetrieveUsers(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl pShow->numOfRows += numOfRows; _exit: - if (code != 0) { + taosMemoryFreeClear(buf); + taosMemoryFreeClear(varstr); + if (code < 0) { uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); TAOS_RETURN(code); } @@ -2738,10 +2700,13 @@ static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock SMnode *pMnode = pReq->info.node; SSdb *pSdb = pMnode->pSdb; SUserObj *pUser = NULL; + int32_t code = 0; + int32_t lino = 0; int32_t cols = 0; int8_t flag = 0; - char *pWrite; - int32_t code = 0; + char *pWrite = NULL; + char *buf = NULL; + char *varstr = NULL; while (numOfRows < rows) { pShow->pIter = sdbFetch(pSdb, SDB_USER, pShow->pIter, (void **)&pUser); @@ -2751,58 +2716,52 @@ static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols); char name[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(name, pUser->user, pShow->pMeta->pSchemas[cols].bytes); - code = colDataSetVal(pColInfo, numOfRows, (const char *)name, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)name, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->superUser, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->superUser, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->enable, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->enable, false, pUser, _exit); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)&pUser->sysInfo, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)&pUser->sysInfo, false, pUser, _exit); cols++; flag = pUser->createdb ? 1 : 0; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)&flag, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)&flag, false, pUser, _exit); // mInfo("pUser->pass:%s", pUser->pass); cols++; pColInfo = taosArrayGet(pBlock->pDataBlock, cols); char pass[TSDB_PASSWORD_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(pass, pUser->pass, pShow->pMeta->pSchemas[cols].bytes); - code = colDataSetVal(pColInfo, numOfRows, (const char *)pass, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)pass, false, pUser, _exit); cols++; - char *buf = NULL; int32_t tlen = convertIpWhiteListToStr(pUser->pIpWhiteList, &buf); // int32_t tlen = mndFetchIpWhiteList(pUser->pIpWhiteList, &buf); if (tlen != 0) { - char *varstr = taosMemoryCalloc(1, VARSTR_HEADER_SIZE + tlen); + TAOS_MEMORY_REALLOC(varstr, VARSTR_HEADER_SIZE + tlen); + if (varstr == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } varDataSetLen(varstr, tlen); memcpy(varDataVal(varstr), buf, tlen); pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)varstr, false); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)varstr, false, pUser, _exit); - taosMemoryFree(varstr); - taosMemoryFree(buf); + taosMemoryFreeClear(buf); } else { pColInfo = taosArrayGet(pBlock->pDataBlock, cols); - code = colDataSetVal(pColInfo, numOfRows, (const char *)NULL, true); - if (code != 0) mError("User:%s, failed to retrieve at columns:%d, cause %s", pUser->acct, cols, tstrerror(code)); + COL_DATA_SET_VAL_GOTO((const char *)NULL, true, pUser, _exit); } numOfRows++; @@ -2810,6 +2769,13 @@ static int32_t mndRetrieveUsersFull(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } pShow->numOfRows += numOfRows; +_exit: + taosMemoryFreeClear(buf); + taosMemoryFreeClear(varstr); + if (code < 0) { + uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + TAOS_RETURN(code); + } #endif return numOfRows; } @@ -2819,22 +2785,26 @@ static void mndCancelGetNextUser(SMnode *pMnode, void *pIter) { sdbCancelFetch(pSdb, pIter); } -static void mndLoopHash(SHashObj *hash, char *priType, SSDataBlock *pBlock, int32_t *numOfRows, char *user, - SShowObj *pShow) { +static int32_t mndLoopHash(SHashObj *hash, char *priType, SSDataBlock *pBlock, int32_t *pNumOfRows, SSdb *pSdb, + SUserObj *pUser, SShowObj *pShow, char **condition, char **sql) { char *value = taosHashIterate(hash, NULL); + char *user = pUser->user; + int32_t code = 0; + int32_t lino = 0; int32_t cols = 0; + int32_t numOfRows = *pNumOfRows; while (value != NULL) { cols = 0; char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(userName, user, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)userName, false); + COL_DATA_SET_VAL_GOTO((const char *)userName, false, NULL, _exit); char privilege[20] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(privilege, priType, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)privilege, false); + COL_DATA_SET_VAL_GOTO((const char *)privilege, false, NULL, _exit); size_t keyLen = 0; void *key = taosHashGetKey(value, &keyLen); @@ -2844,67 +2814,87 @@ static void mndLoopHash(SHashObj *hash, char *priType, SSDataBlock *pBlock, int3 char dbNameContent[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(dbNameContent, dbName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)dbNameContent, false); + COL_DATA_SET_VAL_GOTO((const char *)dbNameContent, false, NULL, _exit); char tableName[TSDB_TABLE_NAME_LEN] = {0}; mndExtractTbNameFromStbFullName(key, tableName, TSDB_TABLE_NAME_LEN); char tableNameContent[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(tableNameContent, tableName, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)tableNameContent, false); + COL_DATA_SET_VAL_GOTO((const char *)tableNameContent, false, NULL, _exit); if (strcmp("t", value) != 0 && strcmp("v", value) != 0) { SNode *pAst = NULL; int32_t sqlLen = 0; size_t bufSz = strlen(value) + 1; - char *sql = taosMemoryMalloc(bufSz + 1); - char *obj = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if (bufSz < 5) bufSz = 5; + TAOS_MEMORY_REALLOC(*sql, bufSz + 1); + if (*sql == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } + TAOS_MEMORY_REALLOC(*condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if ((*condition) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } - if (sql != NULL && obj != NULL && nodesStringToNode(value, &pAst) == 0) { - nodesNodeToSQL(pAst, sql, bufSz, &sqlLen); + if (nodesStringToNode(value, &pAst) == 0) { + nodesNodeToSQL(pAst, *sql, bufSz, &sqlLen); nodesDestroyNode(pAst); } else { sqlLen = 5; - sprintf(sql, "error"); + sprintf(*sql, "error"); } - STR_WITH_MAXSIZE_TO_VARSTR(obj, sql, pShow->pMeta->pSchemas[cols].bytes); + STR_WITH_MAXSIZE_TO_VARSTR((*condition), (*sql), pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)obj, false); - taosMemoryFree(obj); - taosMemoryFree(sql); + COL_DATA_SET_VAL_GOTO((const char *)(*condition), false, NULL, _exit); char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, NULL, _exit); } else { - char *condition = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); - STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); + TAOS_MEMORY_REALLOC(*condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if ((*condition) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } + STR_WITH_MAXSIZE_TO_VARSTR((*condition), "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)condition, false); - taosMemoryFree(condition); + COL_DATA_SET_VAL_GOTO((const char *)(*condition), false, NULL, _exit); char notes[64 + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, value[0] == 'v' ? "view" : "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, *numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, NULL, _exit); } - (*numOfRows)++; + numOfRows++; value = taosHashIterate(hash, value); } + *pNumOfRows = numOfRows; +_exit: + if (code < 0) { + uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + sdbRelease(pSdb, pUser); + } + TAOS_RETURN(code); } static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { int32_t code = 0; + int32_t lino = 0; SMnode *pMnode = pReq->info.node; SSdb *pSdb = pMnode->pSdb; int32_t numOfRows = 0; SUserObj *pUser = NULL; int32_t cols = 0; - char *pWrite; + char *pWrite = NULL; + char *condition = NULL; + char *sql = NULL; bool fetchNextUser = pShow->restore ? false : true; pShow->restore = false; @@ -2966,11 +2956,14 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); - char *condition = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if (condition == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); - taosMemoryFree(condition); char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); @@ -3006,7 +2999,11 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); - char *condition = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if (condition == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); @@ -3047,7 +3044,11 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); - char *condition = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if (condition == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); @@ -3062,17 +3063,17 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock db = taosHashIterate(pUser->writeDbs, db); } - mndLoopHash(pUser->readTbs, "read", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->readTbs, "read", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); - mndLoopHash(pUser->writeTbs, "write", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->writeTbs, "write", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); - mndLoopHash(pUser->alterTbs, "alter", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->alterTbs, "alter", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); - mndLoopHash(pUser->readViews, "read", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->readViews, "read", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); - mndLoopHash(pUser->writeViews, "write", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->writeViews, "write", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); - mndLoopHash(pUser->alterViews, "alter", pBlock, &numOfRows, pUser->user, pShow); + TAOS_CHECK_EXIT(mndLoopHash(pUser->alterViews, "alter", pBlock, &numOfRows, pSdb, pUser, pShow, &condition, &sql)); char *topic = taosHashIterate(pUser->topics, NULL); while (topic != NULL) { @@ -3098,7 +3099,11 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); - char *condition = taosMemoryMalloc(TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); + if (condition == NULL) { + sdbRelease(pSdb, pUser); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); + } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); @@ -3117,6 +3122,13 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } pShow->numOfRows += numOfRows; +_exit: + taosMemoryFreeClear(condition); + taosMemoryFreeClear(sql); + if (code < 0) { + uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + TAOS_RETURN(code); + } return numOfRows; } @@ -3127,13 +3139,17 @@ static void mndCancelGetNextPrivileges(SMnode *pMnode, void *pIter) { int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_t numOfUses, void **ppRsp, int32_t *pRspLen, int64_t ipWhiteListVer) { + int32_t code = 0; + int32_t lino = 0; + int32_t rspLen = 0; + void *pRsp = NULL; SUserAuthBatchRsp batchRsp = {0}; + batchRsp.pArray = taosArrayInit(numOfUses, sizeof(SGetUserAuthRsp)); if (batchRsp.pArray == NULL) { - TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - int32_t code = 0; for (int32_t i = 0; i < numOfUses; ++i) { SUserObj *pUser = NULL; code = mndAcquireUser(pMnode, pUsers[i].user, &pUser); @@ -3141,7 +3157,7 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ if (TSDB_CODE_MND_USER_NOT_EXIST == code) { SGetUserAuthRsp rsp = {.dropped = 1}; memcpy(rsp.user, pUsers[i].user, TSDB_USER_LEN); - taosArrayPush(batchRsp.pArray, &rsp); + (void)taosArrayPush(batchRsp.pArray, &rsp); } mError("user:%s, failed to auth user since %s", pUsers[i].user, terrstr()); continue; @@ -3158,7 +3174,7 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ if (code) { mndReleaseUser(pMnode, pUser); tFreeSGetUserAuthRsp(&rsp); - goto _OVER; + TAOS_CHECK_GOTO(code, &lino, _OVER); } (void)taosArrayPush(batchRsp.pArray, &rsp); @@ -3173,25 +3189,25 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ return 0; } - int32_t rspLen = tSerializeSUserAuthBatchRsp(NULL, 0, &batchRsp); - void *pRsp = taosMemoryMalloc(rspLen); - if (pRsp == NULL) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + rspLen = tSerializeSUserAuthBatchRsp(NULL, 0, &batchRsp); + if (rspLen <= 0) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + pRsp = taosMemoryMalloc(rspLen); + if (pRsp == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + } + TAOS_CHECK_GOTO(tSerializeSUserAuthBatchRsp(pRsp, rspLen, &batchRsp), &lino, _OVER); +_OVER: + tFreeSUserAuthBatchRsp(&batchRsp); + if (code < 0) { + uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + taosMemoryFreeClear(pRsp); + rspLen = 0; } - tSerializeSUserAuthBatchRsp(pRsp, rspLen, &batchRsp); - *ppRsp = pRsp; *pRspLen = rspLen; - tFreeSUserAuthBatchRsp(&batchRsp); - return 0; - -_OVER: - - *ppRsp = NULL; - *pRspLen = 0; - - tFreeSUserAuthBatchRsp(&batchRsp); TAOS_RETURN(code); } @@ -3219,7 +3235,7 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed + code = TSDB_CODE_OUT_OF_MEMORY; break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -3229,6 +3245,7 @@ int32_t mndUserRemoveDb(SMnode *pMnode, STrans *pTrans, char *db) { sdbRelease(pSdb, pUser); } +_OVER: if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); @@ -3261,7 +3278,7 @@ int32_t mndUserRemoveStb(SMnode *pMnode, STrans *pTrans, char *stb) { SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed + code = TSDB_CODE_OUT_OF_MEMORY; break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -3303,7 +3320,7 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed + code = TSDB_CODE_OUT_OF_MEMORY; break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); @@ -3316,7 +3333,7 @@ int32_t mndUserRemoveView(SMnode *pMnode, STrans *pTrans, char *view) { if (pUser != NULL) sdbRelease(pSdb, pUser); if (pIter != NULL) sdbCancelFetch(pSdb, pIter); mndUserFreeObj(&newUser); - TAOS_RETURN(code); + TAOS_RETURN(code); } int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { @@ -3342,7 +3359,7 @@ int32_t mndUserRemoveTopic(SMnode *pMnode, STrans *pTrans, char *topic) { (void)taosHashRemove(newUser.topics, topic, len); SSdbRaw *pCommitRaw = mndUserActionEncode(&newUser); if (pCommitRaw == NULL || (code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; // TODO: remove this line when terrno is removed + code = TSDB_CODE_OUT_OF_MEMORY; break; } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); From 4557cf05cdbbfe0775fcb89727d5ded9dec9a5c1 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 23 Jul 2024 18:40:58 +0800 Subject: [PATCH 10/16] enh: refactor return code --- include/util/tutil.h | 4 +- source/dnode/mnode/impl/src/mndGrant.c | 13 ++++- source/dnode/mnode/impl/src/mndUser.c | 66 +++++++++++++------------- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index 823ffba23b..05a2397139 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -160,7 +160,7 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, #define TAOS_CHECK_RETURN(CMD) \ do { \ int32_t code = (CMD); \ - if (code < TSDB_CODE_SUCCESS) { \ + if (code != TSDB_CODE_SUCCESS) { \ TAOS_RETURN(code); \ } \ } while (0) @@ -168,7 +168,7 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, #define TAOS_CHECK_GOTO(CMD, LINO, LABEL) \ do { \ code = (CMD); \ - if (code < TSDB_CODE_SUCCESS) { \ + if (code != TSDB_CODE_SUCCESS) { \ if (LINO) { \ *((int32_t *)(LINO)) = __LINE__; \ } \ diff --git a/source/dnode/mnode/impl/src/mndGrant.c b/source/dnode/mnode/impl/src/mndGrant.c index ed22d9b497..af60bc9e4b 100644 --- a/source/dnode/mnode/impl/src/mndGrant.c +++ b/source/dnode/mnode/impl/src/mndGrant.c @@ -25,12 +25,16 @@ pColInfo = taosArrayGet(pBlock->pDataBlock, cols); \ src = (display); \ STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32); \ - colDataSetVal(pColInfo, numOfRows, tmp, false); \ + COL_DATA_SET_VAL_GOTO(tmp, false, NULL, _exit); \ } while (0) static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { + SMnode *pMnode = pReq->info.node; + SSdb *pSdb = pMnode->pSdb; int32_t numOfRows = 0; int32_t cols = 0; + int32_t code = 0; + int32_t lino = 0; char tmp[32]; if (pShow->numOfRows < 1) { @@ -38,7 +42,7 @@ static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols); const char *src = TD_PRODUCT_NAME; STR_WITH_MAXSIZE_TO_VARSTR(tmp, src, 32); - colDataSetVal(pColInfo, numOfRows, tmp, false); + COL_DATA_SET_VAL_GOTO(tmp, false, NULL, _exit); GRANT_ITEM_SHOW("unlimited"); GRANT_ITEM_SHOW("limited"); @@ -52,6 +56,11 @@ static int32_t mndRetrieveGrant(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl } pShow->numOfRows += numOfRows; +_exit: + if (code != 0) { + mError("failed to retrieve grant at line %d since %s", lino, tstrerror(code)); + TAOS_RETURN(code); + } return numOfRows; } diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 1e6d09df44..055af836b4 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -2579,25 +2579,25 @@ static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { SGetUserAuthReq authReq = {0}; SGetUserAuthRsp authRsp = {0}; - TAOS_CHECK_GOTO(tDeserializeSGetUserAuthReq(pReq->pCont, pReq->contLen, &authReq), &lino, _OVER); + TAOS_CHECK_EXIT(tDeserializeSGetUserAuthReq(pReq->pCont, pReq->contLen, &authReq)); mTrace("user:%s, start to get auth", authReq.user); - TAOS_CHECK_GOTO(mndAcquireUser(pMnode, authReq.user, &pUser), &lino, _OVER); + TAOS_CHECK_EXIT(mndAcquireUser(pMnode, authReq.user, &pUser)); - TAOS_CHECK_GOTO(mndSetUserAuthRsp(pMnode, pUser, &authRsp), &lino, _OVER); + TAOS_CHECK_EXIT(mndSetUserAuthRsp(pMnode, pUser, &authRsp)); contLen = tSerializeSGetUserAuthRsp(NULL, 0, &authRsp); if (contLen < 0) { - TAOS_CHECK_GOTO(contLen, &lino, _OVER); + TAOS_CHECK_EXIT(contLen); } pRsp = rpcMallocCont(contLen); if (pRsp == NULL) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } - TAOS_CHECK_GOTO(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp), &lino, _OVER); + TAOS_CHECK_EXIT(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp)); -_OVER: +_exit: mndReleaseUser(pMnode, pUser); tFreeSGetUserAuthRsp(&authRsp); if (code < 0) { @@ -2939,22 +2939,22 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)userName, false); + COL_DATA_SET_VAL_GOTO((const char *)userName, false, pUser, _exit); char privilege[20] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(privilege, "all", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)privilege, false); + COL_DATA_SET_VAL_GOTO((const char *)privilege, false, pUser, _exit); char objName[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(objName, "all", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)objName, false); + COL_DATA_SET_VAL_GOTO((const char *)objName, false, pUser, _exit); char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); + COL_DATA_SET_VAL_GOTO((const char *)tableName, false, pUser, _exit); TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); if (condition == NULL) { @@ -2963,12 +2963,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); + COL_DATA_SET_VAL_GOTO((const char *)condition, false, pUser, _exit); char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, pUser, _exit); numOfRows++; } @@ -2979,12 +2979,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)userName, false); + COL_DATA_SET_VAL_GOTO((const char *)userName, false, pUser, _exit); char privilege[20] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(privilege, "read", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)privilege, false); + COL_DATA_SET_VAL_GOTO((const char *)privilege, false, pUser, _exit); SName name = {0}; char objName[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; @@ -2992,12 +2992,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock tNameGetDbName(&name, varDataVal(objName)); varDataSetLen(objName, strlen(varDataVal(objName))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)objName, false); + COL_DATA_SET_VAL_GOTO((const char *)objName, false, pUser, _exit); char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); + COL_DATA_SET_VAL_GOTO((const char *)tableName, false, pUser, _exit); TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); if (condition == NULL) { @@ -3006,13 +3006,13 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); - taosMemoryFree(condition); + COL_DATA_SET_VAL_GOTO((const char *)condition, false, pUser, _exit); + char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, pUser, _exit); numOfRows++; db = taosHashIterate(pUser->readDbs, db); @@ -3024,12 +3024,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)userName, false); + COL_DATA_SET_VAL_GOTO((const char *)userName, false, pUser, _exit); char privilege[20] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(privilege, "write", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)privilege, false); + COL_DATA_SET_VAL_GOTO((const char *)privilege, false, pUser, _exit); SName name = {0}; char objName[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; @@ -3037,12 +3037,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock tNameGetDbName(&name, varDataVal(objName)); varDataSetLen(objName, strlen(varDataVal(objName))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)objName, false); + COL_DATA_SET_VAL_GOTO((const char *)objName, false, pUser, _exit); char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); + COL_DATA_SET_VAL_GOTO((const char *)tableName, false, pUser, _exit); TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); if (condition == NULL) { @@ -3051,13 +3051,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); - taosMemoryFree(condition); + COL_DATA_SET_VAL_GOTO((const char *)condition, false, pUser, _exit); char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, pUser, _exit); numOfRows++; db = taosHashIterate(pUser->writeDbs, db); @@ -3081,23 +3080,23 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)userName, false); + COL_DATA_SET_VAL_GOTO((const char *)userName, false, pUser, _exit); char privilege[20] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(privilege, "subscribe", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)privilege, false); + COL_DATA_SET_VAL_GOTO((const char *)privilege, false, pUser, _exit); char topicName[TSDB_TOPIC_NAME_LEN + VARSTR_HEADER_SIZE + 5] = {0}; tstrncpy(varDataVal(topicName), mndGetDbStr(topic), TSDB_TOPIC_NAME_LEN - 2); varDataSetLen(topicName, strlen(varDataVal(topicName))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)topicName, false); + COL_DATA_SET_VAL_GOTO((const char *)topicName, false, pUser, _exit); char tableName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(tableName, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)tableName, false); + COL_DATA_SET_VAL_GOTO((const char *)tableName, false, pUser, _exit); TAOS_MEMORY_REALLOC(condition, TSDB_PRIVILEDGE_CONDITION_LEN + VARSTR_HEADER_SIZE); if (condition == NULL) { @@ -3106,13 +3105,12 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock } STR_WITH_MAXSIZE_TO_VARSTR(condition, "", pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)condition, false); - taosMemoryFree(condition); + COL_DATA_SET_VAL_GOTO((const char *)condition, false, pUser, _exit); char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)notes, false); + COL_DATA_SET_VAL_GOTO((const char *)notes, false, pUser, _exit); numOfRows++; topic = taosHashIterate(pUser->topics, topic); From 994a08ad41a73fb30aeccedd9b202b529ef42c5d Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 23 Jul 2024 19:30:55 +0800 Subject: [PATCH 11/16] enh: refactor return code --- source/dnode/vnode/src/sma/smaOpen.c | 119 +++++++++++----------- source/dnode/vnode/src/sma/smaRollup.c | 32 +++--- source/dnode/vnode/src/sma/smaTimeRange.c | 89 +++++++--------- 3 files changed, 113 insertions(+), 127 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaOpen.c b/source/dnode/vnode/src/sma/smaOpen.c index 29854b4441..19f0c4a964 100644 --- a/source/dnode/vnode/src/sma/smaOpen.c +++ b/source/dnode/vnode/src/sma/smaOpen.c @@ -16,38 +16,34 @@ #include "sma.h" #include "tsdb.h" -static int32_t smaEvalDays(SVnode *pVnode, SRetention *r, int8_t level, int8_t precision, int32_t duration); +static int32_t smaEvalDays(SVnode *pVnode, SRetention *r, int8_t level, int8_t precision, int32_t duration, + int32_t *days); static int32_t smaSetKeepCfg(SVnode *pVnode, STsdbKeepCfg *pKeepCfg, STsdbCfg *pCfg, int type); static int32_t rsmaRestore(SSma *pSma); -#define SMA_SET_KEEP_CFG(v, l) \ - do { \ - SRetention *r = &pCfg->retentions[l]; \ - int64_t keep = -1; \ - convertTimeFromPrecisionToUnit(r->keep, pCfg->precision, TIME_UNIT_MINUTE, &keep); \ - pKeepCfg->keep2 = (int32_t)keep; \ - pKeepCfg->keep0 = pKeepCfg->keep2; \ - pKeepCfg->keep1 = pKeepCfg->keep2; \ - pKeepCfg->days = smaEvalDays(v, pCfg->retentions, l, pCfg->precision, pCfg->days); \ - pKeepCfg->keepTimeOffset = 0; \ +#define SMA_SET_KEEP_CFG(v, l) \ + do { \ + SRetention *r = &pCfg->retentions[l]; \ + int64_t keep = -1; \ + TAOS_CHECK_EXIT(convertTimeFromPrecisionToUnit(r->keep, pCfg->precision, TIME_UNIT_MINUTE, &keep)); \ + pKeepCfg->keep2 = (int32_t)keep; \ + pKeepCfg->keep0 = pKeepCfg->keep2; \ + pKeepCfg->keep1 = pKeepCfg->keep2; \ + TAOS_CHECK_EXIT(smaEvalDays(v, pCfg->retentions, l, pCfg->precision, pCfg->days, &pKeepCfg->days)); \ + pKeepCfg->keepTimeOffset = 0; \ } while (0) -#define SMA_OPEN_RSMA_IMPL(v, l, force) \ - do { \ - SRetention *r = (SRetention *)VND_RETENTIONS(v) + l; \ - if (!RETENTION_VALID(l, r)) { \ - if (l == 0) { \ - code = TSDB_CODE_INVALID_PARA; \ - TSDB_CHECK_CODE(code, lino, _exit); \ - } \ - break; \ - } \ - code = smaSetKeepCfg(v, &keepCfg, pCfg, TSDB_TYPE_RSMA_L##l); \ - TSDB_CHECK_CODE(code, lino, _exit); \ - if (tsdbOpen(v, &SMA_RSMA_TSDB##l(pSma), VNODE_RSMA##l##_DIR, &keepCfg, rollback, force) < 0) { \ - code = terrno; \ - TSDB_CHECK_CODE(code, lino, _exit); \ - } \ +#define SMA_OPEN_RSMA_IMPL(v, l, force) \ + do { \ + SRetention *r = (SRetention *)VND_RETENTIONS(v) + l; \ + if (!RETENTION_VALID(l, r)) { \ + if (l == 0) { \ + TAOS_CHECK_EXIT(TSDB_CODE_INVALID_PARA); \ + } \ + break; \ + } \ + TAOS_CHECK_EXIT(smaSetKeepCfg(v, &keepCfg, pCfg, TSDB_TYPE_RSMA_L##l)); \ + TAOS_CHECK_EXIT(tsdbOpen(v, &SMA_RSMA_TSDB##l(pSma), VNODE_RSMA##l##_DIR, &keepCfg, rollback, force)); \ } while (0) /** @@ -59,51 +55,61 @@ static int32_t rsmaRestore(SSma *pSma); * @param level * @param precision * @param duration + * @param days * @return int32_t */ -static int32_t smaEvalDays(SVnode *pVnode, SRetention *r, int8_t level, int8_t precision, int32_t duration) { - int32_t code = TSDB_CODE_SUCCESS; +static int32_t smaEvalDays(SVnode *pVnode, SRetention *r, int8_t level, int8_t precision, int32_t duration, + int32_t *days) { + int32_t code = 0; + int32_t lino = 0; int64_t freqDuration = -1; int64_t keepDuration = -1; - code = convertTimeFromPrecisionToUnit((r + TSDB_RETENTION_L0)->freq, precision, TIME_UNIT_MINUTE, &freqDuration); - code = convertTimeFromPrecisionToUnit((r + TSDB_RETENTION_L0)->keep, precision, TIME_UNIT_MINUTE, &keepDuration); - int32_t days = duration; // min + TAOS_CHECK_EXIT( + convertTimeFromPrecisionToUnit((r + TSDB_RETENTION_L0)->freq, precision, TIME_UNIT_MINUTE, &freqDuration)); + TAOS_CHECK_EXIT( + convertTimeFromPrecisionToUnit((r + TSDB_RETENTION_L0)->keep, precision, TIME_UNIT_MINUTE, &keepDuration)); + *days = duration; // min - if (days < freqDuration) { - days = freqDuration; + if (*days < freqDuration) { + *days = freqDuration; } - if (days > keepDuration) { - days = keepDuration; + if (*days > keepDuration) { + *days = keepDuration; } if (level < TSDB_RETENTION_L1 || level > TSDB_RETENTION_L2) { goto _exit; } - code = convertTimeFromPrecisionToUnit((r + level)->freq, precision, TIME_UNIT_MINUTE, &freqDuration); - code = convertTimeFromPrecisionToUnit((r + level)->keep, precision, TIME_UNIT_MINUTE, &keepDuration); + TAOS_CHECK_EXIT(convertTimeFromPrecisionToUnit((r + level)->freq, precision, TIME_UNIT_MINUTE, &freqDuration)); + TAOS_CHECK_EXIT(convertTimeFromPrecisionToUnit((r + level)->keep, precision, TIME_UNIT_MINUTE, &keepDuration)); int32_t nFreqTimes = (r + level)->freq / (60 * 1000); // use 60s for freq of 1st level - days *= (nFreqTimes > 1 ? nFreqTimes : 1); + *days *= (nFreqTimes > 1 ? nFreqTimes : 1); - if (days < freqDuration) { - days = freqDuration; + if (*days < freqDuration) { + *days = freqDuration; } int32_t maxKeepDuration = TMIN(keepDuration, TSDB_MAX_DURATION_PER_FILE); - if (days > maxKeepDuration) { - days = maxKeepDuration; + if (*days > maxKeepDuration) { + *days = maxKeepDuration; } _exit: - smaInfo("vgId:%d, evaluated duration for level %d is %d, raw val:%d", TD_VID(pVnode), level + 1, days, duration); - return days; + if (code) { + smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); + } else { + smaInfo("vgId:%d, evaluated duration for level %d is %d, raw val:%d", TD_VID(pVnode), level + 1, *days, duration); + } + TAOS_RETURN(code); } int smaSetKeepCfg(SVnode *pVnode, STsdbKeepCfg *pKeepCfg, STsdbCfg *pCfg, int type) { - terrno = 0; + int32_t code = 0; + int32_t lino = 0; pKeepCfg->precision = pCfg->precision; switch (type) { case TSDB_TYPE_RSMA_L0: @@ -116,10 +122,14 @@ int smaSetKeepCfg(SVnode *pVnode, STsdbKeepCfg *pKeepCfg, STsdbCfg *pCfg, int ty SMA_SET_KEEP_CFG(pVnode, 2); break; default: - terrno = TSDB_CODE_APP_ERROR; + code = TSDB_CODE_APP_ERROR; break; } - return terrno; +_exit: + if (code) { + smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); + } + TAOS_RETURN(code); } int32_t smaOpen(SVnode *pVnode, int8_t rollback, bool force) { @@ -129,8 +139,7 @@ int32_t smaOpen(SVnode *pVnode, int8_t rollback, bool force) { SSma *pSma = taosMemoryCalloc(1, sizeof(SSma)); if (!pSma) { - code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } pVnode->pSma = pSma; @@ -152,18 +161,14 @@ int32_t smaOpen(SVnode *pVnode, int8_t rollback, bool force) { } // restore the rsma - if (tdRSmaRestore(pSma, RSMA_RESTORE_REBOOT, pVnode->state.committed, rollback) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT(tdRSmaRestore(pSma, RSMA_RESTORE_REBOOT, pVnode->state.committed, rollback)); } _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); - terrno = code; } - return code; + TAOS_RETURN(code); } int32_t smaClose(SSma *pSma) { @@ -190,7 +195,7 @@ int32_t smaClose(SSma *pSma) { */ int32_t tdRSmaRestore(SSma *pSma, int8_t type, int64_t committedVer, int8_t rollback) { if (!VND_IS_RSMA(pSma->pVnode)) { - return TSDB_CODE_RSMA_INVALID_ENV; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_ENV); } return tdRSmaProcessRestoreImpl(pSma, type, committedVer, rollback); diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 823f65a9fd..ad7eb24f28 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -123,8 +123,7 @@ void *tdFreeRSmaInfo(SSma *pSma, SRSmaInfo *pInfo) { static FORCE_INLINE int32_t tdUidStoreInit(STbUidStore **pStore) { *pStore = taosMemoryCalloc(1, sizeof(STbUidStore)); if (*pStore == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } return TSDB_CODE_SUCCESS; @@ -132,12 +131,13 @@ static FORCE_INLINE int32_t tdUidStoreInit(STbUidStore **pStore) { static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, bool isAdd) { SRSmaInfo *pRSmaInfo = NULL; + int32_t code = 0; if (!suid || !tbUids) { - terrno = TSDB_CODE_INVALID_PTR; + code = TSDB_CODE_INVALID_PTR; smaError("vgId:%d, failed to get rsma info for uid:%" PRIi64 " since %s", SMA_VID(pSma), suid ? *suid : -1, - terrstr()); - return TSDB_CODE_FAILED; + tstrerror(code)); + TAOS_RETURN(code); } int32_t nTables = taosArrayGetSize(tbUids); @@ -151,17 +151,17 @@ static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, if (!pRSmaInfo) { smaError("vgId:%d, failed to get rsma info for uid:%" PRIi64, SMA_VID(pSma), *suid); - terrno = TSDB_CODE_RSMA_INVALID_STAT; - return TSDB_CODE_FAILED; + code = TSDB_CODE_RSMA_INVALID_STAT; + TAOS_RETURN(code); } for (int32_t i = 0; i < TSDB_RETENTION_L2; ++i) { if (pRSmaInfo->taskInfo[i]) { - if ((terrno = qUpdateTableListForStreamScanner(pRSmaInfo->taskInfo[i], tbUids, isAdd)) < 0) { + if ((code = qUpdateTableListForStreamScanner(pRSmaInfo->taskInfo[i], tbUids, isAdd)) < 0) { tdReleaseRSmaInfo(pSma, pRSmaInfo); smaError("vgId:%d, update tbUidList failed for uid:%" PRIi64 " level %d since %s", SMA_VID(pSma), *suid, i, - terrstr()); - return TSDB_CODE_FAILED; + tstrerror(code)); + TAOS_RETURN(code); } smaDebug("vgId:%d, update tbUidList succeed for qTaskInfo:%p. suid:%" PRIi64 " uid:%" PRIi64 "nTables:%d level %d", @@ -170,26 +170,25 @@ static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, } tdReleaseRSmaInfo(pSma, pRSmaInfo); - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } int32_t tdUpdateTbUidList(SSma *pSma, STbUidStore *pStore, bool isAdd) { + int32_t code = 0; if (!pStore || (taosArrayGetSize(pStore->tbUids) == 0)) { return TSDB_CODE_SUCCESS; } - if (tdUpdateTbUidListImpl(pSma, &pStore->suid, pStore->tbUids, isAdd) != TSDB_CODE_SUCCESS) { - return TSDB_CODE_FAILED; - } + TAOS_CHECK_RETURN(tdUpdateTbUidListImpl(pSma, &pStore->suid, pStore->tbUids, isAdd)); void *pIter = NULL; while ((pIter = taosHashIterate(pStore->uidHash, pIter))) { tb_uid_t *pTbSuid = (tb_uid_t *)taosHashGetKey(pIter, NULL); SArray *pTbUids = *(SArray **)pIter; - if (tdUpdateTbUidListImpl(pSma, pTbSuid, pTbUids, isAdd) != TSDB_CODE_SUCCESS) { + if ((code = tdUpdateTbUidListImpl(pSma, pTbSuid, pTbUids, isAdd)) != TSDB_CODE_SUCCESS) { taosHashCancelIterate(pStore->uidHash, pIter); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } } return TSDB_CODE_SUCCESS; @@ -206,6 +205,7 @@ int32_t tdUpdateTbUidList(SSma *pSma, STbUidStore *pStore, bool isAdd) { */ int32_t tdFetchTbUidList(SSma *pSma, STbUidStore **ppStore, tb_uid_t suid, tb_uid_t uid) { SSmaEnv *pEnv = SMA_RSMA_ENV(pSma); + int32_t code = 0; // only applicable to rollup SMA ctables if (!pEnv) { diff --git a/source/dnode/vnode/src/sma/smaTimeRange.c b/source/dnode/vnode/src/sma/smaTimeRange.c index 201e496140..da99a2c9a2 100644 --- a/source/dnode/vnode/src/sma/smaTimeRange.c +++ b/source/dnode/vnode/src/sma/smaTimeRange.c @@ -32,19 +32,19 @@ int32_t tdProcessTSmaInsert(SSma *pSma, int64_t indexUid, const char *msg) { smaError("vgId:%d, insert tsma data failed since %s", SMA_VID(pSma), tstrerror(code)); } - return code; + TAOS_RETURN(code); } int32_t tdProcessTSmaCreate(SSma *pSma, int64_t ver, const char *msg) { int32_t code = tdProcessTSmaCreateImpl(pSma, ver, msg); - return code; + TAOS_RETURN(code); } int32_t smaGetTSmaDays(SVnodeCfg *pCfg, void *pCont, uint32_t contLen, int32_t *days) { int32_t code = tdProcessTSmaGetDaysImpl(pCfg, pCont, contLen, days); - return code; + TAOS_RETURN(code); } /** @@ -70,8 +70,8 @@ static int32_t tdProcessTSmaGetDaysImpl(SVnodeCfg *pCfg, void *pCont, uint32_t c STsdbCfg *pTsdbCfg = &pCfg->tsdbCfg; int64_t sInterval = -1; - code = convertTimeFromPrecisionToUnit(tsma.interval, pTsdbCfg->precision, TIME_UNIT_SECOND, &sInterval); - if (TSDB_CODE_SUCCESS != code || 0 == sInterval) { + TAOS_CHECK_EXIT(convertTimeFromPrecisionToUnit(tsma.interval, pTsdbCfg->precision, TIME_UNIT_SECOND, &sInterval)); + if (0 == sInterval) { *days = pTsdbCfg->days; goto _exit; } @@ -80,10 +80,7 @@ static int32_t tdProcessTSmaGetDaysImpl(SVnodeCfg *pCfg, void *pCont, uint32_t c *days = pTsdbCfg->days; } else { int64_t mInterval = -1; - code = convertTimeFromPrecisionToUnit(tsma.interval, pTsdbCfg->precision, TIME_UNIT_MINUTE, &mInterval); - if (TSDB_CODE_SUCCESS != code) { - goto _exit; - } + TAOS_CHECK_EXIT(convertTimeFromPrecisionToUnit(tsma.interval, pTsdbCfg->precision, TIME_UNIT_MINUTE, &mInterval)); int64_t daysPerFile = mInterval * SMA_STORAGE_MINUTES_DAY * 2; if (daysPerFile > SMA_STORAGE_MINUTES_MAX) { @@ -103,7 +100,7 @@ _exit: smaDebug("vgId:%d, succeed to get tsma days %d", pCfg->vgId, *days); } tDecoderClear(&coder); - return code; + TAOS_RETURN(code); } /** @@ -123,10 +120,7 @@ static int32_t tdProcessTSmaCreateImpl(SSma *pSma, int64_t ver, const char *pMsg if (TD_VID(pSma->pVnode) == pCfg->dstVgId) { // create tsma meta in dstVgId - if (metaCreateTSma(SMA_META(pSma), ver, pCfg) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT(metaCreateTSma(SMA_META(pSma), ver, pCfg)); // create stable to save tsma result in dstVgId tNameFromString(&stbFullName, pCfg->dstTbName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); @@ -135,28 +129,24 @@ static int32_t tdProcessTSmaCreateImpl(SSma *pSma, int64_t ver, const char *pMsg pReq.schemaRow = pCfg->schemaRow; pReq.schemaTag = pCfg->schemaTag; - if (metaCreateSTable(SMA_META(pSma), ver, &pReq) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT(metaCreateSTable(SMA_META(pSma), ver, &pReq)); } else { - code = terrno = TSDB_CODE_TSMA_INVALID_STAT; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_EXIT(TSDB_CODE_TSMA_INVALID_STAT); } _exit: if (code) { smaError("vgId:%d, failed at line %d to create sma index %s %" PRIi64 " on stb:%" PRIi64 ", dstSuid:%" PRIi64 - " dstTb:%s dstVg:%d", + " dstTb:%s dstVg:%d since %s", SMA_VID(pSma), lino, pCfg->indexName, pCfg->indexUid, pCfg->tableUid, pCfg->dstTbUid, pReq.name, - pCfg->dstVgId); + pCfg->dstVgId, tstrerror(code)); } else { smaDebug("vgId:%d, success to create sma index %s %" PRIi64 " on stb:%" PRIi64 ", dstSuid:%" PRIi64 " dstTb:%s dstVg:%d", SMA_VID(pSma), pCfg->indexName, pCfg->indexUid, pCfg->tableUid, pCfg->dstTbUid, pReq.name, pCfg->dstVgId); } - return code; + TAOS_RETURN(code); } int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema *pTSchema, int64_t suid, @@ -167,6 +157,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * int32_t len = 0; SSubmitReq2 *pReq = NULL; SArray *tagArray = NULL; + SHashObj *pTableIndexMap = NULL; int32_t numOfBlocks = taosArrayGetSize(pBlocks); @@ -174,18 +165,18 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * pReq = taosMemoryCalloc(1, sizeof(SSubmitReq2)); if (!tagArray || !pReq) { - code = terrno == TSDB_CODE_SUCCESS ? TSDB_CODE_OUT_OF_MEMORY : terrno; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } pReq->aSubmitTbData = taosArrayInit(1, sizeof(SSubmitTbData)); if (pReq->aSubmitTbData == NULL) { - code = terrno == TSDB_CODE_SUCCESS ? TSDB_CODE_OUT_OF_MEMORY : terrno; - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } - SHashObj *pTableIndexMap = - taosHashInit(numOfBlocks, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); + pTableIndexMap = taosHashInit(numOfBlocks, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK); + if (pTableIndexMap == NULL) { + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); + } // SSubmitTbData req for (int32_t i = 0; i < numOfBlocks; ++i) { @@ -193,8 +184,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * if (pDataBlock->info.type == STREAM_DELETE_RESULT) { pDeleteReq->suid = suid; pDeleteReq->deleteReqs = taosArrayInit(0, sizeof(SSingleDeleteReq)); - code = tqBuildDeleteReq(pVnode->pTq, stbFullName, pDataBlock, pDeleteReq, "", true); - TSDB_CHECK_CODE(code, lino, _exit); + TAOS_CHECK_EXIT(tqBuildDeleteReq(pVnode->pTq, stbFullName, pDataBlock, pDeleteReq, "", true)); continue; } @@ -202,11 +192,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * int32_t cid = taosArrayGetSize(pDataBlock->pDataBlock) + 1; - code = buildAutoCreateTableReq(stbFullName, suid, cid, pDataBlock, tagArray, true, &tbData.pCreateTbReq); - if (code) { - smaError("failed to build create-table req, code:%d", code); - continue; - } + TAOS_CHECK_EXIT(buildAutoCreateTableReq(stbFullName, suid, cid, pDataBlock, tagArray, true, &tbData.pCreateTbReq)); { uint64_t groupId = pDataBlock->info.id.groupId; @@ -221,7 +207,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * taosArrayPush(pReq->aSubmitTbData, &tbData); int32_t size = (int32_t)taosArrayGetSize(pReq->aSubmitTbData) - 1; - taosHashPut(pTableIndexMap, &groupId, sizeof(groupId), &size, sizeof(size)); + TAOS_CHECK_EXIT(taosHashPut(pTableIndexMap, &groupId, sizeof(groupId), &size, sizeof(size))); } else { code = tqSetDstTableDataPayload(suid, pTSchema, i, pDataBlock, &tbData, INT64_MIN, ""); if (code != TSDB_CODE_SUCCESS) { @@ -237,15 +223,13 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * } } - taosHashCleanup(pTableIndexMap); - // encode tEncodeSize(tEncodeSubmitReq, pReq, len, code); if (TSDB_CODE_SUCCESS == code) { SEncoder encoder; len += sizeof(SSubmitReq2Msg); if (!(pBuf = rpcMallocCont(len))) { - code = terrno; + code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } @@ -253,9 +237,8 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * ((SSubmitReq2Msg *)pBuf)->header.contLen = htonl(len); ((SSubmitReq2Msg *)pBuf)->version = htobe64(1); tEncoderInit(&encoder, POINTER_SHIFT(pBuf, sizeof(SSubmitReq2Msg)), len - sizeof(SSubmitReq2Msg)); - if (tEncodeSubmitReq(&encoder, pReq) < 0) { + if ((code = tEncodeSubmitReq(&encoder, pReq)) < 0) { tEncoderClear(&encoder); - code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } tEncoderClear(&encoder); @@ -263,6 +246,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema * _exit: taosArrayDestroy(tagArray); + taosHashCleanup(pTableIndexMap); if (pReq != NULL) { tDestroySubmitReq(pReq, TSDB_MSG_FLG_ENCODE); taosMemoryFree(pReq); @@ -276,7 +260,7 @@ _exit: if (ppData) *ppData = pBuf; if (pLen) *pLen = len; } - return code; + TAOS_RETURN(code); } static int32_t tsmaProcessDelReq(SSma *pSma, int64_t indexUid, SBatchDeleteReq *pDelReq) { @@ -290,7 +274,7 @@ static int32_t tsmaProcessDelReq(SSma *pSma, int64_t indexUid, SBatchDeleteReq * void *pBuf = rpcMallocCont(len + sizeof(SMsgHead)); if (!pBuf) { - code = terrno; + code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } @@ -313,7 +297,7 @@ _exit: indexUid, tstrerror(code)); } - return code; + TAOS_RETURN(code); } /** @@ -350,16 +334,15 @@ static int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char pTsmaStat = SMA_STAT_TSMA(pStat); if (!pTsmaStat->pTSma) { - terrno = 0; STSma *pTSma = metaGetSmaInfoByIndex(SMA_META(pSma), indexUid); if (!pTSma) { - code = terrno ? terrno : TSDB_CODE_TSMA_INVALID_PTR; + code = TSDB_CODE_TSMA_INVALID_PTR; TSDB_CHECK_CODE(code, lino, _exit); } pTsmaStat->pTSma = pTSma; pTsmaStat->pTSchema = metaGetTbTSchema(SMA_META(pSma), pTSma->dstTbUid, -1, 1); if (!pTsmaStat->pTSchema) { - code = terrno ? terrno : TSDB_CODE_TSMA_INVALID_PTR; + code = TSDB_CODE_TSMA_INVALID_PTR; TSDB_CHECK_CODE(code, lino, _exit); } } @@ -378,15 +361,13 @@ static int32_t tdProcessTSmaInsertImpl(SSma *pSma, int64_t indexUid, const char pTsmaStat->pTSma->dstTbName, &deleteReq, &pSubmitReq, &contLen); TSDB_CHECK_CODE(code, lino, _exit); - if ((terrno = tsmaProcessDelReq(pSma, indexUid, &deleteReq)) != 0) { - goto _exit; - } + TAOS_CHECK_EXIT(tsmaProcessDelReq(pSma, indexUid, &deleteReq)); #if 0 if (!strncasecmp("td.tsma.rst.tb", pTsmaStat->pTSma->dstTbName, 14)) { - terrno = TSDB_CODE_APP_ERROR; + code = TSDB_CODE_APP_ERROR; smaError("vgId:%d, tsma insert for smaIndex %" PRIi64 " failed since %s, %s", SMA_VID(pSma), indexUid, - pTsmaStat->pTSma->indexUid, tstrerror(terrno), pTsmaStat->pTSma->dstTbName); + pTsmaStat->pTSma->indexUid, tstrerror(code), pTsmaStat->pTSma->dstTbName); goto _err; } #endif @@ -405,5 +386,5 @@ _exit: smaError("vgId:%d, %s failed at line %d since %s, smaIndex:%" PRIi64, SMA_VID(pSma), __func__, lino, tstrerror(code), indexUid); } - return code; + TAOS_RETURN(code); } From 7b49327463fd0373104c0bc175f47af07e0242db Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 24 Jul 2024 10:09:24 +0800 Subject: [PATCH 12/16] enh: refactor return code --- source/dnode/vnode/src/sma/smaRollup.c | 416 +++++++++++------------- source/dnode/vnode/src/tsdb/tsdbWrite.c | 4 +- source/dnode/vnode/src/vnd/vnodeQuery.c | 2 +- 3 files changed, 191 insertions(+), 231 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index ad7eb24f28..ddf7abf0a5 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -38,24 +38,24 @@ SSmaMgmt smaMgmt = { typedef struct SRSmaQTaskInfoItem SRSmaQTaskInfoItem; -static int32_t tdUidStorePut(STbUidStore *pStore, tb_uid_t suid, tb_uid_t *uid); -static void tdUidStoreDestory(STbUidStore *pStore); -static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, bool isAdd); -static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat *pStat, SRSmaInfo *pRSmaInfo, - int8_t idx); -static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, int64_t version, int32_t inputType, - SRSmaInfo *pInfo, ERsmaExecType type, int8_t level); -static SRSmaInfo *tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid); -static void tdReleaseRSmaInfo(SSma *pSma, SRSmaInfo *pInfo); -static void tdFreeRSmaSubmitItems(SArray *pItems, int32_t type); -static int32_t tdRSmaFetchAllResult(SSma *pSma, SRSmaInfo *pInfo); -static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSmaInfoItem *pItem, SRSmaInfo *pInfo, - int32_t execType, int8_t *streamFlushed); -static void tdRSmaFetchTrigger(void *param, void *tmrId); -static void tdRSmaQTaskInfoFree(qTaskInfo_t *taskHandle, int32_t vgId, int32_t level); -static int32_t tdRSmaRestoreQTaskInfoInit(SSma *pSma, int64_t *nTables); -static int32_t tdRSmaRestoreQTaskInfoReload(SSma *pSma, int8_t type, int64_t qTaskFileVer); -static int32_t tdRSmaRestoreTSDataReload(SSma *pSma); +static int32_t tdUidStorePut(STbUidStore *pStore, tb_uid_t suid, tb_uid_t *uid); +static void tdUidStoreDestory(STbUidStore *pStore); +static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, bool isAdd); +static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat *pStat, SRSmaInfo *pRSmaInfo, + int8_t idx); +static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, int64_t version, int32_t inputType, + SRSmaInfo *pInfo, ERsmaExecType type, int8_t level); +static int32_t tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid, SRSmaInfo **ppRSmaInfo); +static void tdReleaseRSmaInfo(SSma *pSma, SRSmaInfo *pInfo); +static void tdFreeRSmaSubmitItems(SArray *pItems, int32_t type); +static int32_t tdRSmaFetchAllResult(SSma *pSma, SRSmaInfo *pInfo); +static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSmaInfoItem *pItem, SRSmaInfo *pInfo, + int32_t execType, int8_t *streamFlushed); +static void tdRSmaFetchTrigger(void *param, void *tmrId); +static void tdRSmaQTaskInfoFree(qTaskInfo_t *taskHandle, int32_t vgId, int32_t level); +static int32_t tdRSmaRestoreQTaskInfoInit(SSma *pSma, int64_t *nTables); +static int32_t tdRSmaRestoreQTaskInfoReload(SSma *pSma, int8_t type, int64_t qTaskFileVer); +static int32_t tdRSmaRestoreTSDataReload(SSma *pSma); struct SRSmaQTaskInfoItem { int32_t len; @@ -147,11 +147,10 @@ static int32_t tdUpdateTbUidListImpl(SSma *pSma, tb_uid_t *suid, SArray *tbUids, return TSDB_CODE_SUCCESS; } - pRSmaInfo = tdAcquireRSmaInfoBySuid(pSma, *suid); + code = tdAcquireRSmaInfoBySuid(pSma, *suid, &pRSmaInfo); - if (!pRSmaInfo) { + if (code != 0) { smaError("vgId:%d, failed to get rsma info for uid:%" PRIi64, SMA_VID(pSma), *suid); - code = TSDB_CODE_RSMA_INVALID_STAT; TAOS_RETURN(code); } @@ -215,8 +214,7 @@ int32_t tdFetchTbUidList(SSma *pSma, STbUidStore **ppStore, tb_uid_t suid, tb_ui SRSmaStat *pStat = (SRSmaStat *)SMA_ENV_STAT(pEnv); SHashObj *infoHash = NULL; if (!pStat || !(infoHash = RSMA_INFO_HASH(pStat))) { - terrno = TSDB_CODE_RSMA_INVALID_STAT; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_STAT); } // info cached when create rsma stable and return directly for non-rsma ctables @@ -225,14 +223,12 @@ int32_t tdFetchTbUidList(SSma *pSma, STbUidStore **ppStore, tb_uid_t suid, tb_ui } if (!(*ppStore)) { - if (tdUidStoreInit(ppStore) < 0) { - return TSDB_CODE_FAILED; - } + TAOS_CHECK_RETURN(tdUidStoreInit(ppStore)); } - if (tdUidStorePut(*ppStore, suid, &uid) < 0) { + if ((code = tdUidStorePut(*ppStore, suid, &uid)) < 0) { *ppStore = tdUidStoreFree(*ppStore); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } return TSDB_CODE_SUCCESS; @@ -262,6 +258,7 @@ static void tdRSmaTaskRemove(SStreamMeta *pMeta, int64_t streamId, int32_t taskI static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat *pStat, SRSmaInfo *pRSmaInfo, int8_t idx) { + int32_t code = 0; if ((param->qmsgLen > 0) && param->qmsg[idx]) { SRSmaInfoItem *pItem = &(pRSmaInfo->items[idx]); SRetention *pRetention = SMA_RETENTION(pSma); @@ -275,18 +272,20 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat if (!taosCheckExistFile(taskInfDir)) { char *s = taosStrdup(taskInfDir); + if (!s) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } if (taosMulMkDir(s) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); taosMemoryFree(s); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } taosMemoryFree(s); } SStreamTask *pStreamTask = taosMemoryCalloc(1, sizeof(*pStreamTask)); if (!pStreamTask) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } pItem->pStreamTask = pStreamTask; pStreamTask->id.taskId = 0; @@ -294,24 +293,20 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat pStreamTask->chkInfo.startTs = taosGetTimestampMs(); pStreamTask->pMeta = pVnode->pTq->pStreamMeta; pStreamTask->exec.qmsg = taosMemoryMalloc(strlen(RSMA_EXEC_TASK_FLAG) + 1); + if (!pStreamTask->exec.qmsg) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } sprintf(pStreamTask->exec.qmsg, "%s", RSMA_EXEC_TASK_FLAG); pStreamTask->chkInfo.checkpointId = streamMetaGetLatestCheckpointId(pStreamTask->pMeta); tdRSmaTaskInit(pStreamTask->pMeta, pItem, &pStreamTask->id); - int32_t code = streamCreateStateMachine(pStreamTask); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + TAOS_CHECK_RETURN(streamCreateStateMachine(pStreamTask)); - code = streamTaskCreateActiveChkptInfo(&pStreamTask->chkInfo.pActiveInfo); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + TAOS_CHECK_RETURN(streamTaskCreateActiveChkptInfo(&pStreamTask->chkInfo.pActiveInfo)); pStreamState = streamStateOpen(taskInfDir, pStreamTask, pStreamTask->id.streamId, pStreamTask->id.taskId); if (!pStreamState) { - terrno = TSDB_CODE_RSMA_STREAM_STATE_OPEN; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_RSMA_STREAM_STATE_OPEN); } pItem->pStreamState = pStreamState; @@ -321,12 +316,11 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat initStorageAPI(&handle.api); pRSmaInfo->taskInfo[idx] = qCreateStreamExecTaskInfo(param->qmsg[idx], &handle, TD_VID(pVnode), 0); if (!pRSmaInfo->taskInfo[idx]) { - terrno = TSDB_CODE_RSMA_QTASKINFO_CREATE; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_RSMA_QTASKINFO_CREATE); } if (!(pItem->pResList = taosArrayInit(1, POINTER_BYTES))) { - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } if (pItem->fetchResultVer < pItem->submitReqVer) { @@ -349,7 +343,9 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat pItem->level = idx == 0 ? TSDB_RETENTION_L1 : TSDB_RETENTION_L2; SRSmaRef rsmaRef = {.refId = pStat->refId, .suid = pRSmaInfo->suid}; - taosHashPut(smaMgmt.refHash, &pItem, POINTER_BYTES, &rsmaRef, sizeof(rsmaRef)); + if (taosHashPut(smaMgmt.refHash, &pItem, POINTER_BYTES, &rsmaRef, sizeof(rsmaRef)) != 0) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } taosTmrReset(tdRSmaFetchTrigger, RSMA_FETCH_INTERVAL, pItem, smaMgmt.tmrHandle, &pItem->tmrId); @@ -359,7 +355,7 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat TD_VID(pVnode), pItem->pStreamTask, pRSmaInfo->suid, (int8_t)(idx + 1), pStreamTask->chkInfo.checkpointId, pItem->submitReqVer, pItem->fetchResultVer, param->maxdelay[idx], param->watermark[idx], pItem->maxDelay); } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } /** @@ -372,20 +368,14 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat * @return int32_t */ int32_t tdRSmaProcessCreateImpl(SSma *pSma, SRSmaParam *param, int64_t suid, const char *tbName) { - int32_t code; + int32_t code = 0; + int32_t lino = 0; if ((param->qmsgLen[0] == 0) && (param->qmsgLen[1] == 0)) { smaDebug("vgId:%d, no qmsg1/qmsg2 for rollup table %s %" PRIi64, SMA_VID(pSma), tbName, suid); return TSDB_CODE_SUCCESS; } -#if 0 - if (tdCheckAndInitSmaEnv(pSma, TSDB_SMA_TYPE_ROLLUP) != TSDB_CODE_SUCCESS) { - terrno = TSDB_CODE_TDB_INIT_FAILED; - return TSDB_CODE_FAILED; - } -#endif - SSmaEnv *pEnv = SMA_RSMA_ENV(pSma); SRSmaStat *pStat = (SRSmaStat *)SMA_ENV_STAT(pEnv); SRSmaInfo *pRSmaInfo = NULL; @@ -399,41 +389,34 @@ int32_t tdRSmaProcessCreateImpl(SSma *pSma, SRSmaParam *param, int64_t suid, con // from write queue: single thead pRSmaInfo = (SRSmaInfo *)taosMemoryCalloc(1, sizeof(SRSmaInfo)); if (!pRSmaInfo) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } STSchema *pTSchema = metaGetTbTSchema(SMA_META(pSma), suid, -1, 1); if (!pTSchema) { - terrno = TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION; - goto _err; + TAOS_CHECK_EXIT(TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION); } pRSmaInfo->pSma = pSma; pRSmaInfo->pTSchema = pTSchema; pRSmaInfo->suid = suid; T_REF_INIT_VAL(pRSmaInfo, 1); - code = taosOpenQueue(&pRSmaInfo->queue); - if (code) goto _err; + TAOS_CHECK_EXIT(taosOpenQueue(&pRSmaInfo->queue)); - code = taosAllocateQall(&pRSmaInfo->qall); - if (code) goto _err; + TAOS_CHECK_EXIT(taosAllocateQall(&pRSmaInfo->qall)); - if (tdSetRSmaInfoItemParams(pSma, param, pStat, pRSmaInfo, 0) < 0 || - tdSetRSmaInfoItemParams(pSma, param, pStat, pRSmaInfo, 1) < 0) { - goto _err; + TAOS_CHECK_EXIT(tdSetRSmaInfoItemParams(pSma, param, pStat, pRSmaInfo, 0)); + TAOS_CHECK_EXIT(tdSetRSmaInfoItemParams(pSma, param, pStat, pRSmaInfo, 1)); + + TAOS_CHECK_EXIT(taosHashPut(RSMA_INFO_HASH(pStat), &suid, sizeof(tb_uid_t), &pRSmaInfo, sizeof(pRSmaInfo))); + +_exit: + if (code != 0) { + tdFreeRSmaInfo(pSma, pRSmaInfo); + } else { + smaDebug("vgId:%d, register rsma info succeed for table %" PRIi64, SMA_VID(pSma), suid); } - - if (taosHashPut(RSMA_INFO_HASH(pStat), &suid, sizeof(tb_uid_t), &pRSmaInfo, sizeof(pRSmaInfo)) != 0) { - goto _err; - } - - smaDebug("vgId:%d, register rsma info succeed for table %" PRIi64, SMA_VID(pSma), suid); - - return TSDB_CODE_SUCCESS; -_err: - tdFreeRSmaInfo(pSma, pRSmaInfo); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } /** @@ -480,11 +463,13 @@ int32_t tdProcessRSmaDrop(SSma *pSma, SVDropStbReq *pReq) { return TSDB_CODE_SUCCESS; } + int32_t code = 0; SRSmaStat *pRSmaStat = (SRSmaStat *)SMA_ENV_STAT(pSmaEnv); + SRSmaInfo *pRSmaInfo = NULL; - SRSmaInfo *pRSmaInfo = tdAcquireRSmaInfoBySuid(pSma, pReq->suid); + code = tdAcquireRSmaInfoBySuid(pSma, pReq->suid, &pRSmaInfo); - if (!pRSmaInfo) { + if (code != 0) { smaWarn("vgId:%d, drop rsma for stable %s %" PRIi64 " failed no rsma in hash", TD_VID(pVnode), pReq->name, pReq->suid); return TSDB_CODE_SUCCESS; @@ -519,12 +504,11 @@ static int32_t tdUidStorePut(STbUidStore *pStore, tb_uid_t suid, tb_uid_t *uid) if (uid) { if (!pStore->tbUids) { if (!(pStore->tbUids = taosArrayInit(1, sizeof(tb_uid_t)))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } } if (!taosArrayPush(pStore->tbUids, uid)) { - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } } } else { @@ -532,32 +516,29 @@ static int32_t tdUidStorePut(STbUidStore *pStore, tb_uid_t suid, tb_uid_t *uid) if (!pStore->uidHash) { pStore->uidHash = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_ENTRY_LOCK); if (!pStore->uidHash) { - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } } if (uid) { SArray *uidArray = taosHashGet(pStore->uidHash, &suid, sizeof(tb_uid_t)); if (uidArray && ((uidArray = *(SArray **)uidArray))) { - taosArrayPush(uidArray, uid); + if (!taosArrayPush(uidArray, uid)) { + taosArrayDestroy(uidArray); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } } else { SArray *pUidArray = taosArrayInit(1, sizeof(tb_uid_t)); if (!pUidArray) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } if (!taosArrayPush(pUidArray, uid)) { - terrno = TSDB_CODE_OUT_OF_MEMORY; taosArrayDestroy(pUidArray); - return TSDB_CODE_FAILED; - } - if (taosHashPut(pStore->uidHash, &suid, sizeof(suid), &pUidArray, sizeof(pUidArray)) != 0) { - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } + TAOS_CHECK_RETURN(taosHashPut(pStore->uidHash, &suid, sizeof(suid), &pUidArray, sizeof(pUidArray))); } } else { - if (taosHashPut(pStore->uidHash, &suid, sizeof(suid), NULL, 0) != 0) { - return TSDB_CODE_FAILED; - } + TAOS_CHECK_RETURN(taosHashPut(pStore->uidHash, &suid, sizeof(suid), NULL, 0)); } } return TSDB_CODE_SUCCESS; @@ -600,9 +581,7 @@ static int32_t tdProcessSubmitReq(STsdb *pTsdb, int64_t version, void *pReq) { if (pReq) { SSubmitReq2 *pSubmitReq = (SSubmitReq2 *)pReq; // spin lock for race condition during insert data - if (tsdbInsertData(pTsdb, version, pSubmitReq, NULL) < 0) { - return TSDB_CODE_FAILED; - } + TAOS_CHECK_RETURN(tsdbInsertData(pTsdb, version, pSubmitReq, NULL)); } return TSDB_CODE_SUCCESS; @@ -612,13 +591,9 @@ static int32_t tdFetchSubmitReqSuids(SSubmitReq2 *pMsg, STbUidStore *pStore) { SArray *pSubmitTbData = pMsg ? pMsg->aSubmitTbData : NULL; int32_t size = taosArrayGetSize(pSubmitTbData); - terrno = TSDB_CODE_SUCCESS; - for (int32_t i = 0; i < size; ++i) { SSubmitTbData *pData = TARRAY_GET_ELEM(pSubmitTbData, i); - if ((terrno = tdUidStorePut(pStore, pData->suid, NULL)) < 0) { - return -1; - } + TAOS_CHECK_RETURN(tdUidStorePut(pStore, pData->suid, NULL)); } return 0; @@ -645,7 +620,7 @@ int32_t smaRetention(SSma *pSma, int64_t now) { } _end: - return code; + TAOS_RETURN(code); } static int32_t tdRSmaProcessDelReq(SSma *pSma, int64_t suid, int8_t level, SBatchDeleteReq *pDelReq) { @@ -659,13 +634,17 @@ static int32_t tdRSmaProcessDelReq(SSma *pSma, int64_t suid, int8_t level, SBatc void *pBuf = rpcMallocCont(len + sizeof(SMsgHead)); if (!pBuf) { - code = terrno; + code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } SEncoder encoder; tEncoderInit(&encoder, POINTER_SHIFT(pBuf, sizeof(SMsgHead)), len); - tEncodeSBatchDeleteReq(&encoder, pDelReq); + if ((code = tEncodeSBatchDeleteReq(&encoder, pDelReq)) < 0) { + tEncoderClear(&encoder); + rpcFreeCont(pBuf); + TSDB_CHECK_CODE(code, lino, _exit); + } tEncoderClear(&encoder); ((SMsgHead *)pBuf)->vgId = TD_VID(pSma->pVnode); @@ -682,7 +661,7 @@ _exit: SMA_VID(pSma), lino, suid, level, tstrerror(code)); } - return code; + TAOS_RETURN(code); } static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSmaInfoItem *pItem, SRSmaInfo *pInfo, @@ -717,7 +696,7 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma SBatchDeleteReq deleteReq = {.suid = suid, .level = pItem->level}; deleteReq.deleteReqs = taosArrayInit(0, sizeof(SSingleDeleteReq)); if (!deleteReq.deleteReqs) { - code = terrno; + code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } code = tqBuildDeleteReq(pSma->pVnode->pTq, NULL, output, &deleteReq, "", true); @@ -753,21 +732,15 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); SSubmitReq2 *pReq = NULL; - if (buildSubmitReqFromDataBlock(&pReq, output, pTSchema, output->info.id.groupId, SMA_VID(pSma), suid) < 0) { - code = terrno ? terrno : TSDB_CODE_RSMA_RESULT; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT( + buildSubmitReqFromDataBlock(&pReq, output, pTSchema, output->info.id.groupId, SMA_VID(pSma), suid)); - if (pReq && tdProcessSubmitReq(sinkTsdb, output->info.version, pReq) < 0) { - if (terrno == TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE) { + if (pReq && (code = tdProcessSubmitReq(sinkTsdb, output->info.version, pReq)) < 0) { + if (code == TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE) { // TODO: reconfigure SSubmitReq2 - } else { - if (terrno == 0) terrno = TSDB_CODE_RSMA_RESULT; - code = terrno; } tDestroySubmitReq(pReq, TSDB_MSG_FLG_ENCODE); - taosMemoryFree(pReq); - pReq = NULL; + taosMemoryFreeClear(pReq); TSDB_CHECK_CODE(code, lino, _exit); } @@ -812,14 +785,12 @@ _exit: */ static int32_t tdExecuteRSmaImplAsync(SSma *pSma, int64_t version, const void *pMsg, int32_t len, int32_t inputType, SRSmaInfo *pInfo, tb_uid_t suid) { - int32_t code; + int32_t code = 0; + int32_t lino = 0; int32_t size = RSMA_EXEC_MSG_HLEN + len; // header + payload void *qItem; - code = taosAllocateQitem(size, DEF_QITEM, 0, (void **)&qItem); - if (code) { - return code; - } + TAOS_CHECK_RETURN(taosAllocateQitem(size, DEF_QITEM, 0, (void **)&qItem)); void *pItem = qItem; @@ -830,7 +801,7 @@ static int32_t tdExecuteRSmaImplAsync(SSma *pSma, int64_t version, const void *p *(int64_t *)pItem = version; memcpy(POINTER_SHIFT(pItem, sizeof(int64_t)), pMsg, len); - taosWriteQitem(pInfo->queue, qItem); + TAOS_CHECK_RETURN(taosWriteQitem(pInfo->queue, qItem)); pInfo->lastRecv = taosGetTimestampMs(); @@ -863,10 +834,10 @@ static int32_t tdRsmaPrintSubmitReq(SSma *pSma, SSubmitReq *pReq) { SSubmitMsgIter msgIter = {0}; SSubmitBlkIter blkIter = {0}; STSRow *row = NULL; - if (tInitSubmitMsgIter(pReq, &msgIter) < 0) return -1; + TAOS_CHECK_RETURN(tInitSubmitMsgIter(pReq, &msgIter)); while (true) { SSubmitBlk *pBlock = NULL; - if (tGetSubmitMsgNext(&msgIter, &pBlock) < 0) return -1; + TAOS_CHECK_RETURN(tGetSubmitMsgNext(&msgIter, &pBlock)); if (pBlock == NULL) break; tInitSubmitBlkIter(&msgIter, pBlock, &blkIter); while ((row = tGetSubmitBlkNext(&blkIter)) != NULL) { @@ -892,6 +863,7 @@ static int32_t tdRsmaPrintSubmitReq(SSma *pSma, SSubmitReq *pReq) { */ static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, int64_t version, int32_t inputType, SRSmaInfo *pInfo, ERsmaExecType type, int8_t level) { + int32_t code = 0; int32_t idx = level - 1; void *qTaskInfo = RSMA_INFO_QTASK(pInfo, idx); SRSmaInfoItem *pItem = RSMA_INFO_ITEM(pInfo, idx); @@ -902,25 +874,24 @@ static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, return TSDB_CODE_SUCCESS; } if (!pInfo->pTSchema) { - terrno = TSDB_CODE_INVALID_PTR; smaWarn("vgId:%d, no schema to execute rsma %" PRIi8 " task for suid:%" PRIu64, SMA_VID(pSma), level, pInfo->suid); - return TSDB_CODE_FAILED; + TAOS_RETURN(TSDB_CODE_INVALID_PTR); } smaDebug("vgId:%d, execute rsma %" PRIi8 " task for qTaskInfo:%p, suid:%" PRIu64 ", nMsg:%d, submitReqVer:%" PRIi64 ", inputType:%d", SMA_VID(pSma), level, RSMA_INFO_QTASK(pInfo, idx), pInfo->suid, msgSize, version, inputType); - if ((terrno = qSetSMAInput(qTaskInfo, pMsg, msgSize, inputType)) < 0) { - smaError("vgId:%d, rsma %" PRIi8 " qSetStreamInput failed since %s", SMA_VID(pSma), level, tstrerror(terrno)); - return TSDB_CODE_FAILED; + if ((code = qSetSMAInput(qTaskInfo, pMsg, msgSize, inputType)) < 0) { + smaError("vgId:%d, rsma %" PRIi8 " qSetStreamInput failed since %s", SMA_VID(pSma), level, tstrerror(code)); + TAOS_RETURN(TSDB_CODE_FAILED); } atomic_store_64(&pItem->submitReqVer, version); - terrno = tdRSmaExecAndSubmitResult(pSma, qTaskInfo, pItem, pInfo, STREAM_NORMAL, NULL); + TAOS_CHECK_RETURN(tdRSmaExecAndSubmitResult(pSma, qTaskInfo, pItem, pInfo, STREAM_NORMAL, NULL)); - return terrno ? TSDB_CODE_FAILED : TDB_CODE_SUCCESS; + TAOS_RETURN(code); } /** @@ -928,26 +899,23 @@ static int32_t tdExecuteRSmaImpl(SSma *pSma, const void *pMsg, int32_t msgSize, * * @param pSma * @param suid - * @return SRSmaInfo* */ -static SRSmaInfo *tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid) { +static int32_t tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid, SRSmaInfo **ppRSmaInfo) { int32_t code = 0; int32_t lino = 0; SSmaEnv *pEnv = SMA_RSMA_ENV(pSma); SRSmaStat *pStat = NULL; SRSmaInfo *pRSmaInfo = NULL; - terrno = 0; + *ppRSmaInfo = NULL; if (!pEnv) { - terrno = TSDB_CODE_RSMA_INVALID_ENV; - return NULL; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_ENV); } pStat = (SRSmaStat *)SMA_ENV_STAT(pEnv); if (!pStat || !RSMA_INFO_HASH(pStat)) { - terrno = TSDB_CODE_RSMA_INVALID_STAT; - return NULL; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_STAT); } taosRLockLatch(SMA_ENV_LOCK(pEnv)); @@ -955,20 +923,19 @@ static SRSmaInfo *tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid) { if (pRSmaInfo && (pRSmaInfo = *(SRSmaInfo **)pRSmaInfo)) { if (RSMA_INFO_IS_DEL(pRSmaInfo)) { taosRUnLockLatch(SMA_ENV_LOCK(pEnv)); - return NULL; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_STAT); } tdRefRSmaInfo(pSma, pRSmaInfo); taosRUnLockLatch(SMA_ENV_LOCK(pEnv)); if (ASSERTS(pRSmaInfo->suid == suid, "suid:%" PRIi64 " != %" PRIi64, pRSmaInfo->suid, suid)) { - terrno = TSDB_CODE_APP_ERROR; - return NULL; + TAOS_RETURN(TSDB_CODE_APP_ERROR); } - return pRSmaInfo; + TAOS_RETURN(code); } taosRUnLockLatch(SMA_ENV_LOCK(pEnv)); - return NULL; + TAOS_RETURN(TSDB_CODE_RSMA_INVALID_STAT); } static FORCE_INLINE void tdReleaseRSmaInfo(SSma *pSma, SRSmaInfo *pInfo) { @@ -989,16 +956,19 @@ static FORCE_INLINE void tdReleaseRSmaInfo(SSma *pSma, SRSmaInfo *pInfo) { */ static int32_t tdExecuteRSmaAsync(SSma *pSma, int64_t version, const void *pMsg, int32_t len, int32_t inputType, tb_uid_t suid) { - SRSmaInfo *pRSmaInfo = tdAcquireRSmaInfoBySuid(pSma, suid); - if (!pRSmaInfo) { + int32_t code = 0; + SRSmaInfo *pRSmaInfo = NULL; + + code = tdAcquireRSmaInfoBySuid(pSma, suid, &pRSmaInfo); + if (code != 0) { smaDebug("vgId:%d, execute rsma, no rsma info for suid:%" PRIu64, SMA_VID(pSma), suid); - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); // return success } if (inputType == STREAM_INPUT__DATA_SUBMIT || inputType == STREAM_INPUT__REF_DATA_BLOCK) { - if (tdExecuteRSmaImplAsync(pSma, version, pMsg, len, inputType, pRSmaInfo, suid) < 0) { + if ((code = tdExecuteRSmaImplAsync(pSma, version, pMsg, len, inputType, pRSmaInfo, suid)) < 0) { tdReleaseRSmaInfo(pSma, pRSmaInfo); - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } if (smaMgmt.tmrHandle) { SRSmaInfoItem *pItem = RSMA_INFO_ITEM(pRSmaInfo, 0); @@ -1011,11 +981,11 @@ static int32_t tdExecuteRSmaAsync(SSma *pSma, int64_t version, const void *pMsg, } } } else { - terrno = TSDB_CODE_APP_ERROR; + code = TSDB_CODE_APP_ERROR; tdReleaseRSmaInfo(pSma, pRSmaInfo); smaError("vgId:%d, execute rsma, failed for suid:%" PRIu64 " since %s, type:%d", SMA_VID(pSma), suid, - tstrerror(terrno), inputType); - return TSDB_CODE_FAILED; + tstrerror(code), inputType); + TAOS_RETURN(code); } tdReleaseRSmaInfo(pSma, pRSmaInfo); @@ -1025,57 +995,56 @@ static int32_t tdExecuteRSmaAsync(SSma *pSma, int64_t version, const void *pMsg, int32_t tdProcessRSmaSubmit(SSma *pSma, int64_t version, void *pReq, void *pMsg, int32_t len) { if (!SMA_RSMA_ENV(pSma)) return TSDB_CODE_SUCCESS; - if ((terrno = atomic_load_32(&SMA_RSMA_STAT(pSma)->execStat))) { - smaError("vgId:%d, failed to process rsma submit since invalid exec code: %s", SMA_VID(pSma), terrstr()); - goto _err; + int32_t code = 0; + if ((code = atomic_load_32(&SMA_RSMA_STAT(pSma)->execStat))) { + smaError("vgId:%d, failed to process rsma submit since invalid exec code: %s", SMA_VID(pSma), tstrerror(code)); + goto _exit; } STbUidStore uidStore = {0}; - if (tdFetchSubmitReqSuids(pReq, &uidStore) < 0) { - smaError("vgId:%d, failed to process rsma submit fetch suid since: %s", SMA_VID(pSma), terrstr()); - goto _err; + if ((code = tdFetchSubmitReqSuids(pReq, &uidStore)) < 0) { + smaError("vgId:%d, failed to process rsma submit fetch suid since: %s", SMA_VID(pSma), tstrerror(code)); + goto _exit; } if (uidStore.suid != 0) { - if (tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__DATA_SUBMIT, uidStore.suid) < 0) { - smaError("vgId:%d, failed to process rsma submit exec 1 since: %s", SMA_VID(pSma), terrstr()); - goto _err; + if ((code = tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__DATA_SUBMIT, uidStore.suid)) < 0) { + smaError("vgId:%d, failed to process rsma submit exec 1 since: %s", SMA_VID(pSma), tstrerror(code)); + goto _exit; } void *pIter = NULL; while ((pIter = taosHashIterate(uidStore.uidHash, pIter))) { tb_uid_t *pTbSuid = (tb_uid_t *)taosHashGetKey(pIter, NULL); - if (tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__DATA_SUBMIT, *pTbSuid) < 0) { - smaError("vgId:%d, failed to process rsma submit exec 2 since: %s", SMA_VID(pSma), terrstr()); + if ((code = tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__DATA_SUBMIT, *pTbSuid)) < 0) { + smaError("vgId:%d, failed to process rsma submit exec 2 since: %s", SMA_VID(pSma), tstrerror(code)); taosHashCancelIterate(uidStore.uidHash, pIter); - goto _err; + goto _exit; } } } +_exit: tdUidStoreDestory(&uidStore); - return TSDB_CODE_SUCCESS; -_err: - tdUidStoreDestory(&uidStore); - return terrno; + TAOS_RETURN(code); } int32_t tdProcessRSmaDelete(SSma *pSma, int64_t version, void *pReq, void *pMsg, int32_t len) { if (!SMA_RSMA_ENV(pSma)) return TSDB_CODE_SUCCESS; - if ((terrno = atomic_load_32(&SMA_RSMA_STAT(pSma)->execStat))) { - smaError("vgId:%d, failed to process rsma delete since invalid exec code: %s", SMA_VID(pSma), terrstr()); - goto _err; + int32_t code = 0; + if ((code = atomic_load_32(&SMA_RSMA_STAT(pSma)->execStat))) { + smaError("vgId:%d, failed to process rsma delete since invalid exec code: %s", SMA_VID(pSma), tstrerror(code)); + goto _exit; } SDeleteRes *pDelRes = pReq; - if (tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__REF_DATA_BLOCK, pDelRes->suid) < 0) { - smaError("vgId:%d, failed to process rsma submit exec 1 since: %s", SMA_VID(pSma), terrstr()); - goto _err; + if ((code = tdExecuteRSmaAsync(pSma, version, pMsg, len, STREAM_INPUT__REF_DATA_BLOCK, pDelRes->suid)) < 0) { + smaError("vgId:%d, failed to process rsma submit exec 1 since: %s", SMA_VID(pSma), tstrerror(code)); + goto _exit; } - return TSDB_CODE_SUCCESS; -_err: - return terrno; +_exit: + TAOS_RETURN(code); } /** @@ -1099,10 +1068,7 @@ static int32_t tdRSmaRestoreQTaskInfoInit(SSma *pSma, int64_t *nTables) { TSDB_CHECK_CODE(code, lino, _exit); } - if (vnodeGetStbIdList(pSma->pVnode, 0, suidList) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT(vnodeGetStbIdList(pSma->pVnode, 0, suidList)); int64_t arrSize = taosArrayGetSize(suidList); @@ -1146,10 +1112,7 @@ static int32_t tdRSmaRestoreQTaskInfoInit(SSma *pSma, int64_t *nTables) { " qmsgLen:%" PRIi32, TD_VID(pVnode), suid, i, param->maxdelay[i], param->watermark[i], param->qmsgLen[i]); } - if (tdRSmaProcessCreateImpl(pSma, &mr.me.stbEntry.rsmaParam, suid, mr.me.name) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + TAOS_CHECK_EXIT(tdRSmaProcessCreateImpl(pSma, &mr.me.stbEntry.rsmaParam, suid, mr.me.name)); #if 0 // reload all ctbUids for suid uidStore.suid = suid; @@ -1180,7 +1143,7 @@ _exit: metaReaderClear(&mr); taosArrayDestroy(suidList); tdUidStoreDestory(&uidStore); - return code; + TAOS_RETURN(code); } /** @@ -1188,20 +1151,16 @@ _exit: */ int32_t tdRSmaProcessRestoreImpl(SSma *pSma, int8_t type, int64_t qtaskFileVer, int8_t rollback) { int32_t code = 0; + int32_t lino = 0; int64_t nTables = 0; // step 1: init env - if (tdCheckAndInitSmaEnv(pSma, TSDB_SMA_TYPE_ROLLUP) != TSDB_CODE_SUCCESS) { - code = TSDB_CODE_TDB_INIT_FAILED; - goto _err; - } + TAOS_CHECK_EXIT(tdCheckAndInitSmaEnv(pSma, TSDB_SMA_TYPE_ROLLUP)); // step 2: iterate all stables to restore the rsma env - if ((code = tdRSmaRestoreQTaskInfoInit(pSma, &nTables)) < 0) { - goto _err; - } + TAOS_CHECK_EXIT(tdRSmaRestoreQTaskInfoInit(pSma, &nTables)); -_err: +_exit: if (code) { smaError("vgId:%d, restore rsma task %" PRIi8 "from qtaskf %" PRIi64 " failed since %s", SMA_VID(pSma), type, qtaskFileVer, tstrerror(code)); @@ -1210,7 +1169,7 @@ _err: type, qtaskFileVer, nTables); } - return code; + TAOS_RETURN(code); } int32_t tdRSmaPersistExecImpl(SRSmaStat *pRSmaStat, SHashObj *pInfoHash) { @@ -1323,9 +1282,8 @@ _checkpoint: } streamMetaWLock(pMeta); - if (streamMetaSaveTask(pMeta, pTask)) { + if ((code = streamMetaSaveTask(pMeta, pTask)) != 0) { streamMetaWUnLock(pMeta); - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; taosHashCancelIterate(pInfoHash, infoHash); TSDB_CHECK_CODE(code, lino, _exit); } @@ -1338,9 +1296,9 @@ _checkpoint: } if (pMeta) { streamMetaWLock(pMeta); - if (streamMetaCommit(pMeta)) { + if ((code = streamMetaCommit(pMeta)) != 0) { streamMetaWUnLock(pMeta); - code = terrno ? terrno : TSDB_CODE_OUT_OF_MEMORY; + if (code == -1) code = TSDB_CODE_OUT_OF_MEMORY; TSDB_CHECK_CODE(code, lino, _exit); } streamMetaWUnLock(pMeta); @@ -1354,8 +1312,7 @@ _exit: smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); } - terrno = code; - return code; + TAOS_RETURN(code); } /** @@ -1370,6 +1327,7 @@ static void tdRSmaFetchTrigger(void *param, void *tmrId) { SRSmaStat *pStat = NULL; SRSmaInfo *pRSmaInfo = NULL; SRSmaInfoItem *pItem = NULL; + int32_t code = 0; if (!(pRSmaRef = taosHashGet(smaMgmt.refHash, ¶m, POINTER_BYTES))) { smaDebug("rsma fetch task not start since rsma info item:%p not exist in refHash:%p, rsetId:%d", param, @@ -1386,7 +1344,7 @@ static void tdRSmaFetchTrigger(void *param, void *tmrId) { pSma = pStat->pSma; - if (!(pRSmaInfo = tdAcquireRSmaInfoBySuid(pSma, pRSmaRef->suid))) { + if ((code = tdAcquireRSmaInfoBySuid(pSma, pRSmaRef->suid, &pRSmaInfo)) != 0) { smaDebug("rsma fetch task not start since rsma info not exist, rsetId:%d refId:%" PRIi64 ")", smaMgmt.rsetId, pRSmaRef->refId); // pRSmaRef freed in taosHashRemove tdReleaseSmaRef(smaMgmt.rsetId, pRSmaRef->refId); @@ -1484,6 +1442,8 @@ static void tdFreeRSmaSubmitItems(SArray *pItems, int32_t type) { * @return int32_t */ static int32_t tdRSmaFetchAllResult(SSma *pSma, SRSmaInfo *pInfo) { + int32_t code = 0; + int32_t lino = 0; SSDataBlock dataBlock = {.info.type = STREAM_GET_ALL}; for (int8_t i = 1; i <= TSDB_RETENTION_L2; ++i) { SRSmaInfoItem *pItem = RSMA_INFO_ITEM(pInfo, i - 1); @@ -1512,12 +1472,10 @@ static int32_t tdRSmaFetchAllResult(SSma *pSma, SRSmaInfo *pInfo) { pItem->nScanned = 0; - if ((terrno = qSetSMAInput(taskInfo, &dataBlock, 1, STREAM_INPUT__DATA_BLOCK)) < 0) { - goto _err; - } - if (tdRSmaExecAndSubmitResult(pSma, taskInfo, pItem, pInfo, STREAM_GET_ALL, NULL) < 0) { - atomic_store_32(&SMA_RSMA_STAT(pSma)->execStat, terrno); - goto _err; + TAOS_CHECK_EXIT(qSetSMAInput(taskInfo, &dataBlock, 1, STREAM_INPUT__DATA_BLOCK)); + if ((code = tdRSmaExecAndSubmitResult(pSma, taskInfo, pItem, pInfo, STREAM_GET_ALL, NULL)) < 0) { + atomic_store_32(&SMA_RSMA_STAT(pSma)->execStat, code); + goto _exit; } smaDebug("vgId:%d, suid:%" PRIi64 " level:%" PRIi8 " nScanned:%" PRIi32 " maxDelay:%d, fetch finished", @@ -1529,10 +1487,8 @@ static int32_t tdRSmaFetchAllResult(SSma *pSma, SRSmaInfo *pInfo) { } } -_end: - return TSDB_CODE_SUCCESS; -_err: - return TSDB_CODE_FAILED; +_exit: + TAOS_RETURN(code); } static int32_t tdRSmaBatchExec(SSma *pSma, SRSmaInfo *pInfo, STaosQall *qall, SArray *pSubmitArr, ERsmaExecType type) { @@ -1541,6 +1497,8 @@ static int32_t tdRSmaBatchExec(SSma *pSma, SRSmaInfo *pInfo, STaosQall *qall, SA int32_t nSubmit = 0; int32_t nDelete = 0; int64_t version = 0; + int32_t code = 0; + int32_t lino = 0; SPackedData packData; @@ -1559,23 +1517,21 @@ static int32_t tdRSmaBatchExec(SSma *pSma, SRSmaInfo *pInfo, STaosQall *qall, SA version = packData.ver; if (!taosArrayPush(pSubmitArr, &packData)) { taosFreeQitem(msg); - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } ++nSubmit; } else if (inputType == STREAM_INPUT__REF_DATA_BLOCK) { _resume_delete: version = RSMA_EXEC_MSG_VER(msg); - if ((terrno = tqExtractDelDataBlock(RSMA_EXEC_MSG_BODY(msg), RSMA_EXEC_MSG_LEN(msg), version, - &packData.pDataBlock, 1))) { + if ((code = tqExtractDelDataBlock(RSMA_EXEC_MSG_BODY(msg), RSMA_EXEC_MSG_LEN(msg), version, + &packData.pDataBlock, 1))) { taosFreeQitem(msg); - goto _err; + TAOS_CHECK_EXIT(code); } if (packData.pDataBlock && !taosArrayPush(pSubmitArr, &packData)) { taosFreeQitem(msg); - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } taosFreeQitem(msg); if (packData.pDataBlock) { @@ -1593,9 +1549,7 @@ static int32_t tdRSmaBatchExec(SSma *pSma, SRSmaInfo *pInfo, STaosQall *qall, SA ASSERTS(size > 0, "size is %d", size); int32_t inputType = nSubmit > 0 ? STREAM_INPUT__MERGED_SUBMIT : STREAM_INPUT__REF_DATA_BLOCK; for (int32_t i = 1; i <= TSDB_RETENTION_L2; ++i) { - if (tdExecuteRSmaImpl(pSma, pSubmitArr->pData, size, version, inputType, pInfo, type, i) < 0) { - goto _err; - } + TAOS_CHECK_EXIT(tdExecuteRSmaImpl(pSma, pSubmitArr->pData, size, version, inputType, pInfo, type, i)); } tdFreeRSmaSubmitItems(pSubmitArr, inputType); nSubmit = 0; @@ -1612,7 +1566,7 @@ static int32_t tdRSmaBatchExec(SSma *pSma, SRSmaInfo *pInfo, STaosQall *qall, SA _rtn: return TSDB_CODE_SUCCESS; -_err: +_exit: atomic_store_32(&SMA_RSMA_STAT(pSma)->execStat, terrno); smaError("vgId:%d, batch exec for suid:%" PRIi64 " execType:%d size:%d failed since %s", SMA_VID(pSma), pInfo->suid, type, (int32_t)taosArrayGetSize(pSubmitArr), terrstr()); @@ -1626,7 +1580,7 @@ _err: break; } } - return TSDB_CODE_FAILED; + TAOS_RETURN(code); } /** @@ -1677,7 +1631,10 @@ int32_t tdRSmaProcessExecImpl(SSma *pSma, ERsmaExecType type) { taosReadAllQitems(pInfo->queue, pInfo->qall); // queue has mutex lock int32_t qallItemSize = taosQallItemSize(pInfo->qall); if (qallItemSize > 0) { - tdRSmaBatchExec(pSma, pInfo, pInfo->qall, pSubmitArr, type); + if ((code = tdRSmaBatchExec(pSma, pInfo, pInfo->qall, pSubmitArr, type)) != 0) { + taosHashCancelIterate(infoHash, pIter); + TSDB_CHECK_CODE(code, lino, _exit); + } smaDebug("vgId:%d, batchSize:%d, execType:%" PRIi32, SMA_VID(pSma), qallItemSize, type); } @@ -1693,7 +1650,10 @@ int32_t tdRSmaProcessExecImpl(SSma *pSma, ERsmaExecType type) { TSDB_CHECK_CODE(code, lino, _exit); } - tdRSmaFetchAllResult(pSma, pInfo); + if ((code = tdRSmaFetchAllResult(pSma, pInfo)) != 0) { + taosHashCancelIterate(infoHash, pIter); + TSDB_CHECK_CODE(code, lino, _exit); + } if (0 == atomic_sub_fetch_32(&pRSmaStat->nFetchAll, 1)) { atomic_store_8(RSMA_COMMIT_STAT(pRSmaStat), 0); @@ -1742,5 +1702,5 @@ _exit: if (code) { smaError("vgId:%d, %s failed at line %d since %s", TD_VID(pVnode), __func__, lino, tstrerror(code)); } - return code; + TAOS_RETURN(code); } diff --git a/source/dnode/vnode/src/tsdb/tsdbWrite.c b/source/dnode/vnode/src/tsdb/tsdbWrite.c index 0b32c96d2e..a35068163f 100644 --- a/source/dnode/vnode/src/tsdb/tsdbWrite.c +++ b/source/dnode/vnode/src/tsdb/tsdbWrite.c @@ -34,7 +34,7 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq2 *pMsg, SSubmitRsp2 int32_t numOfRows = 0; if (ASSERTS(pTsdb->mem != NULL, "vgId:%d, mem is NULL", TD_VID(pTsdb->pVnode))) { - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_PTR); } arrSize = taosArrayGetSize(pMsg->aSubmitTbData); @@ -42,7 +42,7 @@ int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq2 *pMsg, SSubmitRsp2 // scan and convert if ((code = tsdbScanAndConvertSubmitMsg(pTsdb, pMsg)) < 0) { if (code != TSDB_CODE_TDB_TABLE_RECONFIGURE) { - tsdbError("vgId:%d, failed to insert data since %s", TD_VID(pTsdb->pVnode), tstrerror(terrno)); + tsdbError("vgId:%d, failed to insert data since %s", TD_VID(pTsdb->pVnode), tstrerror(code)); } return code; } diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c index f7b618d18b..6b46ddd8df 100644 --- a/source/dnode/vnode/src/vnd/vnodeQuery.c +++ b/source/dnode/vnode/src/vnd/vnodeQuery.c @@ -601,7 +601,7 @@ int32_t vnodeGetStbIdList(SVnode *pVnode, int64_t suid, SArray *list) { int32_t code = TSDB_CODE_SUCCESS; SMStbCursor *pCur = metaOpenStbCursor(pVnode->pMeta, suid); if (!pCur) { - return TSDB_CODE_FAILED; + return TSDB_CODE_OUT_OF_MEMORY; } while (1) { From 586d3cae64e19b76f00e90a23f2671e01ee773eb Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 24 Jul 2024 16:08:12 +0800 Subject: [PATCH 13/16] enh: refactor return code --- include/util/tutil.h | 12 ++-- source/dnode/mgmt/node_util/src/dmFile.c | 4 +- source/dnode/mnode/impl/src/mndProfile.c | 85 ++++++++++++++++-------- source/dnode/mnode/impl/src/mndUser.c | 20 +++--- 4 files changed, 75 insertions(+), 46 deletions(-) diff --git a/include/util/tutil.h b/include/util/tutil.h index 05a2397139..0e79480bfe 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -157,18 +157,18 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, return (terrno = (code)); \ } while (0) -#define TAOS_CHECK_RETURN(CMD) \ - do { \ - int32_t code = (CMD); \ +#define TAOS_CHECK_RETURN(CMD) \ + do { \ + int32_t code = (CMD); \ if (code != TSDB_CODE_SUCCESS) { \ - TAOS_RETURN(code); \ - } \ + TAOS_RETURN(code); \ + } \ } while (0) #define TAOS_CHECK_GOTO(CMD, LINO, LABEL) \ do { \ code = (CMD); \ - if (code != TSDB_CODE_SUCCESS) { \ + if (code != TSDB_CODE_SUCCESS) { \ if (LINO) { \ *((int32_t *)(LINO)) = __LINE__; \ } \ diff --git a/source/dnode/mgmt/node_util/src/dmFile.c b/source/dnode/mgmt/node_util/src/dmFile.c index 93b6d976c2..eee6ab3a41 100644 --- a/source/dnode/mgmt/node_util/src/dmFile.c +++ b/source/dnode/mgmt/node_util/src/dmFile.c @@ -429,9 +429,7 @@ int32_t dmUpdateEncryptKey(char *key, bool toLogFile) { } } - if ((code = tGetMachineId(&machineId)) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(tGetMachineId(&machineId), &lino, _OVER); TAOS_CHECK_GOTO(generateEncryptCode(key, machineId, &encryptCode), &lino, _OVER); diff --git a/source/dnode/mnode/impl/src/mndProfile.c b/source/dnode/mnode/impl/src/mndProfile.c index 387fcb90bc..f7b509b1cc 100644 --- a/source/dnode/mnode/impl/src/mndProfile.c +++ b/source/dnode/mnode/impl/src/mndProfile.c @@ -229,26 +229,23 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) { SUserObj *pUser = NULL; SDbObj *pDb = NULL; SConnObj *pConn = NULL; - int32_t code = -1; + int32_t code = 0; SConnectReq connReq = {0}; char ip[24] = {0}; const STraceId *trace = &pReq->info.traceId; if ((code = tDeserializeSConnectReq(pReq->pCont, pReq->contLen, &connReq)) != 0) { - terrno = (-1 == code ? TSDB_CODE_INVALID_MSG : code); goto _OVER; } if ((code = taosCheckVersionCompatibleFromStr(connReq.sVer, version, 3)) != 0) { mGError("version not compatible. client version: %s, server version: %s", connReq.sVer, version); - terrno = code; goto _OVER; } - code = -1; taosIp2String(pReq->info.conn.clientIp, ip); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CONNECT) != 0) { - mGError("user:%s, failed to login from %s since %s", pReq->info.conn.user, ip, terrstr()); + if ((code = mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CONNECT)) != 0) { + mGError("user:%s, failed to login from %s since %s", pReq->info.conn.user, ip, tstrerror(code)); goto _OVER; } @@ -271,22 +268,22 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) { if (pDb == NULL) { if (0 != strcmp(connReq.db, TSDB_INFORMATION_SCHEMA_DB) && (0 != strcmp(connReq.db, TSDB_PERFORMANCE_SCHEMA_DB))) { - terrno = TSDB_CODE_MND_DB_NOT_EXIST; + code = TSDB_CODE_MND_DB_NOT_EXIST; mGError("user:%s, failed to login from %s while use db:%s since %s", pReq->info.conn.user, ip, connReq.db, - terrstr()); + tstrerror(code)); goto _OVER; } } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_READ_OR_WRITE_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_READ_OR_WRITE_DB, pDb), NULL, _OVER); } pConn = mndCreateConn(pMnode, pReq->info.conn.user, connReq.connType, pReq->info.conn.clientIp, pReq->info.conn.clientPort, connReq.pid, connReq.app, connReq.startTime); if (pConn == NULL) { - mGError("user:%s, failed to login from %s while create connection since %s", pReq->info.conn.user, ip, terrstr()); + code = terrno; + mGError("user:%s, failed to login from %s while create connection since %s", pReq->info.conn.user, ip, + tstrerror(code)); goto _OVER; } @@ -316,10 +313,19 @@ static int32_t mndProcessConnectReq(SRpcMsg *pReq) { mndGetMnodeEpSet(pMnode, &connectRsp.epSet); int32_t contLen = tSerializeSConnectRsp(NULL, 0, &connectRsp); - if (contLen < 0) goto _OVER; + if (contLen < 0) { + TAOS_CHECK_GOTO(contLen, NULL, _OVER); + } void *pRsp = rpcMallocCont(contLen); - if (pRsp == NULL) goto _OVER; - tSerializeSConnectRsp(pRsp, contLen, &connectRsp); + if (pRsp == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + } + + contLen = tSerializeSConnectRsp(pRsp, contLen, &connectRsp); + if (contLen < 0) { + rpcFreeCont(pRsp); + TAOS_CHECK_GOTO(contLen, NULL, _OVER); + } pReq->info.rspLen = contLen; pReq->info.rsp = pRsp; @@ -339,7 +345,7 @@ _OVER: mndReleaseDb(pMnode, pDb); mndReleaseConn(pMnode, pConn, true); - return code; + TAOS_RETURN(code); } static int32_t mndSaveQueryList(SConnObj *pConn, SQueryHbReqBasic *pBasic) { @@ -656,6 +662,7 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { int32_t code = 0; + int32_t lino = 0; SMnode *pMnode = pReq->info.node; SClientHbBatchReq batchReq = {0}; @@ -675,6 +682,9 @@ static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { SClientHbBatchRsp batchRsp = {0}; batchRsp.svrTimestamp = taosGetTimestampSec(); batchRsp.rsps = taosArrayInit(0, sizeof(SClientHbRsp)); + if (batchRsp.rsps == NULL) { + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); + } batchRsp.monitorParas.tsEnableMonitor = tsEnableMonitor; batchRsp.monitorParas.tsMonitorInterval = tsMonitorInterval; batchRsp.monitorParas.tsSlowLogThreshold = tsSlowLogThreshold; @@ -687,7 +697,7 @@ static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { for (int i = 0; i < sz; i++) { SClientHbReq *pHbReq = taosArrayGet(batchReq.reqs, i); if (pHbReq->connKey.connType == CONN_TYPE__QUERY) { - mndProcessQueryHeartBeat(pMnode, pReq, pHbReq, &batchRsp, &obj); + TAOS_CHECK_EXIT(mndProcessQueryHeartBeat(pMnode, pReq, pHbReq, &batchRsp, &obj)); } else if (pHbReq->connKey.connType == CONN_TYPE__TMQ) { SClientHbRsp *pRsp = mndMqHbBuildRsp(pMnode, pHbReq); if (pRsp != NULL) { @@ -699,12 +709,22 @@ static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { taosArrayDestroyEx(batchReq.reqs, tFreeClientHbReq); int32_t tlen = tSerializeSClientHbBatchRsp(NULL, 0, &batchRsp); - void *buf = rpcMallocCont(tlen); - tSerializeSClientHbBatchRsp(buf, tlen, &batchRsp); - - tFreeClientHbBatchRsp(&batchRsp); + if (tlen < 0) { + TAOS_CHECK_EXIT(tlen); + } + void *buf = rpcMallocCont(tlen); + if (!buf) { + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); + } + tlen = tSerializeSClientHbBatchRsp(buf, tlen, &batchRsp); + if (tlen < 0) { + rpcFreeCont(buf); + TAOS_CHECK_EXIT(tlen); + } pReq->info.rspLen = tlen; pReq->info.rsp = buf; +_exit: + tFreeClientHbBatchRsp(&batchRsp); taosArrayDestroy(obj.pQnodeList); @@ -771,24 +791,31 @@ static int32_t mndProcessKillConnReq(SRpcMsg *pReq) { } static int32_t mndProcessSvrVerReq(SRpcMsg *pReq) { - int32_t code = -1; + int32_t code = 0; + int32_t lino = 0; SServerVerRsp rsp = {0}; tstrncpy(rsp.ver, version, sizeof(rsp.ver)); int32_t contLen = tSerializeSServerVerRsp(NULL, 0, &rsp); - if (contLen < 0) goto _over; + if (contLen < 0) { + TAOS_CHECK_EXIT(contLen); + } void *pRsp = rpcMallocCont(contLen); - if (pRsp == NULL) goto _over; - tSerializeSServerVerRsp(pRsp, contLen, &rsp); + if (pRsp == NULL) { + TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); + } + contLen = tSerializeSServerVerRsp(pRsp, contLen, &rsp); + if (contLen < 0) { + rpcFreeCont(pRsp); + TAOS_CHECK_EXIT(contLen); + } pReq->info.rspLen = contLen; pReq->info.rsp = pRsp; - code = 0; +_exit: -_over: - - return code; + TAOS_RETURN(code); } static int32_t mndRetrieveConns(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 0e4730a731..f05baf25bd 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -1958,8 +1958,7 @@ int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq) { len = tSerializeSUpdateIpWhite(NULL, 0, &ipWhite); if (len < 0) { - code = TSDB_CODE_OUT_OF_MEMORY; - TAOS_CHECK_GOTO(code, &lino, _OVER); + TAOS_CHECK_GOTO(len, &lino, _OVER); } pRsp = rpcMallocCont(len); @@ -1968,8 +1967,7 @@ int32_t mndProcesSRetrieveIpWhiteReq(SRpcMsg *pReq) { } len = tSerializeSUpdateIpWhite(pRsp, len, &ipWhite); if (len < 0) { - code = TSDB_CODE_OUT_OF_MEMORY; - TAOS_CHECK_GOTO(code, &lino, _OVER); + TAOS_CHECK_GOTO(len, &lino, _OVER); } _OVER: @@ -2597,7 +2595,10 @@ static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } - TAOS_CHECK_EXIT(tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp)); + contLen =tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp); + if(contLen < 0) { + TAOS_CHECK_EXIT(contLen); + } _exit: mndReleaseUser(pMnode, pUser); @@ -3190,14 +3191,17 @@ int32_t mndValidateUserAuthInfo(SMnode *pMnode, SUserAuthVersion *pUsers, int32_ } rspLen = tSerializeSUserAuthBatchRsp(NULL, 0, &batchRsp); - if (rspLen <= 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + if (rspLen < 0) { + TAOS_CHECK_GOTO(rspLen, &lino, _OVER); } pRsp = taosMemoryMalloc(rspLen); if (pRsp == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - TAOS_CHECK_GOTO(tSerializeSUserAuthBatchRsp(pRsp, rspLen, &batchRsp), &lino, _OVER); + rspLen = tSerializeSUserAuthBatchRsp(pRsp, rspLen, &batchRsp); + if (rspLen < 0) { + TAOS_CHECK_GOTO(rspLen, &lino, _OVER); + } _OVER: tFreeSUserAuthBatchRsp(&batchRsp); if (code < 0) { From 0d5323c587670323b6b56391402420c6ba3d7bca Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 24 Jul 2024 23:46:06 +0800 Subject: [PATCH 14/16] fix: refactor return code --- source/dnode/mnode/impl/src/mndUser.c | 6 +++--- source/dnode/vnode/src/tsdb/tsdbFS2.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index f05baf25bd..5a19b6c762 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -1724,7 +1724,7 @@ static int32_t mndCreateUser(SMnode *pMnode, char *acct, SCreateUserReq *pCreate if (pCreate->numIpRanges == 0) { TAOS_CHECK_RETURN(createDefaultIpWhiteList(&userObj.pIpWhiteList)); } else { - SHashObj *pUniqueTab = taosHashInit(64, MurmurHash3_32, false, HASH_NO_LOCK); + SHashObj *pUniqueTab = taosHashInit(64, MurmurHash3_32, true, HASH_NO_LOCK); if (pUniqueTab == NULL) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } @@ -2082,7 +2082,7 @@ static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj int32_t len = strlen(tbFName) + 1; if (taosHashRemove(hash, tbFName, len) != 0) { - TAOS_RETURN(TSDB_CODE_NOT_FOUND); + TAOS_RETURN(0); // not found } int32_t dbKeyLen = strlen(alterReq->objname) + 1; @@ -2093,7 +2093,7 @@ static int32_t mndRemoveTablePriviledge(SMnode *pMnode, SHashObj *hash, SHashObj if (1 == *currRef) { if (taosHashRemove(useDbHash, alterReq->objname, dbKeyLen) != 0) { - TAOS_RETURN(TSDB_CODE_NOT_FOUND); + TAOS_RETURN(0); // not found } return 0; } diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index 68954e5156..ca99b0eaff 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -524,7 +524,7 @@ static int32_t tsdbFSDoSanAndFix(STFileSystem *fs) { { // clear unreferenced files STfsDir *dir = NULL; - TAOS_CHECK_GOTO(tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path, &dir), &lino, _exit); + TAOS_CHECK_GOTO(tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path, &dir), &lino, _close_dir); STFileHash fobjHash = {0}; code = tsdbFSCreateFileObjHash(fs, &fobjHash); From 7ee18c51784ae92d888ba9f32a7b4a28225bf69f Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 25 Jul 2024 09:31:35 +0800 Subject: [PATCH 15/16] fix: refactor return code --- source/dnode/vnode/src/sma/smaRollup.c | 1 + source/dnode/vnode/src/tsdb/tsdbFS2.c | 2 +- source/libs/tfs/src/tfs.c | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 15c007d393..8c12f80f2b 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -931,6 +931,7 @@ static int32_t tdAcquireRSmaInfoBySuid(SSma *pSma, int64_t suid, SRSmaInfo **ppR if (ASSERTS(pRSmaInfo->suid == suid, "suid:%" PRIi64 " != %" PRIi64, pRSmaInfo->suid, suid)) { TAOS_RETURN(TSDB_CODE_APP_ERROR); } + *ppRSmaInfo = pRSmaInfo; TAOS_RETURN(code); } taosRUnLockLatch(SMA_ENV_LOCK(pEnv)); diff --git a/source/dnode/vnode/src/tsdb/tsdbFS2.c b/source/dnode/vnode/src/tsdb/tsdbFS2.c index ca99b0eaff..68954e5156 100644 --- a/source/dnode/vnode/src/tsdb/tsdbFS2.c +++ b/source/dnode/vnode/src/tsdb/tsdbFS2.c @@ -524,7 +524,7 @@ static int32_t tsdbFSDoSanAndFix(STFileSystem *fs) { { // clear unreferenced files STfsDir *dir = NULL; - TAOS_CHECK_GOTO(tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path, &dir), &lino, _close_dir); + TAOS_CHECK_GOTO(tfsOpendir(fs->tsdb->pVnode->pTfs, fs->tsdb->path, &dir), &lino, _exit); STFileHash fobjHash = {0}; code = tsdbFSCreateFileObjHash(fs, &fobjHash); diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 07c1fab54f..7656e3067a 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -440,7 +440,10 @@ int32_t tfsOpendir(STfs *pTfs, const char *rname, STfsDir **ppDir) { TAOS_CHECK_GOTO(tfsOpendirImpl(pTfs, pDir), NULL, _exit); _exit: - taosMemoryFree(pDir); + if (code != 0) { + taosMemoryFreeClear(pDir); + } + *ppDir = pDir; TAOS_RETURN(code); } @@ -634,9 +637,13 @@ static int32_t tfsGetDiskByName(STfs *pTfs, const char *dir, STfsDisk **ppDisk) static int32_t tfsOpendirImpl(STfs *pTfs, STfsDir *pTfsDir) { STfsDisk *pDisk = NULL; char adir[TMPNAME_LEN * 2] = "\0"; + int32_t code = 0; if (pTfsDir->pDir != NULL) { - taosCloseDir(&pTfsDir->pDir); + if ((code = taosCloseDir(&pTfsDir->pDir)) != 0) { + fError("%s failed to close dir since %s", __func__, tstrerror(code)); + TAOS_RETURN(code); + } pTfsDir->pDir = NULL; } From 12c44fb8171540307c6fbb6f3c0741583013cc40 Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 25 Jul 2024 10:21:06 +0800 Subject: [PATCH 16/16] fix: refactor return code --- source/dnode/mnode/impl/src/mndUser.c | 71 ++++++++++----------------- source/libs/tfs/src/tfs.c | 2 +- 2 files changed, 28 insertions(+), 45 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c index 5a19b6c762..9f37885d6d 100644 --- a/source/dnode/mnode/impl/src/mndUser.c +++ b/source/dnode/mnode/impl/src/mndUser.c @@ -357,9 +357,9 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 memcpy(pNewList->pIpRange, &range, sizeof(SIpV4Range)); pNewList->num = 1; - if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)) != 0) { + if ((code = taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *))) != 0) { taosMemoryFree(pNewList); - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } update = true; } else { @@ -375,9 +375,9 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 pNewList->num = pList->num + 1; - if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)) != 0) { + if ((code = taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *))) != 0) { taosMemoryFree(pNewList); - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } taosMemoryFree(pList); update = true; @@ -405,9 +405,9 @@ int32_t mndUpdateIpWhiteImpl(SHashObj *pIpWhiteTab, char *user, char *fqdn, int8 } } pNewList->num = idx; - if (taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *) != 0)) { + if ((code = taosHashPut(pIpWhiteTab, user, strlen(user), &pNewList, sizeof(void *)) != 0)) { taosMemoryFree(pNewList); - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } taosMemoryFree(pList); } @@ -573,11 +573,11 @@ int32_t mndFetchAllIpWhite(SMnode *pMnode, SHashObj **ppIpWhiteTab) { sdbCancelFetch(pSdb, pIter); TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } - if (taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *)) != 0) { + if ((code = taosHashPut(pIpWhiteTab, pUser->user, strlen(pUser->user), &pWhiteList, sizeof(void *))) != 0) { taosMemoryFree(pWhiteList); sdbRelease(pSdb, pUser); sdbCancelFetch(pSdb, pIter); - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } char *name = taosStrdup(pUser->user); @@ -1323,9 +1323,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->readTbs, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->readTbs, key, keyLen, value, valuelen), &lino, _OVER); } for (int32_t i = 0; i < numOfWriteTbs; ++i) { @@ -1348,9 +1346,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->writeTbs, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->writeTbs, key, keyLen, value, valuelen), &lino, _OVER); } if (sver >= 6) { @@ -1374,9 +1370,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->alterTbs, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->alterTbs, key, keyLen, value, valuelen), &lino, _OVER); } for (int32_t i = 0; i < numOfReadViews; ++i) { @@ -1399,9 +1393,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->readViews, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->readViews, key, keyLen, value, valuelen), &lino, _OVER); } for (int32_t i = 0; i < numOfWriteViews; ++i) { @@ -1424,9 +1416,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->writeViews, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->writeViews, key, keyLen, value, valuelen), &lino, _OVER); } for (int32_t i = 0; i < numOfAlterViews; ++i) { @@ -1449,9 +1439,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { memset(value, 0, valuelen); SDB_GET_BINARY(pRaw, dataPos, value, valuelen, _OVER) - if (taosHashPut(pUser->alterViews, key, keyLen, value, valuelen) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->alterViews, key, keyLen, value, valuelen), &lino, _OVER); } } @@ -1469,9 +1457,7 @@ static SSdbRow *mndUserActionDecode(SSdbRaw *pRaw) { int32_t ref = 0; SDB_GET_INT32(pRaw, dataPos, &ref, _OVER); - if (taosHashPut(pUser->useDbs, key, keyLen, &ref, sizeof(ref)) != 0) { - TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); - } + TAOS_CHECK_GOTO(taosHashPut(pUser->useDbs, key, keyLen, &ref, sizeof(ref)), &lino, _OVER); } } // decoder white list @@ -2135,7 +2121,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } if ((code = taosHashPut(pNewUser->readDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN)) != 0) { @@ -2166,7 +2152,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } if ((code = taosHashPut(pNewUser->writeDbs, pAlterReq->objname, len, pAlterReq->objname, TSDB_DB_FNAME_LEN)) != 0) { @@ -2197,7 +2183,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } taosHashRemove(pNewUser->readDbs, pAlterReq->objname, len); mndReleaseDb(pMnode, pDb); @@ -2213,7 +2199,7 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode SDbObj *pDb = mndAcquireDb(pMnode, pAlterReq->objname); if (pDb == NULL) { mndReleaseDb(pMnode, pDb); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(terrno, &lino, _OVER); // TODO: refactor the terrno to code } taosHashRemove(pNewUser->writeDbs, pAlterReq->objname, len); mndReleaseDb(pMnode, pDb); @@ -2267,10 +2253,9 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode if (ALTER_USER_ADD_SUBSCRIBE_TOPIC_PRIV(pAlterReq->alterType, pAlterReq->privileges)) { int32_t len = strlen(pAlterReq->objname) + 1; SMqTopicObj *pTopic = NULL; - int32_t code = mndAcquireTopic(pMnode, pAlterReq->objname, &pTopic); - if (code != 0) { + if ((code = mndAcquireTopic(pMnode, pAlterReq->objname, &pTopic)) != 0) { mndReleaseTopic(pMnode, pTopic); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } if ((code = taosHashPut(pNewUser->topics, pTopic->name, len, pTopic->name, TSDB_TOPIC_FNAME_LEN)) != 0) { mndReleaseTopic(pMnode, pTopic); @@ -2282,18 +2267,17 @@ static int32_t mndProcessAlterUserPrivilegesReq(SAlterUserReq *pAlterReq, SMnode if (ALTER_USER_DEL_SUBSCRIBE_TOPIC_PRIV(pAlterReq->alterType, pAlterReq->privileges)) { int32_t len = strlen(pAlterReq->objname) + 1; SMqTopicObj *pTopic = NULL; - int32_t code = mndAcquireTopic(pMnode, pAlterReq->objname, &pTopic); - if (code != 0) { + if ((code = mndAcquireTopic(pMnode, pAlterReq->objname, &pTopic)) != 0) { mndReleaseTopic(pMnode, pTopic); - TAOS_CHECK_GOTO(terrno, &lino, _OVER); + TAOS_CHECK_GOTO(code, &lino, _OVER); } - taosHashRemove(pNewUser->topics, pAlterReq->objname, len); + (void)taosHashRemove(pNewUser->topics, pAlterReq->objname, len); mndReleaseTopic(pMnode, pTopic); } _OVER: if (code < 0) { - mError("user:%s, failed to alter user privileges at line %d since %s", pAlterReq->user, lino, terrstr()); + mError("user:%s, failed to alter user privileges at line %d since %s", pAlterReq->user, lino, tstrerror(code)); } TAOS_RETURN(code); } @@ -2595,8 +2579,8 @@ static int32_t mndProcessGetUserAuthReq(SRpcMsg *pReq) { TAOS_CHECK_EXIT(TSDB_CODE_OUT_OF_MEMORY); } - contLen =tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp); - if(contLen < 0) { + contLen = tSerializeSGetUserAuthRsp(pRsp, contLen, &authRsp); + if (contLen < 0) { TAOS_CHECK_EXIT(contLen); } @@ -3011,7 +2995,6 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); COL_DATA_SET_VAL_GOTO((const char *)condition, false, pUser, _exit); - char notes[2] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(notes, "", sizeof(notes)); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c index 7656e3067a..81c853e546 100644 --- a/source/libs/tfs/src/tfs.c +++ b/source/libs/tfs/src/tfs.c @@ -383,7 +383,7 @@ static int32_t tfsRenameAt(STfs *pTfs, SDiskID diskId, const char *orname, const snprintf(naname, TMPNAME_LEN, "%s%s%s", pDisk->path, TD_DIRSEP, nrname); if (taosRenameFile(oaname, naname) != 0 && errno != ENOENT) { - int32_t code = TAOS_SYSTEM_ERROR(errno); + int32_t code = TAOS_SYSTEM_ERROR(errno); // TODO: use return value of taosRenameFile directly fError("%s failed to rename %s to %s since %s", __func__, oaname, naname, tstrerror(code)); TAOS_RETURN(code); }