From 1547b7ba8819c651709f7f589f70ae28ebf1671e Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 17 Jul 2024 17:57:14 +0800 Subject: [PATCH 01/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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/35] 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 45e00afad1954fd92fe3b79bac3f44d2fd37b0b9 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 24 Jul 2024 14:20:59 +0800 Subject: [PATCH 13/35] tsdb/cache: remove unused block index cache --- source/dnode/vnode/src/tsdb/tsdbCache.c | 134 +----------------------- 1 file changed, 1 insertion(+), 133 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 8574ff85c3..9dfa3ea496 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -22,40 +22,6 @@ #define ROCKS_BATCH_SIZE (4096) -#if 0 -static int32_t tsdbOpenBICache(STsdb *pTsdb) { - int32_t code = 0; - SLRUCache *pCache = taosLRUCacheInit(10 * 1024 * 1024, 0, .5); - if (pCache == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; - } - - taosLRUCacheSetStrictCapacity(pCache, false); - - taosThreadMutexInit(&pTsdb->biMutex, NULL); - -_err: - pTsdb->biCache = pCache; - return code; -} - -static void tsdbCloseBICache(STsdb *pTsdb) { - SLRUCache *pCache = pTsdb->biCache; - if (pCache) { - int32_t elems = taosLRUCacheGetElems(pCache); - tsdbTrace("vgId:%d, elems: %d", TD_VID(pTsdb->pVnode), elems); - taosLRUCacheEraseUnrefEntries(pCache); - elems = taosLRUCacheGetElems(pCache); - tsdbTrace("vgId:%d, elems: %d", TD_VID(pTsdb->pVnode), elems); - - taosLRUCacheCleanup(pCache); - - taosThreadMutexDestroy(&pTsdb->biMutex); - } -} -#endif - static int32_t tsdbOpenBCache(STsdb *pTsdb) { int32_t code = 0; int32_t szPage = pTsdb->pVnode->config.tsdbPageSize; @@ -1760,14 +1726,6 @@ int32_t tsdbOpenCache(STsdb *pTsdb) { goto _err; } -#if 0 - code = tsdbOpenBICache(pTsdb); - if (code != TSDB_CODE_SUCCESS) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; - } -#endif - code = tsdbOpenBCache(pTsdb); if (code != TSDB_CODE_SUCCESS) { code = TSDB_CODE_OUT_OF_MEMORY; @@ -1808,9 +1766,6 @@ void tsdbCloseCache(STsdb *pTsdb) { taosThreadMutexDestroy(&pTsdb->lruMutex); } -#if 0 - tsdbCloseBICache(pTsdb); -#endif tsdbCloseBCache(pTsdb); tsdbClosePgCache(pTsdb); tsdbCloseRocksCache(pTsdb); @@ -3302,7 +3257,7 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC STsdbRowKey rowKey = {0}; tsdbRowGetKey(pRow, &rowKey); - if (lastRowKey.key.ts == TSKEY_MAX) { // first time + if (lastRowKey.key.ts == TSKEY_MAX) { // first time lastRowKey = rowKey; for (int16_t iCol = noneCol; iCol < nCols; ++iCol) { @@ -3591,93 +3546,6 @@ int32_t tsdbCacheGetElems(SVnode *pVnode) { return elems; } -#if 0 -static void getBICacheKey(int32_t fid, int64_t commitID, char *key, int *len) { - struct { - int32_t fid; - int64_t commitID; - } biKey = {0}; - - biKey.fid = fid; - biKey.commitID = commitID; - - *len = sizeof(biKey); - memcpy(key, &biKey, *len); -} - -static int32_t tsdbCacheLoadBlockIdx(SDataFReader *pFileReader, SArray **aBlockIdx) { - SArray *pArray = taosArrayInit(8, sizeof(SBlockIdx)); - int32_t code = tsdbReadBlockIdx(pFileReader, pArray); - - if (code != TSDB_CODE_SUCCESS) { - taosArrayDestroy(pArray); - code = TSDB_CODE_OUT_OF_MEMORY; - return code; - } - - *aBlockIdx = pArray; - - return code; -} - -static void deleteBICache(const void *key, size_t keyLen, void *value, void *ud) { - (void)ud; - SArray *pArray = (SArray *)value; - - taosArrayDestroy(pArray); -} - -int32_t tsdbCacheGetBlockIdx(SLRUCache *pCache, SDataFReader *pFileReader, LRUHandle **handle) { - int32_t code = 0; - char key[128] = {0}; - int keyLen = 0; - - getBICacheKey(pFileReader->pSet->fid, pFileReader->pSet->pHeadF->commitID, key, &keyLen); - LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); - if (!h) { - STsdb *pTsdb = pFileReader->pTsdb; - taosThreadMutexLock(&pTsdb->biMutex); - - h = taosLRUCacheLookup(pCache, key, keyLen); - if (!h) { - SArray *pArray = NULL; - code = tsdbCacheLoadBlockIdx(pFileReader, &pArray); - // if table's empty or error, return code of -1 - if (code != TSDB_CODE_SUCCESS || pArray == NULL) { - taosThreadMutexUnlock(&pTsdb->biMutex); - - *handle = NULL; - return 0; - } - - size_t charge = pArray->capacity * pArray->elemSize + sizeof(*pArray); - _taos_lru_deleter_t deleter = deleteBICache; - LRUStatus status = - taosLRUCacheInsert(pCache, key, keyLen, pArray, charge, deleter, &h, TAOS_LRU_PRIORITY_LOW, NULL); - if (status != TAOS_LRU_STATUS_OK) { - code = -1; - } - } - - taosThreadMutexUnlock(&pTsdb->biMutex); - } - - tsdbTrace("bi cache:%p, ref", pCache); - *handle = h; - - return code; -} - -int32_t tsdbBICacheRelease(SLRUCache *pCache, LRUHandle *h) { - int32_t code = 0; - - taosLRUCacheRelease(pCache, h, false); - tsdbTrace("bi cache:%p, release", pCache); - - return code; -} -#endif - // block cache static void getBCacheKey(int32_t fid, int64_t commitID, int64_t blkno, char *key, int *len) { struct { From 45b1bbf0ed9cd44a10109785e4bc9a6dd4c97d1f Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 24 Jul 2024 14:34:27 +0800 Subject: [PATCH 14/35] use new macros from bcache & pgcache opening --- source/dnode/vnode/src/tsdb/tsdbCache.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 9dfa3ea496..6506daacbd 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -23,13 +23,12 @@ #define ROCKS_BATCH_SIZE (4096) static int32_t tsdbOpenBCache(STsdb *pTsdb) { - int32_t code = 0; + int32_t code = 0, lino = 0; int32_t szPage = pTsdb->pVnode->config.tsdbPageSize; int64_t szBlock = tsS3BlockSize <= 1024 ? 1024 : tsS3BlockSize; SLRUCache *pCache = taosLRUCacheInit((int64_t)tsS3BlockCacheSize * szBlock * szPage, 0, .5); if (pCache == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } taosLRUCacheSetStrictCapacity(pCache, false); @@ -39,7 +38,11 @@ static int32_t tsdbOpenBCache(STsdb *pTsdb) { pTsdb->bCache = pCache; _err: - return code; + if (code) { + tsdbError("tsdb/bcache: vgId:%d, open failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); + } + + TAOS_RETURN(code); } static void tsdbCloseBCache(STsdb *pTsdb) { @@ -58,23 +61,27 @@ static void tsdbCloseBCache(STsdb *pTsdb) { } static int32_t tsdbOpenPgCache(STsdb *pTsdb) { - int32_t code = 0; + int32_t code = 0, lino = 0; // SLRUCache *pCache = taosLRUCacheInit(10 * 1024 * 1024, 0, .5); int32_t szPage = pTsdb->pVnode->config.tsdbPageSize; SLRUCache *pCache = taosLRUCacheInit((int64_t)tsS3PageCacheSize * szPage, 0, .5); if (pCache == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } taosLRUCacheSetStrictCapacity(pCache, false); taosThreadMutexInit(&pTsdb->pgMutex, NULL); -_err: pTsdb->pgCache = pCache; - return code; + +_err: + if (code) { + tsdbError("tsdb/pgcache: vgId:%d, open failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); + } + + TAOS_RETURN(code); } static void tsdbClosePgCache(STsdb *pTsdb) { From e0cd502afe43ad1769c8251d56303fba623facd2 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 24 Jul 2024 14:43:31 +0800 Subject: [PATCH 15/35] remove unused code --- source/dnode/vnode/src/tsdb/tsdbCache.c | 377 ------------------------ 1 file changed, 377 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 6506daacbd..91345bf001 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -1788,320 +1788,6 @@ static void getTableCacheKey(tb_uid_t uid, int cacheType, char *key, int *len) { *len = sizeof(uint64_t); } -#ifdef BUILD_NO_CALL -static void deleteTableCacheLast(const void *key, size_t keyLen, void *value, void *ud) { - (void)ud; - SArray *pLastArray = (SArray *)value; - int16_t nCol = taosArrayGetSize(pLastArray); - for (int16_t iCol = 0; iCol < nCol; ++iCol) { - SLastCol *pLastCol = (SLastCol *)taosArrayGet(pLastArray, iCol); - if (IS_VAR_DATA_TYPE(pLastCol->colVal.type) && pLastCol->colVal.value.nData > 0) { - taosMemoryFree(pLastCol->colVal.value.pData); - } - } - - taosArrayDestroy(value); -} - -int32_t tsdbCacheDeleteLastrow(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey) { - int32_t code = 0; - - char key[32] = {0}; - int keyLen = 0; - - // getTableCacheKey(uid, "lr", key, &keyLen); - getTableCacheKey(uid, 0, key, &keyLen); - LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); - if (h) { - SArray *pLast = (SArray *)taosLRUCacheValue(pCache, h); - bool invalidate = false; - int16_t nCol = taosArrayGetSize(pLast); - - for (int16_t iCol = 0; iCol < nCol; ++iCol) { - SLastCol *tTsVal = (SLastCol *)taosArrayGet(pLast, iCol); - if (eKey >= tTsVal->ts) { - invalidate = true; - break; - } - } - - taosLRUCacheRelease(pCache, h, invalidate); - if (invalidate) { - taosLRUCacheErase(pCache, key, keyLen); - } - } - - return code; -} - -int32_t tsdbCacheDeleteLast(SLRUCache *pCache, tb_uid_t uid, TSKEY eKey) { - int32_t code = 0; - - char key[32] = {0}; - int keyLen = 0; - - // getTableCacheKey(uid, "l", key, &keyLen); - getTableCacheKey(uid, 1, key, &keyLen); - LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); - if (h) { - SArray *pLast = (SArray *)taosLRUCacheValue(pCache, h); - bool invalidate = false; - int16_t nCol = taosArrayGetSize(pLast); - - for (int16_t iCol = 0; iCol < nCol; ++iCol) { - SLastCol *tTsVal = (SLastCol *)taosArrayGet(pLast, iCol); - if (eKey >= tTsVal->ts) { - invalidate = true; - break; - } - } - - taosLRUCacheRelease(pCache, h, invalidate); - if (invalidate) { - taosLRUCacheErase(pCache, key, keyLen); - } - } - - return code; -} - -int32_t tsdbCacheInsertLastrow(SLRUCache *pCache, STsdb *pTsdb, tb_uid_t uid, TSDBROW *row, bool dup) { - int32_t code = 0; - STSRow *cacheRow = NULL; - char key[32] = {0}; - int keyLen = 0; - - // getTableCacheKey(uid, "lr", key, &keyLen); - getTableCacheKey(uid, 0, key, &keyLen); - LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); - if (h) { - STSchema *pTSchema = metaGetTbTSchema(pTsdb->pVnode->pMeta, uid, -1, 1); - TSKEY keyTs = TSDBROW_TS(row); - bool invalidate = false; - - SArray *pLast = (SArray *)taosLRUCacheValue(pCache, h); - int16_t nCol = taosArrayGetSize(pLast); - int16_t iCol = 0; - - if (nCol <= 0) { - nCol = pTSchema->numOfCols; - - STColumn *pTColumn = &pTSchema->columns[0]; - SColVal tColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.val = keyTs}); - if (taosArrayPush(pLast, &(SLastCol){.ts = keyTs, .colVal = tColVal}) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - - for (iCol = 1; iCol < nCol; ++iCol) { - SColVal colVal = {0}; - tsdbRowGetColVal(row, pTSchema, iCol, &colVal); - - SLastCol lastCol = {.ts = keyTs, .colVal = colVal}; - if (IS_VAR_DATA_TYPE(colVal.type) && colVal.value.nData > 0) { - lastCol.colVal.value.pData = taosMemoryMalloc(colVal.value.nData); - if (lastCol.colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - memcpy(lastCol.colVal.value.pData, colVal.value.pData, colVal.value.nData); - } - - if (taosArrayPush(pLast, &lastCol) == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - } - - goto _invalidate; - } - - if (nCol != pTSchema->numOfCols) { - invalidate = true; - goto _invalidate; - } - - SLastCol *tTsVal = (SLastCol *)taosArrayGet(pLast, iCol); - if (keyTs > tTsVal->ts) { - STColumn *pTColumn = &pTSchema->columns[0]; - SColVal tColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.val = keyTs}); - - taosArraySet(pLast, iCol, &(SLastCol){.ts = keyTs, .colVal = tColVal}); - } - - for (++iCol; iCol < nCol; ++iCol) { - SLastCol *tTsVal1 = (SLastCol *)taosArrayGet(pLast, iCol); - if (keyTs >= tTsVal1->ts) { - SColVal *tColVal = &tTsVal1->colVal; - - SColVal colVal = {0}; - tsdbRowGetColVal(row, pTSchema, iCol, &colVal); - - if (colVal.cid != tColVal->cid) { - invalidate = true; - goto _invalidate; - } - - if (!COL_VAL_IS_NONE(&colVal)) { - if (keyTs == tTsVal1->ts && !COL_VAL_IS_NONE(tColVal)) { - invalidate = true; - - break; - } else { // new inserting key is greater than cached, update cached entry - SLastCol lastCol = {.ts = keyTs, .colVal = colVal}; - if (IS_VAR_DATA_TYPE(colVal.type) && colVal.value.nData > 0) { - SLastCol *pLastCol = (SLastCol *)taosArrayGet(pLast, iCol); - if (pLastCol->colVal.value.nData > 0 && NULL != pLastCol->colVal.value.pData) - taosMemoryFree(pLastCol->colVal.value.pData); - - lastCol.colVal.value.pData = taosMemoryMalloc(colVal.value.nData); - if (lastCol.colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - memcpy(lastCol.colVal.value.pData, colVal.value.pData, colVal.value.nData); - } - - taosArraySet(pLast, iCol, &lastCol); - } - } - } - } - - _invalidate: - taosMemoryFreeClear(pTSchema); - - taosLRUCacheRelease(pCache, h, invalidate); - if (invalidate) { - taosLRUCacheErase(pCache, key, keyLen); - } - } - - return code; -} - -int32_t tsdbCacheInsertLast(SLRUCache *pCache, tb_uid_t uid, TSDBROW *row, STsdb *pTsdb) { - int32_t code = 0; - STSRow *cacheRow = NULL; - char key[32] = {0}; - int keyLen = 0; - - // getTableCacheKey(uid, "l", key, &keyLen); - getTableCacheKey(uid, 1, key, &keyLen); - LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); - if (h) { - STSchema *pTSchema = metaGetTbTSchema(pTsdb->pVnode->pMeta, uid, -1, 1); - TSKEY keyTs = TSDBROW_TS(row); - bool invalidate = false; - - SArray *pLast = (SArray *)taosLRUCacheValue(pCache, h); - int16_t nCol = taosArrayGetSize(pLast); - int16_t iCol = 0; - - if (nCol <= 0) { - nCol = pTSchema->numOfCols; - - STColumn *pTColumn = &pTSchema->columns[0]; - SColVal tColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.val = keyTs}); - if (taosArrayPush(pLast, &(SLastCol){.ts = keyTs, .colVal = tColVal}) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - - for (iCol = 1; iCol < nCol; ++iCol) { - SColVal colVal = {0}; - tsdbRowGetColVal(row, pTSchema, iCol, &colVal); - - SLastCol lastCol = {.ts = keyTs, .colVal = colVal}; - if (IS_VAR_DATA_TYPE(colVal.type) && colVal.value.nData > 0) { - lastCol.colVal.value.pData = taosMemoryMalloc(colVal.value.nData); - if (lastCol.colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - memcpy(lastCol.colVal.value.pData, colVal.value.pData, colVal.value.nData); - } - - if (taosArrayPush(pLast, &lastCol) == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - } - - goto _invalidate; - } - - if (nCol != pTSchema->numOfCols) { - invalidate = true; - goto _invalidate; - } - - SLastCol *tTsVal = (SLastCol *)taosArrayGet(pLast, iCol); - if (keyTs > tTsVal->ts) { - STColumn *pTColumn = &pTSchema->columns[0]; - SColVal tColVal = COL_VAL_VALUE(pTColumn->colId, pTColumn->type, (SValue){.val = keyTs}); - - taosArraySet(pLast, iCol, &(SLastCol){.ts = keyTs, .colVal = tColVal}); - } - - for (++iCol; iCol < nCol; ++iCol) { - SLastCol *tTsVal1 = (SLastCol *)taosArrayGet(pLast, iCol); - if (keyTs >= tTsVal1->ts) { - SColVal *tColVal = &tTsVal1->colVal; - - SColVal colVal = {0}; - tsdbRowGetColVal(row, pTSchema, iCol, &colVal); - - if (colVal.cid != tColVal->cid) { - invalidate = true; - goto _invalidate; - } - - if (COL_VAL_IS_VALUE(&colVal)) { - if (keyTs == tTsVal1->ts && COL_VAL_IS_VALUE(tColVal)) { - invalidate = true; - - break; - } else { - SLastCol lastCol = {.ts = keyTs, .colVal = colVal}; - if (IS_VAR_DATA_TYPE(colVal.type) && colVal.value.nData > 0) { - SLastCol *pLastCol = (SLastCol *)taosArrayGet(pLast, iCol); - if (pLastCol->colVal.value.nData > 0 && NULL != pLastCol->colVal.value.pData) - taosMemoryFree(pLastCol->colVal.value.pData); - - lastCol.colVal.value.pData = taosMemoryMalloc(colVal.value.nData); - if (lastCol.colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _invalidate; - } - memcpy(lastCol.colVal.value.pData, colVal.value.pData, colVal.value.nData); - } - - taosArraySet(pLast, iCol, &lastCol); - } - } - } - } - - _invalidate: - taosMemoryFreeClear(pTSchema); - - taosLRUCacheRelease(pCache, h, invalidate); - if (invalidate) { - taosLRUCacheErase(pCache, key, keyLen); - } - } - - return code; -} -#endif - static tb_uid_t getTableSuidByUid(tb_uid_t uid, STsdb *pTsdb) { tb_uid_t suid = 0; @@ -2146,53 +1832,6 @@ static int32_t getTableDelDataFromTbData(STbData *pTbData, SArray *aDelData) { return code; } -#ifdef BUILD_NO_CALL -static int32_t getTableDelData(STbData *pMem, STbData *pIMem, SDelFReader *pDelReader, SDelIdx *pDelIdx, - SArray *aDelData) { - int32_t code = 0; - - if (pDelIdx) { - code = getTableDelDataFromDelIdx(pDelReader, pDelIdx, aDelData); - if (code) goto _err; - } - - if (pMem) { - code = getTableDelDataFromTbData(pMem, aDelData); - if (code) goto _err; - } - - if (pIMem) { - code = getTableDelDataFromTbData(pIMem, aDelData); - if (code) goto _err; - } - -_err: - return code; -} - -static int32_t getTableDelSkyline(STbData *pMem, STbData *pIMem, SDelFReader *pDelReader, SDelIdx *pDelIdx, - SArray *aSkyline) { - int32_t code = 0; - SArray *aDelData = NULL; - - aDelData = taosArrayInit(32, sizeof(SDelData)); - code = getTableDelData(pMem, pIMem, pDelReader, pDelIdx, aDelData); - if (code) goto _err; - - size_t nDelData = taosArrayGetSize(aDelData); - if (nDelData > 0) { - code = tsdbBuildDeleteSkyline(aDelData, 0, (int32_t)(nDelData - 1), aSkyline); - if (code) goto _err; - } - -_err: - if (aDelData) { - taosArrayDestroy(aDelData); - } - return code; -} -#endif - static void freeTableInfoFunc(void *param) { void **p = (void **)param; taosMemoryFreeClear(*p); @@ -3154,22 +2793,6 @@ _err: return code; } -#ifdef BUILD_NO_CALL -static int32_t initLastColArray(STSchema *pTSchema, SArray **ppColArray) { - SArray *pColArray = taosArrayInit(pTSchema->numOfCols, sizeof(SLastCol)); - if (NULL == pColArray) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - for (int32_t i = 0; i < pTSchema->numOfCols; ++i) { - SLastCol col = {.ts = 0, .colVal = COL_VAL_NULL(pTSchema->columns[i].colId, pTSchema->columns[i].type)}; - taosArrayPush(pColArray, &col); - } - *ppColArray = pColArray; - return TSDB_CODE_SUCCESS; -} -#endif - static int32_t initLastColArrayPartial(STSchema *pTSchema, SArray **ppColArray, int16_t *slotIds, int nCols) { SArray *pColArray = taosArrayInit(nCols, sizeof(SLastCol)); if (NULL == pColArray) { From 586d3cae64e19b76f00e90a23f2671e01ee773eb Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 24 Jul 2024 16:08:12 +0800 Subject: [PATCH 16/35] 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 5a34a1142f79e42e18dc70aa279ac40e0ad613b3 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 24 Jul 2024 16:17:28 +0800 Subject: [PATCH 17/35] adj operator result --- source/libs/executor/src/aggregateoperator.c | 15 +- source/libs/executor/src/cachescanoperator.c | 88 ++--- .../libs/executor/src/countwindowoperator.c | 27 +- .../libs/executor/src/eventwindowoperator.c | 23 +- source/libs/executor/src/exchangeoperator.c | 48 ++- source/libs/executor/src/filloperator.c | 18 +- source/libs/executor/src/groupoperator.c | 83 +++-- source/libs/executor/src/scanoperator.c | 312 +++++++++++++----- .../executor/src/streamcountwindowoperator.c | 38 ++- .../executor/src/streameventwindowoperator.c | 34 +- source/libs/executor/src/streamfilloperator.c | 45 ++- .../executor/src/streamtimewindowoperator.c | 229 +++++++++---- source/libs/executor/src/sysscanoperator.c | 32 +- source/libs/executor/src/timesliceoperator.c | 26 +- source/libs/executor/src/timewindowoperator.c | 136 +++++--- source/util/src/tsched.c | 51 +-- 16 files changed, 823 insertions(+), 382 deletions(-) diff --git a/source/libs/executor/src/aggregateoperator.c b/source/libs/executor/src/aggregateoperator.c index 1e86b90d3b..905e82e443 100644 --- a/source/libs/executor/src/aggregateoperator.c +++ b/source/libs/executor/src/aggregateoperator.c @@ -252,14 +252,15 @@ _end: return pBlock != NULL; } -SSDataBlock* getAggregateResult(SOperatorInfo* pOperator) { +int32_t getAggregateResultNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SAggOperatorInfo* pAggInfo = pOperator->info; SOptrBasicInfo* pInfo = &pAggInfo->binfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -291,10 +292,18 @@ SSDataBlock* getAggregateResult(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return (rows == 0) ? NULL : pInfo->pRes; + (*ppRes) = (rows == 0) ? NULL : pInfo->pRes; + return code; +} + +static SSDataBlock* getAggregateResult(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = getAggregateResultNext(pOperator, &pRes); + return pRes; } int32_t doAggregateImpl(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx) { diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index 23426cc1b7..d6ba2f7c26 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -144,7 +144,7 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe for (int i = 0; i < TARRAY_SIZE(pInfo->matchInfo.pList); ++i) { SColMatchItem* pColInfo = taosArrayGet(pInfo->matchInfo.pList, i); - void* tmp = taosArrayPush(pCidList, &pColInfo->colId); + void* tmp = taosArrayPush(pCidList, &pColInfo->colId); QUERY_CHECK_NULL(tmp, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); if (pInfo->pFuncTypeList != NULL && taosArrayGetSize(pInfo->pFuncTypeList) > i) { pColInfo->funcType = *(int32_t*)taosArrayGet(pInfo->pFuncTypeList, i); @@ -219,9 +219,12 @@ _error: return NULL; } -SSDataBlock* doScanCache(SOperatorInfo* pOperator) { +int32_t doScanCacheNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SCacheRowsScanInfo* pInfo = pOperator->info; @@ -234,7 +237,8 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { int32_t size = tableListGetSize(pTableList); if (size == 0) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } blockDataCleanup(pInfo->pRes); @@ -249,11 +253,9 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { blockDataCleanup(pBufRes); taosArrayClear(pInfo->pUidList); - int32_t code = + code = pReaderFn->retrieveRows(pInfo->pLastrowReader, pBufRes, pInfo->pSlotIds, pInfo->pDstSlotIds, pInfo->pUidList); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); // check for tag values int32_t resultRows = pBufRes->info.rows; @@ -277,12 +279,9 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { colDataSetNULL(pDst, 0); } else { if (pSrc->pData) { - char* p = colDataGetData(pSrc, pInfo->indexOfBufferedRes); - int32_t code = colDataSetVal(pDst, 0, p, false); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - T_LONG_JMP(pTaskInfo->env, code); - } + char* p = colDataGetData(pSrc, pInfo->indexOfBufferedRes); + code = colDataSetVal(pDst, 0, p, false); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -292,19 +291,22 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { pRes->info.scanFlag = MAIN_SCAN; SExprSupp* pSup = &pInfo->pseudoExprSup; - int32_t code = addTagPseudoColumnData(&pInfo->readHandle, pSup->pExprInfo, pSup->numOfExprs, pRes, - pRes->info.rows, pTaskInfo, NULL); + code = addTagPseudoColumnData(&pInfo->readHandle, pSup->pExprInfo, pSup->numOfExprs, pRes, pRes->info.rows, + pTaskInfo, NULL); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - return NULL; + (*ppRes) = NULL; + return code; } pRes->info.id.groupId = tableListGetTableGroupId(pTableList, pRes->info.id.uid); pInfo->indexOfBufferedRes += 1; - return pRes; + (*ppRes) = pRes; + return code; } else { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } } else { size_t totalGroups = tableListGetOutputGroups(pTableList); @@ -317,37 +319,30 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { STableKeyInfo* pList = NULL; int32_t num = 0; - int32_t code = tableListGetGroupList(pTableList, pInfo->currentGroupIndex, &pList, &num); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + code = tableListGetGroupList(pTableList, pInfo->currentGroupIndex, &pList, &num); + QUERY_CHECK_CODE(code, lino, _end); if (NULL == pInfo->pLastrowReader) { - code = pReaderFn->openReader(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, - taosArrayGetSize(pInfo->matchInfo.pList), pInfo->pCidList, pInfo->pSlotIds, suid, - &pInfo->pLastrowReader, pTaskInfo->id.str, pInfo->pFuncTypeList, &pInfo->pkCol, - pInfo->numOfPks); + int32_t tmpRes = pReaderFn->openReader(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, + taosArrayGetSize(pInfo->matchInfo.pList), pInfo->pCidList, + pInfo->pSlotIds, suid, &pInfo->pLastrowReader, pTaskInfo->id.str, + pInfo->pFuncTypeList, &pInfo->pkCol, pInfo->numOfPks); - if (code != TSDB_CODE_SUCCESS) { + if (tmpRes != TSDB_CODE_SUCCESS) { pInfo->currentGroupIndex += 1; taosArrayClear(pInfo->pUidList); continue; } } else { code = pReaderFn->reuseReader(pInfo->pLastrowReader, pList, num); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); } taosArrayClear(pInfo->pUidList); code = pReaderFn->retrieveRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pDstSlotIds, pInfo->pUidList); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); pInfo->currentGroupIndex += 1; @@ -365,13 +360,15 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { pInfo->pRes->info.rows, pTaskInfo, NULL); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - return NULL; + (*ppRes) = NULL; + return code; } } } // pInfo->pLastrowReader = tsdbCacherowsReaderClose(pInfo->pLastrowReader); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } else { // pInfo->pLastrowReader = tsdbCacherowsReaderClose(pInfo->pLastrowReader); } @@ -380,8 +377,23 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { pReaderFn->closeReader(pInfo->pLastrowReader); pInfo->pLastrowReader = NULL; setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + return code; +} + +static SSDataBlock* doScanCache(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doScanCacheNext(pOperator, &pRes); + return pRes; } void destroyCacheScanOperator(void* param) { diff --git a/source/libs/executor/src/countwindowoperator.c b/source/libs/executor/src/countwindowoperator.c index 58d289efe4..4395d00127 100644 --- a/source/libs/executor/src/countwindowoperator.c +++ b/source/libs/executor/src/countwindowoperator.c @@ -145,8 +145,8 @@ void doCountWindowAggImpl(SOperatorInfo* pOperator, SSDataBlock* pBlock) { static void buildCountResult(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, SExecTaskInfo* pTaskInfo, SFilterInfo* pFilterInfo, SSDataBlock* pBlock) { SResultRow* pResultRow = NULL; - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; for (int32_t i = 0; i < taosArrayGetSize(pCountSup->pWinStates); i++) { SCountWindowResult* pBuff = NULL; code = setCountWindowOutputBuff(pExprSup, pCountSup, &pResultRow, &pBuff); @@ -171,7 +171,7 @@ _end: } } -static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { +static int32_t countWindowAggregateNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SCountWindowOperatorInfo* pInfo = pOperator->info; @@ -198,11 +198,9 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { - pTaskInfo->code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, - pInfo->scalarSup.numOfExprs, NULL); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, + pInfo->scalarSup.numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->groupId == 0) { @@ -214,7 +212,8 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { doCountWindowAggImpl(pOperator, pBlock); if (pRes->info.rows >= pOperator->resultInfo.threshold) { - return pRes; + (*ppRes) = pRes; + return code; } } @@ -223,9 +222,17 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return pRes->info.rows == 0 ? NULL : pRes; + (*ppRes) = pRes->info.rows == 0 ? NULL : pRes; + return code; +} + +static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = countWindowAggregateNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, diff --git a/source/libs/executor/src/eventwindowoperator.c b/source/libs/executor/src/eventwindowoperator.c index 1988dff44f..4b23bc9d6e 100644 --- a/source/libs/executor/src/eventwindowoperator.c +++ b/source/libs/executor/src/eventwindowoperator.c @@ -168,7 +168,7 @@ void destroyEWindowOperatorInfo(void* param) { taosMemoryFreeClear(param); } -static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { +static int32_t eventWindowAggregateNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SEventWindowOperatorInfo* pInfo = pOperator->info; @@ -197,11 +197,9 @@ static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { - pTaskInfo->code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, - pInfo->scalarSup.numOfExprs, NULL); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, + pInfo->scalarSup.numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); } code = eventWindowAggImpl(pOperator, pInfo, pBlock); @@ -211,16 +209,25 @@ static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); if (pRes->info.rows >= pOperator->resultInfo.threshold) { - return pRes; + (*ppRes) = pRes; + return code; } } _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return pRes->info.rows == 0 ? NULL : pRes; + (*ppRes) = pRes->info.rows == 0 ? NULL : pRes; + return code; +} + +static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = eventWindowAggregateNext(pOperator, &pRes); + return pRes; } static int32_t setSingleOutputTupleBufv1(SResultRowInfo* pResultRowInfo, STimeWindow* win, SResultRow** pResult, diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index 421fc562a4..cce3bf69af 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -230,30 +230,30 @@ static SSDataBlock* doLoadRemoteDataImpl(SOperatorInfo* pOperator) { } } -static SSDataBlock* loadRemoteData(SOperatorInfo* pOperator) { +static int32_t loadRemoteDataNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExchangeInfo* pExchangeInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - pTaskInfo->code = pOperator->fpSet._openFn(pOperator); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } while (1) { SSDataBlock* pBlock = doLoadRemoteDataImpl(pOperator); if (pBlock == NULL) { - return NULL; + (*ppRes) = NULL; + return code; } - pTaskInfo->code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, NULL); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(pTaskInfo->code)); - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); + if (blockDataGetNumOfRows(pBlock) == 0) { continue; } @@ -266,15 +266,33 @@ static SSDataBlock* loadRemoteData(SOperatorInfo* pOperator) { } else if (status == PROJECT_RETRIEVE_DONE) { if (pBlock->info.rows == 0) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } else { - return pBlock; + (*ppRes) = pBlock; + return code; } } } else { - return pBlock; + (*ppRes) = pBlock; + return code; } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* loadRemoteData(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = loadRemoteDataNext(pOperator, &pRes); + return pRes; } static int32_t initDataSource(int32_t numOfSources, SExchangeInfo* pInfo, const char* id) { diff --git a/source/libs/executor/src/filloperator.c b/source/libs/executor/src/filloperator.c index 66655090bc..3d139e1d2e 100644 --- a/source/libs/executor/src/filloperator.c +++ b/source/libs/executor/src/filloperator.c @@ -316,12 +316,14 @@ _end: return NULL; } -static SSDataBlock* doFill(SOperatorInfo* pOperator) { +static int32_t doFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SFillOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* fillResult = NULL; @@ -332,9 +334,10 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) { break; } - int32_t code = doFilter(fillResult, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); + code = doFilter(fillResult, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } if (fillResult->info.rows > 0) { @@ -346,7 +349,14 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) { pOperator->resultInfo.totalRows += fillResult->info.rows; } - return fillResult; + (*ppRes) = fillResult; + return code; +} + +static SSDataBlock* doFill(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doFillNext(pOperator, &pRes); + return pRes; } void destroyFillOperatorInfo(void* param) { diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 1af5ef0238..eb48144967 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -460,9 +460,10 @@ _end: return (pRes->info.rows == 0) ? NULL : pRes; } -static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { +static int32_t hashGroupbyAggregateNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; @@ -471,7 +472,8 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { SGroupbyOperatorInfo* pInfo = pOperator->info; if (pOperator->status == OP_RES_TO_RETURN) { - return buildGroupResultDataBlockByHash(pOperator); + (*ppRes) = buildGroupResultDataBlockByHash(pOperator); + return code; } SGroupResInfo* pGroupResInfo = &pInfo->groupResInfo; @@ -523,7 +525,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return buildGroupResultDataBlockByHash(pOperator); + (*ppRes) = buildGroupResultDataBlockByHash(pOperator); + return code; +} + +static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = hashGroupbyAggregateNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo) { @@ -978,9 +987,10 @@ _end: return pInfo->binfo.pRes; } -static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { +static int32_t hashPartitionNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; @@ -990,7 +1000,8 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { SSDataBlock* pRes = pInfo->binfo.pRes; if (pOperator->status == OP_RES_TO_RETURN) { - return buildPartitionResult(pOperator); + (*ppRes) = buildPartitionResult(pOperator); + return code; } int64_t st = taosGetTimestampUs(); @@ -1005,21 +1016,21 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { pInfo->binfo.pRes->info.scanFlag = pBlock->info.scanFlag; // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { - pTaskInfo->code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, - pInfo->scalarSup.numOfExprs, NULL); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, + pInfo->scalarSup.numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); } terrno = TSDB_CODE_SUCCESS; doHashPartition(pOperator, pBlock); if (terrno != TSDB_CODE_SUCCESS) { // group by json error - T_LONG_JMP(pTaskInfo->env, terrno); + code = terrno; + QUERY_CHECK_CODE(code, lino, _end); } } SArray* groupArray = taosArrayInit(taosHashGetSize(pInfo->pGroupSet), sizeof(SDataGroupInfo)); + QUERY_CHECK_NULL(groupArray, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); void* pGroupIter = taosHashIterate(pInfo->pGroupSet, NULL); while (pGroupIter != NULL) { @@ -1043,10 +1054,18 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return buildPartitionResult(pOperator); + (*ppRes) = buildPartitionResult(pOperator); + return code; +} + +static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = hashPartitionNext(pOperator, &pRes); + return pRes; } static void destroyPartitionOperatorInfo(void* param) { @@ -1413,26 +1432,29 @@ _end: } } -static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { +static int32_t doStreamHashPartitionNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStreamPartitionOperatorInfo* pInfo = pOperator->info; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } if (hasRemainTbName(pInfo)) { code = buildStreamCreateTableResult(pOperator); QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pCreateTbRes && pInfo->pCreateTbRes->info.rows > 0) { - return pInfo->pCreateTbRes; + (*ppRes) = pInfo->pCreateTbRes; + return code; } } if (hasRemainPartion(pInfo)) { - return buildStreamPartitionResult(pOperator); + (*ppRes) = buildStreamPartitionResult(pOperator); + return code; } int64_t st = taosGetTimestampUs(); @@ -1442,7 +1464,8 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { SSDataBlock* pBlock = getNextBlockFromDownstream(pOperator, 0); if (pBlock == NULL) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } printSpecDataBlock(pBlock, getStreamOpName(pOperator->operatorType), "recv", GET_TASKID(pTaskInfo)); switch (pBlock->info.type) { @@ -1457,13 +1480,15 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } break; case STREAM_CREATE_CHILD_TABLE: case STREAM_RETRIEVE: case STREAM_CHECKPOINT: case STREAM_GET_ALL: { - return pBlock; + (*ppRes) = pBlock; + return code; } default: ASSERTS(0, "invalid SSDataBlock type"); @@ -1485,15 +1510,25 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { code = buildStreamCreateTableResult(pOperator); QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pCreateTbRes && pInfo->pCreateTbRes->info.rows > 0) { - return pInfo->pCreateTbRes; + (*ppRes) = pInfo->pCreateTbRes; + return code; } - return buildStreamPartitionResult(pOperator); + (*ppRes) = buildStreamPartitionResult(pOperator); + return code; _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamHashPartitionNext(pOperator, &pRes); + return pRes; } static void destroyStreamPartitionOperatorInfo(void* param) { diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 20c88cbdb4..1c3881b8ae 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -842,23 +842,24 @@ static SSDataBlock* getBlockForEmptyTable(SOperatorInfo* pOperator, const STable return pBlock; } -static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { +static int32_t doTableScanImplNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pTableScanInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; SSDataBlock* pBlock = pTableScanInfo->pResBlock; bool hasNext = false; - int32_t code = TSDB_CODE_SUCCESS; pBlock->info.dataLoad = false; int64_t st = taosGetTimestampUs(); while (true) { code = pAPI->tsdReader.tsdNextDataBlock(pTableScanInfo->base.dataReader, &hasNext); - if (code) { + if (code != TSDB_CODE_SUCCESS) { pAPI->tsdReader.tsdReaderReleaseDataBlock(pTableScanInfo->base.dataReader); - T_LONG_JMP(pTaskInfo->env, code); + QUERY_CHECK_CODE(code, lino, _end); } if (!hasNext) { @@ -887,9 +888,7 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { uint32_t status = 0; code = loadDataBlock(pOperator, &pTableScanInfo->base, pBlock, &status); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); if (status == FUNC_DATA_REQUIRED_ALL_FILTEROUT) { break; @@ -905,9 +904,24 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { pOperator->cost.totalCost = pTableScanInfo->base.readRecorder.elapsedTime; pBlock->info.scanFlag = pTableScanInfo->base.scanFlag; - return pBlock; + (*ppRes) = pBlock; + return code; } - return NULL; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTableScanImplNext(pOperator, &pRes); + return pRes; } static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { @@ -1177,7 +1191,7 @@ _end: return result; } -static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { +static int32_t doTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; STableScanInfo* pInfo = pOperator->info; @@ -1189,10 +1203,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { code = createTableListInfoFromParam(pOperator); freeOperatorParam(pOperator->pOperatorGetParam, OP_GET_PARAM); pOperator->pOperatorGetParam = NULL; - if (code != TSDB_CODE_SUCCESS) { - pTaskInfo->code = code; - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); + if (pOperator->status == OP_EXEC_DONE) { pInfo->currentGroupId = -1; pOperator->status = OP_OPENED; @@ -1200,7 +1212,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { while (true) { result = startNextGroupScan(pOperator); if (result || pOperator->status == OP_EXEC_DONE) { - return result; + (*ppRes) = result; + return code; } } } @@ -1215,7 +1228,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { while (1) { SSDataBlock* result = doGroupedTableScan(pOperator); if (result || (pOperator->status == OP_EXEC_DONE) || isTaskKilled(pTaskInfo)) { - return result; + (*ppRes) = result; + return code; } // if no data, switch to next table and continue scan @@ -1227,7 +1241,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { if (pInfo->currentTable >= numOfTables) { qDebug("all table checked in table list, total:%d, return NULL, %s", numOfTables, GET_TASKID(pTaskInfo)); taosRUnLockLatch(&pTaskInfo->lock); - return NULL; + (*ppRes) = NULL; + return code; } tInfo = *(STableKeyInfo*)tableListGetInfo(pInfo->base.pTableListInfo, pInfo->currentTable); @@ -1243,7 +1258,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { pInfo->scanTimes = 0; } } else { // scan table group by group sequentially - return groupSeqTableScan(pOperator); + (*ppRes) = groupSeqTableScan(pOperator); + return code; } _end: @@ -1252,7 +1268,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTableScanNext(pOperator, &pRes); + return pRes; } static int32_t getTableScannerExecInfo(struct SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -2648,7 +2671,7 @@ static void processPrimaryKey(SSDataBlock* pBlock, bool hasPrimaryKey, STqOffset tqOffsetResetToData(offset, pBlock->info.id.uid, pBlock->info.window.ekey, val); } -static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { +static int32_t doQueueScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -2660,7 +2683,8 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { qDebug("start to exec queue scan, %s", id); if (isTaskKilled(pTaskInfo)) { - return NULL; + (*ppRes) = NULL; + return code; } if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_DATA) { @@ -2672,7 +2696,8 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { processPrimaryKey(pResult, hasPrimaryKey, &pTaskInfo->streamInfo.currentOffset); qDebug("tmqsnap doQueueScan get data uid:%" PRId64 "", pResult->info.id.uid); if (pResult->info.rows > 0) { - return pResult; + (*ppRes) = pResult; + return code; } } else { break; @@ -2686,7 +2711,8 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { int64_t validVer = pTaskInfo->streamInfo.snapshotVer + 1; qDebug("queue scan tsdb over, switch to wal ver %" PRId64 "", validVer); if (pAPI->tqReaderFn.tqReaderSeek(pInfo->tqReader, validVer, pTaskInfo->id.str) < 0) { - return NULL; + (*ppRes) = NULL; + return code; } tqOffsetResetToLog(&pTaskInfo->streamInfo.currentOffset, validVer); @@ -2716,23 +2742,34 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { qDebug("doQueueScan after filter get data from log %" PRId64 " rows, version:%" PRId64, pInfo->pRes->info.rows, pTaskInfo->streamInfo.currentOffset.version); if (pInfo->pRes->info.rows > 0) { - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } } else { qDebug("doQueueScan get none from log, return, version:%" PRId64, pTaskInfo->streamInfo.currentOffset.version); - return NULL; + (*ppRes) = NULL; + return code; } } } else { qError("unexpected streamInfo prepare type: %d", pTaskInfo->streamInfo.currentOffset.type); - return NULL; + (*ppRes) = NULL; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doQueueScanNext(pOperator, &pRes); + return pRes; } static int32_t filterDelBlockByUid(SSDataBlock* pDst, const SSDataBlock* pSrc, SStreamScanInfo* pInfo) { @@ -2923,7 +2960,7 @@ static bool isStreamWindow(SStreamScanInfo* pInfo) { return isIntervalWindow(pInfo) || isSessionWindow(pInfo) || isStateWindow(pInfo) || isCountWindow(pInfo); } -static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { +static int32_t doStreamScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { // NOTE: this operator does never check if current status is done or not int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; @@ -2973,7 +3010,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { if (pStreamInfo->recoverStep == STREAM_RECOVER_STEP__SCAN1) { if (isTaskKilled(pTaskInfo)) { qInfo("===stream===stream scan is killed. task id:%s, code %s", id, tstrerror(pTaskInfo->code)); - return NULL; + (*ppRes) = NULL; + return code; } switch (pInfo->scanMode) { @@ -2981,7 +3019,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); - return pInfo->pRecoverRes; + (*ppRes) = pInfo->pRecoverRes; + return code; } break; default: break; @@ -3002,13 +3041,15 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { pInfo->scanMode = STREAM_SCAN_FROM_RES; printSpecDataBlock(pInfo->pCreateTbRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); - return pInfo->pCreateTbRes; + (*ppRes) = pInfo->pCreateTbRes; + return code; } qDebug("stream recover scan get block, rows %" PRId64, pInfo->pRecoverRes->info.rows); printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); - return pInfo->pRecoverRes; + (*ppRes) = pInfo->pRecoverRes; + return code; } pStreamInfo->recoverStep = STREAM_RECOVER_STEP__NONE; STableScanInfo* pTSInfo = pInfo->pTableScanOp->info; @@ -3020,7 +3061,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { pTSInfo->base.cond.endVersion = -1; pStreamInfo->recoverScanFinished = true; - return NULL; + (*ppRes) = NULL; + return code; } size_t total = taosArrayGetSize(pInfo->pBlockLists); @@ -3029,7 +3071,8 @@ FETCH_NEXT_BLOCK: if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) { if (pInfo->validBlockIndex >= total) { doClearBufferedBlocks(pInfo); - return NULL; + (*ppRes) = NULL; + return code; } int32_t current = pInfo->validBlockIndex++; @@ -3060,7 +3103,8 @@ FETCH_NEXT_BLOCK: case STREAM_GET_ALL: printDataBlock(pBlock, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pBlock->info.type); - return pBlock; + (*ppRes) = pBlock; + return code; case STREAM_RETRIEVE: { pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RETRIEVE; @@ -3107,7 +3151,8 @@ FETCH_NEXT_BLOCK: printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pInfo->pDeleteDataRes->info.type); - return pInfo->pDeleteDataRes; + (*ppRes) = pInfo->pDeleteDataRes; + return code; } else { goto FETCH_NEXT_BLOCK; } @@ -3128,7 +3173,8 @@ FETCH_NEXT_BLOCK: printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pInfo->pDeleteDataRes->info.type); - return pInfo->pDeleteDataRes; + (*ppRes) = pInfo->pDeleteDataRes; + return code; } else { goto FETCH_NEXT_BLOCK; } @@ -3142,7 +3188,8 @@ FETCH_NEXT_BLOCK: } printDataBlock(pBlock, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pBlock->info.type); - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pInfo->blockType == STREAM_INPUT__DATA_SUBMIT) { qDebug("stream scan mode:%d, %s", pInfo->scanMode, id); switch (pInfo->scanMode) { @@ -3158,7 +3205,8 @@ FETCH_NEXT_BLOCK: QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pRes->info.rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } } break; case STREAM_SCAN_FROM_DELETE_DATA: { @@ -3169,14 +3217,16 @@ FETCH_NEXT_BLOCK: code = copyDataBlock(pInfo->pDeleteDataRes, pInfo->pUpdateRes); QUERY_CHECK_CODE(code, lino, _end); pInfo->pDeleteDataRes->info.type = STREAM_DELETE_DATA; - return pInfo->pDeleteDataRes; + (*ppRes) = pInfo->pDeleteDataRes; + return code; } break; case STREAM_SCAN_FROM_UPDATERES: { code = generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes, STREAM_CLEAR); QUERY_CHECK_CODE(code, lino, _end); prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE; - return pInfo->pUpdateRes; + (*ppRes) = pInfo->pUpdateRes; + return code; } break; case STREAM_SCAN_FROM_DATAREADER_RANGE: case STREAM_SCAN_FROM_DATAREADER_RETRIEVE: { @@ -3193,7 +3243,8 @@ FETCH_NEXT_BLOCK: printSpecDataBlock(pSDB, getStreamOpName(pOperator->operatorType), "update", GET_TASKID(pTaskInfo)); code = calBlockTbName(pInfo, pSDB, 0); QUERY_CHECK_CODE(code, lino, _end); - return pSDB; + (*ppRes) = pSDB; + return code; } blockDataCleanup(pInfo->pUpdateDataRes); pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; @@ -3212,7 +3263,8 @@ FETCH_NEXT_BLOCK: prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pInfo->pUpdateRes->info.type = STREAM_DELETE_DATA; printSpecDataBlock(pInfo->pUpdateRes, getStreamOpName(pOperator->operatorType), "rebuild", GET_TASKID(pTaskInfo)); - return pInfo->pUpdateRes; + (*ppRes) = pInfo->pUpdateRes; + return code; } SDataBlockInfo* pBlockInfo = &pInfo->pRes->info; @@ -3226,7 +3278,8 @@ FETCH_NEXT_BLOCK: doClearBufferedBlocks(pInfo); qDebug("stream scan return empty, all %d submit blocks consumed, %s", totalBlocks, id); - return NULL; + (*ppRes) = NULL; + return code; } int32_t current = pInfo->validBlockIndex++; @@ -3264,7 +3317,8 @@ FETCH_NEXT_BLOCK: pInfo->scanMode = STREAM_SCAN_FROM_RES; qDebug("create table res exists, rows:%" PRId64 " return from stream scan, %s", pInfo->pCreateTbRes->info.rows, id); - return pInfo->pCreateTbRes; + (*ppRes) = pInfo->pCreateTbRes; + return code; } code = doCheckUpdate(pInfo, pBlockInfo->window.ekey, pInfo->pRes); @@ -3297,7 +3351,8 @@ FETCH_NEXT_BLOCK: qDebug("stream scan completed, and return source rows:%" PRId64 ", %s", pBlockInfo->rows, id); if (pBlockInfo->rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } if (pInfo->pUpdateDataRes->info.rows > 0) { @@ -3308,7 +3363,8 @@ FETCH_NEXT_BLOCK: } else if (pInfo->blockType == STREAM_INPUT__CHECKPOINT) { if (pInfo->validBlockIndex >= total) { doClearBufferedBlocks(pInfo); - return NULL; + (*ppRes) = NULL; + return code; } int32_t current = pInfo->validBlockIndex++; @@ -3321,16 +3377,24 @@ FETCH_NEXT_BLOCK: streamScanOperatorSaveCheckpoint(pInfo); } // printDataBlock(pInfo->pCheckpointRes, "stream scan ck", GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } - return NULL; + (*ppRes) = NULL; + return code; } +static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamScanNext(pOperator, &pRes); + return pRes; +} static int32_t extractTableIdList(const STableListInfo* pTableListInfo, SArray** ppArrayRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; @@ -3353,7 +3417,7 @@ _end: return code; } -static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { +static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -3368,9 +3432,9 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { bool hasNext = false; if (pInfo->dataReader && pInfo->sContext->withMeta != ONLY_META) { code = pAPI->tsdReader.tsdNextDataBlock(pInfo->dataReader, &hasNext); - if (code) { + if (code != TSDB_CODE_SUCCESS) { pAPI->tsdReader.tsdReaderReleaseDataBlock(pInfo->dataReader); - T_LONG_JMP(pTaskInfo->env, code); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -3383,14 +3447,16 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { SSDataBlock* pBlock = NULL; code = pAPI->tsdReader.tsdReaderRetrieveDataBlock(pInfo->dataReader, &pBlock, NULL); if (pBlock == NULL || code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, terrno); + code = terrno; + QUERY_CHECK_CODE(code, lino, _end); } if (pBlock && pBlock->info.rows > 0) { bool hasPrimaryKey = pAPI->snapshotFn.taosXGetTablePrimaryKey(pInfo->sContext); processPrimaryKey(pBlock, hasPrimaryKey, &pTaskInfo->streamInfo.currentOffset); qDebug("tmqsnap doRawScan get data uid:%" PRId64 "", pBlock->info.id.uid); - return pBlock; + (*ppRes) = pBlock; + return code; } } @@ -3407,7 +3473,8 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { code = qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); QUERY_CHECK_CODE(code, lino, _end); tDeleteSchemaWrapper(mtInfo.schema); - return NULL; + (*ppRes) = NULL; + return code; } else if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_META) { SSnapContext* sContext = pInfo->sContext; for (int32_t i = 0; i < tmqRowSize; i++) { @@ -3441,22 +3508,24 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { pTaskInfo->streamInfo.btMetaRsp.batchMetaLen = taosArrayInit(4, sizeof(int32_t)); QUERY_CHECK_NULL(pTaskInfo->streamInfo.btMetaRsp.batchMetaLen, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } - int32_t code = TSDB_CODE_SUCCESS; + int32_t tempRes = TSDB_CODE_SUCCESS; uint32_t len = 0; - tEncodeSize(tEncodeMqMetaRsp, &tmpMetaRsp, len, code); - if (TSDB_CODE_SUCCESS != code) { + tEncodeSize(tEncodeMqMetaRsp, &tmpMetaRsp, len, tempRes); + if (TSDB_CODE_SUCCESS != tempRes) { qError("tmqsnap tEncodeMqMetaRsp error"); taosMemoryFreeClear(data); break; } - int32_t tLen = sizeof(SMqRspHead) + len; - void* tBuf = taosMemoryCalloc(1, tLen); + int32_t tLen = sizeof(SMqRspHead) + len; + void* tBuf = taosMemoryCalloc(1, tLen); + QUERY_CHECK_NULL(tBuf, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + void* metaBuff = POINTER_SHIFT(tBuf, sizeof(SMqRspHead)); SEncoder encoder = {0}; tEncoderInit(&encoder, metaBuff, len); - code = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); - if (code < 0) { + tempRes = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); + if (TSDB_CODE_SUCCESS != tempRes) { qError("tmqsnap tEncodeMqMetaRsp error"); tEncoderClear(&encoder); taosMemoryFreeClear(tBuf); @@ -3471,7 +3540,8 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } - return NULL; + (*ppRes) = NULL; + return code; } _end: @@ -3480,7 +3550,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doRawScanNext(pOperator, &pRes); + return pRes; } static void destroyRawScanOperatorInfo(void* param) { @@ -3570,6 +3647,7 @@ void streamScanReleaseState(SOperatorInfo* pOperator) { return; } if (!pInfo->pUpdateInfo) { + qDebug("stask:%s streamScanReleaseState cancel", GET_TASKID(pOperator->pTaskInfo)); return; } int32_t len = 0; @@ -3602,6 +3680,10 @@ void streamScanReloadState(SOperatorInfo* pOperator) { if (!pInfo->pState) { return; } + if (!pInfo->pUpdateInfo) { + qDebug("stask:%s streamScanReloadState cancel", GET_TASKID(pOperator->pTaskInfo)); + return; + } void* pBuff = NULL; int32_t len = 0; code = pInfo->stateStore.streamStateGetInfo(pInfo->pState, STREAM_SCAN_OP_STATE_NAME, @@ -4179,9 +4261,10 @@ _end: return code; } -static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { +static int32_t doTagScanFromCtbIdxNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; @@ -4268,12 +4351,21 @@ _end: T_LONG_JMP(pTaskInfo->env, code); } pOperator->resultInfo.totalRows += pRes->info.rows; - return (pRes->info.rows == 0) ? NULL : pInfo->pRes; + (*ppRes) = (pRes->info.rows == 0) ? NULL : pInfo->pRes; + return code; } -static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { +static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTagScanFromCtbIdxNext(pOperator, &pRes); + return pRes; +} + +static int32_t doTagScanFromMetaEntryNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -4287,7 +4379,8 @@ static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { int32_t size = tableListGetSize(pInfo->pTableListInfo); if (size == 0) { setTaskStatus(pTaskInfo, TASK_COMPLETED); - return NULL; + (*ppRes) = NULL; + return code; } char str[512] = {0}; @@ -4316,7 +4409,14 @@ static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { pOperator->resultInfo.totalRows += pRes->info.rows; - return (pRes->info.rows == 0) ? NULL : pInfo->pRes; + (*ppRes) = (pRes->info.rows == 0) ? NULL : pInfo->pRes; + return code; +} + +static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTagScanFromMetaEntryNext(pOperator, &pRes); + return pRes; } static void destroyTagScanOperatorInfo(void* param) { @@ -4849,9 +4949,10 @@ static void stopSubTablesTableMergeScan(STableMergeScanInfo* pInfo) { } } -SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { +int32_t doTableMergeScanParaSubTablesNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -4871,7 +4972,8 @@ SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { if (tableListSize == 0) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } pInfo->tableStartIndex = 0; pInfo->groupId = ((STableKeyInfo*)tableListGetInfo(pInfo->base.pTableListInfo, pInfo->tableStartIndex))->groupId; @@ -4919,7 +5021,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return pBlock; + (*ppRes) = pBlock; + return code; +} + +static SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTableMergeScanParaSubTablesNext(pOperator, &pRes); + return pRes; } static void tableMergeScanDoSkipTable(uint64_t uid, void* pTableMergeOpInfo) { @@ -5312,18 +5421,19 @@ SSDataBlock* getSortedTableMergeScanBlockData(SSortHandle* pHandle, SSDataBlock* return (pResBlock->info.rows > 0) ? pResBlock : NULL; } -SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { +int32_t doTableMergeScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; STableMergeScanInfo* pInfo = pOperator->info; - int32_t code = pOperator->fpSet._openFn(pOperator); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); int64_t st = taosGetTimestampUs(); @@ -5333,7 +5443,8 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { if (tableListSize == 0) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } pInfo->tableStartIndex = 0; pInfo->groupId = ((STableKeyInfo*)tableListGetInfo(pInfo->base.pTableListInfo, pInfo->tableStartIndex))->groupId; @@ -5361,9 +5472,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { if (pInfo->bNewFilesetEvent) { stopDurationForGroupTableMergeScan(pOperator); code = startDurationForGroupTableMergeScan(pOperator); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, terrno); - } + QUERY_CHECK_CODE(code, lino, _end); } else { // Data of this group are all dumped, let's try the next group stopGroupTableMergeScan(pOperator); @@ -5382,7 +5491,20 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { pOperator->cost.totalCost += (taosGetTimestampUs() - st) / 1000.0; - return pBlock; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + (*ppRes) = pBlock; + return code; +} + +static SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTableMergeScanNext(pOperator, &pRes); + return pRes; } void destroyTableMergeScanOperatorInfo(void* param) { @@ -5841,7 +5963,8 @@ _end: } } -static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator) { +static int32_t doTableCountScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; STableCountScanOperatorInfo* pInfo = pOperator->info; STableCountScanSupp* pSupp = &pInfo->supp; @@ -5849,13 +5972,22 @@ static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator) { blockDataCleanup(pRes); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } if (pInfo->readHandle.mnd != NULL) { - return buildSysDbTableCount(pOperator, pInfo); + (*ppRes) = buildSysDbTableCount(pOperator, pInfo); + return code; } - return buildVnodeDbTableCount(pOperator, pInfo, pSupp, pRes); + (*ppRes) = buildVnodeDbTableCount(pOperator, pInfo, pSupp, pRes); + return code; +} + +static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTableCountScanNext(pOperator, &pRes); + return pRes; } static SSDataBlock* buildVnodeDbTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index d8ad026c6c..f249a0fe0a 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -604,7 +604,7 @@ _end: return code; } -static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { +static int32_t doStreamCountAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExprSupp* pSup = &pOperator->exprSupp; @@ -614,11 +614,13 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } else if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* opRes = buildCountResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } if (pInfo->recvGetAll) { @@ -629,11 +631,13 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } SOperatorInfo* downstream = pOperator->pDownstream[0]; @@ -667,7 +671,8 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pAggSup->stateStore.streamStateCommit(pAggSup->pState); doStreamCountSaveCheckpoint(pOperator); @@ -712,15 +717,24 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { SSDataBlock* opRes = buildCountResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamCountAggNext(pOperator, &pRes); + return pRes; } void streamCountReleaseState(SOperatorInfo* pOperator) { @@ -729,10 +743,8 @@ void streamCountReleaseState(SOperatorInfo* pOperator) { SStreamEventAggOperatorInfo* pInfo = pOperator->info; int32_t resSize = sizeof(TSKEY); char* pBuff = taosMemoryCalloc(1, resSize); - if (pBuff) { - code = terrno; - QUERY_CHECK_CODE(code, lino, _end); - } + QUERY_CHECK_NULL(pBuff, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + memcpy(pBuff, &pInfo->twAggSup.maxTs, sizeof(TSKEY)); qDebug("===stream=== count window operator relase state. "); pInfo->streamAggSup.stateStore.streamStateSaveInfo(pInfo->streamAggSup.pState, STREAM_COUNT_OP_STATE_NAME, @@ -745,6 +757,7 @@ void streamCountReleaseState(SOperatorInfo* pOperator) { } _end: if (code != TSDB_CODE_SUCCESS) { + terrno = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } } @@ -773,6 +786,7 @@ void streamCountReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { + terrno = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } } diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 3f1887b1ae..842c93491d 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -382,8 +382,8 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); QUERY_CHECK_CODE(code, lino, _end); - code = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); - QUERY_CHECK_CODE(code, lino, _end); + int32_t tmpRes = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); doDeleteEventWindow(pAggSup, pSeUpdated, &curWin.winInfo.sessionWin); if (pInfo->destHasPrimaryKey && curWin.winInfo.isOutput && IS_NORMAL_EVENT_OP(pOperator) && @@ -574,9 +574,10 @@ static SSDataBlock* buildEventResult(SOperatorInfo* pOperator) { return NULL; } -static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { +static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; @@ -589,7 +590,8 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = buildEventResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvGetAll) { @@ -600,11 +602,13 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } SOperatorInfo* downstream = pOperator->pDownstream[0]; @@ -636,7 +640,8 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pInfo->streamAggSup.stateStore.streamStateCommit(pInfo->streamAggSup.pState); doStreamEventSaveCheckpoint(pOperator); @@ -697,15 +702,24 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { SSDataBlock* resBlock = buildEventResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamEventAggNext(pOperator, &pRes); + return pRes; } void streamEventReleaseState(SOperatorInfo* pOperator) { diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index bd254c5e5a..6b21e481c7 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -563,8 +563,7 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo* code = checkResult(pFillSup, pFillInfo->current, groupId, &ckRes); QUERY_CHECK_CODE(code, lino, _end); - if ((pFillSup->hasDelete && !ckRes) || - !inWinRange(&pFillSup->winRange, &st)) { + if ((pFillSup->hasDelete && !ckRes) || !inWinRange(&pFillSup->winRange, &st)) { pFillInfo->current = taosTimeAdd(pFillInfo->current, pFillSup->interval.sliding, pFillSup->interval.slidingUnit, pFillSup->interval.precision); pFillInfo->pLinearInfo->winIndex++; @@ -1013,14 +1012,15 @@ _end: return code; } -static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { +static int32_t doStreamFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamFillOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } blockDataCleanup(pInfo->pRes); if (hasRemainCalc(pInfo->pFillInfo) || @@ -1028,18 +1028,21 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { doStreamFillRange(pInfo->pFillInfo, pInfo->pFillSup, pInfo->pRes); if (pInfo->pRes->info.rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } } if (pOperator->status == OP_RES_TO_RETURN) { doDeleteFillFinalize(pOperator); if (pInfo->pRes->info.rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } setOperatorCompleted(pOperator); resetStreamFillInfo(pInfo); - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* fillResult = NULL; @@ -1053,7 +1056,8 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { pInfo->pFillInfo->preRowKey = INT64_MIN; if (pInfo->pRes->info.rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; } break; } @@ -1071,7 +1075,8 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { switch (pBlock->info.type) { case STREAM_RETRIEVE: - return pBlock; + (*ppRes) = pBlock; + return code; case STREAM_DELETE_RESULT: { pInfo->pSrcDelBlock = pBlock; pInfo->srcDelRowIndex = 0; @@ -1082,7 +1087,8 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } continue; } break; @@ -1097,7 +1103,8 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { } break; case STREAM_CHECKPOINT: case STREAM_CREATE_CHILD_TABLE: { - return pBlock; + (*ppRes) = pBlock; + return code; } break; default: ASSERTS(false, "invalid SSDataBlock type"); @@ -1121,20 +1128,30 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { if (pInfo->pRes->info.rows == 0) { setOperatorCompleted(pOperator); resetStreamFillInfo(pInfo); - return NULL; + (*ppRes) = NULL; + return code; } pOperator->resultInfo.totalRows += pInfo->pRes->info.rows; printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pRes; + (*ppRes) = pInfo->pRes; + return code; _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setOperatorCompleted(pOperator); resetStreamFillInfo(pInfo); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamFillNext(pOperator, &pRes); + return pRes; } static int32_t initResultBuf(SStreamFillSupporter* pFillSup) { diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 85cbe8f519..bf4b16fe8b 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -1504,7 +1504,7 @@ _end: return code; } -static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { +static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; @@ -1517,11 +1517,13 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } else if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvGetAll) { @@ -1532,7 +1534,8 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); @@ -1542,18 +1545,21 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { clearStreamIntervalOperator(pInfo); qDebug("===stream===clear semi operator"); } - return NULL; + (*ppRes) = NULL; + return code; } else { if (!IS_FINAL_INTERVAL_OP(pOperator)) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvRetrive) { pInfo->recvRetrive = false; printDataBlock(pInfo->pMidRetriveRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pMidRetriveRes; + (*ppRes) = pInfo->pMidRetriveRes; + return code; } } } @@ -1569,7 +1575,8 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { while (1) { if (isTaskKilled(pTaskInfo)) { qInfo("===stream=== %s task is killed, code %s", GET_TASKID(pTaskInfo), tstrerror(pTaskInfo->code)); - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* pBlock = downstream->fpSet.getNextFn(downstream); @@ -1625,7 +1632,8 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { } else { pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; } - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } break; @@ -1652,7 +1660,8 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pAPI->stateStore.streamStateCommit(pInfo->pState); doStreamIntervalSaveCheckpoint(pOperator); @@ -1705,21 +1714,31 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvRetrive) { pInfo->recvRetrive = false; printDataBlock(pInfo->pMidRetriveRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pMidRetriveRes; + (*ppRes) = pInfo->pMidRetriveRes; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamFinalIntervalAggNext(pOperator, &pRes); + return pRes; } int64_t getDeleteMark(SWindowPhysiNode* pWinPhyNode, int64_t interval) { @@ -2205,15 +2224,11 @@ void removeSessionResult(SStreamAggSupporter* pAggSup, SSHashObj* pHashMap, SSHa void* pVal = tSimpleHashGet(pHashMap, &key, sizeof(SSessionKey)); if (pVal) { releaseOutputBuf(pAggSup->pState, *(void**)pVal, &pAggSup->pSessionAPI->stateStore); - code = tSimpleHashRemove(pHashMap, &key, sizeof(SSessionKey)); - if (code != TSDB_CODE_SUCCESS) { - qWarn("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - } - } - code = tSimpleHashRemove(pResMap, &key, sizeof(SSessionKey)); - if (code != TSDB_CODE_SUCCESS) { - qWarn("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + int32_t tmpRes = tSimpleHashRemove(pHashMap, &key, sizeof(SSessionKey)); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); } + int32_t tmpRes = tSimpleHashRemove(pResMap, &key, sizeof(SSessionKey)); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); } void getSessionHashKey(const SSessionKey* pKey, SSessionKey* pHashKey) { @@ -2322,10 +2337,8 @@ void doDeleteSessionWindow(SStreamAggSupporter* pAggSup, SSessionKey* pKey) { pAggSup->stateStore.streamStateSessionDel(pAggSup->pState, pKey); SSessionKey hashKey = {0}; getSessionHashKey(pKey, &hashKey); - int32_t code = tSimpleHashRemove(pAggSup->pResultRows, &hashKey, sizeof(SSessionKey)); - if (code != TSDB_CODE_SUCCESS) { - qTrace("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - } + int32_t tmpRes = tSimpleHashRemove(pAggSup->pResultRows, &hashKey, sizeof(SSessionKey)); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); } void setSessionWinOutputInfo(SSHashObj* pStUpdated, SResultWindowInfo* pWinInfo) { @@ -3242,7 +3255,7 @@ _end: return code; } -static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { +static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExprSupp* pSup = &pOperator->exprSupp; @@ -3252,11 +3265,13 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } else if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } if (pInfo->recvGetAll) { @@ -3267,11 +3282,13 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } SOperatorInfo* downstream = pOperator->pDownstream[0]; @@ -3324,7 +3341,8 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pAggSup->stateStore.streamStateCommit(pAggSup->pState); doStreamSessionSaveCheckpoint(pOperator); @@ -3403,15 +3421,24 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamSessionAggNext(pOperator, &pRes); + return pRes; } void streamSessionReleaseState(SOperatorInfo* pOperator) { @@ -3748,7 +3775,7 @@ _end: return code; } -static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { +static int32_t doStreamSessionSemiAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamSessionAggOperatorInfo* pInfo = pOperator->info; @@ -3760,13 +3787,15 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } { SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } if (pInfo->clearState) { @@ -3779,13 +3808,15 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } clearFunctionContext(&pOperator->exprSupp); // semi session operator clear disk buffer clearStreamSessionOperator(pInfo); setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } } @@ -3818,7 +3849,8 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pAggSup->stateStore.streamStateCommit(pAggSup->pState); doStreamSessionSaveCheckpoint(pOperator); @@ -3859,11 +3891,13 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { - return opRes; + (*ppRes) = opRes; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } @@ -3871,7 +3905,14 @@ _end: // semi session operator clear disk buffer clearStreamSessionOperator(pInfo); setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamSessionSemiAggNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, @@ -4248,8 +4289,8 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl code = appendDataToSpecialBlock(pAggSup->pScanBlock, &curWin.winInfo.sessionWin.win.skey, &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); QUERY_CHECK_CODE(code, lino, _end); - code = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); - QUERY_CHECK_CODE(code, lino, _end); + int32_t tmpRes = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); doDeleteSessionWindow(pAggSup, &curWin.winInfo.sessionWin); releaseOutputBuf(pAggSup->pState, curWin.winInfo.pStatePos, &pAPI->stateStore); @@ -4441,9 +4482,10 @@ static SSDataBlock* buildStateResult(SOperatorInfo* pOperator) { return NULL; } -static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { +static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; @@ -4456,7 +4498,8 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = buildStateResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvGetAll) { @@ -4467,11 +4510,13 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } SOperatorInfo* downstream = pOperator->pDownstream[0]; @@ -4503,7 +4548,8 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pInfo->streamAggSup.stateStore.streamStateCommit(pInfo->streamAggSup.pState); doStreamStateSaveCheckpoint(pOperator); @@ -4553,15 +4599,24 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { SSDataBlock* resBlock = buildStateResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamStateAggNext(pOperator, &pRes); + return pRes; } void streamStateReleaseState(SOperatorInfo* pOperator) { @@ -4798,7 +4853,7 @@ static void setInverFunction(SqlFunctionCtx* pCtx, int32_t num, EStreamType type } #endif -static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { +static int32_t doStreamIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; @@ -4809,13 +4864,15 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->recvGetAll) { @@ -4826,11 +4883,13 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { if (pInfo->reCkBlock) { pInfo->reCkBlock = false; printDataBlock(pInfo->pCheckpointRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pCheckpointRes; + (*ppRes) = pInfo->pCheckpointRes; + return code; } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } SOperatorInfo* downstream = pOperator->pDownstream[0]; @@ -4869,7 +4928,8 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { printDataBlock(pBlock, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_CHECKPOINT) { pAPI->stateStore.streamStateCommit(pInfo->pState); doStreamIntervalSaveCheckpoint(pOperator); @@ -4940,14 +5000,23 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { tSimpleHashCleanup(pInfo->pUpdatedMap); pInfo->pUpdatedMap = NULL; - return buildIntervalResult(pOperator); + (*ppRes) = buildIntervalResult(pOperator); + return code; _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } setStreamOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamIntervalAggNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, @@ -5230,7 +5299,7 @@ static SSDataBlock* buildMidIntervalResult(SOperatorInfo* pOperator) { return NULL; } -static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { +static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; @@ -5242,27 +5311,32 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { qDebug("stask:%s %s status: %d", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType), pOperator->status); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } else if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } setOperatorCompleted(pOperator); clearFunctionContext(&pOperator->exprSupp); clearStreamIntervalOperator(pInfo); qDebug("stask:%s ===stream===%s clear", GET_TASKID(pTaskInfo), getStreamOpName(pOperator->operatorType)); - return NULL; + (*ppRes) = NULL; + return code; } else { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } resBlock = buildMidIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->clearState) { @@ -5283,7 +5357,8 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { while (1) { if (isTaskKilled(pTaskInfo)) { qInfo("===stream=== %s task is killed, code %s", GET_TASKID(pTaskInfo), tstrerror(pTaskInfo->code)); - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* pBlock = downstream->fpSet.getNextFn(downstream); @@ -5329,11 +5404,13 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; } ASSERT(taosArrayGetSize(pInfo->pUpdated) == 0); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { - return pBlock; + (*ppRes) = pBlock; + return code; } else if (pBlock->info.type == STREAM_PULL_OVER) { code = processPullOver(pBlock, pInfo->pPullDataMap, pInfo->pFinalPullDataMap, &pInfo->interval, pInfo->pPullWins, pInfo->numOfChild, pOperator, &pInfo->recvPullover); @@ -5415,12 +5492,14 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } resBlock = buildMidIntervalResult(pOperator); if (resBlock != NULL) { - return resBlock; + (*ppRes) = resBlock; + return code; } if (pInfo->clearState) { @@ -5431,9 +5510,17 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { + pTaskInfo->code = code; qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } - return NULL; + (*ppRes) = NULL; + return code; +} + +static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStreamMidIntervalAggNext(pOperator, &pRes); + return pRes; } void setStreamOperatorCompleted(SOperatorInfo* pOperator) { diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index 4b247f871c..094e6575d1 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -1872,8 +1872,9 @@ static void getDBNameFromCondition(SNode* pCondition, const char* dbName) { nodesWalkExpr(pCondition, getDBNameFromConditionWalker, (char*)dbName); } -static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { +static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { // build message and send to mnode to fetch the content of system tables. + int32_t code = TSDB_CODE_SUCCESS; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SSysTableScanInfo* pInfo = pOperator->info; char dbName[TSDB_DB_NAME_LEN] = {0}; @@ -1881,7 +1882,8 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { while (1) { if (isTaskKilled(pOperator->pTaskInfo)) { setOperatorCompleted(pOperator); - return NULL; + (*ppRes) = NULL; + return code; } blockDataCleanup(pInfo->pRes); @@ -1923,13 +1925,21 @@ static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { if (pBlock->info.rows == 0) { continue; } - return pBlock; + (*ppRes) = pBlock; + return code; } else { - return NULL; + (*ppRes) = NULL; + return code; } } } +static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doSysTableScanNext(pOperator, &pRes); + return pRes; +} + static void sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScanInfo* pInfo, const char* name, SSDataBlock* pBlock) { int32_t code = TSDB_CODE_SUCCESS; @@ -2548,11 +2558,12 @@ static int32_t doGetTableRowSize(SReadHandle* pHandle, uint64_t uid, int32_t* ro return TSDB_CODE_SUCCESS; } -static SSDataBlock* doBlockInfoScan(SOperatorInfo* pOperator) { +static int32_t doBlockInfoScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SBlockDistInfo* pBlockScanInfo = pOperator->info; @@ -2602,7 +2613,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return pBlock; + (*ppRes) = pBlock; + return code; +} + +static SSDataBlock* doBlockInfoScan(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doBlockInfoScanNext(pOperator, &pRes); + return pRes; } static void destroyBlockDistScanOperatorInfo(void* param) { diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c index c2e7b16dea..58899c87ff 100644 --- a/source/libs/executor/src/timesliceoperator.c +++ b/source/libs/executor/src/timesliceoperator.c @@ -321,7 +321,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp char* v = colDataGetData(pSrc, index); code = colDataSetVal(pDst, pResBlock->info.rows, v, false); QUERY_CHECK_CODE(code, lino, _end); - } else if(!isSelectGroupConstValueFunc(pExprInfo)){ + } else if (!isSelectGroupConstValueFunc(pExprInfo)) { // use stored group key SGroupKeys* pkey = pSliceInfo->pPrevGroupKey; if (pkey->isNull == false) { @@ -331,7 +331,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp colDataSetNULL(pDst, rows); } } else { - int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; + int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; SGroupKeys* pkey = taosArrayGet(pSliceInfo->pPrevRow, srcSlot); if (pkey->isNull == false) { colDataSetVal(pDst, rows, pkey->pData, false); @@ -781,10 +781,10 @@ static void saveBlockStatus(STimeSliceOperatorInfo* pSliceInfo, SSDataBlock* pBl static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pSliceInfo, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo, bool ignoreNull) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; - SSDataBlock* pResBlock = pSliceInfo->pRes; - SInterval* pInterval = &pSliceInfo->interval; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SSDataBlock* pResBlock = pSliceInfo->pRes; + SInterval* pInterval = &pSliceInfo->interval; SColumnInfoData* pTsCol = taosArrayGet(pBlock->pDataBlock, pSliceInfo->tsCol.slotId); SColumnInfoData* pPkCol = NULL; @@ -988,12 +988,13 @@ static void doHandleTimeslice(SOperatorInfo* pOperator, SSDataBlock* pBlock) { copyPrevGroupKey(&pOperator->exprSupp, pSliceInfo->pPrevGroupKey, pBlock); } -static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) { +static int32_t doTimesliceNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } STimeSliceOperatorInfo* pSliceInfo = pOperator->info; @@ -1079,7 +1080,14 @@ _finished: T_LONG_JMP(pTaskInfo->env, code); } - return pResBlock->info.rows == 0 ? NULL : pResBlock; + (*ppRes) = pResBlock->info.rows == 0 ? NULL : pResBlock; + return code; +} + +static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doTimesliceNext(pOperator, &pRes); + return pRes; } static int32_t extractPkColumnFromFuncs(SNodeList* pFuncs, bool* pHasPk, SColumn* pPkColumn) { diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index e448cd8e3a..4d924d4a0b 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -811,9 +811,10 @@ void doCloseWindow(SResultRowInfo* pResultRowInfo, const SIntervalAggOperatorInf } } -SResultRowPosition addToOpenWindowList(SResultRowInfo* pResultRowInfo, const SResultRow* pResult, uint64_t groupId, SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; +SResultRowPosition addToOpenWindowList(SResultRowInfo* pResultRowInfo, const SResultRow* pResult, uint64_t groupId, + SExecTaskInfo* pTaskInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SOpenWindowInfo openWin = {0}; openWin.pos.pageId = pResult->pageId; openWin.pos.offset = pResult->offset; @@ -1053,36 +1054,28 @@ _end: return code; } -static SSDataBlock* doStateWindowAgg(SOperatorInfo* pOperator) { +static int32_t doStateWindowAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SStateWindowOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SOptrBasicInfo* pBInfo = &pInfo->binfo; - pTaskInfo->code = pOperator->fpSet._openFn(pOperator); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - setOperatorCompleted(pOperator); - return NULL; - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); - int32_t code = blockDataEnsureCapacity(pBInfo->pRes, pOperator->resultInfo.capacity); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - pTaskInfo->code = code; - T_LONG_JMP(pTaskInfo->env, code); - } + code = blockDataEnsureCapacity(pBInfo->pRes, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _end); while (1) { doBuildResultDatablock(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf); code = doFilter(pBInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - pTaskInfo->code = code; - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); bool hasRemain = hasRemainResults(&pInfo->groupResInfo); if (!hasRemain) { @@ -1096,31 +1089,42 @@ static SSDataBlock* doStateWindowAgg(SOperatorInfo* pOperator) { } pOperator->resultInfo.totalRows += pBInfo->pRes->info.rows; - return (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + (*ppRes) = (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + return code; } -static SSDataBlock* doBuildIntervalResult(SOperatorInfo* pOperator) { +static SSDataBlock* doStateWindowAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doStateWindowAggNext(pOperator, &pRes); + return pRes; +} + +static int32_t doBuildIntervalResultNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SIntervalAggOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* pBlock = pInfo->binfo.pRes; - pTaskInfo->code = pOperator->fpSet._openFn(pOperator); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - return NULL; - } + code = pOperator->fpSet._openFn(pOperator); + QUERY_CHECK_CODE(code, lino, _end); while (1) { doBuildResultDatablock(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf); - int32_t code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, NULL); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - pTaskInfo->code = code; - T_LONG_JMP(pTaskInfo->env, code); - } + code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); bool hasRemain = hasRemainResults(&pInfo->groupResInfo); if (!hasRemain) { @@ -1136,7 +1140,20 @@ static SSDataBlock* doBuildIntervalResult(SOperatorInfo* pOperator) { size_t rows = pBlock->info.rows; pOperator->resultInfo.totalRows += rows; - return (rows == 0) ? NULL : pBlock; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } + (*ppRes) = (rows == 0) ? NULL : pBlock; + return code; +} + +static SSDataBlock* doBuildIntervalResult(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doBuildIntervalResultNext(pOperator, &pRes); + return pRes; } static void destroyStateWindowOperatorInfo(void* param) { @@ -1429,9 +1446,10 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSessionAggOperator pRowSup->numOfRows, pBlock->info.rows, numOfOutput); } -static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { +static int32_t doSessionWindowAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return TSDB_CODE_SUCCESS; } int32_t code = TSDB_CODE_SUCCESS; @@ -1458,7 +1476,8 @@ static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { } } pOperator->resultInfo.totalRows += pBInfo->pRes->info.rows; - return (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + (*ppRes) = (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + return code; } int64_t st = taosGetTimestampUs(); @@ -1519,7 +1538,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + (*ppRes) = (pBInfo->pRes->info.rows == 0) ? NULL : pBInfo->pRes; + return code; +} + +static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doSessionWindowAggNext(pOperator, &pRes); + return pRes; } // todo make this as an non-blocking operator @@ -1883,13 +1909,14 @@ _end: } } -static SSDataBlock* mergeAlignedIntervalAgg(SOperatorInfo* pOperator) { - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - +static int32_t mergeAlignedIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t code = TSDB_CODE_SUCCESS; SMergeAlignedIntervalAggOperatorInfo* pMiaInfo = pOperator->info; SIntervalAggOperatorInfo* iaInfo = pMiaInfo->intervalAggOperatorInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* pRes = iaInfo->binfo.pRes; @@ -1913,7 +1940,14 @@ static SSDataBlock* mergeAlignedIntervalAgg(SOperatorInfo* pOperator) { size_t rows = pRes->info.rows; pOperator->resultInfo.totalRows += rows; - return (rows == 0) ? NULL : pRes; + (*ppRes) = (rows == 0) ? NULL : pRes; + return code; +} + +static SSDataBlock* mergeAlignedIntervalAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = mergeAlignedIntervalAggNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, @@ -2151,7 +2185,7 @@ static void doMergeIntervalAggImpl(SOperatorInfo* pOperatorInfo, SResultRowInfo* } } -static SSDataBlock* doMergeIntervalAgg(SOperatorInfo* pOperator) { +static int32_t doMergeIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -2161,7 +2195,8 @@ static SSDataBlock* doMergeIntervalAgg(SOperatorInfo* pOperator) { SExprSupp* pExpSupp = &pOperator->exprSupp; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + (*ppRes) = NULL; + return code; } SSDataBlock* pRes = iaInfo->binfo.pRes; @@ -2231,7 +2266,14 @@ _end: pTaskInfo->code = code; T_LONG_JMP(pTaskInfo->env, code); } - return (rows == 0) ? NULL : pRes; + (*ppRes) = (rows == 0) ? NULL : pRes; + return code; +} + +static SSDataBlock* doMergeIntervalAgg(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doMergeIntervalAggNext(pOperator, &pRes); + return pRes; } SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, diff --git a/source/util/src/tsched.c b/source/util/src/tsched.c index 603547e30b..04d903491b 100644 --- a/source/util/src/tsched.c +++ b/source/util/src/tsched.c @@ -27,8 +27,10 @@ static void *taosProcessSchedQueue(void *param); static void taosDumpSchedulerStatus(void *qhandle, void *tmrId); void *taosInitScheduler(int32_t queueSize, int32_t numOfThreads, const char *label, SSchedQueue *pSched) { - bool schedMalloced = false; - + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + bool schedMalloced = false; + if (NULL == pSched) { pSched = (SSchedQueue *)taosMemoryCalloc(sizeof(SSchedQueue), 1); if (pSched == NULL) { @@ -95,23 +97,32 @@ void *taosInitScheduler(int32_t queueSize, int32_t numOfThreads, const char *lab atomic_store_8(&pSched->stop, 0); for (int32_t i = 0; i < numOfThreads; ++i) { TdThreadAttr attr; - taosThreadAttrInit(&attr); - taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_JOINABLE); - int32_t code = taosThreadCreate(pSched->qthread + i, &attr, taosProcessSchedQueue, (void *)pSched); - taosThreadAttrDestroy(&attr); - if (code != 0) { - uError("%s: failed to create rpc thread(%s)", label, strerror(errno)); - taosCleanUpScheduler(pSched); - if (schedMalloced) { - taosMemoryFree(pSched); - } - return NULL; - } + code = taosThreadAttrInit(&attr); + QUERY_CHECK_CODE(code, lino, _end); + + code = taosThreadAttrSetDetachState(&attr, PTHREAD_CREATE_JOINABLE); + QUERY_CHECK_CODE(code, lino, _end); + + code = taosThreadCreate(pSched->qthread + i, &attr, taosProcessSchedQueue, (void *)pSched); + QUERY_CHECK_CODE(code, lino, _end); + + (void)taosThreadAttrDestroy(&attr); ++pSched->numOfThreads; } uDebug("%s scheduler is initialized, numOfThreads:%d", label, pSched->numOfThreads); +_end: + if (code != TSDB_CODE_SUCCESS) { + taosCleanUpScheduler(pSched); + if (schedMalloced) { + taosMemoryFree(pSched); + } + terrno = code; + uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return NULL; + } + return (void *)pSched; } @@ -220,22 +231,22 @@ void taosCleanUpScheduler(void *param) { for (int32_t i = 0; i < pSched->numOfThreads; ++i) { if (taosCheckPthreadValid(pSched->qthread[i])) { - tsem_post(&pSched->fullSem); + (void)tsem_post(&pSched->fullSem); } } for (int32_t i = 0; i < pSched->numOfThreads; ++i) { if (taosCheckPthreadValid(pSched->qthread[i])) { - taosThreadJoin(pSched->qthread[i], NULL); + (void)taosThreadJoin(pSched->qthread[i], NULL); taosThreadClear(&pSched->qthread[i]); } } - tsem_destroy(&pSched->emptySem); - tsem_destroy(&pSched->fullSem); - taosThreadMutexDestroy(&pSched->queueMutex); + (void)tsem_destroy(&pSched->emptySem); + (void)tsem_destroy(&pSched->fullSem); + (void)taosThreadMutexDestroy(&pSched->queueMutex); if (pSched->pTimer) { - taosTmrStop(pSched->pTimer); + (void)taosTmrStop(pSched->pTimer); pSched->pTimer = NULL; } From 19467bc9029b36783c8cfdea6bc304e235194cfc Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 24 Jul 2024 16:37:10 +0800 Subject: [PATCH 18/35] adj operator result --- source/libs/executor/src/scanoperator.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 1c3881b8ae..c8fa1cbbc0 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -3446,10 +3446,7 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { SSDataBlock* pBlock = NULL; code = pAPI->tsdReader.tsdReaderRetrieveDataBlock(pInfo->dataReader, &pBlock, NULL); - if (pBlock == NULL || code != TSDB_CODE_SUCCESS) { - code = terrno; - QUERY_CHECK_CODE(code, lino, _end); - } + QUERY_CHECK_CODE(code, lino, _end); if (pBlock && pBlock->info.rows > 0) { bool hasPrimaryKey = pAPI->snapshotFn.taosXGetTablePrimaryKey(pInfo->sContext); From 3c41b5a98c599e7d52a6a3e493d0ac4d6ff2c8fb Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Wed, 24 Jul 2024 17:22:00 +0800 Subject: [PATCH 19/35] use new macros --- source/dnode/vnode/src/tsdb/tsdbCache.c | 599 ++++++++++++------------ 1 file changed, 302 insertions(+), 297 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 91345bf001..459ad39819 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -39,7 +39,8 @@ static int32_t tsdbOpenBCache(STsdb *pTsdb) { _err: if (code) { - tsdbError("tsdb/bcache: vgId:%d, open failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); + tsdbError("tsdb/bcache: vgId:%d, %s failed at line %d since %s.", TD_VID(pTsdb->pVnode), __func__, lino, + tstrerror(code)); } TAOS_RETURN(code); @@ -159,12 +160,11 @@ static int myCmp(void *state, const char *a, size_t alen, const char *b, size_t } static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { - int32_t code = 0; + int32_t code = 0, lino = 0; rocksdb_comparator_t *cmp = rocksdb_comparator_create(NULL, myCmpDestroy, myCmp, myCmpName); if (NULL == cmp) { - code = TSDB_CODE_OUT_OF_MEMORY; - return code; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } rocksdb_cache_t *cache = rocksdb_cache_create_lru(5 * 1024 * 1024); @@ -175,8 +175,7 @@ static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { rocksdb_options_t *options = rocksdb_options_create(); if (NULL == options) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } rocksdb_options_set_create_if_missing(options, 1); @@ -189,15 +188,13 @@ static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { rocksdb_writeoptions_t *writeoptions = rocksdb_writeoptions_create(); if (NULL == writeoptions) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err2; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err2); } rocksdb_writeoptions_disable_WAL(writeoptions, 1); rocksdb_readoptions_t *readoptions = rocksdb_readoptions_create(); if (NULL == readoptions) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err3; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err3); } char *err = NULL; @@ -209,14 +206,12 @@ static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { tsdbError("vgId:%d, %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, __LINE__, err); rocksdb_free(err); - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err4; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err4); } rocksdb_flushoptions_t *flushoptions = rocksdb_flushoptions_create(); if (NULL == flushoptions) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err5; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err5); } rocksdb_writebatch_t *writebatch = rocksdb_writebatch_create(); @@ -235,7 +230,7 @@ static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { pTsdb->rCache.pTSchema = NULL; - return code; + TAOS_RETURN(code); _err5: rocksdb_close(pTsdb->rCache.db); @@ -249,7 +244,8 @@ _err2: rocksdb_cache_destroy(cache); _err: rocksdb_comparator_destroy(cmp); - return code; + + TAOS_RETURN(code); } static void tsdbCloseRocksCache(STsdb *pTsdb) { @@ -344,24 +340,26 @@ static int32_t tsdbCacheDeserializeV0(char const *value, SLastCol *pLastCol) { } } -static SLastCol *tsdbCacheDeserialize(char const *value, size_t size) { +static int32_t tsdbCacheDeserialize(char const *value, size_t size, SLastCol **ppLastCol) { if (!value) { - return NULL; + return TSDB_CODE_INVALID_PARA; } SLastCol *pLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); if (NULL == pLastCol) { - return NULL; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } int32_t offset = tsdbCacheDeserializeV0(value, pLastCol); if (offset == size) { // version 0 - return pLastCol; + *ppLastCol = pLastCol; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } else if (offset > size) { - terrno = TSDB_CODE_INVALID_DATA_FMT; taosMemoryFreeClear(pLastCol); - return NULL; + + TAOS_RETURN(TSDB_CODE_INVALID_DATA_FMT); } // version @@ -387,12 +385,14 @@ static SLastCol *tsdbCacheDeserialize(char const *value, size_t size) { } if (offset > size) { - terrno = TSDB_CODE_INVALID_DATA_FMT; taosMemoryFreeClear(pLastCol); - return NULL; + + TAOS_RETURN(TSDB_CODE_INVALID_DATA_FMT); } - return pLastCol; + *ppLastCol = pLastCol; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } /* @@ -430,7 +430,7 @@ static int32_t tsdbCacheSerializeV0(char const *value, SLastCol *pLastCol) { return 0; } -static void tsdbCacheSerialize(SLastCol *pLastCol, char **value, size_t *size) { +static int32_t tsdbCacheSerialize(SLastCol *pLastCol, char **value, size_t *size) { *size = sizeof(SLastColV0); if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { *size += pLastCol->colVal.value.nData; @@ -445,6 +445,9 @@ static void tsdbCacheSerialize(SLastCol *pLastCol, char **value, size_t *size) { } *value = taosMemoryMalloc(*size); + if (NULL == *value) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } int32_t offset = tsdbCacheSerializeV0(*value, pLastCol); @@ -467,16 +470,22 @@ static void tsdbCacheSerialize(SLastCol *pLastCol, char **value, size_t *size) { offset += pLastCol->rowKey.pks[i].nData; } } + + TAOS_RETURN(TSDB_CODE_SUCCESS); } static void tsdbCachePutBatch(SLastCol *pLastCol, const void *key, size_t klen, SCacheFlushState *state) { + int32_t code = 0; STsdb *pTsdb = state->pTsdb; SRocksCache *rCache = &pTsdb->rCache; rocksdb_writebatch_t *wb = rCache->writebatch; char *rocks_value = NULL; size_t vlen = 0; - tsdbCacheSerialize(pLastCol, &rocks_value, &vlen); + code = tsdbCacheSerialize(pLastCol, &rocks_value, &vlen); + if (code) { + tsdbError("tsdb/cache: vgId:%d, serialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } taosThreadMutexLock(&rCache->rMutex); @@ -534,25 +543,31 @@ int32_t tsdbCacheCommit(STsdb *pTsdb) { if (NULL != err) { tsdbError("vgId:%d, %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, __LINE__, err); rocksdb_free(err); - code = -1; + code = TSDB_CODE_FAILED; } - return code; + TAOS_RETURN(code); } -static void reallocVarDataVal(SValue *pValue) { +static int32_t reallocVarDataVal(SValue *pValue) { if (IS_VAR_DATA_TYPE(pValue->type)) { uint8_t *pVal = pValue->pData; if (pValue->nData > 0) { - pValue->pData = taosMemoryMalloc(pValue->nData); + uint8_t *p = taosMemoryMalloc(pValue->nData); + if (!p) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } + pValue->pData = p; memcpy(pValue->pData, pVal, pValue->nData); } else { pValue->pData = NULL; } } + + TAOS_RETURN(TSDB_CODE_SUCCESS); } -static void reallocVarData(SColVal *pColVal) { reallocVarDataVal(&pColVal->value); } +static int32_t reallocVarData(SColVal *pColVal) { return reallocVarDataVal(&pColVal->value); } static void tsdbCacheDeleter(const void *key, size_t klen, void *value, void *ud) { SLastCol *pLastCol = (SLastCol *)value; @@ -587,6 +602,9 @@ static int32_t tsdbCacheNewTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, i SLastCol *pLastCol = &noneCol; SLastCol *pTmpLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); + if (!pTmpLastCol) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } *pTmpLastCol = *pLastCol; pLastCol = pTmpLastCol; @@ -595,13 +613,13 @@ static int32_t tsdbCacheNewTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, i for (int8_t i = 0; i < pLastCol->rowKey.numOfPKs; i++) { SValue *pValue = &pLastCol->rowKey.pks[i]; if (IS_VAR_DATA_TYPE(pValue->type)) { - reallocVarDataVal(pValue); + TAOS_CHECK_RETURN(reallocVarDataVal(pValue)); charge += pValue->nData; } } if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { - reallocVarData(&pLastCol->colVal); + TAOS_CHECK_RETURN(reallocVarData(&pLastCol->colVal)); charge += pLastCol->colVal.value.nData; } @@ -609,20 +627,10 @@ static int32_t tsdbCacheNewTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, i LRUStatus status = taosLRUCacheInsert(pCache, pLastKey, ROCKS_KEY_LEN, pLastCol, charge, tsdbCacheDeleter, NULL, TAOS_LRU_PRIORITY_LOW, &pTsdb->flushState); if (status != TAOS_LRU_STATUS_OK) { - code = -1; + // code = -1; } - /* - // store result back to rocks cache - char *value = NULL; - size_t vlen = 0; - tsdbCacheSerialize(pLastCol, &value, &vlen); - SLastKey *key = pLastKey; - size_t klen = ROCKS_KEY_LEN; - rocksdb_writebatch_put(wb, (char *)key, klen, value, vlen); - taosMemoryFree(value); - */ - return code; + TAOS_RETURN(code); } int32_t tsdbCacheCommitNoLock(STsdb *pTsdb) { @@ -641,10 +649,10 @@ int32_t tsdbCacheCommitNoLock(STsdb *pTsdb) { if (NULL != err) { tsdbError("vgId:%d, %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, __LINE__, err); rocksdb_free(err); - code = -1; + code = TSDB_CODE_FAILED; } - return code; + TAOS_RETURN(code); } static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool hasPrimaryKey) { @@ -681,13 +689,21 @@ static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, rocksdb_writebatch_t *wb = pTsdb->rCache.writebatch; { - SLastCol *pLastCol = tsdbCacheDeserialize(values_list[0], values_list_sizes[0]); + SLastCol *pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[0], values_list_sizes[0], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } if (NULL != pLastCol) { rocksdb_writebatch_delete(wb, keys_list[0], klen); } taosMemoryFreeClear(pLastCol); - pLastCol = tsdbCacheDeserialize(values_list[1], values_list_sizes[1]); + pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[1], values_list_sizes[1], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } if (NULL != pLastCol) { rocksdb_writebatch_delete(wb, keys_list[1], klen); } @@ -724,7 +740,7 @@ static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, taosMemoryFree(values_list); taosMemoryFree(values_list_sizes); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrapper *pSchemaRow) { @@ -745,8 +761,8 @@ int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrap code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, -1, &pTSchema); if (code != TSDB_CODE_SUCCESS) { taosThreadMutexUnlock(&pTsdb->lruMutex); - terrno = code; - return -1; + + TAOS_RETURN(code); } for (int i = 0; i < pTSchema->numOfCols; ++i) { @@ -762,7 +778,7 @@ int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrap taosThreadMutexUnlock(&pTsdb->lruMutex); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrapper *pSchemaRow) { @@ -788,8 +804,9 @@ int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWra STSchema *pTSchema = NULL; code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, -1, &pTSchema); if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return -1; + taosThreadMutexUnlock(&pTsdb->lruMutex); + + TAOS_RETURN(code); } bool hasPrimayKey = false; @@ -811,7 +828,7 @@ int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWra taosThreadMutexUnlock(&pTsdb->lruMutex); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { @@ -824,9 +841,11 @@ int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { STSchema *pTSchema = NULL; code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, suid, -1, &pTSchema); if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return -1; + taosThreadMutexUnlock(&pTsdb->lruMutex); + + TAOS_RETURN(code); } + for (int i = 0; i < TARRAY_SIZE(uids); ++i) { int64_t uid = ((tb_uid_t *)TARRAY_DATA(uids))[i]; @@ -850,7 +869,7 @@ int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { taosThreadMutexUnlock(&pTsdb->lruMutex); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheNewNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int8_t col_type) { @@ -865,7 +884,7 @@ int32_t tsdbCacheNewNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int8_t taosThreadMutexUnlock(&pTsdb->lruMutex); //(void)tsdbCacheCommit(pTsdb); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheDropNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool hasPrimayKey) { @@ -881,7 +900,7 @@ int32_t tsdbCacheDropNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool h taosThreadMutexUnlock(&pTsdb->lruMutex); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheNewSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, int8_t col_type) { @@ -900,7 +919,7 @@ int32_t tsdbCacheNewSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, int8_t taosThreadMutexUnlock(&pTsdb->lruMutex); //(void)tsdbCacheCommit(pTsdb); - return code; + TAOS_RETURN(code); } int32_t tsdbCacheDropSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, bool hasPrimayKey) { @@ -920,7 +939,7 @@ int32_t tsdbCacheDropSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, bool taosThreadMutexUnlock(&pTsdb->lruMutex); - return code; + TAOS_RETURN(code); } typedef struct { @@ -955,7 +974,8 @@ static int32_t tsdbCacheUpdateValue(SValue *pOld, SValue *pNew) { } taosMemoryFreeClear(pFree); - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } static void tsdbCacheUpdateLastCol(SLastCol *pLastCol, SRowKey *pRowKey, SColVal *pColVal) { @@ -981,10 +1001,10 @@ static void tsdbCacheUpdateLastCol(SLastCol *pLastCol, SRowKey *pRowKey, SColVal static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray *updCtxArray) { if (!updCtxArray || TARRAY_SIZE(updCtxArray) == 0) { - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } - int32_t code = 0; + int32_t code = 0, lino = 0; int num_keys = TARRAY_SIZE(updCtxArray); SArray *remainCols = NULL; @@ -1049,7 +1069,11 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray SRowKey *pRowKey = &updCtx->tsdbRowKey.key; SColVal *pColVal = &updCtx->colVal; - SLastCol *pLastCol = tsdbCacheDeserialize(values_list[i], values_list_sizes[i]); + SLastCol *pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[i], values_list_sizes[i], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } SLastCol *PToFree = pLastCol; if (IS_LAST_KEY(idxKey->key) && !COL_VAL_IS_VALUE(pColVal)) { @@ -1067,7 +1091,10 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray char *value = NULL; size_t vlen = 0; SLastCol lastColTmp = {.rowKey = *pRowKey, .colVal = *pColVal}; - tsdbCacheSerialize(&lastColTmp, &value, &vlen); + code = tsdbCacheSerialize(&lastColTmp, &value, &vlen); + if (code) { + tsdbError("tsdb/cache: vgId:%d, serialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } taosThreadMutexLock(&pTsdb->rCache.rMutex); @@ -1084,13 +1111,13 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray for (int8_t i = 0; i < pLastCol->rowKey.numOfPKs; i++) { SValue *pValue = &pLastCol->rowKey.pks[i]; if (IS_VAR_DATA_TYPE(pValue->type)) { - reallocVarDataVal(pValue); + TAOS_CHECK_GOTO(reallocVarDataVal(pValue), &lino, _exit); charge += pValue->nData; } } if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { - reallocVarData(&pLastCol->colVal); + TAOS_CHECK_GOTO(reallocVarData(&pLastCol->colVal), &lino, _exit); charge += pLastCol->colVal.value.nData; } @@ -1117,15 +1144,19 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray taosArrayDestroy(remainCols); } +_exit: taosThreadMutexUnlock(&pTsdb->lruMutex); -_exit: - return code; + if (code) { + tsdbError("tsdb/cache: vgId:%d, update failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); + } + + TAOS_RETURN(code); } int32_t tsdbCacheRowFormatUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, int64_t version, int32_t nRow, SRow **aRow) { - int32_t code = 0; + int32_t code = 0, lino = 0; // 1. prepare last TSDBROW lRow = {.type = TSDBROW_ROW_FMT, .pTSRow = aRow[nRow - 1], .version = version}; @@ -1135,11 +1166,7 @@ int32_t tsdbCacheRowFormatUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, int6 SArray *ctxArray = NULL; SSHashObj *iColHash = NULL; - code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - goto _exit; - } + TAOS_CHECK_GOTO(metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema), &lino, _exit); TSDBROW tRow = {.type = TSDBROW_ROW_FMT, .version = version}; int32_t nCol = pTSchema->numOfCols; @@ -1200,7 +1227,8 @@ _exit: taosMemoryFreeClear(pTSchema); taosArrayDestroy(ctxArray); tSimpleHashCleanup(iColHash); - return code; + + TAOS_RETURN(code); } int32_t tsdbCacheColFormatUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SBlockData *pBlockData) { @@ -1212,11 +1240,7 @@ int32_t tsdbCacheColFormatUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SBlo int32_t sver = TSDBROW_SVERSION(&lRow); SArray *ctxArray = NULL; - code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - goto _exit; - } + TAOS_CHECK_RETURN(metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema)); ctxArray = taosArrayInit(pBlockData->nColData, sizeof(SLastUpdateCtx)); @@ -1272,7 +1296,8 @@ int32_t tsdbCacheColFormatUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SBlo _exit: taosMemoryFreeClear(pTSchema); taosArrayDestroy(ctxArray); - return 0; + + TAOS_RETURN(code); } static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCacheRowsReader *pr, int16_t *aCols, @@ -1362,7 +1387,7 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr .colVal = COL_VAL_NONE(idxKey->key.cid, pr->pSchema->columns[slotIds[i]].type)}; if (!pLastCol) { pLastCol = &noneCol; - reallocVarData(&pLastCol->colVal); + TAOS_CHECK_RETURN(reallocVarData(&pLastCol->colVal)); } taosArraySet(pLastArray, idxKey->idx, pLastCol); @@ -1383,12 +1408,12 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr for (int8_t i = 0; i < pLastCol->rowKey.numOfPKs; i++) { SValue *pValue = &pLastCol->rowKey.pks[i]; if (IS_VAR_DATA_TYPE(pValue->type)) { - reallocVarDataVal(pValue); + TAOS_CHECK_RETURN(reallocVarDataVal(pValue)); charge += pValue->nData; } } if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { - reallocVarData(&pLastCol->colVal); + TAOS_CHECK_RETURN(reallocVarData(&pLastCol->colVal)); charge += pLastCol->colVal.value.nData; } @@ -1402,7 +1427,10 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr wb = pTsdb->rCache.rwritebatch; char *value = NULL; size_t vlen = 0; - tsdbCacheSerialize(pLastCol, &value, &vlen); + code = tsdbCacheSerialize(pLastCol, &value, &vlen); + if (code) { + tsdbError("tsdb/cache: vgId:%d, serialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } SLastKey *key = &idxKey->key; size_t klen = ROCKS_KEY_LEN; @@ -1428,7 +1456,7 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr taosMemoryFree(slotIds); - return code; + TAOS_RETURN(code); } static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SArray *remainCols, @@ -1461,7 +1489,11 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA SLRUCache *pCache = pTsdb->lruCache; for (int i = 0, j = 0; i < num_keys && j < TARRAY_SIZE(remainCols); ++i) { - SLastCol *pLastCol = tsdbCacheDeserialize(values_list[i], values_list_sizes[i]); + SLastCol *pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[i], values_list_sizes[i], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } SLastCol *PToFree = pLastCol; SIdxKey *idxKey = &((SIdxKey *)TARRAY_DATA(remainCols))[j]; if (pLastCol) { @@ -1473,12 +1505,12 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA for (int8_t i = 0; i < pLastCol->rowKey.numOfPKs; i++) { SValue *pValue = &pLastCol->rowKey.pks[i]; if (IS_VAR_DATA_TYPE(pValue->type)) { - reallocVarDataVal(pValue); + TAOS_CHECK_RETURN(reallocVarDataVal(pValue)); charge += pValue->nData; } } if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { - reallocVarData(&pLastCol->colVal); + TAOS_CHECK_RETURN(reallocVarData(&pLastCol->colVal)); charge += pLastCol->colVal.value.nData; } @@ -1490,9 +1522,9 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA SLastCol lastCol = *pLastCol; for (int8_t i = 0; i < lastCol.rowKey.numOfPKs; i++) { - reallocVarDataVal(&lastCol.rowKey.pks[i]); + TAOS_CHECK_RETURN(reallocVarDataVal(&lastCol.rowKey.pks[i])); } - reallocVarData(&lastCol.colVal); + TAOS_CHECK_RETURN(reallocVarData(&lastCol.colVal)); taosArraySet(pLastArray, idxKey->idx, &lastCol); taosArrayRemove(remainCols, j); @@ -1515,7 +1547,7 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA code = tsdbCacheLoadFromRaw(pTsdb, uid, pLastArray, remainCols, pr, ltype); } - return code; + TAOS_RETURN(code); } int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCacheRowsReader *pr, int8_t ltype) { @@ -1545,9 +1577,9 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache SLastCol lastCol = *pLastCol; for (int8_t j = 0; j < lastCol.rowKey.numOfPKs; j++) { - reallocVarDataVal(&lastCol.rowKey.pks[j]); + TAOS_CHECK_RETURN(reallocVarDataVal(&lastCol.rowKey.pks[j])); } - reallocVarData(&lastCol.colVal); + TAOS_CHECK_RETURN(reallocVarData(&lastCol.colVal)); taosArrayPush(pLastArray, &lastCol); taosLRUCacheRelease(pCache, h, false); @@ -1574,9 +1606,17 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache SLastCol lastCol = *pLastCol; for (int8_t j = 0; j < lastCol.rowKey.numOfPKs; j++) { - reallocVarDataVal(&lastCol.rowKey.pks[j]); + code = reallocVarDataVal(&lastCol.rowKey.pks[j]); + if (code) { + taosThreadMutexUnlock(&pTsdb->lruMutex); + TAOS_RETURN(code); + } + } + code = reallocVarData(&lastCol.colVal); + if (code) { + taosThreadMutexUnlock(&pTsdb->lruMutex); + TAOS_RETURN(code); } - reallocVarData(&lastCol.colVal); taosArraySet(pLastArray, idxKey->idx, &lastCol); taosLRUCacheRelease(pCache, h, false); @@ -1597,7 +1637,7 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache } } - return code; + TAOS_RETURN(code); } int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKEY eKey) { @@ -1605,11 +1645,8 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE // fetch schema STSchema *pTSchema = NULL; int sver = -1; - code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return -1; - } + + TAOS_CHECK_RETURN(metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema)); // build keys & multi get from rocks int num_keys = pTSchema->numOfCols; @@ -1652,14 +1689,22 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE rocksdb_writebatch_t *wb = pTsdb->rCache.writebatch; for (int i = 0; i < num_keys; ++i) { - SLastCol *pLastCol = tsdbCacheDeserialize(values_list[i], values_list_sizes[i]); + SLastCol *pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[i], values_list_sizes[i], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } taosThreadMutexLock(&pTsdb->rCache.rMutex); if (NULL != pLastCol && (pLastCol->rowKey.ts <= eKey && pLastCol->rowKey.ts >= sKey)) { rocksdb_writebatch_delete(wb, keys_list[i], klen); } taosMemoryFreeClear(pLastCol); - pLastCol = tsdbCacheDeserialize(values_list[i + num_keys], values_list_sizes[i + num_keys]); + pLastCol = NULL; + code = tsdbCacheDeserialize(values_list[i + num_keys], values_list_sizes[i + num_keys], &pLastCol); + if (code) { + tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); + } if (NULL != pLastCol && (pLastCol->rowKey.ts <= eKey && pLastCol->rowKey.ts >= sKey)) { rocksdb_writebatch_delete(wb, keys_list[num_keys + i], klen); } @@ -1719,37 +1764,24 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE _exit: taosMemoryFree(pTSchema); - return code; + TAOS_RETURN(code); } int32_t tsdbOpenCache(STsdb *pTsdb) { - int32_t code = 0; + int32_t code = 0, lino = 0; SLRUCache *pCache = NULL; size_t cfgCapacity = pTsdb->pVnode->config.cacheLastSize * 1024 * 1024; pCache = taosLRUCacheInit(cfgCapacity, 0, .5); if (pCache == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } - code = tsdbOpenBCache(pTsdb); - if (code != TSDB_CODE_SUCCESS) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; - } + TAOS_CHECK_GOTO(tsdbOpenBCache(pTsdb), &lino, _err); - code = tsdbOpenPgCache(pTsdb); - if (code != TSDB_CODE_SUCCESS) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; - } + TAOS_CHECK_GOTO(tsdbOpenPgCache(pTsdb), &lino, _err); - code = tsdbOpenRocksCache(pTsdb); - if (code != TSDB_CODE_SUCCESS) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; - } + TAOS_CHECK_GOTO(tsdbOpenRocksCache(pTsdb), &lino, _err); taosLRUCacheSetStrictCapacity(pCache, false); @@ -1759,8 +1791,13 @@ int32_t tsdbOpenCache(STsdb *pTsdb) { pTsdb->flushState.flush_count = 0; _err: + if (code) { + tsdbError("tsdb/cache: vgId:%d, open failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); + } + pTsdb->lruCache = pCache; - return code; + + TAOS_RETURN(code); } void tsdbCloseCache(STsdb *pTsdb) { @@ -1818,7 +1855,7 @@ static int32_t getTableDelDataFromDelIdx(SDelFReader *pDelReader, SDelIdx *pDelI code = tsdbReadDelDatav1(pDelReader, pDelIdx, aDelData, INT64_MAX); } - return code; + TAOS_RETURN(code); } static int32_t getTableDelDataFromTbData(STbData *pTbData, SArray *aDelData) { @@ -1895,7 +1932,7 @@ static int32_t loadTombFromBlk(const TTombBlkArray *pTombBlkArray, SCacheRowsRea code = isFile ? tsdbDataFileReadTombBlock(pFileReader, &pTombBlkArray->data[i], &block) : tsdbSttFileReadTombBlock(pFileReader, &pTombBlkArray->data[i], &block); if (code != TSDB_CODE_SUCCESS) { - return code; + TAOS_RETURN(code); } uint64_t uid = uidList[j]; @@ -1959,37 +1996,28 @@ static int32_t loadTombFromBlk(const TTombBlkArray *pTombBlkArray, SCacheRowsRea tTombBlockDestroy(&block); if (finished) { - return code; + TAOS_RETURN(code); } } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t loadDataTomb(SCacheRowsReader *pReader, SDataFileReader *pFileReader) { - int32_t code = 0; - const TTombBlkArray *pBlkArray = NULL; - code = tsdbDataFileReadTombBlk(pFileReader, &pBlkArray); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - return loadTombFromBlk(pBlkArray, pReader, pFileReader, true); + TAOS_CHECK_RETURN(tsdbDataFileReadTombBlk(pFileReader, &pBlkArray)); + + TAOS_RETURN(loadTombFromBlk(pBlkArray, pReader, pFileReader, true)); } static int32_t loadSttTomb(STsdbReader *pTsdbReader, SSttFileReader *pSttFileReader, SSttBlockLoadInfo *pLoadInfo) { - int32_t code = 0; - - SCacheRowsReader *pReader = (SCacheRowsReader *)pTsdbReader; - + SCacheRowsReader *pReader = (SCacheRowsReader *)pTsdbReader; const TTombBlkArray *pBlkArray = NULL; - code = tsdbSttFileReadTombBlk(pSttFileReader, &pBlkArray); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - return loadTombFromBlk(pBlkArray, pReader, pSttFileReader, false); + TAOS_CHECK_RETURN(tsdbSttFileReadTombBlk(pSttFileReader, &pBlkArray)); + + TAOS_RETURN(loadTombFromBlk(pBlkArray, pReader, pSttFileReader, false)); } typedef struct { @@ -2022,14 +2050,11 @@ static int32_t lastIterOpen(SFSLastIter *iter, STFileSet *pFileSet, STsdb *pTsdb .pCurRowKey = &pr->rowKey, }; - code = tMergeTreeOpen2(&iter->mergeTree, &conf, NULL); - if (code != TSDB_CODE_SUCCESS) { - return -1; - } + TAOS_CHECK_RETURN(tMergeTreeOpen2(&iter->mergeTree, &conf, NULL)); iter->pMergeTree = &iter->mergeTree; - return code; + TAOS_RETURN(code); } static int32_t lastIterClose(SFSLastIter **iter) { @@ -2042,7 +2067,7 @@ static int32_t lastIterClose(SFSLastIter **iter) { *iter = NULL; - return code; + TAOS_RETURN(code); } static int32_t lastIterNext(SFSLastIter *iter, TSDBROW **ppRow) { @@ -2051,12 +2076,13 @@ static int32_t lastIterNext(SFSLastIter *iter, TSDBROW **ppRow) { bool hasVal = tMergeTreeNext(iter->pMergeTree); if (!hasVal) { *ppRow = NULL; - return code; + + TAOS_RETURN(code); } *ppRow = tMergeTreeGetRow(iter->pMergeTree); - return code; + TAOS_RETURN(code); } typedef enum SFSNEXTROWSTATES { @@ -2107,8 +2133,8 @@ static void clearLastFileSet(SFSNextRowIter *state); static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlierTs, bool isLast, int16_t *aCols, int nCols) { + int32_t code = 0, lino = 0; SFSNextRowIter *state = (SFSNextRowIter *)iter; - int32_t code = 0; STsdb *pTsdb = state->pr->pTsdb; if (SFSNEXTROW_FS == state->state) { @@ -2123,7 +2149,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie if (--state->iFileSet < 0) { *ppRow = NULL; - return code; + + TAOS_RETURN(code); } else { state->pFileSet = TARRAY2_GET(state->aDFileSet, state->iFileSet); } @@ -2153,19 +2180,13 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie filesName[3] = pFileObj[3]->fname; } - code = tsdbDataFileReaderOpen(filesName, &conf, &state->pr->pFileReader); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(tsdbDataFileReaderOpen(filesName, &conf, &state->pr->pFileReader), &lino, _err); state->pr->pCurFileSet = state->pFileSet; loadDataTomb(state->pr, state->pr->pFileReader); - int32_t code = tsdbDataFileReadBrinBlk(state->pr->pFileReader, &state->pr->pBlkArray); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(tsdbDataFileReadBrinBlk(state->pr->pFileReader, &state->pr->pBlkArray), &lino, _err); } if (!state->pIndexList) { @@ -2202,16 +2223,11 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie state->pr->pCurFileSet = state->pFileSet; } - code = lastIterOpen(&state->lastIter, state->pFileSet, pTsdb, state->pTSchema, state->suid, state->uid, state->pr, - state->lastTs, aCols, nCols); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(lastIterOpen(&state->lastIter, state->pFileSet, pTsdb, state->pTSchema, state->suid, state->uid, + state->pr, state->lastTs, aCols, nCols), + &lino, _err); - code = lastIterNext(&state->lastIter, &state->pLastRow); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(lastIterNext(&state->lastIter, &state->pLastRow), &lino, _err); if (!state->pLastRow) { state->lastEmpty = 1; @@ -2228,7 +2244,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie *ppRow = state->pLastRow; state->pLastRow = NULL; - return code; + + TAOS_RETURN(code); } } @@ -2236,10 +2253,7 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie } if (SFSNEXTROW_NEXTSTTROW == state->state) { - code = lastIterNext(&state->lastIter, &state->pLastRow); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(lastIterNext(&state->lastIter, &state->pLastRow), &lino, _err); if (!state->pLastRow) { if (state->pLastIter) { @@ -2252,7 +2266,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie } else { *ppRow = state->pLastRow; state->pLastRow = NULL; - return code; + + TAOS_RETURN(code); } } @@ -2278,10 +2293,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie } else { tBrinBlockClear(&state->brinBlock); } - code = tsdbDataFileReadBrinBlock(state->pr->pFileReader, pBrinBlk, &state->brinBlock); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + + TAOS_CHECK_GOTO(tsdbDataFileReadBrinBlock(state->pr->pFileReader, pBrinBlk, &state->brinBlock), &lino, _err); state->iBrinRecord = state->brinBlock.numOfRecords - 1; state->state = SFSNEXTROW_BRINBLOCK; @@ -2293,10 +2306,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie tBrinBlockClear(&state->brinBlock); goto _next_brinindex; } - code = tBrinBlockGet(&state->brinBlock, state->iBrinRecord, &state->brinRecord); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + + TAOS_CHECK_GOTO(tBrinBlockGet(&state->brinBlock, state->iBrinRecord, &state->brinRecord), &lino, _err); SBrinRecord *pRecord = &state->brinRecord; if (pRecord->uid != state->uid) { @@ -2313,8 +2324,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie if (!state->pBlockData) { state->pBlockData = &state->blockData; - code = tBlockDataCreate(&state->blockData); - if (code) goto _err; + + TAOS_CHECK_GOTO(tBlockDataCreate(&state->blockData), &lino, _err); } else { tBlockDataReset(state->pBlockData); } @@ -2323,11 +2334,10 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie --nCols; ++aCols; } - code = tsdbDataFileReadBlockDataByColumn(state->pr->pFileReader, pRecord, state->pBlockData, state->pTSchema, aCols, - nCols); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + + TAOS_CHECK_GOTO(tsdbDataFileReadBlockDataByColumn(state->pr->pFileReader, pRecord, state->pBlockData, + state->pTSchema, aCols, nCols), + &lino, _err); state->nRow = state->blockData.nRow; state->iRow = state->nRow - 1; @@ -2350,10 +2360,7 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie if (!state->pLastRow) { // get next row from fslast and process with fs row, --state->Row if select fs row - code = lastIterNext(&state->lastIter, &state->pLastRow); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(lastIterNext(&state->lastIter, &state->pLastRow), &lino, _err); } if (!state->pLastRow) { @@ -2372,34 +2379,27 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie if (lastRowTs > rowTs) { *ppRow = state->pLastRow; state->pLastRow = NULL; - return code; + + TAOS_RETURN(code); } else if (lastRowTs < rowTs) { *ppRow = &state->row; --state->iRow; - return code; + + TAOS_RETURN(code); } else { // TODO: merge rows and *ppRow = mergedRow SRowMerger *pMerger = &state->rowMerger; tsdbRowMergerInit(pMerger, state->pTSchema); - code = tsdbRowMergerAdd(pMerger, &state->row, state->pTSchema); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } - code = tsdbRowMergerAdd(pMerger, state->pLastRow, state->pTSchema); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(tsdbRowMergerAdd(pMerger, &state->row, state->pTSchema), &lino, _err); + TAOS_CHECK_GOTO(tsdbRowMergerAdd(pMerger, state->pLastRow, state->pTSchema), &lino, _err); if (state->pTSRow) { taosMemoryFree(state->pTSRow); state->pTSRow = NULL; } - code = tsdbRowMergerGetRow(pMerger, &state->pTSRow); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(tsdbRowMergerGetRow(pMerger, &state->pTSRow), &lino, _err); state->row = tsdbRowFromTSRow(TSDBROW_VERSION(&state->row), state->pTSRow); *ppRow = &state->row; @@ -2407,7 +2407,7 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow, bool *pIgnoreEarlie tsdbRowMergerClear(pMerger); - return code; + TAOS_RETURN(code); } } @@ -2416,7 +2416,12 @@ _err: *ppRow = NULL; - return code; + if (code) { + tsdbError("tsdb/cache: vgId:%d, %s failed at line %d since %s.", TD_VID(pTsdb->pVnode), __func__, lino, + tstrerror(code)); + } + + TAOS_RETURN(code); } typedef enum SMEMNEXTROWSTATES { @@ -2442,7 +2447,8 @@ static int32_t getNextRowFromMem(void *iter, TSDBROW **ppRow, bool *pIgnoreEarli if (state->pMem->maxKey <= state->lastTs) { *ppRow = NULL; *pIgnoreEarlierTs = true; - return code; + + TAOS_RETURN(code); } tsdbTbDataIterOpen(state->pMem, NULL, 1, &state->iter); @@ -2451,23 +2457,23 @@ static int32_t getNextRowFromMem(void *iter, TSDBROW **ppRow, bool *pIgnoreEarli *ppRow = pMemRow; state->state = SMEMNEXTROW_NEXT; - return code; + TAOS_RETURN(code); } } *ppRow = NULL; - return code; + TAOS_RETURN(code); } case SMEMNEXTROW_NEXT: if (tsdbTbDataIterNext(&state->iter)) { *ppRow = tsdbTbDataIterGet(&state->iter); - return code; + TAOS_RETURN(code); } else { *ppRow = NULL; - return code; + TAOS_RETURN(code); } default: ASSERT(0); @@ -2476,7 +2482,8 @@ static int32_t getNextRowFromMem(void *iter, TSDBROW **ppRow, bool *pIgnoreEarli _err: *ppRow = NULL; - return code; + + TAOS_RETURN(code); } static bool tsdbKeyDeleted(TSDBKEY *key, SArray *pSkyline, int64_t *iSkyline) { @@ -2543,7 +2550,7 @@ int32_t clearNextRowFromFS(void *iter) { SFSNextRowIter *state = (SFSNextRowIter *)iter; if (!state) { - return code; + TAOS_RETURN(code); } if (state->pLastIter) { @@ -2575,7 +2582,7 @@ int32_t clearNextRowFromFS(void *iter) { state->pRowIter->pSkyline = NULL; } - return code; + TAOS_RETURN(code); } static void clearLastFileSet(SFSNextRowIter *state) { @@ -2617,7 +2624,7 @@ static void clearLastFileSet(SFSNextRowIter *state) { static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTsdb, STSchema *pTSchema, tb_uid_t suid, SArray *pLDataIterArray, STsdbReadSnap *pReadSnap, int64_t lastTs, SCacheRowsReader *pr) { - int code = 0; + int32_t code = 0, lino = 0; STbData *pMem = NULL; if (pReadSnap->pMem) { @@ -2633,10 +2640,7 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs pIter->pMemDelData = NULL; - code = loadMemTombData(&pIter->pMemDelData, pMem, pIMem, pr->info.verRange.maxVer); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + TAOS_CHECK_GOTO(loadMemTombData(&pIter->pMemDelData, pMem, pIMem, pr->info.verRange.maxVer), &lino, _err); pIter->idx = (SBlockIdx){.suid = suid, .uid = uid}; @@ -2672,12 +2676,13 @@ static int32_t nextRowIterOpen(CacheNextRowIter *pIter, tb_uid_t uid, STsdb *pTs } pIter->pr = pr; + _err: - return code; + TAOS_RETURN(code); } static int32_t nextRowIterClose(CacheNextRowIter *pIter) { - int code = 0; + int32_t code = 0; for (int i = 0; i < 3; ++i) { if (pIter->input[i].nextRowClearFn) { @@ -2694,19 +2699,20 @@ static int32_t nextRowIterClose(CacheNextRowIter *pIter) { } _err: - return code; + TAOS_RETURN(code); } // iterate next row non deleted backward ts, version (from high to low) static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow, bool *pIgnoreEarlierTs, bool isLast, int16_t *aCols, int nCols) { - int code = 0; + int32_t code = 0, lino = 0; + for (;;) { for (int i = 0; i < 3; ++i) { if (pIter->input[i].next && !pIter->input[i].stop) { - code = pIter->input[i].nextRowFn(pIter->input[i].iter, &pIter->input[i].pRow, &pIter->input[i].ignoreEarlierTs, - isLast, aCols, nCols); - if (code) goto _err; + TAOS_CHECK_GOTO(pIter->input[i].nextRowFn(pIter->input[i].iter, &pIter->input[i].pRow, + &pIter->input[i].ignoreEarlierTs, isLast, aCols, nCols), + &lino, _err); if (pIter->input[i].pRow == NULL) { pIter->input[i].stop = true; @@ -2719,7 +2725,8 @@ static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow, bool *pI *ppRow = NULL; *pIgnoreEarlierTs = (pIter->input[0].ignoreEarlierTs || pIter->input[1].ignoreEarlierTs || pIter->input[2].ignoreEarlierTs); - return code; + + TAOS_RETURN(code); } // select maxpoint(s) from mem, imem, fs and last @@ -2785,18 +2792,24 @@ static int32_t nextRowIterGet(CacheNextRowIter *pIter, TSDBROW **ppRow, bool *pI pIter->input[iMerge[0]].next = true; *ppRow = merge[0]; - return code; + + TAOS_RETURN(code); } } _err: - return code; + + if (code) { + tsdbError("tsdb/cache: %s failed at line %d since %s.", __func__, lino, tstrerror(code)); + } + + TAOS_RETURN(code); } static int32_t initLastColArrayPartial(STSchema *pTSchema, SArray **ppColArray, int16_t *slotIds, int nCols) { SArray *pColArray = taosArrayInit(nCols, sizeof(SLastCol)); if (NULL == pColArray) { - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } for (int32_t i = 0; i < nCols; ++i) { @@ -2806,34 +2819,38 @@ static int32_t initLastColArrayPartial(STSchema *pTSchema, SArray **ppColArray, taosArrayPush(pColArray, &col); } *ppColArray = pColArray; - return TSDB_CODE_SUCCESS; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t cloneTSchema(STSchema *pSrc, STSchema **ppDst) { int32_t len = sizeof(STSchema) + sizeof(STColumn) * pSrc->numOfCols; *ppDst = taosMemoryMalloc(len); if (NULL == *ppDst) { - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } memcpy(*ppDst, pSrc, len); - return TSDB_CODE_SUCCESS; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t updateTSchema(int32_t sversion, SCacheRowsReader *pReader, uint64_t uid) { if (NULL == pReader->pCurrSchema && sversion == pReader->pSchema->version) { - return cloneTSchema(pReader->pSchema, &pReader->pCurrSchema); + TAOS_RETURN(cloneTSchema(pReader->pSchema, &pReader->pCurrSchema)); } if (NULL != pReader->pCurrSchema && sversion == pReader->pCurrSchema->version) { - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } taosMemoryFreeClear(pReader->pCurrSchema); - return metaGetTbTSchemaEx(pReader->pTsdb->pVnode->pMeta, pReader->info.suid, uid, sversion, &pReader->pCurrSchema); + TAOS_RETURN( + metaGetTbTSchemaEx(pReader->pTsdb->pVnode->pMeta, pReader->info.suid, uid, sversion, &pReader->pCurrSchema)); } static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCacheRowsReader *pr, int16_t *aCols, int nCols, int16_t *slotIds) { + int32_t code = 0, lino = 0; STSchema *pTSchema = pr->pSchema; // metaGetTbTSchema(pTsdb->pVnode->pMeta, uid, -1, 1); int16_t nLastCol = nCols; int16_t noneCol = 0; @@ -2843,15 +2860,13 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC SArray *pColArray = NULL; SColVal *pColVal = &(SColVal){0}; - int32_t code = initLastColArrayPartial(pTSchema, &pColArray, slotIds, nCols); - if (TSDB_CODE_SUCCESS != code) { - return code; - } + TAOS_CHECK_RETURN(initLastColArrayPartial(pTSchema, &pColArray, slotIds, nCols)); + SArray *aColArray = taosArrayInit(nCols, sizeof(int16_t)); if (NULL == aColArray) { taosArrayDestroy(pColArray); - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } for (int i = 0; i < nCols; ++i) { @@ -2876,10 +2891,8 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC int32_t sversion = TSDBROW_SVERSION(pRow); if (sversion != -1) { - code = updateTSchema(sversion, pr, uid); - if (TSDB_CODE_SUCCESS != code) { - goto _err; - } + TAOS_CHECK_GOTO(updateTSchema(sversion, pr, uid), &lino, _err); + pTSchema = pr->pCurrSchema; } // int16_t nCol = pTSchema->numOfCols; @@ -2919,9 +2932,7 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC if (pColVal->value.nData > 0) { pCol->colVal.value.pData = taosMemoryMalloc(pCol->colVal.value.nData); if (pCol->colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } memcpy(pCol->colVal.value.pData, pColVal->value.pData, pColVal->value.nData); } else { @@ -2973,9 +2984,7 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC if (pColVal->value.nData > 0) { lastCol.colVal.value.pData = taosMemoryMalloc(lastCol.colVal.value.nData); if (lastCol.colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } memcpy(lastCol.colVal.value.pData, pColVal->value.pData, pColVal->value.nData); } else { @@ -3008,7 +3017,7 @@ static int32_t mergeLastCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SC nextRowIterClose(&iter); taosArrayDestroy(aColArray); - return code; + TAOS_RETURN(code); _err: nextRowIterClose(&iter); @@ -3016,11 +3025,18 @@ _err: *ppLastArray = NULL; taosArrayDestroy(pColArray); taosArrayDestroy(aColArray); - return code; + + if (code) { + tsdbError("tsdb/cache: vgId:%d, %s failed at line %d since %s.", TD_VID(pTsdb->pVnode), __func__, lino, + tstrerror(code)); + } + + TAOS_RETURN(code); } static int32_t mergeLastRowCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SCacheRowsReader *pr, int16_t *aCols, int nCols, int16_t *slotIds) { + int32_t code = 0, lino = 0; STSchema *pTSchema = pr->pSchema; // metaGetTbTSchema(pTsdb->pVnode->pMeta, uid, -1, 1); int16_t nLastCol = nCols; int16_t noneCol = 0; @@ -3030,15 +3046,13 @@ static int32_t mergeLastRowCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, SArray *pColArray = NULL; SColVal *pColVal = &(SColVal){0}; - int32_t code = initLastColArrayPartial(pTSchema, &pColArray, slotIds, nCols); - if (TSDB_CODE_SUCCESS != code) { - return code; - } + TAOS_CHECK_RETURN(initLastColArrayPartial(pTSchema, &pColArray, slotIds, nCols)); + SArray *aColArray = taosArrayInit(nCols, sizeof(int16_t)); if (NULL == aColArray) { taosArrayDestroy(pColArray); - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } for (int i = 0; i < nCols; ++i) { @@ -3061,10 +3075,8 @@ static int32_t mergeLastRowCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, int32_t sversion = TSDBROW_SVERSION(pRow); if (sversion != -1) { - code = updateTSchema(sversion, pr, uid); - if (TSDB_CODE_SUCCESS != code) { - goto _err; - } + TAOS_CHECK_GOTO(updateTSchema(sversion, pr, uid), &lino, _err); + pTSchema = pr->pCurrSchema; } // int16_t nCol = pTSchema->numOfCols; @@ -3097,9 +3109,7 @@ static int32_t mergeLastRowCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, if (pColVal->value.nData > 0) { pCol->colVal.value.pData = taosMemoryMalloc(pCol->colVal.value.nData); if (pCol->colVal.value.pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } if (pColVal->value.nData > 0) { memcpy(pCol->colVal.value.pData, pColVal->value.pData, pColVal->value.nData); @@ -3131,7 +3141,7 @@ static int32_t mergeLastRowCid(tb_uid_t uid, STsdb *pTsdb, SArray **ppLastArray, nextRowIterClose(&iter); taosArrayDestroy(aColArray); - return code; + TAOS_RETURN(code); _err: nextRowIterClose(&iter); @@ -3139,7 +3149,13 @@ _err: *ppLastArray = NULL; taosArrayDestroy(pColArray); taosArrayDestroy(aColArray); - return code; + + if (code) { + tsdbError("tsdb/cache: vgId:%d, %s failed at line %d since %s.", TD_VID(pTsdb->pVnode), __func__, lino, + tstrerror(code)); + } + + TAOS_RETURN(code); } int32_t tsdbCacheRelease(SLRUCache *pCache, LRUHandle *h) { @@ -3194,22 +3210,10 @@ static void getBCacheKey(int32_t fid, int64_t commitID, int64_t blkno, char *key static int32_t tsdbCacheLoadBlockS3(STsdbFD *pFD, uint8_t **ppBlock) { int32_t code = 0; - /* - uint8_t *pBlock = taosMemoryCalloc(1, tsS3BlockSize * pFD->szPage); - if (pBlock == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _exit; - } - */ - int64_t block_offset = (pFD->blkno - 1) * tsS3BlockSize * pFD->szPage; - code = s3GetObjectBlock(pFD->objName, block_offset, tsS3BlockSize * pFD->szPage, 0, ppBlock); - if (code != TSDB_CODE_SUCCESS) { - // taosMemoryFree(pBlock); - // code = TSDB_CODE_OUT_OF_MEMORY; - return code; - } - //*ppBlock = pBlock; + int64_t block_offset = (pFD->blkno - 1) * tsS3BlockSize * pFD->szPage; + + TAOS_CHECK_RETURN(s3GetObjectBlock(pFD->objName, block_offset, tsS3BlockSize * pFD->szPage, 0, ppBlock)); tsdbTrace("block:%p load from s3", *ppBlock); @@ -3247,7 +3251,8 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) if (code == TSDB_CODE_SUCCESS && !pBlock) { code = TSDB_CODE_OUT_OF_MEMORY; } - return code; + + TAOS_RETURN(code); } size_t charge = tsS3BlockSize * pFD->szPage; @@ -3255,7 +3260,7 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) LRUStatus status = taosLRUCacheInsert(pCache, key, keyLen, pBlock, charge, deleter, &h, TAOS_LRU_PRIORITY_LOW, NULL); if (status != TAOS_LRU_STATUS_OK) { - code = -1; + // code = -1; } } @@ -3264,7 +3269,7 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) *handle = h; - return code; + TAOS_RETURN(code); } int32_t tsdbCacheGetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, LRUHandle **handle) { @@ -3304,5 +3309,5 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ tsdbCacheRelease(pFD->pTsdb->pgCache, handle); - return code; + TAOS_RETURN(code); } From 58853d342d387f56a3c81114ea9caf2a1f746fec Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 24 Jul 2024 17:34:33 +0800 Subject: [PATCH 20/35] adj operator result --- source/libs/executor/src/tfill.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/source/libs/executor/src/tfill.c b/source/libs/executor/src/tfill.c index 3a024bc22d..bfb9c5a5c1 100644 --- a/source/libs/executor/src/tfill.c +++ b/source/libs/executor/src/tfill.c @@ -521,10 +521,7 @@ struct SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t } SFillInfo* pFillInfo = taosMemoryCalloc(1, sizeof(SFillInfo)); - if (pFillInfo == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; - } + QUERY_CHECK_NULL(pFillInfo, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pFillInfo->order = order; pFillInfo->srcTsSlotId = primaryTsSlotId; @@ -562,8 +559,8 @@ _end: if (code != TSDB_CODE_SUCCESS) { taosArrayDestroy(pFillInfo->next.pRowVal); taosArrayDestroy(pFillInfo->prev.pRowVal); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + terrno = code; + T_LONG_JMP(pTaskInfo->env, code); } return pFillInfo; } From b1a4ea94726f3b339514f9c37778f07efdf00641 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 24 Jul 2024 19:10:39 +0800 Subject: [PATCH 21/35] adj operator result --- source/libs/executor/inc/tfill.h | 6 +- source/libs/executor/src/filloperator.c | 9 +- .../executor/src/streamcountwindowoperator.c | 40 ++-- .../executor/src/streameventwindowoperator.c | 36 +-- source/libs/executor/src/streamfilloperator.c | 23 +- .../executor/src/streamtimewindowoperator.c | 209 +++++++++++------- source/libs/executor/src/sysscanoperator.c | 14 +- source/libs/executor/src/tfill.c | 15 +- 8 files changed, 221 insertions(+), 131 deletions(-) diff --git a/source/libs/executor/inc/tfill.h b/source/libs/executor/inc/tfill.h index cd003ebd15..b659c12315 100644 --- a/source/libs/executor/inc/tfill.h +++ b/source/libs/executor/inc/tfill.h @@ -128,9 +128,9 @@ SFillColInfo* createFillColInfo(SExprInfo* pExpr, int32_t numOfFillExpr, SExprIn int32_t numOfNotFillCols, const struct SNodeListNode* val); bool taosFillHasMoreResults(struct SFillInfo* pFillInfo); -SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t numOfNotFillCols, int32_t capacity, - SInterval* pInterval, int32_t fillType, struct SFillColInfo* pCol, int32_t slotId, - int32_t order, const char* id, SExecTaskInfo* pTaskInfo); +void taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t numOfNotFillCols, int32_t capacity, + SInterval* pInterval, int32_t fillType, struct SFillColInfo* pCol, int32_t slotId, + int32_t order, const char* id, SExecTaskInfo* pTaskInfo, SFillInfo** ppFillInfo); void* taosDestroyFillInfo(struct SFillInfo* pFillInfo); int32_t taosFillResultDataBlock(struct SFillInfo* pFillInfo, SSDataBlock* p, int32_t capacity); diff --git a/source/libs/executor/src/filloperator.c b/source/libs/executor/src/filloperator.c index 3d139e1d2e..341b1a01ea 100644 --- a/source/libs/executor/src/filloperator.c +++ b/source/libs/executor/src/filloperator.c @@ -317,7 +317,7 @@ _end: } static int32_t doFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { - int32_t code = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; SFillOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -355,7 +355,7 @@ static int32_t doFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { static SSDataBlock* doFill(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doFillNext(pOperator, &pRes); + int32_t code = doFillNext(pOperator, &pRes); return pRes; } @@ -384,8 +384,9 @@ static int32_t initFillInfo(SFillOperatorInfo* pInfo, SExprInfo* pExpr, int32_t // STimeWindow w = {0}; // getInitialStartTimeWindow(pInterval, startKey, &w, order == TSDB_ORDER_ASC); - pInfo->pFillInfo = taosCreateFillInfo(startKey, numOfCols, numOfNotFillCols, capacity, pInterval, fillType, pColInfo, - pInfo->primaryTsCol, order, id, pTaskInfo); + pInfo->pFillInfo = NULL; + taosCreateFillInfo(startKey, numOfCols, numOfNotFillCols, capacity, pInterval, fillType, pColInfo, + pInfo->primaryTsCol, order, id, pTaskInfo, &pInfo->pFillInfo); if (order == TSDB_ORDER_ASC) { pInfo->win.skey = win.skey; diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index f249a0fe0a..41a5a3505c 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -357,12 +357,13 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } destroySBuffInfo(pAggSup, &buffInfo); } -static SSDataBlock* buildCountResult(SOperatorInfo* pOperator) { +static int32_t buildCountResult(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SStreamCountAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; SOptrBasicInfo* pBInfo = &pInfo->binfo; @@ -370,15 +371,18 @@ static SSDataBlock* buildCountResult(SOperatorInfo* pOperator) { doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator); if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } doBuildSessionResult(pOperator, pAggSup->pState, &pInfo->groupResInfo, pBInfo->pRes); if (pBInfo->pRes->info.rows > 0) { printDataBlock(pBInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pBInfo->pRes; + (*ppRes) = pBInfo->pRes; + return code; } - return NULL; + (*ppRes) = NULL; + return code; } int32_t doStreamCountEncodeOpState(void** buf, int32_t len, SOperatorInfo* pOperator, bool isParent) { @@ -425,6 +429,7 @@ int32_t doStreamCountDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamCountAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (!pInfo) { code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); @@ -465,7 +470,7 @@ int32_t doStreamCountDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -475,6 +480,7 @@ void doStreamCountSaveCheckpoint(SOperatorInfo* pOperator) { int32_t lino = 0; void* pBuf = NULL; SStreamCountAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (needSaveStreamOperatorInfo(&pInfo->basic)) { int32_t len = doStreamCountEncodeOpState(NULL, 0, pOperator, true); pBuf = taosMemoryCalloc(1, len); @@ -492,7 +498,7 @@ void doStreamCountSaveCheckpoint(SOperatorInfo* pOperator) { _end: taosMemoryFreeClear(pBuf); if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -617,7 +623,9 @@ static int32_t doStreamCountAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe (*ppRes) = NULL; return code; } else if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* opRes = buildCountResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildCountResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -715,7 +723,9 @@ static int32_t doStreamCountAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe QUERY_CHECK_CODE(code, lino, _end); } - SSDataBlock* opRes = buildCountResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildCountResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -724,7 +734,7 @@ static int32_t doStreamCountAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -733,7 +743,7 @@ _end: static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamCountAggNext(pOperator, &pRes); + int32_t code = doStreamCountAggNext(pOperator, &pRes); return pRes; } @@ -741,6 +751,7 @@ void streamCountReleaseState(SOperatorInfo* pOperator) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamEventAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; int32_t resSize = sizeof(TSKEY); char* pBuff = taosMemoryCalloc(1, resSize); QUERY_CHECK_NULL(pBuff, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); @@ -758,7 +769,7 @@ void streamCountReleaseState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { terrno = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -766,6 +777,7 @@ void streamCountReloadState(SOperatorInfo* pOperator) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamCountAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; int32_t size = 0; void* pBuf = NULL; @@ -787,7 +799,7 @@ void streamCountReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { terrno = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -896,6 +908,6 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); return NULL; } diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 842c93491d..1181b1d981 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -285,7 +285,7 @@ static int32_t compactEventWindow(SOperatorInfo* pOperator, SEventWindowInfo* pC _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -444,7 +444,7 @@ _end: colDataDestroy(pColEnd); taosMemoryFree(pColEnd); if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -490,6 +490,7 @@ int32_t doStreamEventDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamEventAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (!pInfo) { code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); @@ -532,7 +533,7 @@ int32_t doStreamEventDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -555,7 +556,8 @@ void doStreamEventSaveCheckpoint(SOperatorInfo* pOperator) { } } -static SSDataBlock* buildEventResult(SOperatorInfo* pOperator) { +static int32_t buildEventResult(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SStreamEventAggOperatorInfo* pInfo = pOperator->info; SOptrBasicInfo* pBInfo = &pInfo->binfo; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -563,15 +565,18 @@ static SSDataBlock* buildEventResult(SOperatorInfo* pOperator) { doBuildDeleteDataBlock(pOperator, pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator); if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } doBuildSessionResult(pOperator, pInfo->streamAggSup.pState, &pInfo->groupResInfo, pBInfo->pRes); if (pBInfo->pRes->info.rows > 0) { printDataBlock(pBInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pBInfo->pRes; + (*ppRes) = pBInfo->pRes; + return code; } - return NULL; + (*ppRes) = NULL; + return code; } static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { @@ -588,7 +593,9 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; qDebug("===stream=== stream event agg"); if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* resBlock = buildEventResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildEventResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -700,7 +707,9 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* resBlock = buildEventResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildEventResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -709,7 +718,7 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -718,7 +727,7 @@ _end: static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamEventAggNext(pOperator, &pRes); + int32_t code = doStreamEventAggNext(pOperator, &pRes); return pRes; } @@ -747,6 +756,7 @@ void streamEventReloadState(SOperatorInfo* pOperator) { int32_t lino = 0; SStreamEventAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; resetWinRange(&pAggSup->winRange); SSessionKey seKey = {.win.skey = INT64_MIN, .win.ekey = INT64_MIN, .groupId = 0}; @@ -830,7 +840,7 @@ void streamEventReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -951,6 +961,6 @@ _error: destroyStreamEventOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); return NULL; } diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index 6b21e481c7..335bfd286c 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -742,7 +742,7 @@ static void doStreamFillImpl(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -751,6 +751,7 @@ static int32_t buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint int32_t lino = 0; SStorageAPI* pAPI = &pOp->pTaskInfo->storageAPI; void* pState = pOp->pTaskInfo->streamInfo.pState; + SExecTaskInfo* pTaskInfo = pOp->pTaskInfo; SSDataBlock* pBlock = delRes; SColumnInfoData* pStartCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pEndCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -793,7 +794,7 @@ static int32_t buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -804,6 +805,7 @@ static int32_t buildDeleteResult(SOperatorInfo* pOperator, TSKEY startTs, TSKEY int32_t lino = 0; SStreamFillOperatorInfo* pInfo = pOperator->info; SStreamFillSupporter* pFillSup = pInfo->pFillSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (hasPrevWindow(pFillSup)) { TSKEY start = getNextWindowTs(pFillSup->prev.key, &pFillSup->interval); code = buildDeleteRange(pOperator, start, endTs, groupId, delRes); @@ -819,7 +821,7 @@ static int32_t buildDeleteResult(SOperatorInfo* pOperator, TSKEY startTs, TSKEY _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -829,6 +831,7 @@ static int32_t doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, T int32_t lino = 0; SStorageAPI* pAPI = &pOperator->pTaskInfo->storageAPI; SStreamFillOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; getWindowFromDiscBuf(pOperator, startTs, groupId, pInfo->pFillSup); setDeleteFillValueInfo(startTs, endTs, pInfo->pFillSup, pInfo->pFillInfo); SWinKey key = {.ts = startTs, .groupId = groupId}; @@ -851,7 +854,7 @@ static int32_t doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, T _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -910,6 +913,7 @@ static int32_t doDeleteFillResult(SOperatorInfo* pOperator) { SStreamFillOperatorInfo* pInfo = pOperator->info; SStreamFillInfo* pFillInfo = pInfo->pFillInfo; SSDataBlock* pBlock = pInfo->pSrcDelBlock; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SColumnInfoData* pStartCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); TSKEY* tsStarts = (TSKEY*)pStartCol->pData; @@ -966,7 +970,7 @@ static int32_t doDeleteFillResult(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -984,6 +988,7 @@ static int32_t doApplyStreamScalarCalculation(SOperatorInfo* pOperator, SSDataBl int32_t lino = 0; SStreamFillOperatorInfo* pInfo = pOperator->info; SExprSupp* pSup = &pOperator->exprSupp; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; blockDataCleanup(pDstBlock); code = blockDataEnsureCapacity(pDstBlock, pSrcBlock->info.rows); @@ -1007,7 +1012,7 @@ static int32_t doApplyStreamScalarCalculation(SOperatorInfo* pOperator, SSDataBl _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -1140,7 +1145,7 @@ static int32_t doStreamFillNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setOperatorCompleted(pOperator); resetStreamFillInfo(pInfo); @@ -1150,7 +1155,7 @@ _end: static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamFillNext(pOperator, &pRes); + int32_t code = doStreamFillNext(pOperator, &pRes); return pRes; } @@ -1423,7 +1428,7 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi _error: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } destroyStreamFillOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index bf4b16fe8b..5aa7cac45d 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -236,6 +236,7 @@ static int32_t doDeleteWindows(SOperatorInfo* pOperator, SInterval* pInterval, S int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); TSKEY* startTsCols = (TSKEY*)pStartTsCol->pData; SColumnInfoData* pEndTsCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -301,7 +302,7 @@ static int32_t doDeleteWindows(SOperatorInfo* pOperator, SInterval* pInterval, S } _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -335,6 +336,7 @@ static int32_t closeStreamIntervalWindow(SSHashObj* pHashMap, STimeWindowAggSupp void* pIte = NULL; int32_t iter = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; int32_t delSize = taosArrayGetSize(pDelWins); while ((pIte = tSimpleHashIterate(pHashMap, pIte, &iter)) != NULL) { void* key = tSimpleHashGetKey(pIte, NULL); @@ -376,7 +378,7 @@ static int32_t closeStreamIntervalWindow(SSHashObj* pHashMap, STimeWindowAggSupp _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -517,9 +519,10 @@ void reloadFromDownStream(SOperatorInfo* downstream, SStreamIntervalOperatorInfo } int32_t initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SStreamIntervalOperatorInfo* pInfo) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; - SStateStore* pAPI = &downstream->pTaskInfo->storageAPI.stateStore; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SStateStore* pAPI = &downstream->pTaskInfo->storageAPI.stateStore; + SExecTaskInfo* pTaskInfo = downstream->pTaskInfo; if (downstream->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { return initIntervalDownStream(downstream->pDownstream[0], type, pInfo); @@ -542,7 +545,7 @@ int32_t initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SStream _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -584,7 +587,7 @@ int32_t compactFunctions(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx, i _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -946,7 +949,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -1149,7 +1152,7 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat } _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -1332,6 +1335,7 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (!pInfo) { code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); @@ -1401,7 +1405,7 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -1445,15 +1449,16 @@ _end: return code; } -static SSDataBlock* buildIntervalResult(SOperatorInfo* pOperator) { +static int32_t buildIntervalResult(SOperatorInfo* pOperator, SSDataBlock** ppRes) { SStreamIntervalOperatorInfo* pInfo = pOperator->info; - - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - uint16_t opType = pOperator->operatorType; + int32_t code = TSDB_CODE_SUCCESS; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + uint16_t opType = pOperator->operatorType; // check if query task is closed or not if (isTaskKilled(pTaskInfo)) { - return NULL; + (*ppRes) = NULL; + return code; } if (IS_FINAL_INTERVAL_OP(pOperator)) { @@ -1461,7 +1466,8 @@ static SSDataBlock* buildIntervalResult(SOperatorInfo* pOperator) { if (pInfo->pPullDataRes->info.rows != 0) { // process the rest of the data printDataBlock(pInfo->pPullDataRes, getStreamOpName(opType), GET_TASKID(pTaskInfo)); - return pInfo->pPullDataRes; + (*ppRes) = pInfo->pPullDataRes; + return code; } } @@ -1469,16 +1475,19 @@ static SSDataBlock* buildIntervalResult(SOperatorInfo* pOperator) { if (pInfo->pDelRes->info.rows != 0) { // process the rest of the data printDataBlock(pInfo->pDelRes, getStreamOpName(opType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } doBuildStreamIntervalResult(pOperator, pInfo->pState, pInfo->binfo.pRes, &pInfo->groupResInfo); if (pInfo->binfo.pRes->info.rows != 0) { printDataBlock(pInfo->binfo.pRes, getStreamOpName(opType), GET_TASKID(pTaskInfo)); - return pInfo->binfo.pRes; + (*ppRes) = pInfo->binfo.pRes; + return code; } - return NULL; + (*ppRes) = NULL; + return code; } int32_t copyUpdateResult(SSHashObj** ppWinUpdated, SArray* pUpdated, __compar_fn_t compar) { @@ -1520,7 +1529,9 @@ static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBloc (*ppRes) = NULL; return code; } else if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -1549,7 +1560,9 @@ static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBloc return code; } else { if (!IS_FINAL_INTERVAL_OP(pOperator)) { - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -1712,7 +1725,9 @@ static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBloc code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -1728,7 +1743,7 @@ static int32_t doStreamFinalIntervalAggNext(SOperatorInfo* pOperator, SSDataBloc _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -1737,7 +1752,7 @@ _end: static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamFinalIntervalAggNext(pOperator, &pRes); + int32_t code = doStreamFinalIntervalAggNext(pOperator, &pRes); return pRes; } @@ -1799,6 +1814,7 @@ void streamIntervalReloadState(SOperatorInfo* pOperator) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamIntervalOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL && pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL) { int32_t size = 0; @@ -1820,7 +1836,7 @@ void streamIntervalReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -2036,8 +2052,9 @@ void initDummyFunction(SqlFunctionCtx* pDummy, SqlFunctionCtx* pCtx, int32_t num int32_t initDownStream(SOperatorInfo* downstream, SStreamAggSupporter* pAggSup, uint16_t type, int32_t tsColIndex, STimeWindowAggSupp* pTwSup, struct SSteamOpBasicInfo* pBasic) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; + SExecTaskInfo* pTaskInfo = downstream->pTaskInfo; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (downstream->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION) { SStreamPartitionOperatorInfo* pScanInfo = downstream->info; pScanInfo->tsColIndex = tsColIndex; @@ -2062,7 +2079,7 @@ int32_t initDownStream(SOperatorInfo* downstream, SStreamAggSupporter* pAggSup, _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -2328,7 +2345,7 @@ int32_t doOneWindowAggImpl(SColumnInfoData* pTimeWindowData, SResultWindowInfo* _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -2404,7 +2421,7 @@ int32_t compactTimeWindow(SExprSupp* pSup, SStreamAggSupporter* pAggSup, STimeWi _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -2442,7 +2459,7 @@ static int32_t compactSessionWindow(SOperatorInfo* pOperator, SResultWindowInfo* _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -2574,7 +2591,7 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -2631,9 +2648,10 @@ inline int32_t sessionKeyCompareAsc(const void* pKey1, const void* pKey2) { } void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlock* pBlock, void** Ite) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; - SStorageAPI* pAPI = &pOp->pTaskInfo->storageAPI; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SStorageAPI* pAPI = &pOp->pTaskInfo->storageAPI; + SExecTaskInfo* pTaskInfo = pOp->pTaskInfo; blockDataCleanup(pBlock); int32_t size = tSimpleHashGetSize(pStDeleted); @@ -2699,7 +2717,7 @@ _end: } if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -2786,7 +2804,7 @@ static int32_t rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -2974,7 +2992,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -3003,11 +3021,12 @@ void doBuildSessionResult(SOperatorInfo* pOperator, void* pState, SGroupResInfo* _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } -static SSDataBlock* buildSessionResult(SOperatorInfo* pOperator) { +static int32_t buildSessionResult(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SStreamSessionAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; SOptrBasicInfo* pBInfo = &pInfo->binfo; @@ -3015,15 +3034,18 @@ static SSDataBlock* buildSessionResult(SOperatorInfo* pOperator) { doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator); if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } doBuildSessionResult(pOperator, pAggSup->pState, &pInfo->groupResInfo, pBInfo->pRes); if (pBInfo->pRes->info.rows > 0) { printDataBlock(pBInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pBInfo->pRes; + (*ppRes) = pBInfo->pRes; + return code; } - return NULL; + (*ppRes) = NULL; + return code; } int32_t getMaxTsWins(const SArray* pAllWins, SArray* pMaxWins) { @@ -3143,6 +3165,7 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamSessionAggOperatorInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (!pInfo) { code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); @@ -3200,7 +3223,7 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -3268,7 +3291,9 @@ static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** pp (*ppRes) = NULL; return code; } else if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* opRes = buildSessionResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildSessionResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -3419,7 +3444,9 @@ static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** pp code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* opRes = buildSessionResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildSessionResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -3428,7 +3455,7 @@ static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** pp _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -3437,7 +3464,7 @@ _end: static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamSessionAggNext(pOperator, &pRes); + int32_t code = doStreamSessionAggNext(pOperator, &pRes); return pRes; } @@ -3506,6 +3533,7 @@ void streamSessionSemiReloadState(SOperatorInfo* pOperator) { int32_t lino = 0; SStreamSessionAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; resetWinRange(&pAggSup->winRange); SResultWindowInfo winInfo = {0}; @@ -3542,7 +3570,7 @@ void streamSessionSemiReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -3551,6 +3579,7 @@ void streamSessionReloadState(SOperatorInfo* pOperator) { int32_t lino = 0; SStreamSessionAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; resetWinRange(&pAggSup->winRange); int32_t size = 0; @@ -3614,7 +3643,7 @@ void streamSessionReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -3736,7 +3765,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); return NULL; } @@ -3792,7 +3821,9 @@ static int32_t doStreamSessionSemiAggNext(SOperatorInfo* pOperator, SSDataBlock* } { - SSDataBlock* opRes = buildSessionResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildSessionResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -3889,7 +3920,9 @@ static int32_t doStreamSessionSemiAggNext(SOperatorInfo* pOperator, SSDataBlock* code = blockDataEnsureCapacity(pBInfo->pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* opRes = buildSessionResult(pOperator); + SSDataBlock* opRes = NULL; + code = buildSessionResult(pOperator, &opRes); + QUERY_CHECK_CODE(code, lino, _end); if (opRes) { (*ppRes) = opRes; return code; @@ -3898,7 +3931,7 @@ static int32_t doStreamSessionSemiAggNext(SOperatorInfo* pOperator, SSDataBlock* _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } clearFunctionContext(&pOperator->exprSupp); @@ -3911,7 +3944,7 @@ _end: static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamSessionSemiAggNext(pOperator, &pRes); + int32_t code = doStreamSessionSemiAggNext(pOperator, &pRes); return pRes; } @@ -3982,7 +4015,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return NULL; } @@ -4326,7 +4359,7 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -4383,6 +4416,7 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (!pInfo) { code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); @@ -4440,7 +4474,7 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } return code; } @@ -4463,7 +4497,8 @@ void doStreamStateSaveCheckpoint(SOperatorInfo* pOperator) { } } -static SSDataBlock* buildStateResult(SOperatorInfo* pOperator) { +static int32_t buildStateResult(SOperatorInfo* pOperator, SSDataBlock** ppRes) { + int32_t code = TSDB_CODE_SUCCESS; SStreamStateAggOperatorInfo* pInfo = pOperator->info; SOptrBasicInfo* pBInfo = &pInfo->binfo; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -4471,15 +4506,18 @@ static SSDataBlock* buildStateResult(SOperatorInfo* pOperator) { doBuildDeleteDataBlock(pOperator, pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator); if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pInfo->pDelRes; + (*ppRes) = pInfo->pDelRes; + return code; } doBuildSessionResult(pOperator, pInfo->streamAggSup.pState, &pInfo->groupResInfo, pBInfo->pRes); if (pBInfo->pRes->info.rows > 0) { printDataBlock(pBInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); - return pBInfo->pRes; + (*ppRes) = pBInfo->pRes; + return code; } - return NULL; + (*ppRes) = NULL; + return code; } static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { @@ -4496,7 +4534,9 @@ static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; qDebug("===stream=== stream state agg"); if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* resBlock = buildStateResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildStateResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -4597,7 +4637,9 @@ static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* resBlock = buildStateResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildStateResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -4606,7 +4648,7 @@ static int32_t doStreamStateAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -4615,7 +4657,7 @@ _end: static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamStateAggNext(pOperator, &pRes); + int32_t code = doStreamStateAggNext(pOperator, &pRes); return pRes; } @@ -4652,6 +4694,7 @@ void streamStateReloadState(SOperatorInfo* pOperator) { int32_t lino = 0; SStreamStateAggOperatorInfo* pInfo = pOperator->info; SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; resetWinRange(&pAggSup->winRange); SSessionKey seKey = {.win.skey = INT64_MIN, .win.ekey = INT64_MIN, .groupId = 0}; @@ -4728,7 +4771,7 @@ void streamStateReloadState(SOperatorInfo* pOperator) { _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -4837,7 +4880,7 @@ _error: destroyStreamStateOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); return NULL; } @@ -4869,7 +4912,9 @@ static int32_t doStreamIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** p } if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -5000,13 +5045,15 @@ static int32_t doStreamIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock** p tSimpleHashCleanup(pInfo->pUpdatedMap); pInfo->pUpdatedMap = NULL; - (*ppRes) = buildIntervalResult(pOperator); + code = buildIntervalResult(pOperator, ppRes); + QUERY_CHECK_CODE(code, lino, _end); + return code; _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } setStreamOperatorCompleted(pOperator); (*ppRes) = NULL; @@ -5015,7 +5062,7 @@ _end: static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamIntervalAggNext(pOperator, &pRes); + int32_t code = doStreamIntervalAggNext(pOperator, &pRes); return pRes; } @@ -5247,7 +5294,7 @@ static void doStreamMidIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pS _end: if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } } @@ -5314,7 +5361,9 @@ static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock* (*ppRes) = NULL; return code; } else if (pOperator->status == OP_RES_TO_RETURN) { - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -5327,7 +5376,9 @@ static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock* (*ppRes) = NULL; return code; } else { - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -5490,7 +5541,9 @@ static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock* code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); - SSDataBlock* resBlock = buildIntervalResult(pOperator); + SSDataBlock* resBlock = NULL; + code = buildIntervalResult(pOperator, &resBlock); + QUERY_CHECK_CODE(code, lino, _end); if (resBlock != NULL) { (*ppRes) = resBlock; return code; @@ -5511,7 +5564,7 @@ static int32_t doStreamMidIntervalAggNext(SOperatorInfo* pOperator, SSDataBlock* _end: if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } (*ppRes) = NULL; return code; @@ -5519,7 +5572,7 @@ _end: static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doStreamMidIntervalAggNext(pOperator, &pRes); + int32_t code = doStreamMidIntervalAggNext(pOperator, &pRes); return pRes; } diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index 094e6575d1..b502baa8ec 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -1984,7 +1984,11 @@ static SSDataBlock* sysTableScanFromMNode(SOperatorInfo* pOperator, SSysTableSca int32_t contLen = tSerializeSRetrieveTableReq(NULL, 0, &pInfo->req); char* buf1 = taosMemoryCalloc(1, contLen); - (void)tSerializeSRetrieveTableReq(buf1, contLen, &pInfo->req); + int32_t tempRes = tSerializeSRetrieveTableReq(buf1, contLen, &pInfo->req); + if (tempRes < 0) { + code = terrno; + return NULL; + } // send the fetch remote task result reques SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); @@ -2589,7 +2593,11 @@ static int32_t doBlockInfoScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes char* p = taosMemoryCalloc(1, len + VARSTR_HEADER_SIZE); QUERY_CHECK_NULL(p, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); - (void)tSerializeBlockDistInfo(varDataVal(p), len, &blockDistInfo); + int32_t tempRes = tSerializeBlockDistInfo(varDataVal(p), len, &blockDistInfo); + if (tempRes < 0) { + code = terrno; + QUERY_CHECK_CODE(code, lino, _end); + } varDataSetLen(p, len); code = colDataSetVal(pColInfo, 0, p, false); @@ -2619,7 +2627,7 @@ _end: static SSDataBlock* doBlockInfoScan(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; - int32_t code = doBlockInfoScanNext(pOperator, &pRes); + int32_t code = doBlockInfoScanNext(pOperator, &pRes); return pRes; } diff --git a/source/libs/executor/src/tfill.c b/source/libs/executor/src/tfill.c index bfb9c5a5c1..a9bc6e8c0f 100644 --- a/source/libs/executor/src/tfill.c +++ b/source/libs/executor/src/tfill.c @@ -47,9 +47,9 @@ static void setNotFillColumn(SFillInfo* pFillInfo, SColumnInfoData* pDstColInfo, } SGroupKeys* pKey = taosArrayGet(p->pRowVal, colIdx); - int32_t code = doSetVal(pDstColInfo, rowIndex, pKey); + int32_t code = doSetVal(pDstColInfo, rowIndex, pKey); if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); T_LONG_JMP(pFillInfo->pTaskInfo->env, code); } } @@ -511,13 +511,14 @@ static int32_t taosNumOfRemainRows(SFillInfo* pFillInfo) { return pFillInfo->numOfRows - pFillInfo->index; } -struct SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t numOfNotFillCols, int32_t capacity, - SInterval* pInterval, int32_t fillType, struct SFillColInfo* pCol, - int32_t primaryTsSlotId, int32_t order, const char* id, SExecTaskInfo* pTaskInfo) { +void taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t numOfNotFillCols, int32_t capacity, + SInterval* pInterval, int32_t fillType, struct SFillColInfo* pCol, int32_t primaryTsSlotId, + int32_t order, const char* id, SExecTaskInfo* pTaskInfo, SFillInfo** ppFillInfo) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; if (fillType == TSDB_FILL_NONE) { - return NULL; + (*ppFillInfo) = NULL; + return; } SFillInfo* pFillInfo = taosMemoryCalloc(1, sizeof(SFillInfo)); @@ -562,7 +563,7 @@ _end: terrno = code; T_LONG_JMP(pTaskInfo->env, code); } - return pFillInfo; + (*ppFillInfo) = pFillInfo; } void taosResetFillInfo(SFillInfo* pFillInfo, TSKEY startTimestamp) { From 0d5323c587670323b6b56391402420c6ba3d7bca Mon Sep 17 00:00:00 2001 From: kailixu Date: Wed, 24 Jul 2024 23:46:06 +0800 Subject: [PATCH 22/35] 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 f43915b74ef7f0ad7c0f0718c80fe368cbff5a23 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Thu, 25 Jul 2024 08:54:48 +0800 Subject: [PATCH 23/35] fix issue --- source/libs/executor/src/streameventwindowoperator.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 1181b1d981..728ac317d4 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -591,7 +591,7 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe SStreamEventAggOperatorInfo* pInfo = pOperator->info; SOptrBasicInfo* pBInfo = &pInfo->binfo; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - qDebug("===stream=== stream event agg"); + qDebug("===stream=== stream event agg. history task:%d, taskId:%s", pInfo->isHistoryOp, GET_TASKID(pTaskInfo)); if (pOperator->status == OP_RES_TO_RETURN) { SSDataBlock* resBlock = NULL; code = buildEventResult(pOperator, &resBlock); @@ -692,6 +692,10 @@ static int32_t doStreamEventAggNext(SOperatorInfo* pOperator, SSDataBlock** ppRe code = copyUpdateResult(&pInfo->pAllUpdated, pHisWins, sessionKeyCompareAsc); QUERY_CHECK_CODE(code, lino, _end); + _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); + pInfo->pAllUpdated = tSimpleHashInit(64, hashFn); + QUERY_CHECK_NULL(pInfo->pAllUpdated, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + code = getMaxTsWins(pHisWins, pInfo->historyWins); QUERY_CHECK_CODE(code, lino, _end); From d8649065d17d2957e90df06767c6b2a612efd383 Mon Sep 17 00:00:00 2001 From: dmchen Date: Thu, 25 Jul 2024 01:22:10 +0000 Subject: [PATCH 24/35] fix/TD-30989 --- source/dnode/mnode/impl/src/mndTrans.c | 148 +++++++++++++------------ 1 file changed, 78 insertions(+), 70 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndTrans.c b/source/dnode/mnode/impl/src/mndTrans.c index 58dab20859..9b4379fb36 100644 --- a/source/dnode/mnode/impl/src/mndTrans.c +++ b/source/dnode/mnode/impl/src/mndTrans.c @@ -541,8 +541,7 @@ static int32_t mndTransActionUpdate(SSdb *pSdb, STrans *pOld, STrans *pNew) { pOld->id, pOld, mndTransStr(pOld->stage), pOld->createdTime, pNew, mndTransStr(pNew->stage), pNew->createdTime); // only occured while sync timeout - terrno = TSDB_CODE_MND_TRANS_SYNC_TIMEOUT; - return -1; + TAOS_RETURN(TSDB_CODE_MND_TRANS_SYNC_TIMEOUT); } mndTransUpdateActions(pOld->prepareActions, pNew->prepareActions); @@ -660,8 +659,7 @@ static int32_t mndTransAppendAction(SArray *pArray, STransAction *pAction) { void *ptr = taosArrayPush(pArray, pAction); if (ptr == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } return 0; @@ -772,26 +770,29 @@ void mndTransSetChangeless(STrans *pTrans) { pTrans->changeless = true; } void mndTransSetOper(STrans *pTrans, EOperType oper) { pTrans->oper = oper; } static int32_t mndTransSync(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; SSdbRaw *pRaw = mndTransEncode(pTrans); if (pRaw == NULL) { - mError("trans:%d, failed to encode while sync trans since %s", pTrans->id, terrstr()); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + mError("trans:%d, failed to encode while sync trans since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); mInfo("trans:%d, sync to other mnodes, stage:%s createTime:%" PRId64, pTrans->id, mndTransStr(pTrans->stage), pTrans->createdTime); - int32_t code = mndSyncPropose(pMnode, pRaw, pTrans->id); + code = mndSyncPropose(pMnode, pRaw, pTrans->id); if (code != 0) { - mError("trans:%d, failed to sync, errno:%s code:0x%x createTime:%" PRId64 " saved trans:%d", pTrans->id, terrstr(), - code, pTrans->createdTime, pMnode->syncMgmt.transId); + mError("trans:%d, failed to sync, errno:%s code:0x%x createTime:%" PRId64 " saved trans:%d", pTrans->id, + tstrerror(code), code, pTrans->createdTime, pMnode->syncMgmt.transId); sdbFreeRaw(pRaw); - return -1; + TAOS_RETURN(code); } sdbFreeRaw(pRaw); mInfo("trans:%d, sync finished, createTime:%" PRId64, pTrans->id, pTrans->createdTime); - return 0; + TAOS_RETURN(code); } static bool mndCheckDbConflict(const char *conflict, STrans *pTrans) { @@ -883,24 +884,26 @@ static bool mndCheckTransConflict(SMnode *pMnode, STrans *pNew) { } int32_t mndTransCheckConflict(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; if (pTrans->conflict == TRN_CONFLICT_DB || pTrans->conflict == TRN_CONFLICT_DB_INSIDE) { if (strlen(pTrans->dbname) == 0 && strlen(pTrans->stbname) == 0) { - terrno = TSDB_CODE_MND_TRANS_CONFLICT; + code = TSDB_CODE_MND_TRANS_CONFLICT; mError("trans:%d, failed to prepare conflict db not set", pTrans->id); - return -1; + TAOS_RETURN(code); } } if (mndCheckTransConflict(pMnode, pTrans)) { - terrno = TSDB_CODE_MND_TRANS_CONFLICT; - mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); - return terrno; + code = TSDB_CODE_MND_TRANS_CONFLICT; + mError("trans:%d, failed to prepare since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } int32_t mndTransCheckConflictWithCompact(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; void *pIter = NULL; bool conflict = false; SCompactObj *pCompact = NULL; @@ -927,12 +930,12 @@ int32_t mndTransCheckConflictWithCompact(SMnode *pMnode, STrans *pTrans) { } if (conflict) { - terrno = TSDB_CODE_MND_TRANS_CONFLICT_COMPACT; - mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); - return terrno; + code = TSDB_CODE_MND_TRANS_CONFLICT_COMPACT; + mError("trans:%d, failed to prepare since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static bool mndTransActionsOfSameType(SArray *pActions) { @@ -953,66 +956,65 @@ static bool mndTransActionsOfSameType(SArray *pActions) { } static int32_t mndTransCheckParallelActions(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; if (pTrans->exec == TRN_EXEC_PARALLEL) { if (mndTransActionsOfSameType(pTrans->redoActions) == false) { - terrno = TSDB_CODE_MND_TRANS_INVALID_STAGE; + code = TSDB_CODE_MND_TRANS_INVALID_STAGE; mError("trans:%d, types of parallel redo actions are not the same", pTrans->id); - return -1; + TAOS_RETURN(code); } if (pTrans->policy == TRN_POLICY_ROLLBACK) { if (mndTransActionsOfSameType(pTrans->undoActions) == false) { - terrno = TSDB_CODE_MND_TRANS_INVALID_STAGE; + code = TSDB_CODE_MND_TRANS_INVALID_STAGE; mError("trans:%d, types of parallel undo actions are not the same", pTrans->id); - return -1; + TAOS_RETURN(code); } } } - return 0; + TAOS_RETURN(code); } static int32_t mndTransCheckCommitActions(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; if (!pTrans->changeless && taosArrayGetSize(pTrans->commitActions) <= 0) { - terrno = TSDB_CODE_MND_TRANS_CLOG_IS_NULL; + code = TSDB_CODE_MND_TRANS_CLOG_IS_NULL; mError("trans:%d, commit actions of non-changeless trans are empty", pTrans->id); - return -1; + TAOS_RETURN(code); } if (mndTransActionsOfSameType(pTrans->commitActions) == false) { - terrno = TSDB_CODE_MND_TRANS_INVALID_STAGE; + code = TSDB_CODE_MND_TRANS_INVALID_STAGE; mError("trans:%d, types of commit actions are not the same", pTrans->id); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; if (pTrans == NULL) return -1; - if (mndTransCheckConflict(pMnode, pTrans) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndTransCheckConflict(pMnode, pTrans)); - if (mndTransCheckParallelActions(pMnode, pTrans) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndTransCheckParallelActions(pMnode, pTrans)); - if (mndTransCheckCommitActions(pMnode, pTrans) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndTransCheckCommitActions(pMnode, pTrans)); mInfo("trans:%d, prepare transaction", pTrans->id); - if (mndTransSync(pMnode, pTrans) != 0) { - mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); - return -1; + if ((code = mndTransSync(pMnode, pTrans)) != 0) { + mError("trans:%d, failed to prepare since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } mInfo("trans:%d, prepare finished", pTrans->id); STrans *pNew = mndAcquireTrans(pMnode, pTrans->id); if (pNew == NULL) { - mError("trans:%d, failed to read from sdb since %s", pTrans->id, terrstr()); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + mError("trans:%d, failed to read from sdb since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } pNew->pRpcArray = pTrans->pRpcArray; @@ -1025,37 +1027,41 @@ int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) { mndTransExecute(pMnode, pNew); mndReleaseTrans(pMnode, pNew); + // TDOD change to TAOS_RETURN(code); return 0; } static int32_t mndTransCommit(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; mInfo("trans:%d, commit transaction", pTrans->id); - if (mndTransSync(pMnode, pTrans) != 0) { - mError("trans:%d, failed to commit since %s", pTrans->id, terrstr()); - return -1; + if ((code = mndTransSync(pMnode, pTrans)) != 0) { + mError("trans:%d, failed to commit since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } mInfo("trans:%d, commit finished", pTrans->id); - return 0; + TAOS_RETURN(code); } static int32_t mndTransRollback(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; mInfo("trans:%d, rollback transaction", pTrans->id); - if (mndTransSync(pMnode, pTrans) != 0) { - mError("trans:%d, failed to rollback since %s", pTrans->id, terrstr()); - return -1; + if ((code = mndTransSync(pMnode, pTrans)) != 0) { + mError("trans:%d, failed to rollback since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } mInfo("trans:%d, rollback finished", pTrans->id); - return 0; + TAOS_RETURN(code); } static int32_t mndTransPreFinish(SMnode *pMnode, STrans *pTrans) { + int32_t code = 0; mInfo("trans:%d, pre-finish transaction", pTrans->id); - if (mndTransSync(pMnode, pTrans) != 0) { - mError("trans:%d, failed to pre-finish since %s", pTrans->id, terrstr()); - return -1; + if ((code = mndTransSync(pMnode, pTrans)) != 0) { + mError("trans:%d, failed to pre-finish since %s", pTrans->id, tstrerror(code)); + TAOS_RETURN(code); } mInfo("trans:%d, pre-finish finished", pTrans->id); - return 0; + TAOS_RETURN(code); } static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) { @@ -1161,6 +1167,7 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) { } int32_t mndTransProcessRsp(SRpcMsg *pRsp) { + int32_t code = 0; SMnode *pMnode = pRsp->info.node; int64_t signature = (int64_t)(pRsp->info.ahandle); int32_t transId = (int32_t)(signature >> 32); @@ -1168,7 +1175,9 @@ int32_t mndTransProcessRsp(SRpcMsg *pRsp) { STrans *pTrans = mndAcquireTrans(pMnode, transId); if (pTrans == NULL) { - mError("trans:%d, failed to get transId from vnode rsp since %s", transId, terrstr()); + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + mError("trans:%d, failed to get transId from vnode rsp since %s", transId, tstrerror(code)); goto _OVER; } @@ -1209,7 +1218,7 @@ int32_t mndTransProcessRsp(SRpcMsg *pRsp) { _OVER: mndReleaseTrans(pMnode, pTrans); - return 0; + TAOS_RETURN(code); } static void mndTransResetAction(SMnode *pMnode, STrans *pTrans, STransAction *pAction) { @@ -1245,8 +1254,7 @@ static void mndTransResetActions(SMnode *pMnode, STrans *pTrans, SArray *pArray) static int32_t mndTransWriteSingleLog(SMnode *pMnode, STrans *pTrans, STransAction *pAction, bool topHalf) { if (pAction->rawWritten) return 0; if (topHalf) { - terrno = TSDB_CODE_MND_TRANS_CTX_SWITCH; - return TSDB_CODE_MND_TRANS_CTX_SWITCH; + TAOS_RETURN(TSDB_CODE_MND_TRANS_CTX_SWITCH); } int32_t code = sdbWriteWithoutFree(pMnode->pSdb, pAction->pRaw); @@ -1265,15 +1273,14 @@ static int32_t mndTransWriteSingleLog(SMnode *pMnode, STrans *pTrans, STransActi mndSetTransLastAction(pTrans, pAction); } - return code; + TAOS_RETURN(code); } // execute at top half static int32_t mndTransSendSingleMsg(SMnode *pMnode, STrans *pTrans, STransAction *pAction, bool topHalf) { if (pAction->msgSent) return 0; if (mndCannotExecuteTransAction(pMnode, topHalf)) { - terrno = TSDB_CODE_MND_TRANS_CTX_SWITCH; - return TSDB_CODE_MND_TRANS_CTX_SWITCH; + TAOS_RETURN(TSDB_CODE_MND_TRANS_CTX_SWITCH); } int64_t signature = pTrans->id; @@ -1317,7 +1324,7 @@ static int32_t mndTransSendSingleMsg(SMnode *pMnode, STrans *pTrans, STransActio mndSetTransLastAction(pTrans, pAction); } - return code; + TAOS_RETURN(code); } static int32_t mndTransExecNullMsg(SMnode *pMnode, STrans *pTrans, STransAction *pAction, bool topHalf) { @@ -1815,8 +1822,7 @@ int32_t mndKillTrans(SMnode *pMnode, STrans *pTrans) { } else if (pTrans->stage == TRN_STAGE_UNDO_ACTION) { pArray = pTrans->undoActions; } else { - terrno = TSDB_CODE_MND_TRANS_INVALID_STAGE; - return -1; + TAOS_RETURN(TSDB_CODE_MND_TRANS_INVALID_STAGE); } for (int32_t i = 0; i < taosArrayGetSize(pArray); ++i) { @@ -1839,17 +1845,19 @@ static int32_t mndProcessKillTransReq(SRpcMsg *pReq) { STrans *pTrans = NULL; if (tDeserializeSKillTransReq(pReq->pCont, pReq->contLen, &killReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto _OVER; } mInfo("trans:%d, start to kill", killReq.transId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_TRANS) != 0) { + if ((code = mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_TRANS)) != 0) { goto _OVER; } pTrans = mndAcquireTrans(pMnode, killReq.transId); if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -1861,7 +1869,7 @@ _OVER: } mndReleaseTrans(pMnode, pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndCompareTransId(int32_t *pTransId1, int32_t *pTransId2) { return *pTransId1 >= *pTransId2 ? 1 : 0; } From 7ee18c51784ae92d888ba9f32a7b4a28225bf69f Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 25 Jul 2024 09:31:35 +0800 Subject: [PATCH 25/35] 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 26/35] 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); } From ea7eebc8a9be8d7bede8bc008f0fab1f99efab6b Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 25 Jul 2024 10:32:56 +0800 Subject: [PATCH 27/35] check memory alloc return values --- source/dnode/vnode/src/tsdb/tsdbCache.c | 182 ++++++++++++++++++++---- 1 file changed, 157 insertions(+), 25 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 459ad39819..b6c389842e 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -63,7 +63,6 @@ static void tsdbCloseBCache(STsdb *pTsdb) { static int32_t tsdbOpenPgCache(STsdb *pTsdb) { int32_t code = 0, lino = 0; - // SLRUCache *pCache = taosLRUCacheInit(10 * 1024 * 1024, 0, .5); int32_t szPage = pTsdb->pVnode->config.tsdbPageSize; SLRUCache *pCache = taosLRUCacheInit((int64_t)tsS3PageCacheSize * szPage, 0, .5); @@ -659,11 +658,23 @@ static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int32_t code = 0; // build keys & multi get from rocks - char **keys_list = taosMemoryCalloc(2, sizeof(char *)); - size_t *keys_list_sizes = taosMemoryCalloc(2, sizeof(size_t)); + char **keys_list = taosMemoryCalloc(2, sizeof(char *)); + if (!keys_list) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } + size_t *keys_list_sizes = taosMemoryCalloc(2, sizeof(size_t)); + if (!keys_list_sizes) { + taosMemoryFree(keys_list); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } const size_t klen = ROCKS_KEY_LEN; char *keys = taosMemoryCalloc(2, sizeof(SLastKey)); + if (!keys) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } ((SLastKey *)keys)[0] = (SLastKey){.lflag = LFLAG_LAST, .uid = uid, .cid = cid}; ((SLastKey *)keys)[1] = (SLastKey){.lflag = LFLAG_LAST_ROW, .uid = uid, .cid = cid}; @@ -672,9 +683,30 @@ static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, keys_list_sizes[0] = klen; keys_list_sizes[1] = klen; - char **values_list = taosMemoryCalloc(2, sizeof(char *)); + char **values_list = taosMemoryCalloc(2, sizeof(char *)); + if (!values_list) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(keys_list[0]); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } size_t *values_list_sizes = taosMemoryCalloc(2, sizeof(size_t)); - char **errs = taosMemoryCalloc(2, sizeof(char *)); + if (!values_list_sizes) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(keys_list[0]); + taosMemoryFree(values_list); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } + char **errs = taosMemoryCalloc(2, sizeof(char *)); + if (!errs) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(keys_list[0]); + taosMemoryFree(values_list); + taosMemoryFree(values_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } // rocksMayWrite(pTsdb, true, false, false); rocksdb_multi_get(pTsdb->rCache.db, pTsdb->rCache.readoptions, 2, (const char *const *)keys_list, keys_list_sizes, @@ -960,6 +992,9 @@ static int32_t tsdbCacheUpdateValue(SValue *pOld, SValue *pNew) { if (IS_VAR_DATA_TYPE(pNew->type)) { if (nData < pNew->nData) { pOld->pData = taosMemoryCalloc(1, pNew->nData); + if (!pOld->pData) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } } else { pOld->pData = pFree; pFree = NULL; @@ -1044,17 +1079,35 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray num_keys = TARRAY_SIZE(remainCols); } if (remainCols && num_keys > 0) { - char **keys_list = taosMemoryCalloc(num_keys, sizeof(char *)); - size_t *keys_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); + char **keys_list = NULL; + size_t *keys_list_sizes = NULL; + char **values_list = NULL; + size_t *values_list_sizes = NULL; + char **errs = NULL; + keys_list = taosMemoryCalloc(num_keys, sizeof(char *)); + keys_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); + if (!keys_list || !keys_list_sizes) { + taosMemoryFree(keys_list); + taosThreadMutexUnlock(&pTsdb->lruMutex); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } for (int i = 0; i < num_keys; ++i) { SIdxKey *idxKey = &((SIdxKey *)TARRAY_DATA(remainCols))[i]; keys_list[i] = (char *)&idxKey->key; keys_list_sizes[i] = ROCKS_KEY_LEN; } - char **values_list = taosMemoryCalloc(num_keys, sizeof(char *)); - size_t *values_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); - char **errs = taosMemoryCalloc(num_keys, sizeof(char *)); + values_list = taosMemoryCalloc(num_keys, sizeof(char *)); + values_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); + errs = taosMemoryCalloc(num_keys, sizeof(char *)); + if (!values_list || !values_list_sizes || !errs) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(values_list); + taosMemoryFree(values_list_sizes); + taosThreadMutexUnlock(&pTsdb->lruMutex); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } rocksdb_multi_get(pTsdb->rCache.db, pTsdb->rCache.readoptions, num_keys, (const char *const *)keys_list, keys_list_sizes, values_list, values_list_sizes, errs); for (int i = 0; i < num_keys; ++i) { @@ -1104,6 +1157,16 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray pLastCol = &lastColTmp; SLastCol *pTmpLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); + if (!pTmpLastCol) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(values_list); + taosMemoryFree(values_list_sizes); + + taosArrayDestroy(remainCols); + taosThreadMutexUnlock(&pTsdb->lruMutex); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } *pTmpLastCol = *pLastCol; pLastCol = pTmpLastCol; @@ -1322,18 +1385,30 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr int num_keys = TARRAY_SIZE(remainCols); int16_t *slotIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); - int16_t *lastColIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); - int16_t *lastSlotIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); - int16_t *lastrowColIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); - int16_t *lastrowSlotIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); - SArray *lastTmpColArray = NULL; - SArray *lastTmpIndexArray = NULL; - SArray *lastrowTmpColArray = NULL; - SArray *lastrowTmpIndexArray = NULL; + int16_t *lastColIds = NULL; + int16_t *lastSlotIds = NULL; + int16_t *lastrowColIds = NULL; + int16_t *lastrowSlotIds = NULL; + lastColIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); + lastSlotIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); + lastrowColIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); + lastrowSlotIds = taosMemoryMalloc(num_keys * sizeof(int16_t)); + SArray *lastTmpColArray = NULL; + SArray *lastTmpIndexArray = NULL; + SArray *lastrowTmpColArray = NULL; + SArray *lastrowTmpIndexArray = NULL; int lastIndex = 0; int lastrowIndex = 0; + if (!slotIds || !lastColIds || !lastSlotIds || !lastrowColIds || !lastrowSlotIds) { + taosMemoryFree(slotIds); + taosMemoryFree(lastColIds); + taosMemoryFree(lastSlotIds); + taosMemoryFree(lastrowColIds); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } + for (int i = 0; i < num_keys; ++i) { SIdxKey *idxKey = taosArrayGet(remainCols, i); slotIds[i] = pr->pSlotIds[idxKey->idx]; @@ -1401,6 +1476,14 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr } SLastCol *pTmpLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); + if (!pTmpLastCol) { + taosMemoryFree(slotIds); + taosMemoryFree(lastColIds); + taosMemoryFree(lastSlotIds); + taosMemoryFree(lastrowColIds); + taosMemoryFree(lastrowSlotIds); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } *pTmpLastCol = *pLastCol; pLastCol = pTmpLastCol; @@ -1420,7 +1503,7 @@ static int32_t tsdbCacheLoadFromRaw(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArr LRUStatus status = taosLRUCacheInsert(pCache, &idxKey->key, ROCKS_KEY_LEN, pLastCol, charge, tsdbCacheDeleter, NULL, TAOS_LRU_PRIORITY_LOW, &pTsdb->flushState); if (status != TAOS_LRU_STATUS_OK) { - code = -1; + // code = -1; } // store result back to rocks cache @@ -1466,6 +1549,11 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA char **keys_list = taosMemoryMalloc(num_keys * sizeof(char *)); size_t *keys_list_sizes = taosMemoryMalloc(num_keys * sizeof(size_t)); char *key_list = taosMemoryMalloc(num_keys * ROCKS_KEY_LEN); + if (!keys_list || !keys_list_sizes || !key_list) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } for (int i = 0; i < num_keys; ++i) { int16_t cid = *(int16_t *)taosArrayGet(remainCols, i); @@ -1477,6 +1565,13 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA char **values_list = taosMemoryCalloc(num_keys, sizeof(char *)); size_t *values_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); char **errs = taosMemoryMalloc(num_keys * sizeof(char *)); + if (!values_list || !values_list_sizes || !errs) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(values_list); + taosMemoryFree(values_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } rocksdb_multi_get(pTsdb->rCache.db, pTsdb->rCache.readoptions, num_keys, (const char *const *)keys_list, keys_list_sizes, values_list, values_list_sizes, errs); for (int i = 0; i < num_keys; ++i) { @@ -1486,6 +1581,7 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA rocksdb_free(errs[i]); } } + taosMemoryFree(errs); SLRUCache *pCache = pTsdb->lruCache; for (int i = 0, j = 0; i < num_keys && j < TARRAY_SIZE(remainCols); ++i) { @@ -1498,6 +1594,13 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA SIdxKey *idxKey = &((SIdxKey *)TARRAY_DATA(remainCols))[j]; if (pLastCol) { SLastCol *pTmpLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); + if (!pTmpLastCol) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(values_list); + taosMemoryFree(values_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } *pTmpLastCol = *pLastCol; pLastCol = pTmpLastCol; @@ -1535,7 +1638,6 @@ static int32_t tsdbCacheLoadFromRocks(STsdb *pTsdb, tb_uid_t uid, SArray *pLastA } } - taosMemoryFree(errs); taosMemoryFree(key_list); taosMemoryFree(keys_list); taosMemoryFree(keys_list_sizes); @@ -1649,15 +1751,24 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE TAOS_CHECK_RETURN(metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, sver, &pTSchema)); // build keys & multi get from rocks - int num_keys = pTSchema->numOfCols; - char **keys_list = taosMemoryCalloc(num_keys * 2, sizeof(char *)); - size_t *keys_list_sizes = taosMemoryCalloc(num_keys * 2, sizeof(size_t)); + int num_keys = pTSchema->numOfCols; + char **keys_list = taosMemoryCalloc(num_keys * 2, sizeof(char *)); + size_t *keys_list_sizes = taosMemoryCalloc(num_keys * 2, sizeof(size_t)); + if (!keys_list || !keys_list_sizes) { + taosMemoryFree(keys_list); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } const size_t klen = ROCKS_KEY_LEN; for (int i = 0; i < num_keys; ++i) { int16_t cid = pTSchema->columns[i].colId; char *keys = taosMemoryCalloc(2, sizeof(SLastKey)); + if (!keys) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } ((SLastKey *)keys)[0] = (SLastKey){.lflag = LFLAG_LAST, .uid = uid, .cid = cid}; ((SLastKey *)keys)[1] = (SLastKey){.lflag = LFLAG_LAST_ROW, .uid = uid, .cid = cid}; @@ -1669,6 +1780,15 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE char **values_list = taosMemoryCalloc(num_keys * 2, sizeof(char *)); size_t *values_list_sizes = taosMemoryCalloc(num_keys * 2, sizeof(size_t)); char **errs = taosMemoryCalloc(num_keys * 2, sizeof(char *)); + if (!values_list_sizes || !values_list) { + taosMemoryFree(keys_list); + taosMemoryFree(keys_list_sizes); + taosMemoryFree(values_list); + for (int i = 0; i < num_keys; ++i) { + taosMemoryFree(keys_list[i]); + } + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } (void)tsdbCacheCommit(pTsdb); @@ -1885,7 +2005,9 @@ static STableLoadInfo *getTableLoadInfo(SCacheRowsReader *pReader, uint64_t uid) STableLoadInfo **ppInfo = tSimpleHashGet(pReader->pTableMap, &uid, sizeof(uid)); if (!ppInfo) { pInfo = taosMemoryCalloc(1, sizeof(STableLoadInfo)); - tSimpleHashPut(pReader->pTableMap, &uid, sizeof(uint64_t), &pInfo, POINTER_BYTES); + if (pInfo) { + tSimpleHashPut(pReader->pTableMap, &uid, sizeof(uint64_t), &pInfo, POINTER_BYTES); + } return pInfo; } @@ -1898,6 +2020,9 @@ static uint64_t *getUidList(SCacheRowsReader *pReader) { int32_t numOfTables = pReader->numOfTables; pReader->uidList = taosMemoryMalloc(numOfTables * sizeof(uint64_t)); + if (!pReader->uidList) { + return NULL; + } for (int32_t i = 0; i < numOfTables; ++i) { uint64_t uid = pReader->pTableList[i].uid; @@ -1913,9 +2038,13 @@ static uint64_t *getUidList(SCacheRowsReader *pReader) { static int32_t loadTombFromBlk(const TTombBlkArray *pTombBlkArray, SCacheRowsReader *pReader, void *pFileReader, bool isFile) { int32_t code = 0; - uint64_t *uidList = getUidList(pReader); int32_t numOfTables = pReader->numOfTables; int64_t suid = pReader->info.suid; + uint64_t *uidList = getUidList(pReader); + + if (!uidList) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } for (int i = 0, j = 0; i < pTombBlkArray->size && j < numOfTables; ++i) { STombBlk *pTombBlk = &pTombBlkArray->data[i]; @@ -3296,6 +3425,9 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ size_t charge = pFD->szPage; _taos_lru_deleter_t deleter = deleteBCache; uint8_t *pPg = taosMemoryMalloc(charge); + if (!pPg) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } memcpy(pPg, pPage, charge); LRUStatus status = From 6397d7a81d53e45f32e4148489e95aeee3b0c52e Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Thu, 25 Jul 2024 10:41:50 +0800 Subject: [PATCH 28/35] fix issue --- source/libs/executor/src/scanoperator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index c8fa1cbbc0..8cb4bfeb2f 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -3521,8 +3521,8 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { void* metaBuff = POINTER_SHIFT(tBuf, sizeof(SMqRspHead)); SEncoder encoder = {0}; tEncoderInit(&encoder, metaBuff, len); - tempRes = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); - if (TSDB_CODE_SUCCESS != tempRes) { + int32_t tempLen = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); + if (tempLen < 0) { qError("tmqsnap tEncodeMqMetaRsp error"); tEncoderClear(&encoder); taosMemoryFreeClear(tBuf); From aa921c987097d936db8438fde74498eb5b6d88ed Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 25 Jul 2024 11:13:04 +0800 Subject: [PATCH 29/35] update sync raft log --- source/dnode/vnode/src/tsdb/tsdbCache.c | 7 ++- source/libs/sync/src/syncRaftLog.c | 61 ++++++++++++++++--------- source/util/src/tlrucache.c | 19 ++++---- 3 files changed, 50 insertions(+), 37 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index b6c389842e..1726d8696b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -1888,11 +1888,10 @@ _exit: } int32_t tsdbOpenCache(STsdb *pTsdb) { - int32_t code = 0, lino = 0; - SLRUCache *pCache = NULL; - size_t cfgCapacity = pTsdb->pVnode->config.cacheLastSize * 1024 * 1024; + int32_t code = 0, lino = 0; + size_t cfgCapacity = pTsdb->pVnode->config.cacheLastSize * 1024 * 1024; - pCache = taosLRUCacheInit(cfgCapacity, 0, .5); + SLRUCache *pCache = taosLRUCacheInit(cfgCapacity, 0, .5); if (pCache == NULL) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _err); } diff --git a/source/libs/sync/src/syncRaftLog.c b/source/libs/sync/src/syncRaftLog.c index 19c8837d83..57c70d8df1 100644 --- a/source/libs/sync/src/syncRaftLog.c +++ b/source/libs/sync/src/syncRaftLog.c @@ -51,7 +51,12 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) { taosLRUCacheSetStrictCapacity(pLogStore->pCache, false); pLogStore->data = taosMemoryMalloc(sizeof(SSyncLogStoreData)); - ASSERT(pLogStore->data != NULL); + if (!pLogStore->data) { + taosMemoryFree(pLogStore); + taosLRUCacheCleanup(pLogStore->pCache); + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; + } SSyncLogStoreData* pData = pLogStore->data; pData->pSyncNode = pSyncNode; @@ -60,7 +65,13 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) { taosThreadMutexInit(&(pData->mutex), NULL); pData->pWalHandle = walOpenReader(pData->pWal, NULL, 0); - ASSERT(pData->pWalHandle != NULL); + if (!pData->pWalHandle) { + taosMemoryFree(pLogStore); + taosLRUCacheCleanup(pLogStore->pCache); + taosThreadMutexDestroy(&(pData->mutex)); + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; + } pLogStore->syncLogUpdateCommitIndex = raftLogUpdateCommitIndex; pLogStore->syncLogCommitIndex = raftlogCommitIndex; @@ -110,7 +121,7 @@ static int32_t raftLogRestoreFromSnapshot(struct SSyncLogStore* pLogStore, SyncI SWal* pWal = pData->pWal; int32_t code = walRestoreFromSnapshot(pWal, snapshotIndex); if (code != 0) { - int32_t err = terrno; + int32_t err = code; const char* errStr = tstrerror(err); int32_t sysErr = errno; const char* sysErrStr = strerror(errno); @@ -118,10 +129,10 @@ static int32_t raftLogRestoreFromSnapshot(struct SSyncLogStore* pLogStore, SyncI sNError(pData->pSyncNode, "wal restore from snapshot error, index:%" PRId64 ", err:0x%x, msg:%s, syserr:%d, sysmsg:%s", snapshotIndex, err, errStr, sysErr, sysErrStr); - return -1; + TAOS_RETURN(err); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } SyncIndex raftLogBeginIndex(struct SSyncLogStore* pLogStore) { @@ -224,7 +235,8 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr sNError(pData->pSyncNode, "wal write error, index:%" PRId64 ", err:0x%x, msg:%s, syserr:%d, sysmsg:%s", pEntry->index, err, errStr, sysErr, sysErrStr); - return -1; + + TAOS_RETURN(err); } code = walFsync(pWal, forceSync); @@ -235,7 +247,7 @@ static int32_t raftLogAppendEntry(struct SSyncLogStore* pLogStore, SSyncRaftEntr sNTrace(pData->pSyncNode, "write index:%" PRId64 ", type:%s, origin type:%s, elapsed:%" PRId64, pEntry->index, TMSG_INFO(pEntry->msgType), TMSG_INFO(pEntry->originalRpcType), tsElapsed); - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } // entry found, return 0 @@ -253,10 +265,10 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR SWalReader* pWalHandle = pData->pWalHandle; if (pWalHandle == NULL) { - terrno = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, wal handle is NULL", pData->pSyncNode->vgId); taosThreadMutexUnlock(&(pData->mutex)); - return -1; + + TAOS_RETURN(TSDB_CODE_SYN_INTERNAL_ERROR); } int64_t ts2 = taosGetTimestampNs(); @@ -266,7 +278,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR // code = walReadVerCached(pWalHandle, index); if (code != 0) { - int32_t err = terrno; + int32_t err = code; const char* errStr = tstrerror(err); int32_t sysErr = errno; const char* sysErrStr = strerror(errno); @@ -286,7 +298,8 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR */ taosThreadMutexUnlock(&(pData->mutex)); - return code; + + TAOS_RETURN(code); } *ppEntry = syncEntryBuild(pWalHandle->pHead->head.bodyLen); @@ -319,7 +332,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR ", elapsed-build:%" PRId64, index, tsElapsed, tsElapsedLock, tsElapsedRead, tsElapsedBuild); - return code; + TAOS_RETURN(code); } // truncate semantic @@ -329,7 +342,7 @@ static int32_t raftLogTruncate(struct SSyncLogStore* pLogStore, SyncIndex fromIn int32_t code = walRollback(pWal, fromIndex); if (code != 0) { - int32_t err = terrno; + int32_t err = code; const char* errStr = tstrerror(err); int32_t sysErr = errno; const char* sysErrStr = strerror(errno); @@ -339,7 +352,8 @@ static int32_t raftLogTruncate(struct SSyncLogStore* pLogStore, SyncIndex fromIn // event log sNTrace(pData->pSyncNode, "log truncate, from-index:%" PRId64, fromIndex); - return code; + + TAOS_RETURN(code); } // entry found, return 0 @@ -352,16 +366,16 @@ static int32_t raftLogGetLastEntry(SSyncLogStore* pLogStore, SSyncRaftEntry** pp *ppLastEntry = NULL; if (walIsEmpty(pWal)) { - terrno = TSDB_CODE_WAL_LOG_NOT_EXIST; - return -1; + TAOS_RETURN(TSDB_CODE_WAL_LOG_NOT_EXIST); } else { SyncIndex lastIndex = raftLogLastIndex(pLogStore); ASSERT(lastIndex >= SYNC_INDEX_BEGIN); int32_t code = raftLogGetEntry(pLogStore, lastIndex, ppLastEntry); - return code; + + TAOS_RETURN(code); } - return -1; + TAOS_RETURN(TSDB_CODE_FAILED); } int32_t raftLogUpdateCommitIndex(SSyncLogStore* pLogStore, SyncIndex index) { @@ -375,20 +389,22 @@ int32_t raftLogUpdateCommitIndex(SSyncLogStore* pLogStore, SyncIndex index) { if (index < snapshotVer || index > wallastVer) { // ignore - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t code = walCommit(pWal, index); if (code != 0) { - int32_t err = terrno; + int32_t err = code; const char* errStr = tstrerror(err); int32_t sysErr = errno; const char* sysErrStr = strerror(errno); sError("vgId:%d, wal update commit index error, index:%" PRId64 ", err:0x%x, msg:%s, syserr:%d, sysmsg:%s", pData->pSyncNode->vgId, index, err, errStr, sysErr, sysErrStr); - return -1; + + TAOS_RETURN(code); } - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } SyncIndex raftlogCommitIndex(SSyncLogStore* pLogStore) { @@ -405,5 +421,6 @@ SyncIndex logStoreFirstIndex(SSyncLogStore* pLogStore) { SyncIndex logStoreWalCommitVer(SSyncLogStore* pLogStore) { SSyncLogStoreData* pData = pLogStore->data; SWal* pWal = pData->pWal; + return walGetCommittedVer(pWal); } diff --git a/source/util/src/tlrucache.c b/source/util/src/tlrucache.c index 3de159797f..4f8e96c4c7 100644 --- a/source/util/src/tlrucache.c +++ b/source/util/src/tlrucache.c @@ -20,6 +20,7 @@ #include "tarray.h" #include "tdef.h" #include "tlog.h" +#include "tutil.h" typedef struct SLRUEntry SLRUEntry; typedef struct SLRUEntryTable SLRUEntryTable; @@ -114,13 +115,13 @@ static int taosLRUEntryTableInit(SLRUEntryTable *table, int maxUpperHashBits) { table->lengthBits = 4; table->list = taosMemoryCalloc(1 << table->lengthBits, sizeof(SLRUEntry *)); if (!table->list) { - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } table->elems = 0; table->maxLengthBits = maxUpperHashBits; - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static void taosLRUEntryTableApply(SLRUEntryTable *table, _taos_lru_table_func_t func, uint32_t begin, uint32_t end) { @@ -349,9 +350,7 @@ static void taosLRUCacheShardSetCapacity(SLRUCacheShard *shard, size_t capacity) static int taosLRUCacheShardInit(SLRUCacheShard *shard, size_t capacity, bool strict, double highPriPoolRatio, int maxUpperHashBits) { - if (taosLRUEntryTableInit(&shard->table, maxUpperHashBits) < 0) { - return -1; - } + TAOS_CHECK_RETURN(taosLRUEntryTableInit(&shard->table, maxUpperHashBits)); taosThreadMutexInit(&shard->mutex, NULL); @@ -372,7 +371,7 @@ static int taosLRUCacheShardInit(SLRUCacheShard *shard, size_t capacity, bool st taosLRUCacheShardSetCapacity(shard, capacity); - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static void taosLRUCacheShardCleanup(SLRUCacheShard *shard) { @@ -671,16 +670,13 @@ static int getDefaultCacheShardBits(size_t capacity) { SLRUCache *taosLRUCacheInit(size_t capacity, int numShardBits, double highPriPoolRatio) { if (numShardBits >= 20) { - terrno = TSDB_CODE_INVALID_PARA; return NULL; } if (highPriPoolRatio < 0.0 || highPriPoolRatio > 1.0) { - terrno = TSDB_CODE_INVALID_PARA; return NULL; } SLRUCache *cache = taosMemoryCalloc(1, sizeof(SLRUCache)); if (!cache) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; } @@ -692,14 +688,15 @@ SLRUCache *taosLRUCacheInit(size_t capacity, int numShardBits, double highPriPoo cache->shards = taosMemoryCalloc(numShards, sizeof(SLRUCacheShard)); if (!cache->shards) { taosMemoryFree(cache); - terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; } bool strictCapacity = 1; size_t perShard = (capacity + (numShards - 1)) / numShards; for (int i = 0; i < numShards; ++i) { - taosLRUCacheShardInit(&cache->shards[i], perShard, strictCapacity, highPriPoolRatio, 32 - numShardBits); + if (TSDB_CODE_SUCCESS != + taosLRUCacheShardInit(&cache->shards[i], perShard, strictCapacity, highPriPoolRatio, 32 - numShardBits)) + return NULL; } cache->numShards = numShards; From c55db1d8f7ed865689fae8eb7f100f972e0ae7b5 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 25 Jul 2024 11:45:15 +0800 Subject: [PATCH 30/35] enh: refact return code --- source/dnode/vnode/src/meta/metaQuery.c | 28 +-- source/dnode/vnode/src/meta/metaSma.c | 23 +- source/dnode/vnode/src/meta/metaSnapshot.c | 18 +- source/dnode/vnode/src/meta/metaTable.c | 148 ++++++------ source/dnode/vnode/src/vnd/vnodeOpen.c | 10 +- source/dnode/vnode/src/vnd/vnodeSvr.c | 106 +++++---- source/libs/tdb/src/db/tdbBtree.c | 250 +++++++++++---------- source/libs/tdb/src/db/tdbPager.c | 16 +- 8 files changed, 300 insertions(+), 299 deletions(-) diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index 062c019d48..e4a04047f1 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -48,27 +48,23 @@ void metaReaderClear(SMetaReader *pReader) { } int metaGetTableEntryByVersion(SMetaReader *pReader, int64_t version, tb_uid_t uid) { + int32_t code = 0; SMeta *pMeta = pReader->pMeta; STbDbKey tbDbKey = {.version = version, .uid = uid}; // query table.db if (tdbTbGet(pMeta->pTbDb, &tbDbKey, sizeof(tbDbKey), &pReader->pBuf, &pReader->szBuf) < 0) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - goto _err; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } // decode the entry tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); - if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { - goto _err; - } + code = metaDecodeEntry(&pReader->coder, &pReader->me); + if (code) return code; // taosMemoryFreeClear(pReader->me.colCmpr.pColCmpr); return 0; - -_err: - return -1; } bool metaIsTableExist(void *pVnode, tb_uid_t uid) { @@ -90,8 +86,7 @@ int metaReaderGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) { // query uid.idx if (tdbTbGet(pMeta->pUidIdx, &uid, sizeof(uid), &pReader->pBuf, &pReader->szBuf) < 0) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } version1 = ((SUidIdxVal *)pReader->pBuf)[0].version; @@ -103,8 +98,7 @@ int metaReaderGetTableEntryByUidCache(SMetaReader *pReader, tb_uid_t uid) { SMetaInfo info; if (metaGetInfo(pMeta, uid, &info, pReader) == TSDB_CODE_NOT_FOUND) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } return metaGetTableEntryByVersion(pReader, info.version, uid); @@ -116,8 +110,7 @@ int metaGetTableEntryByName(SMetaReader *pReader, const char *name) { // query name.idx if (tdbTbGet(pMeta->pNameIdx, name, strlen(name) + 1, &pReader->pBuf, &pReader->szBuf) < 0) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } uid = *(tb_uid_t *)pReader->pBuf; @@ -148,7 +141,7 @@ int metaGetTableNameByUid(void *pVnode, uint64_t uid, char *tbName) { code = metaReaderGetTableEntryByUid(&mr, uid); if (code < 0) { metaReaderClear(&mr); - return -1; + return code; } STR_TO_VARSTR(tbName, mr.me.name); @@ -164,7 +157,7 @@ int metaGetTableSzNameByUid(void *meta, uint64_t uid, char *tbName) { code = metaReaderGetTableEntryByUid(&mr, uid); if (code < 0) { metaReaderClear(&mr); - return -1; + return code; } strncpy(tbName, mr.me.name, TSDB_TABLE_NAME_LEN); metaReaderClear(&mr); @@ -181,9 +174,8 @@ int metaGetTableUidByName(void *pVnode, char *tbName, uint64_t *uid) { // query name.idx if (tdbTbGet(((SMeta *)pReader->pMeta)->pNameIdx, tbName, strlen(tbName) + 1, &pReader->pBuf, &pReader->szBuf) < 0) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; metaReaderClear(&mr); - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } *uid = *(tb_uid_t *)pReader->pBuf; diff --git a/source/dnode/vnode/src/meta/metaSma.c b/source/dnode/vnode/src/meta/metaSma.c index c61725e834..371cc6ff21 100644 --- a/source/dnode/vnode/src/meta/metaSma.c +++ b/source/dnode/vnode/src/meta/metaSma.c @@ -13,9 +13,8 @@ * along with this program. If not, see . */ -#include "vnodeInt.h" #include "meta.h" - +#include "vnodeInt.h" static int metaHandleSmaEntry(SMeta *pMeta, const SMetaEntry *pME); static int metaSaveSmaToDB(SMeta *pMeta, const SMetaEntry *pME); @@ -34,15 +33,15 @@ int32_t metaCreateTSma(SMeta *pMeta, int64_t version, SSmaCfg *pCfg) { int32_t szBuf = 0; void *p = NULL; SMetaReader mr = {0}; + int32_t code = 0; // validate req // save smaIndex metaReaderDoInit(&mr, pMeta, META_READER_LOCK); if (metaReaderGetTableEntryByUidCache(&mr, pCfg->indexUid) == 0) { #if 1 - terrno = TSDB_CODE_TSMA_ALREADY_EXIST; metaReaderClear(&mr); - return -1; // don't goto _err; + return terrno = TSDB_CODE_TSMA_ALREADY_EXIST; #else metaReaderClear(&mr); return 0; @@ -57,7 +56,8 @@ int32_t metaCreateTSma(SMeta *pMeta, int64_t version, SSmaCfg *pCfg) { me.name = pCfg->indexName; me.smaEntry.tsma = pCfg; - if (metaHandleSmaEntry(pMeta, &me) < 0) goto _err; + code = metaHandleSmaEntry(pMeta, &me); + if (code) goto _err; metaDebug("vgId:%d, tsma is created, name:%s uid:%" PRId64, TD_VID(pMeta->pVnode), pCfg->indexName, pCfg->indexUid); @@ -66,7 +66,7 @@ int32_t metaCreateTSma(SMeta *pMeta, int64_t version, SSmaCfg *pCfg) { _err: metaError("vgId:%d, failed to create tsma:%s uid:%" PRId64 " since %s", TD_VID(pMeta->pVnode), pCfg->indexName, pCfg->indexUid, tstrerror(terrno)); - return -1; + return code; } int32_t metaDropTSma(SMeta *pMeta, int64_t indexUid) { @@ -147,24 +147,25 @@ static int metaUpdateSmaIdx(SMeta *pMeta, const SMetaEntry *pME) { } static int metaHandleSmaEntry(SMeta *pMeta, const SMetaEntry *pME) { + int32_t code = 0; metaWLock(pMeta); // save to table.db - if (metaSaveSmaToDB(pMeta, pME) < 0) goto _err; + if ((code = metaSaveSmaToDB(pMeta, pME)) < 0) goto _err; // update uid.idx - if (metaUpdateUidIdx(pMeta, pME) < 0) goto _err; + if ((code = metaUpdateUidIdx(pMeta, pME)) < 0) goto _err; // update name.idx - if (metaUpdateNameIdx(pMeta, pME) < 0) goto _err; + if ((code = metaUpdateNameIdx(pMeta, pME)) < 0) goto _err; // update sma.idx - if (metaUpdateSmaIdx(pMeta, pME) < 0) goto _err; + if ((code = metaUpdateSmaIdx(pMeta, pME)) < 0) goto _err; metaULock(pMeta); return 0; _err: metaULock(pMeta); - return -1; + return code; } diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c index 95c65e5e80..87140cfa12 100644 --- a/source/dnode/vnode/src/meta/metaSnapshot.c +++ b/source/dnode/vnode/src/meta/metaSnapshot.c @@ -32,7 +32,7 @@ int32_t metaSnapReaderOpen(SMeta* pMeta, int64_t sver, int64_t ever, SMetaSnapRe // alloc pReader = (SMetaSnapReader*)taosMemoryCalloc(1, sizeof(*pReader)); if (pReader == NULL) { - TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); + TSDB_CHECK_CODE(code = terrno, lino, _exit); } pReader->pMeta = pMeta; pReader->sver = sver; @@ -261,7 +261,9 @@ static void saveSuperTableInfoForChildTable(SMetaEntry* me, SHashObj* suidInfo) int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8_t subType, int8_t withMeta, SSnapContext** ctxRet) { SSnapContext* ctx = taosMemoryCalloc(1, sizeof(SSnapContext)); - if (ctx == NULL) return -1; + if (ctx == NULL) { + return terrno; + } *ctxRet = ctx; ctx->pMeta = pVnode->pMeta; ctx->snapVersion = snapVersion; @@ -271,12 +273,12 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 ctx->withMeta = withMeta; ctx->idVersion = taosHashInit(100, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); if (ctx->idVersion == NULL) { - return -1; + return terrno; } ctx->suidInfo = taosHashInit(100, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); if (ctx->suidInfo == NULL) { - return -1; + return terrno; } taosHashSetFreeFp(ctx->suidInfo, destroySTableInfoForChildTable); @@ -426,21 +428,21 @@ static int32_t buildSuperTableInfo(SVCreateStbReq* req, void** pBuf, int32_t* co int32_t ret = 0; tEncodeSize(tEncodeSVCreateStbReq, req, *contLen, ret); if (ret < 0) { - return -1; + return ret; } *contLen += sizeof(SMsgHead); *pBuf = taosMemoryMalloc(*contLen); if (NULL == *pBuf) { - return -1; + return terrno; } SEncoder encoder = {0}; tEncoderInit(&encoder, POINTER_SHIFT(*pBuf, sizeof(SMsgHead)), *contLen); - if (tEncodeSVCreateStbReq(&encoder, req) < 0) { + if ((ret = tEncodeSVCreateStbReq(&encoder, req)) < 0) { taosMemoryFreeClear(*pBuf); tEncoderClear(&encoder); - return -1; + return ret; } tEncoderClear(&encoder); return 0; diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index e40478eec2..92e910dba3 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -36,11 +36,15 @@ static int metaDeleteBtimeIdx(SMeta *pMeta, const SMetaEntry *pME); static int metaUpdateNcolIdx(SMeta *pMeta, const SMetaEntry *pME); static int metaDeleteNcolIdx(SMeta *pMeta, const SMetaEntry *pME); -int8_t updataTableColCmpr(SColCmprWrapper *pWp, SSchema *pSchema, int8_t add, uint32_t compress) { +static int32_t updataTableColCmpr(SColCmprWrapper *pWp, SSchema *pSchema, int8_t add, uint32_t compress) { int32_t nCols = pWp->nCols; int32_t ver = pWp->version; if (add) { SColCmpr *p = taosMemoryCalloc(1, sizeof(SColCmpr) * (nCols + 1)); + if (p == NULL) { + return terrno; + } + memcpy(p, pWp->pColCmpr, sizeof(SColCmpr) * nCols); SColCmpr *pCol = p + nCols; @@ -64,7 +68,7 @@ int8_t updataTableColCmpr(SColCmprWrapper *pWp, SSchema *pSchema, int8_t add, ui pWp->nCols = nCols; pWp->version = ver; } - return 1; + return 0; } static void metaGetEntryInfo(const SMetaEntry *pEntry, SMetaInfo *pInfo) { pInfo->uid = pEntry->uid; @@ -87,8 +91,7 @@ static int metaUpdateMetaRsp(tb_uid_t uid, char *tbName, SSchemaWrapper *pSchema pMetaRsp->pSchemas = taosMemoryMalloc(pSchema->nCols * sizeof(SSchema)); if (NULL == pMetaRsp->pSchemas) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } pMetaRsp->pSchemaExt = taosMemoryMalloc(pSchema->nCols * sizeof(SSchemaExt)); @@ -105,9 +108,11 @@ static int metaUpdateMetaRsp(tb_uid_t uid, char *tbName, SSchemaWrapper *pSchema } static int metaSaveJsonVarToIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const SSchema *pSchema) { + int32_t code = 0; + #ifdef USE_INVERTED_INDEX if (pMeta->pTagIvtIdx == NULL || pCtbEntry == NULL) { - return -1; + return TSDB_CODE_INVALID_PARA; } void *data = pCtbEntry->ctbEntry.pTags; const char *tagName = pSchema->name; @@ -118,8 +123,9 @@ static int metaSaveJsonVarToIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const int32_t nTagData = 0; SArray *pTagVals = NULL; - if (tTagToValArray((const STag *)data, &pTagVals) != 0) { - return -1; + code = tTagToValArray((const STag *)data, &pTagVals); + if (code) { + return code; } SIndexMultiTerm *terms = indexMultiTermCreate(); @@ -168,7 +174,7 @@ static int metaSaveJsonVarToIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const int metaDelJsonVarFromIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const SSchema *pSchema) { #ifdef USE_INVERTED_INDEX if (pMeta->pTagIvtIdx == NULL || pCtbEntry == NULL) { - return -1; + return TSDB_CODE_INVALID_PARA; } void *data = pCtbEntry->ctbEntry.pTags; const char *tagName = pSchema->name; @@ -179,8 +185,9 @@ int metaDelJsonVarFromIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const SSche int32_t nTagData = 0; SArray *pTagVals = NULL; - if (tTagToValArray((const STag *)data, &pTagVals) != 0) { - return -1; + code = tTagToValArray((const STag *)data, &pTagVals); + if (code) { + return code; } SIndexMultiTerm *terms = indexMultiTermCreate(); @@ -247,6 +254,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { void *pBuf = NULL; int32_t szBuf = 0; void *p = NULL; + int32_t code = 0; // validate req void *pData = NULL; @@ -256,14 +264,12 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { tdbFree(pData); SMetaInfo info; if (metaGetInfo(pMeta, uid, &info, NULL) == TSDB_CODE_NOT_FOUND) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } if (info.uid == info.suid) { return 0; } else { - terrno = TSDB_CODE_TDB_TABLE_ALREADY_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_ALREADY_EXIST; } } @@ -283,7 +289,8 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { me.colCmpr = pReq->colCmpr; } - if (metaHandleEntry(pMeta, &me) < 0) goto _err; + code = metaHandleEntry(pMeta, &me); + if (code) goto _err; ++pMeta->pVnode->config.vndStats.numOfSTables; @@ -295,7 +302,7 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { _err: metaError("vgId:%d, failed to create stb:%s uid:%" PRId64 " since %s", TD_VID(pMeta->pVnode), pReq->name, pReq->suid, tstrerror(terrno)); - return -1; + return code; } int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq, SArray *tbUidList) { @@ -310,8 +317,7 @@ int metaDropSTable(SMeta *pMeta, int64_t verison, SVDropStbReq *pReq, SArray *tb rc = tdbTbGet(pMeta->pNameIdx, pReq->name, strlen(pReq->name) + 1, &pData, &nData); if (rc < 0 || *(tb_uid_t *)pData != pReq->suid) { tdbFree(pData); - terrno = TSDB_CODE_TDB_STB_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_STB_NOT_EXIST; } // drop all child tables @@ -424,16 +430,14 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { if (ret < 0 || c) { tdbTbcClose(pUidIdxc); - terrno = TSDB_CODE_TDB_STB_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_STB_NOT_EXIST; } ret = tdbTbcGet(pUidIdxc, NULL, NULL, &pData, &nData); if (ret < 0) { tdbTbcClose(pUidIdxc); - terrno = TSDB_CODE_TDB_STB_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_STB_NOT_EXIST; } oversion = ((SUidIdxVal *)pData)[0].version; @@ -444,9 +448,8 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); - terrno = TSDB_CODE_TDB_STB_NOT_EXIST; metaError("meta/table: invalide ret: %" PRId32 " or c: %" PRId32 "alter stb failed.", ret, c); - return -1; + return terrno = TSDB_CODE_TDB_STB_NOT_EXIST; } ret = tdbTbcGet(pTbDbc, NULL, NULL, &pData, &nData); @@ -454,8 +457,7 @@ int metaAlterSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) { tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); - terrno = TSDB_CODE_TDB_STB_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_STB_NOT_EXIST; } oStbEntry.pBuf = taosMemoryMalloc(nData); @@ -870,8 +872,7 @@ int metaCreateTable(SMeta *pMeta, int64_t ver, SVCreateTbReq *pReq, STableMetaRs if (pReq->type == TSDB_CHILD_TABLE) { tb_uid_t suid = metaGetTableEntryUidByName(pMeta, pReq->ctb.stbName); if (suid != pReq->ctb.suid) { - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; } } @@ -879,17 +880,15 @@ int metaCreateTable(SMeta *pMeta, int64_t ver, SVCreateTbReq *pReq, STableMetaRs metaReaderDoInit(&mr, pMeta, META_READER_LOCK); if (metaGetTableEntryByName(&mr, pReq->name) == 0) { if (pReq->type == TSDB_CHILD_TABLE && pReq->ctb.suid != mr.me.ctbEntry.suid) { - terrno = TSDB_CODE_TDB_TABLE_IN_OTHER_STABLE; metaReaderClear(&mr); - return -1; + return terrno = TSDB_CODE_TDB_TABLE_IN_OTHER_STABLE; } pReq->uid = mr.me.uid; if (pReq->type == TSDB_CHILD_TABLE) { pReq->ctb.suid = mr.me.ctbEntry.suid; } - terrno = TSDB_CODE_TDB_TABLE_ALREADY_EXIST; metaReaderClear(&mr); - return -1; + return terrno = TSDB_CODE_TDB_TABLE_ALREADY_EXIST; } else if (terrno == TSDB_CODE_PAR_TABLE_NOT_EXIST) { terrno = TSDB_CODE_SUCCESS; } @@ -1001,7 +1000,7 @@ int metaCreateTable(SMeta *pMeta, int64_t ver, SVCreateTbReq *pReq, STableMetaRs _err: metaError("vgId:%d, failed to create table:%s type:%s since %s", TD_VID(pMeta->pVnode), pReq->name, pReq->type == TSDB_CHILD_TABLE ? "child table" : "normal table", tstrerror(terrno)); - return -1; + return TSDB_CODE_FAILED; } int metaDropTable(SMeta *pMeta, int64_t version, SVDropTbReq *pReq, SArray *tbUids, tb_uid_t *tbUid) { @@ -1015,8 +1014,7 @@ int metaDropTable(SMeta *pMeta, int64_t version, SVDropTbReq *pReq, SArray *tbUi rc = tdbTbGet(pMeta->pNameIdx, pReq->name, strlen(pReq->name) + 1, &pData, &nData); if (rc < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } uid = *(tb_uid_t *)pData; @@ -1154,7 +1152,7 @@ int32_t metaTrimTables(SMeta *pMeta) { SArray *tbUids = taosArrayInit(8, sizeof(int64_t)); if (tbUids == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } code = metaFilterTableByHash(pMeta, tbUids); @@ -1195,7 +1193,7 @@ static int metaBuildBtimeIdxKey(SBtimeIdxKey *btimeKey, const SMetaEntry *pME) { } else if (pME->type == TSDB_NORMAL_TABLE) { btime = pME->ntbEntry.btime; } else { - return -1; + return TSDB_CODE_FAILED; } btimeKey->btime = btime; @@ -1208,7 +1206,7 @@ static int metaBuildNColIdxKey(SNcolIdxKey *ncolKey, const SMetaEntry *pME) { ncolKey->ncol = pME->ntbEntry.schemaRow.nCols; ncolKey->uid = pME->uid; } else { - return -1; + return TSDB_CODE_FAILED; } return 0; } @@ -1235,7 +1233,7 @@ static int metaDropTableByUid(SMeta *pMeta, tb_uid_t uid, int *type, tb_uid_t *p rc = tdbTbGet(pMeta->pUidIdx, &uid, sizeof(uid), &pData, &nData); if (rc < 0) { - return -1; + return rc; } int64_t version = ((SUidIdxVal *)pData)[0].version; @@ -1245,7 +1243,7 @@ static int metaDropTableByUid(SMeta *pMeta, tb_uid_t uid, int *type, tb_uid_t *p rc = metaDecodeEntry(&dc, &e); if (rc < 0) { tDecoderClear(&dc); - return -1; + return rc; } if (type) *type = e.type; @@ -1408,16 +1406,14 @@ static int metaAlterTableColumn(SMeta *pMeta, int64_t version, SVAlterTbReq *pAl int c; bool freeColCmpr = false; if (pAlterTbReq->colName == NULL) { - terrno = TSDB_CODE_INVALID_MSG; metaError("meta/table: null pAlterTbReq->colName"); - return -1; + return terrno = TSDB_CODE_INVALID_MSG; } // search name index ret = tdbTbGet(pMeta->pNameIdx, pAlterTbReq->tbName, strlen(pAlterTbReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } uid = *(tb_uid_t *)pVal; @@ -1432,7 +1428,7 @@ static int metaAlterTableColumn(SMeta *pMeta, int64_t version, SVAlterTbReq *pAl if (c != 0) { tdbTbcClose(pUidIdxc); metaError("meta/table: invalide c: %" PRId32 " alt tb column failed.", c); - return -1; + return TSDB_CODE_FAILED; } tdbTbcGet(pUidIdxc, NULL, NULL, &pData, &nData); @@ -1447,7 +1443,7 @@ static int metaAlterTableColumn(SMeta *pMeta, int64_t version, SVAlterTbReq *pAl tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); metaError("meta/table: invalide c: %" PRId32 " alt tb column failed.", c); - return -1; + return TSDB_CODE_FAILED; } tdbTbcGet(pTbDbc, NULL, NULL, &pData, &nData); @@ -1463,7 +1459,7 @@ static int metaAlterTableColumn(SMeta *pMeta, int64_t version, SVAlterTbReq *pAl tdbTbcClose(pTbDbc); tDecoderClear(&dc); metaError("meta/table: invalide ret: %" PRId32 " alt tb column failed.", ret); - return -1; + return ret; } if (entry.type != TSDB_NORMAL_TABLE) { @@ -1660,7 +1656,7 @@ _err: tdbTbcClose(pUidIdxc); tDecoderClear(&dc); - return -1; + return TSDB_CODE_FAILED; } static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterTbReq) { @@ -1676,15 +1672,13 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA int nData = 0; if (pAlterTbReq->tagName == NULL) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return terrno = TSDB_CODE_INVALID_MSG; } // search name index ret = tdbTbGet(pMeta->pNameIdx, pAlterTbReq->tbName, strlen(pAlterTbReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } uid = *(tb_uid_t *)pVal; @@ -1698,9 +1692,8 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA tdbTbcMoveTo(pUidIdxc, &uid, sizeof(uid), &c); if (c != 0) { tdbTbcClose(pUidIdxc); - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; metaError("meta/table: invalide c: %" PRId32 " update tb tag val failed.", c); - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } tdbTbcGet(pUidIdxc, NULL, NULL, &pData, &nData); @@ -1717,9 +1710,8 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA if (c != 0) { tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; metaError("meta/table: invalide c: %" PRId32 " update tb tag val failed.", c); - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } tdbTbcGet(pTbDbc, NULL, NULL, &pData, &nData); @@ -1866,8 +1858,7 @@ static int metaUpdateTableOptions(SMeta *pMeta, int64_t version, SVAlterTbReq *p // search name index ret = tdbTbGet(pMeta->pNameIdx, pAlterTbReq->tbName, strlen(pAlterTbReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } uid = *(tb_uid_t *)pVal; @@ -1882,7 +1873,7 @@ static int metaUpdateTableOptions(SMeta *pMeta, int64_t version, SVAlterTbReq *p if (c != 0) { tdbTbcClose(pUidIdxc); metaError("meta/table: invalide c: %" PRId32 " update tb options failed.", c); - return -1; + return TSDB_CODE_FAILED; } tdbTbcGet(pUidIdxc, NULL, NULL, &pData, &nData); @@ -1897,7 +1888,7 @@ static int metaUpdateTableOptions(SMeta *pMeta, int64_t version, SVAlterTbReq *p tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); metaError("meta/table: invalide c: %" PRId32 " update tb options failed.", c); - return -1; + return TSDB_CODE_FAILED; } tdbTbcGet(pTbDbc, NULL, NULL, &pData, &nData); @@ -1913,7 +1904,7 @@ static int metaUpdateTableOptions(SMeta *pMeta, int64_t version, SVAlterTbReq *p tdbTbcClose(pUidIdxc); tdbTbcClose(pTbDbc); metaError("meta/table: invalide ret: %" PRId32 " alt tb options failed.", ret); - return -1; + return TSDB_CODE_FAILED; } entry.version = version; @@ -1968,15 +1959,13 @@ static int metaAddTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterTb SDecoder dc = {0}; if (pAlterTbReq->tagName == NULL) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return terrno = TSDB_CODE_INVALID_MSG; } // search name index ret = tdbTbGet(pMeta->pNameIdx, pAlterTbReq->tbName, strlen(pAlterTbReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } else { uid = *(tb_uid_t *)pVal; tdbFree(pVal); @@ -2085,7 +2074,7 @@ _err: // if (stbEntry.pBuf) tdbFree(stbEntry.pBuf); // tdbTbcClose(pTbDbc); // tdbTbcClose(pUidIdxc); - return -1; + return TSDB_CODE_FAILED; } typedef struct SMetaPair { @@ -2106,15 +2095,13 @@ static int metaDropTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterT SDecoder dc = {0}; if (pAlterTbReq->tagName == NULL) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return terrno = TSDB_CODE_INVALID_MSG; } // search name index ret = tdbTbGet(pMeta->pNameIdx, pAlterTbReq->tbName, strlen(pAlterTbReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } suid = *(tb_uid_t *)pVal; tdbFree(pVal); @@ -2200,7 +2187,7 @@ static int metaDropTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterT // set pCol->flags; INDEX_ON return 0; _err: - return -1; + return TSDB_CODE_FAILED; } int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq *pReq) { // impl later @@ -2216,8 +2203,7 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq * SDecoder dc = {0}; ret = tdbTbGet(pMeta->pNameIdx, pReq->tbName, strlen(pReq->tbName) + 1, &pVal, &nVal); if (ret < 0) { - terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; - return -1; + return terrno = TSDB_CODE_TDB_TABLE_NOT_EXIST; } suid = *(tb_uid_t *)pVal; tdbFree(pVal); @@ -2290,7 +2276,7 @@ int32_t metaUpdateTableColCompress(SMeta *pMeta, int64_t version, SVAlterTbReq * return 0; _err: - return -1; + return TSDB_CODE_FAILED; } int metaAlterTable(SMeta *pMeta, int64_t version, SVAlterTbReq *pReq, STableMetaRsp *pMetaRsp) { @@ -2313,8 +2299,7 @@ int metaAlterTable(SMeta *pMeta, int64_t version, SVAlterTbReq *pReq, STableMeta case TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS: return metaUpdateTableColCompress(pMeta, version, pReq); default: - terrno = TSDB_CODE_VND_INVALID_TABLE_ACTION; - return -1; + return terrno = TSDB_CODE_VND_INVALID_TABLE_ACTION; break; } } @@ -2370,7 +2355,7 @@ _err: pME->uid, tstrerror(terrno)); taosMemoryFree(pVal); - return -1; + return TSDB_CODE_FAILED; } static int metaUpdateUidIdx(SMeta *pMeta, const SMetaEntry *pME) { @@ -2446,8 +2431,7 @@ int metaCreateTagIdxKey(tb_uid_t suid, int32_t cid, const void *pTagData, int32_ *ppTagIdxKey = (STagIdxKey *)taosMemoryMalloc(*nTagIdxKey); if (*ppTagIdxKey == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } (*ppTagIdxKey)->suid = suid; @@ -2667,7 +2651,7 @@ _err: metaULock(pMeta); metaError("vgId:%d, failed to handle meta entry since %s at line:%d, ver:%" PRId64 ", uid:%" PRId64 ", name:%s", TD_VID(pMeta->pVnode), terrstr(), line, pME->version, pME->uid, pME->name); - return -1; + return TSDB_CODE_FAILED; } int32_t colCompressDebug(SHashObj *pColCmprObj) { @@ -2703,7 +2687,7 @@ int32_t metaGetColCmpr(SMeta *pMeta, tb_uid_t uid, SHashObj **ppColCmprObj) { if (rc < 0) { taosHashClear(pColCmprObj); metaULock(pMeta); - return -1; + return TSDB_CODE_FAILED; } int64_t version = ((SUidIdxVal *)pData)[0].version; rc = tdbTbGet(pMeta->pTbDb, &(STbDbKey){.version = version, .uid = uid}, sizeof(STbDbKey), &pData, &nData); @@ -2721,7 +2705,7 @@ int32_t metaGetColCmpr(SMeta *pMeta, tb_uid_t uid, SHashObj **ppColCmprObj) { tdbFree(pData); metaULock(pMeta); taosHashClear(pColCmprObj); - return -1; + return rc; } if (useCompress(e.type)) { SColCmprWrapper *p = &e.colCmpr; diff --git a/source/dnode/vnode/src/vnd/vnodeOpen.c b/source/dnode/vnode/src/vnd/vnodeOpen.c index ea9209c6b4..5ef3e18058 100644 --- a/source/dnode/vnode/src/vnd/vnodeOpen.c +++ b/source/dnode/vnode/src/vnd/vnodeOpen.c @@ -280,12 +280,13 @@ int32_t vnodeRestoreVgroupId(const char *srcPath, const char *dstPath, int32_t s int32_t diskPrimary, STfs *pTfs) { SVnodeInfo info = {0}; char dir[TSDB_FILENAME_LEN] = {0}; + int32_t code = 0; vnodeGetPrimaryDir(dstPath, diskPrimary, pTfs, dir, TSDB_FILENAME_LEN); if (vnodeLoadInfo(dir, &info) == 0) { if (info.config.vgId != dstVgId) { vError("vgId:%d, unexpected vnode config.vgId:%d", dstVgId, info.config.vgId); - return -1; + return TSDB_CODE_FAILED; } return dstVgId; } @@ -301,13 +302,13 @@ int32_t vnodeRestoreVgroupId(const char *srcPath, const char *dstPath, int32_t s return srcVgId; } else if (info.config.vgId != dstVgId) { vError("vgId:%d, unexpected vnode config.vgId:%d", dstVgId, info.config.vgId); - return -1; + return TSDB_CODE_FAILED; } vInfo("vgId:%d, rename %s to %s", dstVgId, srcPath, dstPath); if (vnodeRenameVgroupId(srcPath, dstPath, srcVgId, dstVgId, diskPrimary, pTfs) < 0) { vError("vgId:%d, failed to rename vnode from %s to %s since %s", dstVgId, srcPath, dstPath, tstrerror(terrno)); - return -1; + return TSDB_CODE_FAILED; } return dstVgId; @@ -332,8 +333,7 @@ static int32_t vnodeCheckDisk(int32_t diskPrimary, STfs *pTfs) { } if (diskPrimary < 0 || diskPrimary >= ndisk) { vError("disk:%d is unavailable from the %d disks mounted at level 0", diskPrimary, ndisk); - terrno = TSDB_CODE_FS_INVLD_CFG; - return -1; + return terrno = TSDB_CODE_FS_INVLD_CFG; } return 0; } diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index fb09a46e75..45b2abeb24 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -513,6 +513,7 @@ int32_t vnodePreProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg) { } int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg *pRsp) { + int32_t code = 0; void *ptr = NULL; void *pReq; int32_t len; @@ -520,8 +521,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg if (ver <= pVnode->state.applied) { vError("vgId:%d, duplicate write request. ver: %" PRId64 ", applied: %" PRId64 "", TD_VID(pVnode), ver, pVnode->state.applied); - terrno = TSDB_CODE_VND_DUP_REQUEST; - return -1; + return terrno = TSDB_CODE_VND_DUP_REQUEST; } vDebug("vgId:%d, start to process write request %s, index:%" PRId64 ", applied:%" PRId64 ", state.applyTerm:%" PRId64 @@ -693,7 +693,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg break; default: vError("vgId:%d, unprocessed msg, %d", TD_VID(pVnode), pMsg->msgType); - return -1; + return TSDB_CODE_INVALID_MSG; } vTrace("vgId:%d, process %s request, code:0x%x index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), pRsp->code, @@ -701,21 +701,24 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg walApplyVer(pVnode->pWal, ver); - if (tqPushMsg(pVnode->pTq, pMsg->msgType) < 0) { + code = tqPushMsg(pVnode->pTq, pMsg->msgType); + if (code) { vError("vgId:%d, failed to push msg to TQ since %s", TD_VID(pVnode), tstrerror(terrno)); - return -1; + return code; } // commit if need if (needCommit) { vInfo("vgId:%d, commit at version %" PRId64, TD_VID(pVnode), ver); - if (vnodeAsyncCommit(pVnode) < 0) { + code = vnodeAsyncCommit(pVnode); + if (code) { vError("vgId:%d, failed to vnode async commit since %s.", TD_VID(pVnode), tstrerror(terrno)); goto _err; } // start a new one - if (vnodeBegin(pVnode) < 0) { + code = vnodeBegin(pVnode); + if (code) { vError("vgId:%d, failed to begin vnode since %s.", TD_VID(pVnode), tstrerror(terrno)); goto _err; } @@ -727,7 +730,7 @@ _exit: _err: vError("vgId:%d, process %s request failed since %s, ver:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), tstrerror(terrno), ver); - return -1; + return code; } int32_t vnodePreprocessQueryMsg(SVnode *pVnode, SRpcMsg *pMsg) { @@ -987,11 +990,18 @@ static int32_t vnodeProcessFetchTtlExpiredTbs(SVnode *pVnode, int64_t ver, void if (terrno < 0) goto _end; strncpy(buf, mr.me.name, TSDB_TABLE_NAME_LEN); void *p = taosArrayPush(pNames, buf); + if (p == NULL) { + goto _end; + } + expiredTb.name = p; if (mr.me.type == TSDB_CHILD_TABLE) { expiredTb.suid = mr.me.ctbEntry.suid; } - taosArrayPush(rsp.pExpiredTbs, &expiredTb); + + if (taosArrayPush(rsp.pExpiredTbs, &expiredTb) == NULL) { + goto _end; + } } int32_t ret = 0; @@ -1017,6 +1027,7 @@ _end: } static int32_t vnodeProcessCreateStbReq(SVnode *pVnode, int64_t ver, void *pReq, int32_t len, SRpcMsg *pRsp) { + int32_t code = 0; SVCreateStbReq req = {0}; SDecoder coder; @@ -1028,18 +1039,20 @@ static int32_t vnodeProcessCreateStbReq(SVnode *pVnode, int64_t ver, void *pReq, // decode and process req tDecoderInit(&coder, pReq, len); - if (tDecodeSVCreateStbReq(&coder, &req) < 0) { - pRsp->code = terrno; + code = tDecodeSVCreateStbReq(&coder, &req); + if (code) { + pRsp->code = code; goto _err; } - if (metaCreateSTable(pVnode->pMeta, ver, &req) < 0) { - pRsp->code = terrno; + code = metaCreateSTable(pVnode->pMeta, ver, &req); + if (code) { + pRsp->code = code; goto _err; } - if (tdProcessRSmaCreate(pVnode->pSma, &req) < 0) { - pRsp->code = terrno; + if ((code = tdProcessRSmaCreate(pVnode->pSma, &req)) < 0) { + pRsp->code = code; goto _err; } @@ -1048,7 +1061,7 @@ static int32_t vnodeProcessCreateStbReq(SVnode *pVnode, int64_t ver, void *pReq, _err: tDecoderClear(&coder); - return -1; + return code; } static int32_t vnodeProcessCreateTbReq(SVnode *pVnode, int64_t ver, void *pReq, int32_t len, SRpcMsg *pRsp, @@ -1100,7 +1113,11 @@ static int32_t vnodeProcessCreateTbReq(SVnode *pVnode, int64_t ver, void *pReq, goto _exit; } strcpy(str, pCreateReq->name); - taosArrayPush(tbNames, &str); + if (taosArrayPush(tbNames, &str) == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + rcode = -1; + goto _exit; + } } // validate hash @@ -1185,6 +1202,7 @@ _exit: } static int32_t vnodeProcessAlterStbReq(SVnode *pVnode, int64_t ver, void *pReq, int32_t len, SRpcMsg *pRsp) { + int32_t code = 0; SVCreateStbReq req = {0}; SDecoder dc = {0}; @@ -1196,16 +1214,17 @@ static int32_t vnodeProcessAlterStbReq(SVnode *pVnode, int64_t ver, void *pReq, tDecoderInit(&dc, pReq, len); // decode req - if (tDecodeSVCreateStbReq(&dc, &req) < 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = tDecodeSVCreateStbReq(&dc, &req); + if (code) { tDecoderClear(&dc); - return -1; + return code; } - if (metaAlterSTable(pVnode->pMeta, ver, &req) < 0) { - pRsp->code = terrno; + code = metaAlterSTable(pVnode->pMeta, ver, &req); + if (code) { + pRsp->code = code; tDecoderClear(&dc); - return -1; + return code; } tDecoderClear(&dc); @@ -2224,6 +2243,7 @@ _err: static int32_t vnodeProcessCreateIndexReq(SVnode *pVnode, int64_t ver, void *pReq, int32_t len, SRpcMsg *pRsp) { SVCreateStbReq req = {0}; SDecoder dc = {0}; + int32_t code = 0; pRsp->msgType = TDMT_VND_CREATE_INDEX_RSP; pRsp->code = TSDB_CODE_SUCCESS; @@ -2233,35 +2253,38 @@ static int32_t vnodeProcessCreateIndexReq(SVnode *pVnode, int64_t ver, void *pRe tDecoderInit(&dc, pReq, len); // decode req if (tDecodeSVCreateStbReq(&dc, &req) < 0) { - terrno = TSDB_CODE_INVALID_MSG; tDecoderClear(&dc); - return -1; + return terrno = TSDB_CODE_INVALID_MSG; } - if (metaAddIndexToSTable(pVnode->pMeta, ver, &req) < 0) { - pRsp->code = terrno; + + code = metaAddIndexToSTable(pVnode->pMeta, ver, &req); + if (code) { + pRsp->code = code; goto _err; } tDecoderClear(&dc); return 0; + _err: tDecoderClear(&dc); - return -1; + return code; } static int32_t vnodeProcessDropIndexReq(SVnode *pVnode, int64_t ver, void *pReq, int32_t len, SRpcMsg *pRsp) { SDropIndexReq req = {0}; + int32_t code = 0; pRsp->msgType = TDMT_VND_DROP_INDEX_RSP; pRsp->code = TSDB_CODE_SUCCESS; pRsp->pCont = NULL; pRsp->contLen = 0; - if (tDeserializeSDropIdxReq(pReq, len, &req)) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + if ((code = tDeserializeSDropIdxReq(pReq, len, &req))) { + return code; } - if (metaDropIndexFromSTable(pVnode->pMeta, ver, &req) < 0) { - pRsp->code = terrno; - return -1; + code = metaDropIndexFromSTable(pVnode->pMeta, ver, &req); + if (code) { + pRsp->code = code; + return code; } return TSDB_CODE_SUCCESS; } @@ -2290,20 +2313,17 @@ static int32_t vnodeProcessConfigChangeReq(SVnode *pVnode, int64_t ver, void *pR static int32_t vnodePreCheckAssignedLogSyncd(SVnode *pVnode, char *member0Token, char *member1Token) { SSyncState syncState = syncGetState(pVnode->sync); if (syncState.state != TAOS_SYNC_STATE_LEADER) { - terrno = TSDB_CODE_SYN_NOT_LEADER; - return -1; + return terrno = TSDB_CODE_SYN_NOT_LEADER; } char token[TSDB_ARB_TOKEN_SIZE] = {0}; if (vnodeGetArbToken(pVnode, token) != 0) { - terrno = TSDB_CODE_NOT_FOUND; - return -1; + return terrno = TSDB_CODE_NOT_FOUND; } if (strncmp(token, member0Token, TSDB_ARB_TOKEN_SIZE) != 0 && strncmp(token, member1Token, TSDB_ARB_TOKEN_SIZE) != 0) { - terrno = TSDB_CODE_MND_ARB_TOKEN_MISMATCH; - return -1; + return terrno = TSDB_CODE_MND_ARB_TOKEN_MISMATCH; } terrno = TSDB_CODE_SUCCESS; @@ -2324,9 +2344,9 @@ static int32_t vnodeProcessArbCheckSyncReq(SVnode *pVnode, void *pReq, int32_t l SVArbCheckSyncReq syncReq = {0}; - if (tDeserializeSVArbCheckSyncReq(pReq, len, &syncReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = tDeserializeSVArbCheckSyncReq(pReq, len, &syncReq); + if (code) { + return terrno = code; } pRsp->msgType = TDMT_VND_ARB_CHECK_SYNC_RSP; diff --git a/source/libs/tdb/src/db/tdbBtree.c b/source/libs/tdb/src/db/tdbBtree.c index 4dd3d3298c..187d65d975 100644 --- a/source/libs/tdb/src/db/tdbBtree.c +++ b/source/libs/tdb/src/db/tdbBtree.c @@ -114,7 +114,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg ret = tdbBegin(pEnv, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED); if (ret < 0) { tdbOsFree(pBt); - return -1; + return ret; } SBtreeInitPageArg zArg; @@ -124,7 +124,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg if (ret < 0) { tdbAbort(pEnv, txn); tdbOsFree(pBt); - return -1; + return ret; } ret = tdbPagerWrite(pPager, pPage); @@ -132,7 +132,7 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg tdbError("failed to write page since %s", terrstr()); tdbAbort(pEnv, txn); tdbOsFree(pBt); - return -1; + return ret; } if (strcmp(TDB_MAINDB_NAME, tbname)) { @@ -145,20 +145,23 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, char const *tbname, SPg if (ret < 0) { tdbAbort(pEnv, txn); tdbOsFree(pBt); - return -1; + return ret; } } tdbPCacheRelease(pPager->pCache, pPage, txn); - tdbCommit(pPager->pEnv, txn); - tdbPostCommit(pPager->pEnv, txn); + ret = tdbCommit(pPager->pEnv, txn); + if (ret) return ret; + + ret = tdbPostCommit(pPager->pEnv, txn); + if (ret) return ret; } if (pgno == 0) { tdbError("tdb/btree-open: pgno cannot be zero."); tdbOsFree(pBt); - return -1; + ASSERT(0); } pBt->root = pgno; /* @@ -200,7 +203,7 @@ int tdbBtreeInsert(SBTree *pBt, const void *pKey, int kLen, const void *pVal, in if (ret < 0) { tdbBtcClose(&btc); tdbError("tdb/btree-insert: btc move to failed with ret: %d.", ret); - return -1; + return ret; } if (btc.idx == -1) { @@ -212,7 +215,7 @@ int tdbBtreeInsert(SBTree *pBt, const void *pKey, int kLen, const void *pVal, in // dup key not allowed with insert tdbBtcClose(&btc); tdbError("tdb/btree-insert: dup key. pKey: %p, kLen: %d, btc: %p, pTxn: %p", pKey, kLen, &btc, pTxn); - return -1; + return TSDB_CODE_DUP_KEY; } } @@ -220,7 +223,7 @@ int tdbBtreeInsert(SBTree *pBt, const void *pKey, int kLen, const void *pVal, in if (ret < 0) { tdbBtcClose(&btc); tdbError("tdb/btree-insert: btc upsert failed with ret: %d.", ret); - return -1; + return ret; } tdbBtcClose(&btc); @@ -245,18 +248,19 @@ int tdbBtreeDelete(SBTree *pBt, const void *pKey, int kLen, TXN *pTxn) { if (ret < 0) { tdbBtcClose(&btc); tdbError("tdb/btree-delete: btc move to failed with ret: %d.", ret); - return -1; + return ret; } if (btc.idx < 0 || c != 0) { tdbBtcClose(&btc); - return -1; + return TSDB_CODE_NOT_FOUND; } // delete the key - if (tdbBtcDelete(&btc) < 0) { + ret = tdbBtcDelete(&btc); + if (ret < 0) { tdbBtcClose(&btc); - return -1; + return ret; } /* SArray *ofps = btc.coder.ofps; @@ -341,13 +345,12 @@ int tdbBtreePGet(SBTree *pBt, const void *pKey, int kLen, void **ppKey, int *pkL if (ret < 0) { tdbBtcClose(&btc); tdbError("tdb/btree-pget: btc move to failed with ret: %d.", ret); - return -1; + return ret; } if (btc.idx < 0 || cret) { tdbBtcClose(&btc); - - return -1; + return TSDB_CODE_NOT_FOUND; } pCell = tdbPageGetCell(btc.pPage, btc.idx); @@ -355,7 +358,7 @@ int tdbBtreePGet(SBTree *pBt, const void *pKey, int kLen, void **ppKey, int *pkL if (ret < 0) { tdbBtcClose(&btc); tdbError("tdb/btree-pget: decode cell failed with ret: %d.", ret); - return -1; + return ret; } if (ppKey) { @@ -363,7 +366,7 @@ int tdbBtreePGet(SBTree *pBt, const void *pKey, int kLen, void **ppKey, int *pkL if (pTKey == NULL) { tdbBtcClose(&btc); tdbError("tdb/btree-pget: realloc pTKey failed."); - return -1; + return terrno; } *ppKey = pTKey; *pkLen = cd.kLen; @@ -375,7 +378,7 @@ int tdbBtreePGet(SBTree *pBt, const void *pKey, int kLen, void **ppKey, int *pkL if (pTVal == NULL) { tdbBtcClose(&btc); tdbError("tdb/btree-pget: realloc pTVal failed."); - return -1; + return terrno; } *ppVal = pTVal; *vLen = cd.vLen; @@ -495,7 +498,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN zArg.pBt = pBt; ret = tdbPagerFetchPage(pPager, &pgnoChild, &pChild, tdbBtreeInitPage, &zArg, pTxn); if (ret < 0) { - return -1; + return ret; } if (!leaf) { @@ -505,7 +508,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN ret = tdbPagerWrite(pPager, pChild); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } // Copy the root page content to the child page @@ -516,7 +519,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN zArg.pBt = pBt; ret = tdbBtreeInitPage(pRoot, &zArg, 0); if (ret < 0) { - return -1; + return ret; } pIntHdr = (SIntHdr *)(pRoot->pData); @@ -557,13 +560,13 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx } for (int i = 0; i < nOlds; i++) { if (ASSERT(sIdx + i <= nCells)) { - return -1; + return TSDB_CODE_FAILED; } SPgno pgno; if (sIdx + i == nCells) { if (ASSERT(!TDB_BTREE_PAGE_IS_LEAF(pParent))) { - return -1; + return TSDB_CODE_FAILED; } pgno = ((SIntHdr *)(pParent->pData))->pgno; } else { @@ -575,13 +578,13 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx &((SBtreeInitPageArg){.pBt = pBt, .flags = 0}), pTxn); if (ret < 0) { tdbError("tdb/btree-balance: fetch page failed with ret: %d.", ret); - return -1; + return TSDB_CODE_FAILED; } ret = tdbPagerWrite(pBt->pPager, pOlds[i]); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return TSDB_CODE_FAILED; } } // copy the parent key out if child pages are not leaf page @@ -608,7 +611,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx ret = tdbPagerWrite(pBt->pPager, pParent); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } // drop the cells on parent page @@ -718,7 +721,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx } if (ASSERT(infoNews[iNew - 1].cnt > 0)) { - return -1; + return TSDB_CODE_FAILED; } if (infoNews[iNew].size + szRCell >= infoNews[iNew - 1].size - szRCell) { @@ -763,13 +766,13 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx ret = tdbPagerFetchPage(pBt->pPager, &pgno, pNews + iNew, tdbBtreeInitPage, &iarg, pTxn); if (ret < 0) { tdbError("tdb/btree-balance: fetch page failed with ret: %d.", ret); - return -1; + return ret; } ret = tdbPagerWrite(pBt->pPager, pNews[iNew]); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } } } @@ -808,10 +811,10 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx szCell = tdbBtreeCellSize(pPage, pCell, 0, NULL, NULL); if (ASSERT(nNewCells <= infoNews[iNew].cnt)) { - return -1; + return TSDB_CODE_FAILED; } if (ASSERT(iNew < nNews)) { - return -1; + return TSDB_CODE_FAILED; } if (nNewCells < infoNews[iNew].cnt) { @@ -852,10 +855,10 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx } } else { if (ASSERT(childNotLeaf)) { - return -1; + return TSDB_CODE_FAILED; } if (ASSERT(iNew < nNews - 1)) { - return -1; + return TSDB_CODE_FAILED; } // set current new page right-most child @@ -863,7 +866,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx // insert to parent as divider cell if (ASSERT(iNew < nNews - 1)) { - return -1; + return TSDB_CODE_FAILED; } ((SPgno *)pCell)[0] = TDB_PAGE_PGNO(pNews[iNew]); tdbPageInsertCell(pParent, sIdx++, pCell, szCell, 0); @@ -880,7 +883,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx if (childNotLeaf) { if (ASSERT(TDB_PAGE_TOTAL_CELLS(pNews[nNews - 1]) == infoNews[nNews - 1].cnt)) { - return -1; + return TSDB_CODE_FAILED; } ((SIntHdr *)(pNews[nNews - 1]->pData))->pgno = rPgno; @@ -961,7 +964,7 @@ static int tdbBtreeBalance(SBTC *pBtc) { ret = tdbBtreeBalanceDeeper(pBtc->pBt, pPage, &(pBtc->pgStack[1]), pBtc->pTxn); if (ret < 0) { - return -1; + return ret; } pBtc->idx = 0; @@ -975,7 +978,7 @@ static int tdbBtreeBalance(SBTC *pBtc) { ret = tdbBtreeBalanceNonRoot(pBtc->pBt, pParent, pBtc->idxStack[pBtc->iPage - 1], pBtc->pTxn); if (ret < 0) { - return -1; + return ret; } tdbPagerReturnPage(pBtc->pBt->pPager, pBtc->pPage, pBtc->pTxn); @@ -998,14 +1001,14 @@ static int tdbFetchOvflPage(SPgno *pPgno, SPage **ppOfp, TXN *pTxn, SBTree *pBt) iArg.flags = TDB_FLAG_ADD(0, TDB_BTREE_OVFL); ret = tdbPagerFetchPage(pBt->pPager, pPgno, ppOfp, tdbBtreeInitPage, &iArg, pTxn); if (ret < 0) { - return -1; + return ret; } // mark dirty ret = tdbPagerWrite(pBt->pPager, *ppOfp); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } tdbPCacheRelease(pBt->pPager->pCache, *ppOfp, pTxn); @@ -1021,7 +1024,7 @@ static int tdbLoadOvflPage(SPgno *pPgno, SPage **ppOfp, TXN *pTxn, SBTree *pBt) iArg.flags = TDB_FLAG_ADD(0, TDB_BTREE_OVFL); ret = tdbPagerFetchPage(pBt->pPager, pPgno, ppOfp, tdbBtreeInitPage, &iArg, pTxn); if (ret < 0) { - return -1; + return ret; } return ret; @@ -1058,13 +1061,13 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbFetchOvflPage(&pgno, &ofp, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } // local buffer for cell SCell *pBuf = tdbRealloc(NULL, pBt->pageSize); if (pBuf == NULL) { - return -1; + return ret; } int nLeft = nPayload; @@ -1078,7 +1081,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const if (nLocal > nHeader + kLen + sizeof(SPgno)) { if (ASSERT(pVal != NULL && vLen != 0)) { tdbFree(pBuf); - return -1; + return TSDB_CODE_FAILED; } memcpy(pCell + nHeader + kLen, pVal, nLocal - nHeader - kLen - sizeof(SPgno)); nLeft -= nLocal - nHeader - kLen - sizeof(SPgno); @@ -1103,7 +1106,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbFetchOvflPage(&pgno, &nextOfp, pTxn, pBt); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } } else { pgno = 0; @@ -1115,7 +1118,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbPageInsertCell(ofp, 0, pBuf, bytes + sizeof(pgno), 0); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } ofp = nextOfp; @@ -1163,7 +1166,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbFetchOvflPage(&pgno, &nextOfp, pTxn, pBt); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } } } else { @@ -1171,7 +1174,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbFetchOvflPage(&pgno, &nextOfp, pTxn, pBt); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } } @@ -1179,7 +1182,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbPageInsertCell(ofp, 0, pBuf, bytes + sizeof(pgno), 0); if (ret < 0) { - return -1; + return ret; } ofp = nextOfp; @@ -1203,7 +1206,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const ret = tdbFetchOvflPage(&pgno, &nextOfp, pTxn, pBt); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } } else { pgno = 0; @@ -1214,13 +1217,13 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const if (ofp == NULL) { tdbFree(pBuf); - return -1; + return ret; } ret = tdbPageInsertCell(ofp, 0, pBuf, bytes + sizeof(pgno), 0); if (ret < 0) { tdbFree(pBuf); - return -1; + return ret; } ofp = nextOfp; @@ -1245,13 +1248,13 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo int ret; if (ASSERT(pPage->kLen == TDB_VARIANT_LEN || pPage->kLen == kLen)) { - return -1; + return TSDB_CODE_FAILED; } if (ASSERT(pPage->vLen == TDB_VARIANT_LEN || pPage->vLen == vLen)) { - return -1; + return TSDB_CODE_FAILED; } if (ASSERT(pKey != NULL && kLen > 0)) { - return -1; + return TSDB_CODE_FAILED; } nPayload = 0; @@ -1263,7 +1266,7 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo if (!leaf) { if (pPage->vLen != sizeof(SPgno)) { tdbError("tdb/btree-encode-cell: invalid cell."); - return -1; + return TSDB_CODE_INVALID_PARA; } ((SPgno *)(pCell + nHeader))[0] = ((SPgno *)pVal)[0]; @@ -1290,7 +1293,7 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo if (ret < 0) { // TODO tdbError("tdb/btree-encode-cell: encode payload failed with ret: %d.", ret); - return -1; + return ret; } *szCell = nHeader + nPayload; @@ -1309,7 +1312,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, if (pDecoder->pVal) { if (TDB_BTREE_PAGE_IS_LEAF(pPage)) { tdbError("tdb/btree-decode-payload: leaf page with non-null pVal."); - return -1; + return TSDB_CODE_INVALID_DATA_FMT; } nPayload = pDecoder->kLen; } else { @@ -1344,7 +1347,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, // read partial val to local pDecoder->pVal = tdbRealloc(pDecoder->pVal, vLen); if (pDecoder->pVal == NULL) { - return -1; + return terrno; } TDB_CELLDECODER_SET_FREE_VAL(pDecoder); @@ -1361,7 +1364,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, while (pgno != 0) { ret = tdbLoadOvflPage(&pgno, &ofp, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } /* if (pDecoder->ofps) { @@ -1389,7 +1392,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, // load partial key and nextPgno pDecoder->pKey = tdbRealloc(pDecoder->pKey, kLen); if (pDecoder->pKey == NULL) { - return -1; + return terrno; } TDB_CELLDECODER_SET_FREE_KEY(pDecoder); @@ -1406,7 +1409,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, // printf("tdb decode-ofp, pTxn: %p, pgno:%u by cell:%p\n", pTxn, pgno, pCell); ret = tdbLoadOvflPage(&pgno, &ofp, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } /* if (pDecoder->ofps) { @@ -1439,7 +1442,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, // read partial val to local pDecoder->pVal = tdbRealloc(pDecoder->pVal, vLen); if (pDecoder->pVal == NULL) { - return -1; + return terrno; } TDB_CELLDECODER_SET_FREE_VAL(pDecoder); @@ -1459,7 +1462,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, while (nLeft > 0) { ret = tdbLoadOvflPage(&pgno, &ofp, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } ofpCell = tdbPageGetCell(ofp, 0); @@ -1480,7 +1483,7 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader, if (!pDecoder->pVal) { pDecoder->pVal = tdbRealloc(pDecoder->pVal, vLen); if (pDecoder->pVal == NULL) { - return -1; + return terrno; } TDB_CELLDECODER_SET_FREE_VAL(pDecoder); } @@ -1529,7 +1532,7 @@ static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pD if (!leaf) { if (pPage->vLen != sizeof(SPgno)) { tdbError("tdb/btree-decode-cell: invalid cell."); - return -1; + return TSDB_CODE_INVALID_DATA_FMT; } pDecoder->pgno = ((SPgno *)(pCell + nHeader))[0]; @@ -1546,7 +1549,7 @@ static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pD if (pPage->vLen == TDB_VARIANT_LEN) { if (!leaf) { tdbError("tdb/btree-decode-cell: not a leaf page."); - return -1; + return TSDB_CODE_INVALID_DATA_FMT; } nHeader += tdbGetVarInt(pCell + nHeader, &(pDecoder->vLen)); } else { @@ -1556,7 +1559,7 @@ static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pD // 2. Decode payload part ret = tdbBtreeDecodePayload(pPage, pCell, nHeader, pDecoder, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } return 0; @@ -1610,7 +1613,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN * while (pgno != 0) { ret = tdbLoadOvflPage(&pgno, &ofp, pTxn, pBt); if (ret < 0) { - return -1; + return ret; } SCell *ofpCell = tdbPageGetCell(ofp, 0); @@ -1627,7 +1630,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN * ret = tdbPagerWrite(pBt->pPager, ofp); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } /* tdbPageDropCell(ofp, 0, pTxn, pBt); @@ -1664,12 +1667,13 @@ int tdbBtcOpen(SBTC *pBtc, SBTree *pBt, TXN *pTxn) { if (pTxn == NULL) { TXN *pTxn = tdbOsCalloc(1, sizeof(*pTxn)); if (!pTxn) { - return -1; + return terrno; } - if (tdbTxnOpen(pTxn, 0, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) { + int32_t ret = tdbTxnOpen(pTxn, 0, tdbDefaultMalloc, tdbDefaultFree, NULL, 0); + if (ret < 0) { tdbOsFree(pTxn); - return -1; + return ret; } pBtc->pTxn = pTxn; @@ -1698,12 +1702,12 @@ int tdbBtcMoveToFirst(SBTC *pBtc) { &((SBtreeInitPageArg){.pBt = pBt, .flags = TDB_BTREE_ROOT | TDB_BTREE_LEAF}), pBtc->pTxn); if (ret < 0) { tdbError("tdb/btc-move-tofirst: fetch page failed with ret: %d.", ret); - return -1; + return ret; } if (!TDB_BTREE_PAGE_IS_ROOT(pBtc->pPage)) { tdbError("tdb/btc-move-tofirst: not a root page"); - return -1; + return ret; } pBtc->iPage = 0; @@ -1713,7 +1717,7 @@ int tdbBtcMoveToFirst(SBTC *pBtc) { // no any data, point to an invalid position if (!TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) { tdbError("tdb/btc-move-to-first: not a leaf page."); - return -1; + return TSDB_CODE_FAILED; } pBtc->idx = -1; @@ -1722,7 +1726,7 @@ int tdbBtcMoveToFirst(SBTC *pBtc) { } else { // TODO tdbError("tdb/btc-move-to-first: move from a dirty cursor."); - return -1; + return TSDB_CODE_FAILED; #if 0 // move from a position int iPage = 0; @@ -1755,7 +1759,7 @@ int tdbBtcMoveToFirst(SBTC *pBtc) { ret = tdbBtcMoveDownward(pBtc); if (ret < 0) { tdbError("tdb/btc-move-tofirst: btc move downward failed with ret: %d.", ret); - return -1; + return ret; } pBtc->idx = 0; @@ -1780,7 +1784,7 @@ int tdbBtcMoveToLast(SBTC *pBtc) { &((SBtreeInitPageArg){.pBt = pBt, .flags = TDB_BTREE_ROOT | TDB_BTREE_LEAF}), pBtc->pTxn); if (ret < 0) { tdbError("tdb/btc-move-tolast: fetch page failed with ret: %d.", ret); - return -1; + return ret; } nCells = TDB_PAGE_TOTAL_CELLS(pBtc->pPage); @@ -1791,7 +1795,7 @@ int tdbBtcMoveToLast(SBTC *pBtc) { // no data at all, point to an invalid position if (!TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) { tdbError("tdb/btc-move-to-last: not a leaf page."); - return -1; + return TSDB_CODE_FAILED; } pBtc->idx = -1; @@ -1800,7 +1804,7 @@ int tdbBtcMoveToLast(SBTC *pBtc) { } else { // TODO tdbError("tdb/btc-move-to-last: move from a dirty cursor."); - return -1; + return TSDB_CODE_FAILED; #if 0 int iPage = 0; @@ -1838,7 +1842,7 @@ int tdbBtcMoveToLast(SBTC *pBtc) { ret = tdbBtcMoveDownward(pBtc); if (ret < 0) { tdbError("tdb/btc-move-tolast: btc move downward failed with ret: %d.", ret); - return -1; + return ret; } nCells = TDB_PAGE_TOTAL_CELLS(pBtc->pPage); @@ -1860,7 +1864,7 @@ int tdbBtreeNext(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { // current cursor points to an invalid position if (pBtc->idx < 0) { - return -1; + return TSDB_CODE_FAILED; } pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx); @@ -1868,12 +1872,12 @@ int tdbBtreeNext(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { ret = tdbBtreeDecodeCell(pBtc->pPage, pCell, &cd, pBtc->pTxn, pBtc->pBt); if (ret < 0) { tdbError("tdb/btree-next: decode cell failed with ret: %d.", ret); - return -1; + return ret; } pKey = tdbRealloc(*ppKey, cd.kLen); if (pKey == NULL) { - return -1; + return terrno; } *ppKey = pKey; @@ -1885,7 +1889,7 @@ int tdbBtreeNext(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { pVal = tdbRealloc(*ppVal, cd.vLen); if (pVal == NULL) { tdbFree(pKey); - return -1; + return terrno; } memcpy(pVal, cd.pVal, cd.vLen); @@ -1909,7 +1913,7 @@ int tdbBtreeNext(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { ret = tdbBtcMoveToNext(pBtc); if (ret < 0) { tdbError("tdb/btree-next: btc move to next failed with ret: %d.", ret); - return -1; + return ret; } return 0; @@ -1923,7 +1927,7 @@ int tdbBtreePrev(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { // current cursor points to an invalid position if (pBtc->idx < 0) { - return -1; + return TSDB_CODE_FAILED; } pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx); @@ -1931,12 +1935,12 @@ int tdbBtreePrev(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { ret = tdbBtreeDecodeCell(pBtc->pPage, pCell, &cd, pBtc->pTxn, pBtc->pBt); if (ret < 0) { tdbError("tdb/btree-prev: decode cell failed with ret: %d.", ret); - return -1; + return ret; } pKey = tdbRealloc(*ppKey, cd.kLen); if (pKey == NULL) { - return -1; + return terrno; } *ppKey = pKey; @@ -1948,7 +1952,7 @@ int tdbBtreePrev(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { pVal = tdbRealloc(*ppVal, cd.vLen); if (pVal == NULL) { tdbFree(pKey); - return -1; + return terrno; } *ppVal = pVal; @@ -1959,7 +1963,7 @@ int tdbBtreePrev(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) { ret = tdbBtcMoveToPrev(pBtc); if (ret < 0) { tdbError("tdb/btree-prev: btc move to prev failed with ret: %d.", ret); - return -1; + return ret; } return 0; @@ -1972,10 +1976,10 @@ int tdbBtcMoveToNext(SBTC *pBtc) { if (!TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) { tdbError("tdb/btc-move-to-next: not a leaf page."); - return -1; + return TSDB_CODE_FAILED; } - if (pBtc->idx < 0) return -1; + if (pBtc->idx < 0) return TSDB_CODE_FAILED; pBtc->idx++; if (pBtc->idx < TDB_PAGE_TOTAL_CELLS(pBtc->pPage)) { @@ -1994,7 +1998,7 @@ int tdbBtcMoveToNext(SBTC *pBtc) { if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) { tdbError("tdb/btree-decode-cell: should not be a leaf page here."); - return -1; + return TSDB_CODE_FAILED; } if (pBtc->idx <= TDB_PAGE_TOTAL_CELLS(pBtc->pPage)) { break; @@ -2008,7 +2012,7 @@ int tdbBtcMoveToNext(SBTC *pBtc) { ret = tdbBtcMoveDownward(pBtc); if (ret < 0) { tdbError("tdb/btc-move-tonext: btc move downward failed with ret: %d.", ret); - return -1; + return ret; } pBtc->idx = 0; @@ -2018,7 +2022,7 @@ int tdbBtcMoveToNext(SBTC *pBtc) { } int tdbBtcMoveToPrev(SBTC *pBtc) { - if (pBtc->idx < 0) return -1; + if (pBtc->idx < 0) return TSDB_CODE_FAILED; pBtc->idx--; if (pBtc->idx >= 0) { @@ -2061,17 +2065,17 @@ static int tdbBtcMoveDownward(SBTC *pBtc) { if (pBtc->idx < 0) { tdbError("tdb/btc-move-downward: invalid idx: %d.", pBtc->idx); - return -1; + return TSDB_CODE_FAILED; } if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) { tdbError("tdb/btc-move-downward: should not be a leaf page here."); - return -1; + return TSDB_CODE_FAILED; } if (TDB_BTREE_PAGE_IS_OVFL(pBtc->pPage)) { tdbError("tdb/btc-move-downward: should not be a ovfl page here."); - return -1; + return TSDB_CODE_FAILED; } if (pBtc->idx < TDB_PAGE_TOTAL_CELLS(pBtc->pPage)) { @@ -2083,7 +2087,7 @@ static int tdbBtcMoveDownward(SBTC *pBtc) { if (!pgno) { tdbError("tdb/btc-move-downward: invalid pgno."); - return -1; + return TSDB_CODE_FAILED; } pBtc->pgStack[pBtc->iPage] = pBtc->pPage; @@ -2096,14 +2100,14 @@ static int tdbBtcMoveDownward(SBTC *pBtc) { &((SBtreeInitPageArg){.pBt = pBtc->pBt, .flags = 0}), pBtc->pTxn); if (ret < 0) { tdbError("tdb/btc-move-downward: fetch page failed with ret: %d.", ret); - return -1; + return TSDB_CODE_FAILED; } return 0; } static int tdbBtcMoveUpward(SBTC *pBtc) { - if (pBtc->iPage == 0) return -1; + if (pBtc->iPage == 0) return TSDB_CODE_FAILED; tdbPagerReturnPage(pBtc->pBt->pPager, pBtc->pPage, pBtc->pTxn); @@ -2118,7 +2122,7 @@ int tdbBtcGet(SBTC *pBtc, const void **ppKey, int *kLen, const void **ppVal, int SCell *pCell; if (pBtc->idx < 0 || pBtc->idx >= TDB_PAGE_TOTAL_CELLS(pBtc->pPage)) { - return -1; + return TSDB_CODE_FAILED; } pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx); @@ -2152,14 +2156,14 @@ int tdbBtcDelete(SBTC *pBtc) { if (idx < 0 || idx >= nCells) { tdbError("tdb/btc-delete: idx: %d out of range[%d, %d).", idx, 0, nCells); - return -1; + return TSDB_CODE_FAILED; } // drop the cell on the leaf ret = tdbPagerWrite(pPager, pBtc->pPage); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } bool destroyOfps = false; @@ -2200,7 +2204,7 @@ int tdbBtcDelete(SBTC *pBtc) { ret = tdbPagerWrite(pPager, pPage); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } // update the cell with new key @@ -2211,7 +2215,7 @@ int tdbBtcDelete(SBTC *pBtc) { if (ret < 0) { tdbOsFree(pCell); tdbError("tdb/btc-delete: page update cell failed with ret: %d.", ret); - return -1; + return ret; } tdbOsFree(pCell); @@ -2229,7 +2233,7 @@ int tdbBtcDelete(SBTC *pBtc) { ret = tdbBtreeBalance(pBtc); if (ret < 0) { tdbError("tdb/btc-delete: btree balance failed with ret: %d.", ret); - return -1; + return ret; } } @@ -2242,7 +2246,7 @@ int tdbBtcDelete(SBTC *pBtc) { // delete the leaf page and do balance if (TDB_PAGE_TOTAL_CELLS(pBtc->pPage) != 0) { tdbError("tdb/btc-delete: page to be deleted should be empty."); - return -1; + return TSDB_CODE_FAILED; } // printf("tdb/btc-delete: btree balance delete pgno: %d.\n", TDB_PAGE_PGNO(pBtc->pPage)); @@ -2250,7 +2254,7 @@ int tdbBtcDelete(SBTC *pBtc) { ret = tdbBtreeBalance(pBtc); if (ret < 0) { tdbError("tdb/btc-delete: btree balance failed with ret: %d.", ret); - return -1; + return ret; } } } @@ -2268,7 +2272,7 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int if (pBtc->idx < 0) { tdbError("tdb/btc-upsert: invalid idx: %d.", pBtc->idx); - return -1; + return TSDB_CODE_FAILED; } // alloc space @@ -2276,7 +2280,7 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int pBuf = tdbRealloc(pBtc->pBt->pBuf, pBtc->pBt->pageSize > szBuf ? szBuf : pBtc->pBt->pageSize); if (pBuf == NULL) { tdbError("tdb/btc-upsert: realloc pBuf failed."); - return -1; + return terrno; } pBtc->pBt->pBuf = pBuf; pCell = (SCell *)pBtc->pBt->pBuf; @@ -2285,35 +2289,35 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int ret = tdbBtreeEncodeCell(pBtc->pPage, pKey, kLen, pData, nData, pCell, &szCell, pBtc->pTxn, pBtc->pBt); if (ret < 0) { tdbError("tdb/btc-upsert: btree encode cell failed with ret: %d.", ret); - return -1; + return ret; } // mark dirty ret = tdbPagerWrite(pBtc->pBt->pPager, pBtc->pPage); if (ret < 0) { tdbError("failed to write page since %s", terrstr()); - return -1; + return ret; } // insert or update if (insert) { if (pBtc->idx > nCells) { tdbError("tdb/btc-upsert: invalid idx: %d, nCells: %d.", pBtc->idx, nCells); - return -1; + return TSDB_CODE_FAILED; } ret = tdbPageInsertCell(pBtc->pPage, pBtc->idx, pCell, szCell, 0); } else { if (pBtc->idx >= nCells) { tdbError("tdb/btc-upsert: invalid idx: %d, nCells: %d.", pBtc->idx, nCells); - return -1; + return TSDB_CODE_FAILED; } ret = tdbPageUpdateCell(pBtc->pPage, pBtc->idx, pCell, szCell, pBtc->pTxn, pBtc->pBt); } if (ret < 0) { tdbError("tdb/btc-upsert: page insert/update cell failed with ret: %d.", ret); - return -1; + return ret; } /* bool destroyOfps = false; @@ -2327,7 +2331,7 @@ int tdbBtcUpsert(SBTC *pBtc, const void *pKey, int kLen, const void *pData, int ret = tdbBtreeBalance(pBtc); if (ret < 0) { tdbError("tdb/btc-upsert: btree balance failed with ret: %d.", ret); - return -1; + return ret; } } /* @@ -2365,7 +2369,7 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) { if (ret < 0) { // TODO tdbError("tdb/btc-move-to: fetch page failed with ret: %d.", ret); - return -1; + return ret; } pBtc->iPage = 0; @@ -2375,7 +2379,7 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) { } else { // TODO tdbError("tdb/btc-move-to: move from a dirty cursor."); - return -1; + return TSDB_CODE_FAILED; #if 0 SPage *pPage; int idx; @@ -2499,7 +2503,7 @@ int tdbBtcClose(SBTC *pBtc) { for (;;) { if (NULL == pBtc->pPage) { tdbError("tdb/btc-close: null ptr pPage."); - return -1; + return TSDB_CODE_FAILED; } tdbPagerReturnPage(pBtc->pBt->pPager, pBtc->pPage, pBtc->pTxn); diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index 5d8b05ffcf..414ca42a02 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -862,7 +862,7 @@ static int tdbPagerAllocPage(SPager *pPager, SPgno *ppgno, TXN *pTxn) { // Try to allocate from the free list of the pager ret = tdbPagerAllocFreePage(pPager, ppgno, pTxn); if (ret < 0) { - return -1; + return ret; } if (*ppgno != 0) return 0; @@ -875,7 +875,7 @@ static int tdbPagerAllocPage(SPager *pPager, SPgno *ppgno, TXN *pTxn) { if (*ppgno == 0) { tdbError("tdb/pager:%p, alloc new page failed.", pPager); - return -1; + return TSDB_CODE_FAILED; } return 0; } @@ -907,7 +907,7 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage if (nRead < pPage->pageSize) { tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32, pPager, pgno, nRead, pPage->pageSize); TDB_UNLOCK_PAGE(pPage); - return -1; + return TAOS_SYSTEM_ERROR(errno); } int32_t encryptAlgorithm = pPager->pEnv->encryptAlgorithm; @@ -954,7 +954,7 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " init page failed.", pPager, pgno, nRead, pPage->pageSize); TDB_UNLOCK_PAGE(pPage); - return -1; + return ret; } tmemory_barrier(); @@ -975,7 +975,7 @@ static int tdbPagerInitPage(SPager *pPager, SPage *pPage, int (*initPage)(SPage } else { tdbError("tdb/pager:%p, pgno:%d, nRead:%" PRId64 "pgSize:%" PRId32 " lock page failed.", pPager, pgno, nRead, pPage->pageSize); - return -1; + return TSDB_CODE_FAILED; } return 0; @@ -1127,14 +1127,12 @@ static int tdbPagerRestore(SPager *pPager, const char *jFileName) { if (tdbOsClose(jfd) < 0) { tdbError("failed to close jfd due to %s. jFileName:%s", strerror(errno), pPager->jFileName); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + return terrno = TAOS_SYSTEM_ERROR(errno); } if (tdbOsRemove(jFileName) < 0 && errno != ENOENT) { tdbError("failed to remove file due to %s. jFileName:%s", strerror(errno), pPager->jFileName); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + return terrno = TAOS_SYSTEM_ERROR(errno); } return 0; From a5cd3444d1c09320d7027f6c054d072e3b676efd Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 25 Jul 2024 12:05:38 +0800 Subject: [PATCH 31/35] update sync raft store --- source/libs/sync/src/syncRaftStore.c | 64 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/source/libs/sync/src/syncRaftStore.c b/source/libs/sync/src/syncRaftStore.c index c200c6cb4b..7f702c3766 100644 --- a/source/libs/sync/src/syncRaftStore.c +++ b/source/libs/sync/src/syncRaftStore.c @@ -25,17 +25,17 @@ static int32_t raftStoreDecode(const SJson *pJson, SRaftStore *pStore) { int32_t code = 0; tjsonGetNumberValue(pJson, "current_term", pStore->currentTerm, code); - if (code < 0) return -1; + if (code < 0) TAOS_RETURN(TSDB_CODE_FAILED); tjsonGetNumberValue(pJson, "vote_for_addr", pStore->voteFor.addr, code); - if (code < 0) return -1; + if (code < 0) TAOS_RETURN(TSDB_CODE_FAILED); tjsonGetInt32ValueFromDouble(pJson, "vote_for_vgid", pStore->voteFor.vgId, code); - if (code < 0) return -1; + if (code < 0) TAOS_RETURN(TSDB_CODE_FAILED); - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t raftStoreReadFile(SSyncNode *pNode) { - int32_t code = -1; + int32_t code = -1, lino = 0; TdFilePtr pFile = NULL; char *pData = NULL; SJson *pJson = NULL; @@ -52,41 +52,38 @@ int32_t raftStoreReadFile(SSyncNode *pNode) { pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); sError("vgId:%d, failed to open raft store file:%s since %s", pNode->vgId, file, terrstr()); - goto _OVER; + + TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); sError("vgId:%d, failed to fstat raft store file:%s since %s", pNode->vgId, file, terrstr()); - goto _OVER; + + TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); } pData = taosMemoryMalloc(size + 1); if (pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); } if (taosReadFile(pFile, pData, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); sError("vgId:%d, failed to read raft store file:%s since %s", pNode->vgId, file, terrstr()); - goto _OVER; + + TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); } pData[size] = '\0'; pJson = tjsonParse(pData); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_JSON_FORMAT, &lino, _OVER); } if (raftStoreDecode(pJson, pStore) < 0) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; - goto _OVER; + TAOS_CHECK_GOTO(TSDB_CODE_INVALID_JSON_FORMAT, &lino, _OVER); } code = 0; @@ -100,18 +97,20 @@ _OVER: if (code != 0) { sError("vgId:%d, failed to read raft store file:%s since %s", pNode->vgId, file, terrstr()); } - return code; + + TAOS_RETURN(code); } static int32_t raftStoreEncode(SJson *pJson, SRaftStore *pStore) { - if (tjsonAddIntegerToObject(pJson, "current_term", pStore->currentTerm) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "vote_for_addr", pStore->voteFor.addr) < 0) return -1; - if (tjsonAddDoubleToObject(pJson, "vote_for_vgid", pStore->voteFor.vgId) < 0) return -1; - return 0; + if (tjsonAddIntegerToObject(pJson, "current_term", pStore->currentTerm) < 0) TAOS_RETURN(TSDB_CODE_FAILED); + if (tjsonAddIntegerToObject(pJson, "vote_for_addr", pStore->voteFor.addr) < 0) TAOS_RETURN(TSDB_CODE_FAILED); + if (tjsonAddDoubleToObject(pJson, "vote_for_vgid", pStore->voteFor.vgId) < 0) TAOS_RETURN(TSDB_CODE_FAILED); + + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t raftStoreWriteFile(SSyncNode *pNode) { - int32_t code = -1; + int32_t code = -1, lino = 0; char *buffer = NULL; SJson *pJson = NULL; TdFilePtr pFile = NULL; @@ -120,23 +119,23 @@ int32_t raftStoreWriteFile(SSyncNode *pNode) { char file[PATH_MAX] = {0}; snprintf(file, sizeof(file), "%s.bak", realfile); - terrno = TSDB_CODE_OUT_OF_MEMORY; pJson = tjsonCreateObject(); - if (pJson == NULL) goto _OVER; - if (raftStoreEncode(pJson, pStore) != 0) goto _OVER; + if (pJson == NULL) TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + if (raftStoreEncode(pJson, pStore) != 0) TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); + buffer = tjsonToString(pJson); - if (buffer == NULL) goto _OVER; - terrno = 0; + if (buffer == NULL) TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _OVER); pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); int32_t len = strlen(buffer); - if (taosWriteFile(pFile, buffer, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, buffer, len) <= 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); + + if (taosFsyncFile(pFile) < 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosRenameFile(file, realfile) != 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _OVER); code = 0; sInfo("vgId:%d, succeed to write raft store file:%s, term:%" PRId64, pNode->vgId, realfile, pStore->currentTerm); @@ -147,7 +146,6 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); sError("vgId:%d, failed to write raft store file:%s since %s", pNode->vgId, realfile, terrstr()); } return code; From 970a5f31a34a30b80e8c98904c732afe709de20f Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 25 Jul 2024 12:09:51 +0800 Subject: [PATCH 32/35] update sync replication --- source/libs/sync/src/syncReplication.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index 9312719be7..dfe9f51af2 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -52,7 +52,8 @@ int32_t syncNodeReplicateReset(SSyncNode* pNode, SRaftId* pDestId) { SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(pNode, pDestId); syncLogReplReset(pMgr); taosThreadMutexUnlock(&pBuf->mutex); - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t syncNodeReplicate(SSyncNode* pNode) { @@ -60,13 +61,14 @@ int32_t syncNodeReplicate(SSyncNode* pNode) { taosThreadMutexLock(&pBuf->mutex); int32_t ret = syncNodeReplicateWithoutLock(pNode); taosThreadMutexUnlock(&pBuf->mutex); - return ret; + + TAOS_RETURN(ret); } int32_t syncNodeReplicateWithoutLock(SSyncNode* pNode) { if ((pNode->state != TAOS_SYNC_STATE_LEADER && pNode->state != TAOS_SYNC_STATE_ASSIGNED_LEADER) || pNode->raftCfg.cfg.totalReplicaNum == 1) { - return -1; + TAOS_RETURN(TSDB_CODE_FAILED); } for (int32_t i = 0; i < pNode->totalReplicaNum; i++) { if (syncUtilSameId(&pNode->replicasId[i], &pNode->myRaftId)) { @@ -75,14 +77,16 @@ int32_t syncNodeReplicateWithoutLock(SSyncNode* pNode) { SSyncLogReplMgr* pMgr = pNode->logReplMgrs[i]; (void)syncLogReplStart(pMgr, pNode); } - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t syncNodeSendAppendEntries(SSyncNode* pSyncNode, const SRaftId* destRaftId, SRpcMsg* pRpcMsg) { SyncAppendEntries* pMsg = pRpcMsg->pCont; pMsg->destId = *destRaftId; syncNodeSendMsgById(destRaftId, pSyncNode, pRpcMsg); - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t syncNodeSendHeartbeat(SSyncNode* pSyncNode, const SRaftId* destId, SRpcMsg* pMsg) { @@ -112,5 +116,5 @@ int32_t syncNodeHeartbeatPeers(SSyncNode* pSyncNode) { syncNodeSendHeartbeat(pSyncNode, &pSyncMsg->destId, &rpcMsg); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } From 5caa366464402ac0cb8c19e643a105924dffcb42 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 25 Jul 2024 12:15:00 +0800 Subject: [PATCH 33/35] update sync vote & reply --- source/libs/sync/src/syncRequestVote.c | 11 ++++++----- source/libs/sync/src/syncRequestVoteReply.c | 14 +++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/source/libs/sync/src/syncRequestVote.c b/source/libs/sync/src/syncRequestVote.c index 77e5498127..0e50cca94c 100644 --- a/source/libs/sync/src/syncRequestVote.c +++ b/source/libs/sync/src/syncRequestVote.c @@ -20,7 +20,6 @@ #include "syncRaftStore.h" #include "syncUtil.h" #include "syncVoteMgr.h" -#include "syncUtil.h" // TLA+ Spec // HandleRequestVoteRequest(i, j, m) == @@ -95,7 +94,8 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, const SRpcMsg* pRpcMsg) { // if already drop replica, do not process if (!syncNodeInRaftGroup(ths, &pMsg->srcId)) { syncLogRecvRequestVote(ths, pMsg, -1, "not in my config"); - return -1; + + TAOS_RETURN(TSDB_CODE_FAILED); } bool logOK = syncNodeOnRequestVoteLogOK(ths, pMsg); @@ -122,8 +122,8 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, const SRpcMsg* pRpcMsg) { // send msg SRpcMsg rpcMsg = {0}; - ret = syncBuildRequestVoteReply(&rpcMsg, ths->vgId); - ASSERT(ret == 0); + + TAOS_CHECK_RETURN(syncBuildRequestVoteReply(&rpcMsg, ths->vgId)); SyncRequestVoteReply* pReply = rpcMsg.pCont; pReply->srcId = ths->myRaftId; @@ -138,5 +138,6 @@ int32_t syncNodeOnRequestVote(SSyncNode* ths, const SRpcMsg* pRpcMsg) { syncNodeSendMsgById(&pReply->destId, ths, &rpcMsg); if (resetElect) syncNodeResetElectTimer(ths); - return 0; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } diff --git a/source/libs/sync/src/syncRequestVoteReply.c b/source/libs/sync/src/syncRequestVoteReply.c index 25c9f813a6..10d9a6c96b 100644 --- a/source/libs/sync/src/syncRequestVoteReply.c +++ b/source/libs/sync/src/syncRequestVoteReply.c @@ -45,19 +45,22 @@ int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { // if already drop replica, do not process if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) { syncLogRecvRequestVoteReply(ths, pMsg, "not in my config"); - return -1; + + TAOS_RETURN(TSDB_CODE_FAILED); } SyncTerm currentTerm = raftStoreGetTerm(ths); // drop stale response if (pMsg->term < currentTerm) { syncLogRecvRequestVoteReply(ths, pMsg, "drop stale response"); - return -1; + + TAOS_RETURN(TSDB_CODE_FAILED); } if (pMsg->term > currentTerm) { syncLogRecvRequestVoteReply(ths, pMsg, "error term"); syncNodeStepDown(ths, pMsg->term); - return -1; + + TAOS_RETURN(TSDB_CODE_FAILED); } syncLogRecvRequestVoteReply(ths, pMsg, ""); @@ -69,7 +72,8 @@ int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { if (ths->pVotesRespond->term != pMsg->term) { sNError(ths, "vote respond error vote-respond-mgr term:%" PRIu64 ", msg term:%" PRIu64 "", ths->pVotesRespond->term, pMsg->term); - return -1; + + TAOS_RETURN(TSDB_CODE_FAILED); } votesRespondAdd(ths->pVotesRespond, pMsg); @@ -93,5 +97,5 @@ int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { } } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } From f075b5293a9471491f1687cfbfcff287bfe6bff7 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 25 Jul 2024 13:19:07 +0800 Subject: [PATCH 34/35] make it compile --- source/dnode/vnode/src/meta/metaTable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c index 92e910dba3..52151e76d6 100644 --- a/source/dnode/vnode/src/meta/metaTable.c +++ b/source/dnode/vnode/src/meta/metaTable.c @@ -185,7 +185,7 @@ int metaDelJsonVarFromIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const SSche int32_t nTagData = 0; SArray *pTagVals = NULL; - code = tTagToValArray((const STag *)data, &pTagVals); + int32_t code = tTagToValArray((const STag *)data, &pTagVals); if (code) { return code; } From a246e697b6f0e0a3c8d4346032ec4c14352afbcd Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 25 Jul 2024 15:01:14 +0800 Subject: [PATCH 35/35] enh: refactor return code --- source/util/src/tlog.c | 19 +++++++------- source/util/src/ttimer.c | 12 ++++----- source/util/src/tutil.c | 57 ++++++++++++++++++++++------------------ 3 files changed, 48 insertions(+), 40 deletions(-) diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c index 7a22efc887..6d4bf89c0a 100644 --- a/source/util/src/tlog.c +++ b/source/util/src/tlog.c @@ -19,6 +19,7 @@ #include "tconfig.h" #include "tglobal.h" #include "tjson.h" +#include "tutil.h" #define LOG_MAX_LINE_SIZE (10024) #define LOG_MAX_LINE_BUFFER_SIZE (LOG_MAX_LINE_SIZE + 3) @@ -146,7 +147,7 @@ static int32_t taosStartLog() { TdThreadAttr threadAttr; taosThreadAttrInit(&threadAttr); if (taosThreadCreate(&(tsLogObj.logHandle->asyncThread), &threadAttr, taosAsyncOutputLog, tsLogObj.logHandle) != 0) { - return -1; + return terrno; } taosThreadAttrDestroy(&threadAttr); return 0; @@ -176,13 +177,13 @@ int32_t taosInitSlowLog() { } tsLogObj.slowHandle = taosLogBuffNew(LOG_SLOW_BUF_SIZE); - if (tsLogObj.slowHandle == NULL) return -1; + if (tsLogObj.slowHandle == NULL) return terrno; taosUmaskFile(0); tsLogObj.slowHandle->pFile = taosOpenFile(fullName, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND); if (tsLogObj.slowHandle->pFile == NULL) { printf("\nfailed to open slow log file:%s, reason:%s\n", fullName, strerror(errno)); - return -1; + return TAOS_SYSTEM_ERROR(errno); } return 0; @@ -209,11 +210,11 @@ int32_t taosInitLog(const char *logName, int32_t maxFiles) { taosUpdateDaylight(); tsLogObj.logHandle = taosLogBuffNew(LOG_DEFAULT_BUF_SIZE); - if (tsLogObj.logHandle == NULL) return -1; - if (taosOpenLogFile(fullName, maxFiles) < 0) return -1; + if (tsLogObj.logHandle == NULL) return terrno; + TAOS_CHECK_RETURN(taosOpenLogFile(fullName, maxFiles)); - if (taosInitSlowLog() < 0) return -1; - if (taosStartLog() < 0) return -1; + TAOS_CHECK_RETURN(taosInitSlowLog()); + TAOS_CHECK_RETURN(taosStartLog()); return 0; } @@ -484,7 +485,7 @@ static int32_t taosOpenLogFile(char *fn, int32_t maxFileNum) { if (tsLogObj.logHandle->pFile == NULL) { printf("\nfailed to open log file:%s, reason:%s\n", fileName, strerror(errno)); - return -1; + return TAOS_SYSTEM_ERROR(errno); } taosLockLogFile(tsLogObj.logHandle->pFile); @@ -492,7 +493,7 @@ static int32_t taosOpenLogFile(char *fn, int32_t maxFileNum) { int64_t filesize = 0; if (taosFStatFile(tsLogObj.logHandle->pFile, &filesize, NULL) < 0) { printf("\nfailed to fstat log file:%s, reason:%s\n", fileName, strerror(errno)); - return -1; + return TAOS_SYSTEM_ERROR(errno); } tsLogObj.lines = (int32_t)(filesize / 60); diff --git a/source/util/src/ttimer.c b/source/util/src/ttimer.c index cb01fb2d13..5f6439d8f6 100644 --- a/source/util/src/ttimer.c +++ b/source/util/src/ttimer.c @@ -516,7 +516,7 @@ static int32_t taosTmrModuleInit(void) { tmrCtrls = taosMemoryMalloc(sizeof(tmr_ctrl_t) * tsMaxTmrCtrl); if (tmrCtrls == NULL) { tmrError("failed to allocate memory for timer controllers."); - return -1; + return terrno; } memset(&timerMap, 0, sizeof(timerMap)); @@ -535,14 +535,14 @@ static int32_t taosTmrModuleInit(void) { time_wheel_t* wheel = wheels + i; if (taosThreadMutexInit(&wheel->mutex, NULL) != 0) { tmrError("failed to create the mutex for wheel, reason:%s", strerror(errno)); - return -1; + return terrno; } wheel->nextScanAt = now + wheel->resolution; wheel->index = 0; wheel->slots = (tmr_obj_t**)taosMemoryCalloc(wheel->size, sizeof(tmr_obj_t*)); if (wheel->slots == NULL) { tmrError("failed to allocate wheel slots"); - return -1; + return terrno; } timerMap.size += wheel->size; } @@ -551,7 +551,7 @@ static int32_t taosTmrModuleInit(void) { timerMap.slots = (timer_list_t*)taosMemoryCalloc(timerMap.size, sizeof(timer_list_t)); if (timerMap.slots == NULL) { tmrError("failed to allocate hash map"); - return -1; + return terrno; } tmrQhandle = taosInitScheduler(10000, taosTmrThreads, "tmr", NULL); @@ -570,7 +570,7 @@ static int32_t taosTmrInitModule(void) { if (atomic_load_32(&tmrModuleInit) < 0) { return -1; } - + while (true) { if (0 == atomic_val_compare_exchange_32(&tmrModuleInit, 0, 1)) { atomic_store_32(&tmrModuleInit, taosTmrModuleInit()); @@ -609,7 +609,7 @@ void* taosTmrInit(int32_t maxNumOfTmrs, int32_t resolution, int32_t longest, con } tstrncpy(ctrl->label, label, sizeof(ctrl->label)); - + tmrDebug("%s timer controller is initialized, number of timer controllers: %d.", label, numOfTmrCtrl); return ctrl; } diff --git a/source/util/src/tutil.c b/source/util/src/tutil.c index f201edcb5e..a14ea1a3cd 100644 --- a/source/util/src/tutil.c +++ b/source/util/src/tutil.c @@ -107,6 +107,9 @@ char **strsplit(char *z, const char *delim, int32_t *num) { int32_t size = 4; char **split = taosMemoryMalloc(POINTER_BYTES * size); + if (split == NULL) { + return NULL; + } for (char *p = strsep(&z, delim); p != NULL; p = strsep(&z, delim)) { size_t len = strlen(p); @@ -118,7 +121,10 @@ char **strsplit(char *z, const char *delim, int32_t *num) { if ((*num) >= size) { size = (size << 1); split = taosMemoryRealloc(split, POINTER_BYTES * size); - ASSERTS(NULL != split, "realloc memory failed. size=%d", (int32_t) POINTER_BYTES * size); + if (split == NULL) { + return NULL; + } + ASSERTS(NULL != split, "realloc memory failed. size=%d", (int32_t)POINTER_BYTES * size); } } @@ -145,10 +151,10 @@ char *strnchr(const char *haystack, char needle, int32_t len, bool skipquote) { return NULL; } -TdUcs4* wcsnchr(const TdUcs4* haystack, TdUcs4 needle, size_t len) { - for(int32_t i = 0; i < len; ++i) { +TdUcs4 *wcsnchr(const TdUcs4 *haystack, TdUcs4 needle, size_t len) { + for (int32_t i = 0; i < len; ++i) { if (haystack[i] == needle) { - return (TdUcs4*) &haystack[i]; + return (TdUcs4 *)&haystack[i]; } } @@ -314,6 +320,9 @@ char *strbetween(char *string, char *begin, char *end) { int32_t size = (int32_t)(_end - _begin); if (_end != NULL && size > 0) { result = (char *)taosMemoryCalloc(1, size); + if (result) { + return NULL; + } memcpy(result, _begin + strlen(begin), size - +strlen(begin)); } } @@ -324,13 +333,13 @@ int32_t tintToHex(uint64_t val, char hex[]) { const char hexstr[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; int32_t j = 0, k = 0; - if (val == 0) { + if (val == 0) { hex[j++] = hexstr[0]; return j; } // ignore the initial 0 - while((val & (((uint64_t)0xfL) << ((15 - k) * 4))) == 0) { + while ((val & (((uint64_t)0xfL) << ((15 - k) * 4))) == 0) { k += 1; } @@ -346,10 +355,10 @@ int32_t titoa(uint64_t val, size_t radix, char str[]) { return 0; } - const char* s = "0123456789abcdef"; - char buf[65] = {0}; + const char *s = "0123456789abcdef"; + char buf[65] = {0}; - int32_t i = 0; + int32_t i = 0; uint64_t v = val; do { buf[i++] = s[v % radix]; @@ -357,7 +366,7 @@ int32_t titoa(uint64_t val, size_t radix, char str[]) { } while (v > 0); // reverse order - for(int32_t j = 0; j < i; ++j) { + for (int32_t j = 0; j < i; ++j) { str[j] = buf[i - j - 1]; } @@ -429,8 +438,8 @@ void taosIpPort2String(uint32_t ip, uint16_t port, char *str) { size_t tstrncspn(const char *str, size_t size, const char *reject, size_t rsize) { if (rsize == 0 || rsize == 1) { - char* p = strnchr(str, reject[0], size, false); - return (p == NULL)? size:(p-str); + char *p = strnchr(str, reject[0], size, false); + return (p == NULL) ? size : (p - str); } /* Use multiple small memsets to enable inlining on most targets. */ @@ -441,15 +450,15 @@ size_t tstrncspn(const char *str, size_t size, const char *reject, size_t rsize) memset(p + 192, 0, 64); unsigned char *s = (unsigned char *)reject; - int32_t index = 0; + int32_t index = 0; do { p[s[index++]] = 1; } while (index < rsize); - s = (unsigned char*) str; + s = (unsigned char *)str; int32_t times = size >> 2; if (times == 0) { - for(int32_t i = 0; i < size; ++i) { + for (int32_t i = 0; i < size; ++i) { if (p[s[i]]) { return i; } @@ -460,7 +469,7 @@ size_t tstrncspn(const char *str, size_t size, const char *reject, size_t rsize) index = 0; uint32_t c0, c1, c2, c3; - for(int32_t i = 0; i < times; ++i, index += 4) { + for (int32_t i = 0; i < times; ++i, index += 4) { int32_t j = index; c0 = p[s[j]]; c1 = p[s[j + 1]]; @@ -474,7 +483,7 @@ size_t tstrncspn(const char *str, size_t size, const char *reject, size_t rsize) } int32_t offset = times * 4; - for(int32_t i = offset; i < size; ++i) { + for (int32_t i = offset; i < size; ++i) { if (p[s[i]]) { return i; } @@ -485,8 +494,8 @@ size_t tstrncspn(const char *str, size_t size, const char *reject, size_t rsize) size_t twcsncspn(const TdUcs4 *wcs, size_t size, const TdUcs4 *reject, size_t rsize) { if (rsize == 0 || rsize == 1) { - TdUcs4* p = wcsnchr(wcs, reject[0], size); - return (p == NULL)? size:(p-wcs); + TdUcs4 *p = wcsnchr(wcs, reject[0], size); + return (p == NULL) ? size : (p - wcs); } size_t index = 0; @@ -497,19 +506,17 @@ size_t twcsncspn(const TdUcs4 *wcs, size_t size, const TdUcs4 *reject, size_t rs return index; } -int32_t parseCfgReal(const char* str, double* out) { +int32_t parseCfgReal(const char *str, double *out) { double val; char *endPtr; errno = 0; val = taosStr2Double(str, &endPtr); if (str == endPtr || errno == ERANGE || isnan(val)) { - terrno = TSDB_CODE_INVALID_CFG_VALUE; - return -1; + return terrno = TSDB_CODE_INVALID_CFG_VALUE; } - while(isspace((unsigned char)*endPtr)) endPtr++; + while (isspace((unsigned char)*endPtr)) endPtr++; if (*endPtr != '\0') { - terrno = TSDB_CODE_INVALID_CFG_VALUE; - return -1; + return terrno = TSDB_CODE_INVALID_CFG_VALUE; } *out = val; return TSDB_CODE_SUCCESS;