diff --git a/include/common/tglobal.h b/include/common/tglobal.h index 3fd3cc4ca9..bb5271a45f 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -272,11 +272,11 @@ int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer); struct SConfig *taosGetCfg(); -void taosSetGlobalDebugFlag(int32_t flag); -void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal); -void taosLocalCfgForbiddenToChange(char *name, bool *forbidden); -int8_t taosGranted(int8_t type); -int32_t taosSetSlowLogScope(char *pScope); +int32_t taosSetGlobalDebugFlag(int32_t flag); +int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal); +void taosLocalCfgForbiddenToChange(char *name, bool *forbidden); +int8_t taosGranted(int8_t type); +int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope); #ifdef __cplusplus } diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 878543faa6..4830593616 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -683,36 +683,55 @@ typedef struct { } SColCmprWrapper; static FORCE_INLINE SColCmprWrapper* tCloneSColCmprWrapper(const SColCmprWrapper* pSrcWrapper) { - if (pSrcWrapper->pColCmpr == NULL || pSrcWrapper->nCols == 0) return NULL; + if (pSrcWrapper->pColCmpr == NULL || pSrcWrapper->nCols == 0) { + terrno = TSDB_CODE_INVALID_PARA; + return NULL; + } SColCmprWrapper* pDstWrapper = (SColCmprWrapper*)taosMemoryMalloc(sizeof(SColCmprWrapper)); + if (pDstWrapper == NULL) { + return NULL; + } pDstWrapper->nCols = pSrcWrapper->nCols; pDstWrapper->version = pSrcWrapper->version; int32_t size = sizeof(SColCmpr) * pDstWrapper->nCols; pDstWrapper->pColCmpr = (SColCmpr*)taosMemoryCalloc(1, size); + if (pDstWrapper->pColCmpr == NULL) { + taosMemoryFree(pDstWrapper); + return NULL; + } (void)memcpy(pDstWrapper->pColCmpr, pSrcWrapper->pColCmpr, size); return pDstWrapper; } -static FORCE_INLINE void tInitDefaultSColCmprWrapperByCols(SColCmprWrapper* pCmpr, int32_t nCols) { +static FORCE_INLINE int32_t tInitDefaultSColCmprWrapperByCols(SColCmprWrapper* pCmpr, int32_t nCols) { assert(!pCmpr->pColCmpr); pCmpr->pColCmpr = (SColCmpr*)taosMemoryCalloc(nCols, sizeof(SColCmpr)); + if (pCmpr->pColCmpr == NULL) { + return terrno; + } pCmpr->nCols = nCols; + return 0; } -static FORCE_INLINE void tInitDefaultSColCmprWrapper(SColCmprWrapper* pCmpr, SSchemaWrapper* pSchema) { +static FORCE_INLINE int32_t tInitDefaultSColCmprWrapper(SColCmprWrapper* pCmpr, SSchemaWrapper* pSchema) { pCmpr->nCols = pSchema->nCols; assert(!pCmpr->pColCmpr); pCmpr->pColCmpr = (SColCmpr*)taosMemoryCalloc(pCmpr->nCols, sizeof(SColCmpr)); + if (pCmpr->pColCmpr == NULL) { + return terrno; + } for (int32_t i = 0; i < pCmpr->nCols; i++) { SColCmpr* pColCmpr = &pCmpr->pColCmpr[i]; SSchema* pColSchema = &pSchema->pSchema[i]; pColCmpr->id = pColSchema->colId; pColCmpr->alg = 0; } + return 0; } + static FORCE_INLINE void tDeleteSColCmprWrapper(SColCmprWrapper* pWrapper) { if (pWrapper == NULL) return; @@ -723,7 +742,9 @@ static FORCE_INLINE SSchemaWrapper* tCloneSSchemaWrapper(const SSchemaWrapper* p if (pSchemaWrapper->pSchema == NULL) return NULL; SSchemaWrapper* pSW = (SSchemaWrapper*)taosMemoryMalloc(sizeof(SSchemaWrapper)); - if (pSW == NULL) return pSW; + if (pSW == NULL) { + return NULL; + } pSW->nCols = pSchemaWrapper->nCols; pSW->version = pSchemaWrapper->version; pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema)); @@ -770,32 +791,32 @@ static FORCE_INLINE void* taosDecodeSSchema(const void* buf, SSchema* pSchema) { } static FORCE_INLINE int32_t tEncodeSSchema(SEncoder* pEncoder, const SSchema* pSchema) { - if (tEncodeI8(pEncoder, pSchema->type) < 0) return -1; - if (tEncodeI8(pEncoder, pSchema->flags) < 0) return -1; - if (tEncodeI32v(pEncoder, pSchema->bytes) < 0) return -1; - if (tEncodeI16v(pEncoder, pSchema->colId) < 0) return -1; - if (tEncodeCStr(pEncoder, pSchema->name) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI8(pEncoder, pSchema->type)); + TAOS_CHECK_RETURN(tEncodeI8(pEncoder, pSchema->flags)); + TAOS_CHECK_RETURN(tEncodeI32v(pEncoder, pSchema->bytes)); + TAOS_CHECK_RETURN(tEncodeI16v(pEncoder, pSchema->colId)); + TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pSchema->name)); return 0; } static FORCE_INLINE int32_t tDecodeSSchema(SDecoder* pDecoder, SSchema* pSchema) { - if (tDecodeI8(pDecoder, &pSchema->type) < 0) return -1; - if (tDecodeI8(pDecoder, &pSchema->flags) < 0) return -1; - if (tDecodeI32v(pDecoder, &pSchema->bytes) < 0) return -1; - if (tDecodeI16v(pDecoder, &pSchema->colId) < 0) return -1; - if (tDecodeCStrTo(pDecoder, pSchema->name) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI8(pDecoder, &pSchema->type)); + TAOS_CHECK_RETURN(tDecodeI8(pDecoder, &pSchema->flags)); + TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pSchema->bytes)); + TAOS_CHECK_RETURN(tDecodeI16v(pDecoder, &pSchema->colId)); + TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, pSchema->name)); return 0; } static FORCE_INLINE int32_t tEncodeSSchemaExt(SEncoder* pEncoder, const SSchemaExt* pSchemaExt) { - if (tEncodeI16v(pEncoder, pSchemaExt->colId) < 0) return -1; - if (tEncodeU32(pEncoder, pSchemaExt->compress) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI16v(pEncoder, pSchemaExt->colId)); + TAOS_CHECK_RETURN(tEncodeU32(pEncoder, pSchemaExt->compress)); return 0; } static FORCE_INLINE int32_t tDecodeSSchemaExt(SDecoder* pDecoder, SSchemaExt* pSchemaExt) { - if (tDecodeI16v(pDecoder, &pSchemaExt->colId) < 0) return -1; - if (tDecodeU32(pDecoder, &pSchemaExt->compress) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI16v(pDecoder, &pSchemaExt->colId)); + TAOS_CHECK_RETURN(tDecodeU32(pDecoder, &pSchemaExt->compress)); return 0; } @@ -828,36 +849,39 @@ static FORCE_INLINE void* taosDecodeSSchemaWrapper(const void* buf, SSchemaWrapp } static FORCE_INLINE int32_t tEncodeSSchemaWrapper(SEncoder* pEncoder, const SSchemaWrapper* pSW) { - if (tEncodeI32v(pEncoder, pSW->nCols) < 0) return -1; - if (tEncodeI32v(pEncoder, pSW->version) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI32v(pEncoder, pSW->nCols)); + TAOS_CHECK_RETURN(tEncodeI32v(pEncoder, pSW->version)); for (int32_t i = 0; i < pSW->nCols; i++) { - if (tEncodeSSchema(pEncoder, &pSW->pSchema[i]) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeSSchema(pEncoder, &pSW->pSchema[i])); } - return 0; } static FORCE_INLINE int32_t tDecodeSSchemaWrapper(SDecoder* pDecoder, SSchemaWrapper* pSW) { - if (tDecodeI32v(pDecoder, &pSW->nCols) < 0) return -1; - if (tDecodeI32v(pDecoder, &pSW->version) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pSW->nCols)); + TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pSW->version)); pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema)); - if (pSW->pSchema == NULL) return -1; + if (pSW->pSchema == NULL) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } for (int32_t i = 0; i < pSW->nCols; i++) { - if (tDecodeSSchema(pDecoder, &pSW->pSchema[i]) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeSSchema(pDecoder, &pSW->pSchema[i])); } return 0; } static FORCE_INLINE int32_t tDecodeSSchemaWrapperEx(SDecoder* pDecoder, SSchemaWrapper* pSW) { - if (tDecodeI32v(pDecoder, &pSW->nCols) < 0) return -1; - if (tDecodeI32v(pDecoder, &pSW->version) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pSW->nCols)); + TAOS_CHECK_RETURN(tDecodeI32v(pDecoder, &pSW->version)); pSW->pSchema = (SSchema*)tDecoderMalloc(pDecoder, pSW->nCols * sizeof(SSchema)); - if (pSW->pSchema == NULL) return -1; + if (pSW->pSchema == NULL) { + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } for (int32_t i = 0; i < pSW->nCols; i++) { - if (tDecodeSSchema(pDecoder, &pSW->pSchema[i]) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeSSchema(pDecoder, &pSW->pSchema[i])); } return 0; @@ -2838,13 +2862,13 @@ static FORCE_INLINE int32_t tDeserializeSCMSubscribeReq(void* buf, SCMSubscribeR pReq->topicNames = taosArrayInit(topicNum, sizeof(void*)); if (pReq->topicNames == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } for (int32_t i = 0; i < topicNum; i++) { char* name = NULL; buf = taosDecodeString(buf, &name); if (taosArrayPush(pReq->topicNames, &name) == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } @@ -2875,6 +2899,7 @@ static FORCE_INLINE SMqRebInfo* tNewSMqRebSubscribe(const char* key) { } pRebInfo->newConsumers = taosArrayInit(0, sizeof(int64_t)); if (pRebInfo->newConsumers == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; goto _err; } return pRebInfo; @@ -3358,30 +3383,32 @@ int32_t tDeserializeSClientHbBatchRsp(void* buf, int32_t bufLen, SClientHbBatchR void tFreeSClientHbBatchRsp(SClientHbBatchRsp* pBatchRsp); static FORCE_INLINE int32_t tEncodeSKv(SEncoder* pEncoder, const SKv* pKv) { - if (tEncodeI32(pEncoder, pKv->key) < 0) return -1; - if (tEncodeI32(pEncoder, pKv->valueLen) < 0) return -1; - if (tEncodeBinary(pEncoder, (uint8_t*)pKv->value, pKv->valueLen) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pKv->key)); + TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pKv->valueLen)); + TAOS_CHECK_RETURN(tEncodeBinary(pEncoder, (uint8_t*)pKv->value, pKv->valueLen)); return 0; } static FORCE_INLINE int32_t tDecodeSKv(SDecoder* pDecoder, SKv* pKv) { - if (tDecodeI32(pDecoder, &pKv->key) < 0) return -1; - if (tDecodeI32(pDecoder, &pKv->valueLen) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pKv->key)); + TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pKv->valueLen)); pKv->value = taosMemoryMalloc(pKv->valueLen + 1); - if (pKv->value == NULL) return -1; - if (tDecodeCStrTo(pDecoder, (char*)pKv->value) < 0) return -1; + if (pKv->value == NULL) { + TAOS_CHECK_RETURN(TSDB_CODE_OUT_OF_MEMORY); + } + TAOS_CHECK_RETURN(tDecodeCStrTo(pDecoder, (char*)pKv->value)); return 0; } static FORCE_INLINE int32_t tEncodeSClientHbKey(SEncoder* pEncoder, const SClientHbKey* pKey) { - if (tEncodeI64(pEncoder, pKey->tscRid) < 0) return -1; - if (tEncodeI8(pEncoder, pKey->connType) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI64(pEncoder, pKey->tscRid)); + TAOS_CHECK_RETURN(tEncodeI8(pEncoder, pKey->connType)); return 0; } static FORCE_INLINE int32_t tDecodeSClientHbKey(SDecoder* pDecoder, SClientHbKey* pKey) { - if (tDecodeI64(pDecoder, &pKey->tscRid) < 0) return -1; - if (tDecodeI8(pDecoder, &pKey->connType) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI64(pDecoder, &pKey->tscRid)); + TAOS_CHECK_RETURN(tDecodeI8(pDecoder, &pKey->connType)); return 0; } @@ -3432,7 +3459,9 @@ static FORCE_INLINE void* taosDecodeSMqTopicInfoMsg(void* buf, SMqTopicInfo* pTo for (int32_t i = 0; i < sz; i++) { SMqReportVgInfo vgInfo; buf = taosDecodeSMqVgInfo(buf, &vgInfo); - taosArrayPush(pTopicInfo->pVgInfo, &vgInfo); + if (taosArrayPush(pTopicInfo->pVgInfo, &vgInfo) == NULL) { + return NULL; + } } return buf; } @@ -3468,7 +3497,9 @@ static FORCE_INLINE void* taosDecodeSMqReportMsg(void* buf, SMqReportReq* pMsg) for (int32_t i = 0; i < sz; i++) { SMqTopicInfo topicInfo; buf = taosDecodeSMqTopicInfoMsg(buf, &topicInfo); - taosArrayPush(pMsg->pTopics, &topicInfo); + if (taosArrayPush(pMsg->pTopics, &topicInfo) == NULL) { + return NULL; + } } return buf; } @@ -3607,7 +3638,7 @@ int32_t tEncodeSTqOffsetVal(SEncoder* pEncoder, const STqOffsetVal* pOffsetVal); int32_t tDecodeSTqOffsetVal(SDecoder* pDecoder, STqOffsetVal* pOffsetVal); int32_t tFormatOffset(char* buf, int32_t maxLen, const STqOffsetVal* pVal); bool tOffsetEqual(const STqOffsetVal* pLeft, const STqOffsetVal* pRight); -void tOffsetCopy(STqOffsetVal* pLeft, const STqOffsetVal* pOffsetVal); +int32_t tOffsetCopy(STqOffsetVal* pLeft, const STqOffsetVal* pRight); void tOffsetDestroy(void* pVal); typedef struct { @@ -3808,17 +3839,17 @@ int32_t tEncodeTSma(SEncoder* pCoder, const STSma* pSma); int32_t tDecodeTSma(SDecoder* pCoder, STSma* pSma, bool deepCopy); static int32_t tEncodeTSmaWrapper(SEncoder* pEncoder, const STSmaWrapper* pReq) { - if (tEncodeI32(pEncoder, pReq->number) < 0) return -1; + TAOS_CHECK_RETURN(tEncodeI32(pEncoder, pReq->number)); for (int32_t i = 0; i < pReq->number; ++i) { - tEncodeTSma(pEncoder, pReq->tSma + i); + TAOS_CHECK_RETURN(tEncodeTSma(pEncoder, pReq->tSma + i)); } return 0; } static int32_t tDecodeTSmaWrapper(SDecoder* pDecoder, STSmaWrapper* pReq, bool deepCopy) { - if (tDecodeI32(pDecoder, &pReq->number) < 0) return -1; + TAOS_CHECK_RETURN(tDecodeI32(pDecoder, &pReq->number)); for (int32_t i = 0; i < pReq->number; ++i) { - tDecodeTSma(pDecoder, pReq->tSma + i, deepCopy); + TAOS_CHECK_RETURN(tDecodeTSma(pDecoder, pReq->tSma + i, deepCopy)); } return 0; } @@ -4041,7 +4072,10 @@ static FORCE_INLINE void* tDecodeSMqAskEpRsp(void* buf, SMqAskEpRsp* pRsp) { for (int32_t i = 0; i < sz; i++) { SMqSubTopicEp topicEp; buf = tDecodeMqSubTopicEp(buf, &topicEp); - if (taosArrayPush(pRsp->topics, &topicEp) == NULL) { + if (buf == NULL) { + return NULL; + } + if ((taosArrayPush(pRsp->topics, &topicEp) == NULL)) { return NULL; } } diff --git a/include/libs/executor/executor.h b/include/libs/executor/executor.h index 082e824e5a..324804aa7c 100644 --- a/include/libs/executor/executor.h +++ b/include/libs/executor/executor.h @@ -211,7 +211,7 @@ const char* qExtractTbnameFromTask(qTaskInfo_t tinfo); void* qExtractReaderFromStreamScanner(void* scanner); -int32_t qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner); +void qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner); int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo); int32_t qStreamSourceScanParamForHistoryScanStep1(qTaskInfo_t tinfo, SVersionRange *pVerRange, STimeWindow* pWindow); diff --git a/include/libs/executor/storageapi.h b/include/libs/executor/storageapi.h index 05ef14657b..a0ff3353bc 100644 --- a/include/libs/executor/storageapi.h +++ b/include/libs/executor/storageapi.h @@ -218,10 +218,10 @@ typedef struct SStoreTqReader { int32_t (*tqGetStreamExecProgress)(); void (*tqReaderSetColIdList)(); - int32_t (*tqReaderSetQueryTableList)(); + void (*tqReaderSetQueryTableList)(); - int32_t (*tqReaderAddTables)(); - int32_t (*tqReaderRemoveTables)(); + void (*tqReaderAddTables)(); + void (*tqReaderRemoveTables)(); void (*tqSetTablePrimaryKey)(); bool (*tqGetTablePrimaryKey)(); @@ -239,8 +239,8 @@ typedef struct SStoreSnapshotFn { bool (*taosXGetTablePrimaryKey)(SSnapContext* ctx); void (*taosXSetTablePrimaryKey)(SSnapContext* ctx, int64_t uid); int32_t (*setForSnapShot)(SSnapContext* ctx, int64_t uid); - int32_t (*destroySnapshot)(SSnapContext* ctx); - SMetaTableInfo (*getMetaTableInfoFromSnapshot)(SSnapContext* ctx); + void (*destroySnapshot)(SSnapContext* ctx); + int32_t (*getMetaTableInfoFromSnapshot)(SSnapContext* ctx, SMetaTableInfo* info); int32_t (*getTableInfoFromSnapshot)(SSnapContext* ctx, void** pBuf, int32_t* contLen, int16_t* type, int64_t* uid); } SStoreSnapshotFn; diff --git a/include/libs/index/index.h b/include/libs/index/index.h index cfcc9993cf..0ef21794ee 100644 --- a/include/libs/index/index.h +++ b/include/libs/index/index.h @@ -83,7 +83,7 @@ void indexMultiTermQueryDestroy(SIndexMultiTermQuery* pQuery); * @param type (input, single query type) * @return error code */ -int indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EIndexQueryType type); +int32_t indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EIndexQueryType type); /* * open index * @param opt (input, index opt) @@ -91,7 +91,7 @@ int indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EInde * @param index (output, index object) * @return error code */ -int indexOpen(SIndexOpts* opt, const char* path, SIndex** index); +int32_t indexOpen(SIndexOpts* opt, const char* path, SIndex** index); /* * close index * @param index (input, index to be closed) @@ -106,7 +106,7 @@ void indexClose(SIndex* index); * @param uid (input, uid of terms) * @return error code */ -int indexPut(SIndex* index, SIndexMultiTerm* terms, uint64_t uid); +int32_t indexPut(SIndex* index, SIndexMultiTerm* terms, uint64_t uid); /* * delete terms that meet query condition * @param index (input, index object) @@ -114,7 +114,7 @@ int indexPut(SIndex* index, SIndexMultiTerm* terms, uint64_t uid); * @return error code */ -int indexDelete(SIndex* index, SIndexMultiTermQuery* query); +int32_t indexDelete(SIndex* index, SIndexMultiTermQuery* query); /* * search index * @param index (input, index object) @@ -122,7 +122,7 @@ int indexDelete(SIndex* index, SIndexMultiTermQuery* query); * @param result(output, query result) * @return error code */ -int indexSearch(SIndex* index, SIndexMultiTermQuery* query, SArray* result); +int32_t indexSearch(SIndex* index, SIndexMultiTermQuery* query, SArray* result); /* * rebuild index * @param index (input, index object) @@ -138,7 +138,7 @@ int indexSearch(SIndex* index, SIndexMultiTermQuery* query, SArray* result); * @param index (output, index json object) * @return error code */ -int indexJsonOpen(SIndexJsonOpts* opts, const char* path, SIndexJson** index); +int32_t indexJsonOpen(SIndexJsonOpts* opts, const char* path, SIndexJson** index); /* * close index * @param index (input, index to be closed) @@ -154,7 +154,7 @@ void indexJsonClose(SIndexJson* index); * @param uid (input, uid of terms) * @return error code */ -int indexJsonPut(SIndexJson* index, SIndexJsonMultiTerm* terms, uint64_t uid); +int32_t indexJsonPut(SIndexJson* index, SIndexJsonMultiTerm* terms, uint64_t uid); /* * search index * @param index (input, index object) @@ -163,7 +163,7 @@ int indexJsonPut(SIndexJson* index, SIndexJsonMultiTerm* terms, uint64_t uid); * @return error code */ -int indexJsonSearch(SIndexJson* index, SIndexJsonMultiTermQuery* query, SArray* result); +int32_t indexJsonSearch(SIndexJson* index, SIndexJsonMultiTermQuery* query, SArray* result); /* * @param * @param diff --git a/include/util/taoserror.h b/include/util/taoserror.h index a52e87bbb3..1ff9cdd5af 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -669,8 +669,16 @@ int32_t taosGetErrSize(); #define TSDB_CODE_SYN_BUFFER_FULL TAOS_DEF_ERROR_CODE(0, 0x0916) #define TSDB_CODE_SYN_WRITE_STALL TAOS_DEF_ERROR_CODE(0, 0x0917) #define TSDB_CODE_SYN_NEGOTIATION_WIN_FULL TAOS_DEF_ERROR_CODE(0, 0x0918) +#define TSDB_CODE_SYN_WRONG_TERM TAOS_DEF_ERROR_CODE(0, 0x0919) +#define TSDB_CODE_SYN_WRONG_FSM_STATE TAOS_DEF_ERROR_CODE(0, 0x091A) +#define TSDB_CODE_SYN_WRONG_SYNC_STATE TAOS_DEF_ERROR_CODE(0, 0x091B) +#define TSDB_CODE_SYN_WRONG_REF TAOS_DEF_ERROR_CODE(0, 0x091C) +#define TSDB_CODE_SYN_INVALID_ID TAOS_DEF_ERROR_CODE(0, 0x091D) +#define TSDB_CODE_SYN_RETURN_VALUE_NULL TAOS_DEF_ERROR_CODE(0, 0x091E) +#define TSDB_CODE_SYN_WRONG_ROLE TAOS_DEF_ERROR_CODE(0, 0x091F) #define TSDB_CODE_SYN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x09FF) + // tq #define TSDB_CODE_TQ_INVALID_CONFIG TAOS_DEF_ERROR_CODE(0, 0x0A00) #define TSDB_CODE_TQ_INIT_FAILED TAOS_DEF_ERROR_CODE(0, 0x0A01) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index be33033cf9..f05120b366 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -484,7 +484,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { end: RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tags", tags)); - (void)taosArrayDestroy(pTagVals); + taosArrayDestroy(pTagVals); } static void buildCreateCTableJson(SVCreateTbReq* pCreateReq, int32_t nReqs, cJSON** pJson) { @@ -588,7 +588,7 @@ end: tDecoderClear(&decoder[i]); taosMemoryFreeClear(pCreateReq[i].comment); if (pCreateReq[i].type == TSDB_CHILD_TABLE) { - (void)taosArrayDestroy(pCreateReq[i].ctb.tagName); + taosArrayDestroy(pCreateReq[i].ctb.tagName); } } taosMemoryFree(decoder); @@ -1097,7 +1097,7 @@ typedef struct SVgroupCreateTableBatch { static void destroyCreateTbReqBatch(void* data) { SVgroupCreateTableBatch* pTbBatch = (SVgroupCreateTableBatch*)data; - (void)taosArrayDestroy(pTbBatch->req.pArray); + taosArrayDestroy(pTbBatch->req.pArray); } static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { @@ -1252,7 +1252,7 @@ typedef struct SVgroupDropTableBatch { static void destroyDropTbReqBatch(void* data) { SVgroupDropTableBatch* pTbBatch = (SVgroupDropTableBatch*)data; - (void)taosArrayDestroy(pTbBatch->req.pArray); + taosArrayDestroy(pTbBatch->req.pArray); } static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { @@ -1518,7 +1518,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { } end: uDebug(LOG_ID_TAG " alter table return, meta:%p, len:%d, msg:%s", LOG_ID_VALUE, meta, metaLen, tstrerror(code)); - (void)taosArrayDestroy(pArray); + taosArrayDestroy(pArray); if (pVgData) taosMemoryFreeClear(pVgData->pData); taosMemoryFreeClear(pVgData); destroyRequest(pRequest); diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c index 11c0bd6d6f..c244d36eb7 100644 --- a/source/client/src/clientSml.c +++ b/source/client/src/clientSml.c @@ -197,8 +197,8 @@ static void smlDestroySTableMeta(void *para) { SSmlSTableMeta *meta = *(SSmlSTableMeta **)para; taosHashCleanup(meta->tagHash); taosHashCleanup(meta->colHash); - (void)taosArrayDestroy(meta->tags); - (void)taosArrayDestroy(meta->cols); + taosArrayDestroy(meta->tags); + taosArrayDestroy(meta->cols); taosMemoryFreeClear(meta->tableMeta); taosMemoryFree(meta); } @@ -568,7 +568,7 @@ int32_t smlSetCTableName(SSmlTableInfo *oneTable) { if (code != TSDB_CODE_SUCCESS){ return code; } - (void)taosArrayDestroy(dst); + taosArrayDestroy(dst); } return TSDB_CODE_SUCCESS; } @@ -1198,25 +1198,25 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { SArray *pTags = taosArrayInit(taosArrayGetSize(sTableData->tags), sizeof(SField)); if (pTags == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); goto end; } code = smlBuildFieldsList(info, NULL, NULL, sTableData->tags, pTags, 0, true); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlBuildFieldsList tag1 failed. %s", info->id, pName.tname); - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } code = smlBuildFieldsList(info, NULL, NULL, sTableData->cols, pColumns, 0, false); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlBuildFieldsList col1 failed. %s", info->id, pName.tname); - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } code = smlSendMetaMsg(info, &pName, pColumns, pTags, NULL, SCHEMA_ACTION_CREATE_STABLE); - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlSendMetaMsg failed. can not create %s", info->id, pName.tname); goto end; @@ -1271,7 +1271,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { SArray *pTags = taosArrayInit(taosArrayGetSize(sTableData->tags) + pTableMeta->tableInfo.numOfTags, sizeof(SField)); if (pTags == NULL){ - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } @@ -1282,15 +1282,15 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { tstrncpy(field.name, pTableMeta->schema[i].name, sizeof(field.name)); if (i < pTableMeta->tableInfo.numOfColumns) { if (taosArrayPush(pColumns, &field) == NULL){ - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } } else { if (taosArrayPush(pTags, &field) == NULL){ - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } @@ -1300,28 +1300,28 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { pTableMeta->tableInfo.numOfColumns, true); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlBuildFieldsList tag2 failed. %s", info->id, pName.tname); - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } if (taosArrayGetSize(pTags) + pTableMeta->tableInfo.numOfColumns > TSDB_MAX_COLUMNS) { uError("SML:0x%" PRIx64 " too many columns than 4096", info->id); code = TSDB_CODE_PAR_TOO_MANY_COLUMNS; - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } if (taosArrayGetSize(pTags) > TSDB_MAX_TAGS) { uError("SML:0x%" PRIx64 " too many tags than 128", info->id); code = TSDB_CODE_PAR_INVALID_TAGS_NUM; - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } code = smlSendMetaMsg(info, &pName, pColumns, pTags, pTableMeta, action); - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlSendMetaMsg failed. can not create %s", info->id, pName.tname); goto end; @@ -1367,7 +1367,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { SArray *pTags = taosArrayInit(taosArrayGetSize(sTableData->tags) + pTableMeta->tableInfo.numOfTags, sizeof(SField)); if (pTags == NULL){ - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } @@ -1378,15 +1378,15 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { tstrncpy(field.name, pTableMeta->schema[i].name, sizeof(field.name)); if (i < pTableMeta->tableInfo.numOfColumns) { if (taosArrayPush(pColumns, &field) == NULL){ - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } } else { if (taosArrayPush(pTags, &field) == NULL){ - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); code = TSDB_CODE_OUT_OF_MEMORY; goto end; } @@ -1397,21 +1397,21 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) { pTableMeta->tableInfo.numOfColumns, false); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlBuildFieldsList col2 failed. %s", info->id, pName.tname); - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } if (taosArrayGetSize(pColumns) + pTableMeta->tableInfo.numOfTags > TSDB_MAX_COLUMNS) { uError("SML:0x%" PRIx64 " too many columns than 4096", info->id); code = TSDB_CODE_PAR_TOO_MANY_COLUMNS; - (void)taosArrayDestroy(pColumns); - (void)taosArrayDestroy(pTags); + taosArrayDestroy(pColumns); + taosArrayDestroy(pTags); goto end; } code = smlSendMetaMsg(info, &pName, pColumns, pTags, pTableMeta, action); - (void)taosArrayDestroy(pColumns); + taosArrayDestroy(pColumns); if (code != TSDB_CODE_SUCCESS) { uError("SML:0x%" PRIx64 " smlSendMetaMsg failed. can not create %s", info->id, pName.tname); goto end; @@ -1555,7 +1555,7 @@ void smlDestroyTableInfo(void *para) { taosHashCleanup(kvHash); } - (void)taosArrayDestroy(tag->cols); + taosArrayDestroy(tag->cols); taosArrayDestroyEx(tag->tags, freeSSmlKv); taosMemoryFree(tag); } @@ -1581,13 +1581,13 @@ void smlDestroyInfo(SSmlHandle *info) { cJSON *tags = (cJSON *)taosArrayGetP(info->tagJsonArray, i); cJSON_Delete(tags); } - (void)taosArrayDestroy(info->tagJsonArray); + taosArrayDestroy(info->tagJsonArray); for (int i = 0; i < taosArrayGetSize(info->valueJsonArray); i++) { cJSON *value = (cJSON *)taosArrayGetP(info->valueJsonArray, i); cJSON_Delete(value); } - (void)taosArrayDestroy(info->valueJsonArray); + taosArrayDestroy(info->valueJsonArray); taosArrayDestroyEx(info->preLineTagKV, freeSSmlKv); diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c index e53a72814a..46c3cf6622 100644 --- a/source/client/src/clientTmq.c +++ b/source/client/src/clientTmq.c @@ -583,16 +583,10 @@ static int32_t asyncCommitOffset(tmq_t* tmq, char* pTopicName, int32_t vgId, STq goto end; } char offsetBuf[TSDB_OFFSET_LEN] = {0}; - code = tFormatOffset(offsetBuf, tListLen(offsetBuf), offsetVal); - if (code != 0) { - goto end; - } + tFormatOffset(offsetBuf, tListLen(offsetBuf), offsetVal); char commitBuf[TSDB_OFFSET_LEN] = {0}; - code = tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); - if (code != 0) { - goto end; - } + tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); SMqCommitCbParamSet* pParamSet = NULL; code = prepareCommitCbParamSet(tmq, pCommitFp, userParam, 0, &pParamSet); @@ -694,10 +688,10 @@ static void asyncCommitAllOffsets(tmq_t* tmq, tmq_commit_cb* pCommitFp, void* us if (pVg->offsetInfo.endOffset.type > 0 && !tOffsetEqual(&pVg->offsetInfo.endOffset, &pVg->offsetInfo.committedOffset)) { char offsetBuf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(offsetBuf, tListLen(offsetBuf), &pVg->offsetInfo.endOffset); + tFormatOffset(offsetBuf, tListLen(offsetBuf), &pVg->offsetInfo.endOffset); char commitBuf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); + tFormatOffset(commitBuf, tListLen(commitBuf), &pVg->offsetInfo.committedOffset); code = doSendCommitMsg(tmq, pVg->vgId, &pVg->epSet, &pVg->offsetInfo.endOffset, pTopic->topicName, pParamSet); if (code != TSDB_CODE_SUCCESS) { @@ -865,7 +859,7 @@ void tmqSendHbReq(void* param, void* tmrId) { offRows->offset = pVg->offsetInfo.endOffset; offRows->ever = pVg->offsetInfo.walVerEnd == -1 ? 0 : pVg->offsetInfo.walVerEnd; char buf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(buf, TSDB_OFFSET_LEN, &offRows->offset); + tFormatOffset(buf, TSDB_OFFSET_LEN, &offRows->offset); tscDebug("consumer:0x%" PRIx64 ",report offset, group:%s vgId:%d, offset:%s/%" PRId64 ", rows:%" PRId64, tmq->consumerId, tmq->groupId, offRows->vgId, buf, offRows->ever, offRows->rows); } @@ -1259,7 +1253,7 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) { } char buf[TSDB_OFFSET_LEN] = {0}; STqOffsetVal offset = {.type = pTmq->resetOffsetCfg}; - (void)tFormatOffset(buf, tListLen(buf), &offset); + tFormatOffset(buf, tListLen(buf), &offset); tscInfo("consumer:0x%" PRIx64 " is setup, refId:%" PRId64 ", groupId:%s, snapshot:%d, autoCommit:%d, commitInterval:%dms, offset:%s", pTmq->consumerId, pTmq->refId, pTmq->groupId, pTmq->useSnapshot, pTmq->autoCommit, pTmq->autoCommitInterval, @@ -1517,7 +1511,7 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) { (void)memcpy(&pRspWrapper->dataRsp, pMsg->pData, sizeof(SMqRspHead)); char buf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(buf, TSDB_OFFSET_LEN, &pRspWrapper->dataRsp.common.rspOffset); + tFormatOffset(buf, TSDB_OFFSET_LEN, &pRspWrapper->dataRsp.common.rspOffset); tscDebug("consumer:0x%" PRIx64 " recv poll rsp, vgId:%d, req ver:%" PRId64 ", rsp:%s type %d, reqId:0x%" PRIx64, tmq->consumerId, vgId, pRspWrapper->dataRsp.common.reqOffset.version, buf, rspType, requestId); } else if (rspType == TMQ_MSG_TYPE__POLL_META_RSP) { @@ -1695,7 +1689,7 @@ static bool doUpdateLocalEp(tmq_t* tmq, int32_t epoch, const SMqAskEpRsp* pRsp) (void)sprintf(vgKey, "%s:%d", pTopicCur->topicName, pVgCur->vgId); char buf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(buf, TSDB_OFFSET_LEN, &pVgCur->offsetInfo.endOffset); + tFormatOffset(buf, TSDB_OFFSET_LEN, &pVgCur->offsetInfo.endOffset); tscInfo("consumer:0x%" PRIx64 ", epoch:%d vgId:%d vgKey:%s, offset:%s", tmq->consumerId, epoch, pVgCur->vgId, vgKey, buf); @@ -1959,7 +1953,7 @@ static int32_t doTmqPollImpl(tmq_t* pTmq, SMqClientTopic* pTopic, SMqClientVg* p int64_t transporterId = 0; char offsetFormatBuf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(offsetFormatBuf, tListLen(offsetFormatBuf), &pVg->offsetInfo.endOffset); + tFormatOffset(offsetFormatBuf, tListLen(offsetFormatBuf), &pVg->offsetInfo.endOffset); code = asyncSendMsgToServer(pTmq->pTscObj->pAppInfo->pTransporter, &pVg->epSet, &transporterId, sendInfo); tscDebug("consumer:0x%" PRIx64 " send poll to %s vgId:%d, code:%d, epoch %d, req:%s, reqId:0x%" PRIx64, pTmq->consumerId, pTopic->topicName, pVg->vgId, code, pTmq->epoch, offsetFormatBuf, req.reqId); @@ -2130,7 +2124,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout) { tmq->consumerId, pDataRsp->blockNum != 0); char buf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(buf, TSDB_OFFSET_LEN, &pDataRsp->rspOffset); + tFormatOffset(buf, TSDB_OFFSET_LEN, &pDataRsp->rspOffset); if (pDataRsp->blockNum == 0) { tscDebug("consumer:0x%" PRIx64 " empty block received, vgId:%d, offset:%s, vg total:%" PRId64 ", total:%" PRId64 ", reqId:0x%" PRIx64, @@ -2287,7 +2281,7 @@ static void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout) { tmq->totalRows += numOfRows; char buf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(buf, TSDB_OFFSET_LEN, &pVg->offsetInfo.endOffset); + tFormatOffset(buf, TSDB_OFFSET_LEN, &pVg->offsetInfo.endOffset); tscDebug("consumer:0x%" PRIx64 " process taosx poll rsp, vgId:%d, offset:%s, blocks:%d, rows:%" PRId64 ", vg total:%" PRId64 ", total:%" PRId64 ", reqId:0x%" PRIx64, tmq->consumerId, pVg->vgId, buf, pDataRsp->blockNum, numOfRows, pVg->numOfRows, tmq->totalRows, @@ -3401,7 +3395,7 @@ int32_t tmq_get_topic_assignment(tmq_t* tmq, const char* pTopicName, tmq_topic_a int64_t transporterId = 0; char offsetFormatBuf[TSDB_OFFSET_LEN] = {0}; - (void)tFormatOffset(offsetFormatBuf, tListLen(offsetFormatBuf), &pClientVg->offsetInfo.beginOffset); + tFormatOffset(offsetFormatBuf, tListLen(offsetFormatBuf), &pClientVg->offsetInfo.beginOffset); tscInfo("consumer:0x%" PRIx64 " %s retrieve wal info vgId:%d, epoch %d, req:%s, reqId:0x%" PRIx64, tmq->consumerId, pTopic->topicName, pClientVg->vgId, tmq->epoch, offsetFormatBuf, req.reqId); diff --git a/source/client/test/smlTest.cpp b/source/client/test/smlTest.cpp index 77079ed863..dc6a302924 100644 --- a/source/client/test/smlTest.cpp +++ b/source/client/test/smlTest.cpp @@ -65,7 +65,7 @@ TEST(testCase, smlParseInfluxString_Test) { ASSERT_EQ(elements.timestamp, sql + elements.measureTagsLen + 1 + elements.colsLen + 1); ASSERT_EQ(elements.timestampLen, strlen("1626006833639000000")); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; // case 2 false @@ -74,7 +74,7 @@ TEST(testCase, smlParseInfluxString_Test) { (void)memset(&elements, 0, sizeof(SSmlLineInfo)); ret = smlParseInfluxString(info, sql, sql + strlen(sql), &elements); ASSERT_NE(ret, 0); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; // case 4 tag is null @@ -95,7 +95,7 @@ TEST(testCase, smlParseInfluxString_Test) { ASSERT_EQ(elements.timestamp, sql + elements.measureTagsLen + 1 + elements.colsLen + 1); ASSERT_EQ(elements.timestampLen, strlen("1626006833639000000")); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; // case 5 tag is null @@ -115,7 +115,7 @@ TEST(testCase, smlParseInfluxString_Test) { ASSERT_EQ(elements.timestamp, sql + 1 + elements.measureTagsLen + 3 + elements.colsLen + 2); ASSERT_EQ(elements.timestampLen, strlen("1626006833639000000")); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; // case 6 @@ -124,7 +124,7 @@ TEST(testCase, smlParseInfluxString_Test) { (void)memset(&elements, 0, sizeof(SSmlLineInfo)); ret = smlParseInfluxString(info, sql, sql + strlen(sql), &elements); ASSERT_EQ(ret, 0); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; ASSERT_EQ(smlClearForRerun(info), 0); @@ -134,7 +134,7 @@ TEST(testCase, smlParseInfluxString_Test) { (void)memset(&elements, 0, sizeof(SSmlLineInfo)); ret = smlParseInfluxString(info, sql, sql + strlen(sql), &elements); ASSERT_NE(ret, 0); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; // case 8 false @@ -143,7 +143,7 @@ TEST(testCase, smlParseInfluxString_Test) { (void)memset(&elements, 0, sizeof(SSmlLineInfo)); ret = smlParseInfluxString(info, sql, sql + strlen(sql), &elements); ASSERT_NE(ret, 0); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); elements.colArray = nullptr; taosMemoryFree(sql); @@ -250,7 +250,7 @@ TEST(testCase, smlParseCols_Error_Test) { // printf("i:%d\n", i); ASSERT_NE(ret, TSDB_CODE_SUCCESS); taosMemoryFree(sql); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); } smlDestroyInfo(info); } @@ -458,7 +458,7 @@ TEST(testCase, smlParseCols_Test) { ASSERT_EQ(kv->length, 4); ASSERT_EQ(strncasecmp(kv->value, "iuwq", 4), 0); - (void)taosArrayDestroy(elements.colArray); + taosArrayDestroy(elements.colArray); taosMemoryFree(sql); smlDestroyInfo(info); } diff --git a/source/common/src/cos.c b/source/common/src/cos.c index 2d3eb3f92b..96309ece86 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -65,13 +65,13 @@ int32_t s3CheckCfg() { int32_t code = 0, lino = 0; if (!tsS3Enabled) { - fprintf(stderr, "s3 not configured.\n"); + (void)fprintf(stderr, "s3 not configured.\n"); goto _exit; } code = s3Begin(); if (code != 0) { - fprintf(stderr, "failed to initialize s3.\n"); + (void)fprintf(stderr, "failed to initialize s3.\n"); TAOS_CHECK_GOTO(code, &lino, _exit); } @@ -82,72 +82,72 @@ int32_t s3CheckCfg() { int ds_len = strlen(TD_DIRSEP); int tmp_len = strlen(tsTempDir); - snprintf(path, PATH_MAX, "%s", tsTempDir); + (void)snprintf(path, PATH_MAX, "%s", tsTempDir); if (strncmp(tsTempDir + tmp_len - ds_len, TD_DIRSEP, ds_len) != 0) { - snprintf(path + tmp_len, PATH_MAX - tmp_len, "%s", TD_DIRSEP); - snprintf(path + tmp_len + ds_len, PATH_MAX - tmp_len - ds_len, "%s", objectname[0]); + (void)snprintf(path + tmp_len, PATH_MAX - tmp_len, "%s", TD_DIRSEP); + (void)snprintf(path + tmp_len + ds_len, PATH_MAX - tmp_len - ds_len, "%s", objectname[0]); } else { - snprintf(path + tmp_len, PATH_MAX - tmp_len, "%s", objectname[0]); + (void)snprintf(path + tmp_len, PATH_MAX - tmp_len, "%s", objectname[0]); } TdFilePtr fp = taosOpenFile(path, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_READ | TD_FILE_TRUNC); if (!fp) { - fprintf(stderr, "failed to open test file: %s.\n", path); + (void)fprintf(stderr, "failed to open test file: %s.\n", path); // uError("ERROR: %s Failed to open %s", __func__, path); TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _exit); } if (taosWriteFile(fp, testdata, strlen(testdata)) < 0) { - fprintf(stderr, "failed to write test file: %s.\n", path); + (void)fprintf(stderr, "failed to write test file: %s.\n", path); TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _exit); } if (taosFsyncFile(fp) < 0) { - fprintf(stderr, "failed to fsync test file: %s.\n", path); + (void)fprintf(stderr, "failed to fsync test file: %s.\n", path); TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), &lino, _exit); } - taosCloseFile(&fp); + (void)taosCloseFile(&fp); - fprintf(stderr, "\nstart to put object: %s, file: %s content: %s\n", objectname[0], path, testdata); + (void)fprintf(stderr, "\nstart to put object: %s, file: %s content: %s\n", objectname[0], path, testdata); code = s3PutObjectFromFileOffset(path, objectname[0], 0, 16); if (code != 0) { - fprintf(stderr, "put object %s : failed.\n", objectname[0]); + (void)fprintf(stderr, "put object %s : failed.\n", objectname[0]); TAOS_CHECK_GOTO(code, &lino, _exit); } - fprintf(stderr, "put object %s: success.\n\n", objectname[0]); + (void)fprintf(stderr, "put object %s: success.\n\n", objectname[0]); // list buckets - fprintf(stderr, "start to list bucket %s by prefix s3.\n", tsS3BucketName); + (void)fprintf(stderr, "start to list bucket %s by prefix s3.\n", tsS3BucketName); code = s3ListBucket(tsS3BucketName); if (code != 0) { - fprintf(stderr, "listing bucket %s : failed.\n", tsS3BucketName); + (void)fprintf(stderr, "listing bucket %s : failed.\n", tsS3BucketName); TAOS_CHECK_GOTO(code, &lino, _exit); } - fprintf(stderr, "listing bucket %s: success.\n\n", tsS3BucketName); + (void)fprintf(stderr, "listing bucket %s: success.\n\n", tsS3BucketName); // test range get uint8_t *pBlock = NULL; int c_offset = 10; int c_len = 6; - fprintf(stderr, "start to range get object %s offset: %d len: %d.\n", objectname[0], c_offset, c_len); + (void)fprintf(stderr, "start to range get object %s offset: %d len: %d.\n", objectname[0], c_offset, c_len); code = s3GetObjectBlock(objectname[0], c_offset, c_len, true, &pBlock); if (code != 0) { - fprintf(stderr, "get object %s : failed.\n", objectname[0]); + (void)fprintf(stderr, "get object %s : failed.\n", objectname[0]); TAOS_CHECK_GOTO(code, &lino, _exit); } char buf[7] = {0}; - memcpy(buf, pBlock, c_len); + (void)memcpy(buf, pBlock, c_len); taosMemoryFree(pBlock); - fprintf(stderr, "object content: %s\n", buf); - fprintf(stderr, "get object %s: success.\n\n", objectname[0]); + (void)fprintf(stderr, "object content: %s\n", buf); + (void)fprintf(stderr, "get object %s: success.\n\n", objectname[0]); // delete test object - fprintf(stderr, "start to delete object: %s.\n", objectname[0]); + (void)fprintf(stderr, "start to delete object: %s.\n", objectname[0]); code = s3DeleteObjects(objectname, 1); if (code != 0) { - fprintf(stderr, "delete object %s : failed.\n", objectname[0]); + (void)fprintf(stderr, "delete object %s : failed.\n", objectname[0]); TAOS_CHECK_GOTO(code, &lino, _exit); } - fprintf(stderr, "delete object %s: success.\n\n", objectname[0]); + (void)fprintf(stderr, "delete object %s: success.\n\n", objectname[0]); s3End(); @@ -252,9 +252,9 @@ static int32_t s3ListBucket(char const *bucketname) { const char **object_name = TARRAY_DATA(objectArray); int size = TARRAY_SIZE(objectArray); - fprintf(stderr, "objects:\n"); + (void)fprintf(stderr, "objects:\n"); for (int i = 0; i < size; ++i) { - fprintf(stderr, "%s\n", object_name[i]); + (void)fprintf(stderr, "%s\n", object_name[i]); } taosArrayDestroyEx(objectArray, s3FreeObjectKey); @@ -300,7 +300,7 @@ static int growbuffer_append(growbuffer **gb, const char *data, int dataLen) { toCopy = dataLen; } - memcpy(&(buf->data[buf->size]), data, toCopy); + (void)memcpy(&(buf->data[buf->size]), data, toCopy); buf->size += toCopy, data += toCopy, dataLen -= toCopy; } @@ -319,7 +319,7 @@ static void growbuffer_read(growbuffer **gb, int amt, int *amtReturn, char *buff *amtReturn = (buf->size > amt) ? amt : buf->size; - memcpy(buffer, &(buf->data[buf->start]), *amtReturn); + (void)memcpy(buffer, &(buf->data[buf->start]), *amtReturn); buf->start += *amtReturn, buf->size -= *amtReturn; @@ -440,7 +440,7 @@ S3Status initial_multipart_callback(const char *upload_id, void *callbackData) { } S3Status MultipartResponseProperiesCallback(const S3ResponseProperties *properties, void *callbackData) { - responsePropertiesCallbackNull(properties, callbackData); + (void)responsePropertiesCallbackNull(properties, callbackData); MultipartPartData *data = (MultipartPartData *)callbackData; int seq = data->seq; @@ -451,7 +451,7 @@ S3Status MultipartResponseProperiesCallback(const S3ResponseProperties *properti } S3Status MultipartResponseProperiesCallbackWithCp(const S3ResponseProperties *properties, void *callbackData) { - responsePropertiesCallbackNull(properties, callbackData); + (void)responsePropertiesCallbackNull(properties, callbackData); MultipartPartData *data = (MultipartPartData *)callbackData; int seq = data->seq; @@ -624,7 +624,7 @@ static int32_t s3PutObjectFromFileWithoutCp(S3BucketContext *bucket_context, cha } MultipartPartData partData; - memset(&partData, 0, sizeof(MultipartPartData)); + (void)memset(&partData, 0, sizeof(MultipartPartData)); int partContentLength = 0; S3MultipartInitialHandler handler = {{&responsePropertiesCallbackNull, &responseCompleteCallback}, @@ -739,7 +739,7 @@ static int32_t s3PutObjectFromFileWithCp(S3BucketContext *bucket_context, const bool need_init_upload = true; char file_cp_path[TSDB_FILENAME_LEN]; - snprintf(file_cp_path, TSDB_FILENAME_LEN, "%s.cp", file); + (void)snprintf(file_cp_path, TSDB_FILENAME_LEN, "%s.cp", file); SCheckpoint cp = {0}; cp.parts = taosMemoryCalloc(max_part_num, sizeof(SCheckpointPart)); @@ -781,7 +781,7 @@ static int32_t s3PutObjectFromFileWithCp(S3BucketContext *bucket_context, const // cos_cp_get_undo_parts(&cp, &part_num, parts, &consume_bytes); MultipartPartData partData; - memset(&partData, 0, sizeof(MultipartPartData)); + (void)memset(&partData, 0, sizeof(MultipartPartData)); int partContentLength = 0; S3PutObjectHandler putObjectHandler = {{&MultipartResponseProperiesCallbackWithCp, &responseCompleteCallback}, @@ -920,7 +920,7 @@ int32_t s3PutObjectFromFile2(const char *file, const char *object_name, int8_t w char useServerSideEncryption = 0; put_object_callback_data data = {0}; - if (taosStatFile(file, &contentLength, &lmtime, NULL) < 0) { + if (taosStatFile(file, (int64_t *)&contentLength, &lmtime, NULL) < 0) { uError("ERROR: %s Failed to stat file %s: ", __func__, file); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -953,7 +953,7 @@ int32_t s3PutObjectFromFile2(const char *file, const char *object_name, int8_t w } if (data.infileFD) { - taosCloseFile(&data.infileFD); + (void)taosCloseFile(&data.infileFD); } else if (data.gb) { growbuffer_destroy(data.gb); } @@ -975,7 +975,7 @@ int32_t s3PutObjectFromFileOffset(const char *file, const char *object_name, int char useServerSideEncryption = 0; put_object_callback_data data = {0}; - if (taosStatFile(file, &contentLength, &lmtime, NULL) < 0) { + if (taosStatFile(file, (int64_t *)&contentLength, &lmtime, NULL) < 0) { uError("ERROR: %s Failed to stat file %s: ", __func__, file); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -987,7 +987,7 @@ int32_t s3PutObjectFromFileOffset(const char *file, const char *object_name, int TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } if (taosLSeekFile(data.infileFD, offset, SEEK_SET) < 0) { - taosCloseFile(&data.infileFD); + (void)taosCloseFile(&data.infileFD); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -1010,7 +1010,7 @@ int32_t s3PutObjectFromFileOffset(const char *file, const char *object_name, int } if (data.infileFD) { - taosCloseFile(&data.infileFD); + (void)taosCloseFile(&data.infileFD); } else if (data.gb) { growbuffer_destroy(data.gb); } @@ -1038,7 +1038,7 @@ static S3Status listBucketCallback(int isTruncated, const char *nextMarker, int nextMarker = contents[contentsCount - 1].key; } if (nextMarker) { - snprintf(data->nextMarker, sizeof(data->nextMarker), "%s", nextMarker); + (void)snprintf(data->nextMarker, sizeof(data->nextMarker), "%s", nextMarker); } else { data->nextMarker[0] = 0; } @@ -1052,7 +1052,7 @@ static S3Status listBucketCallback(int isTruncated, const char *nextMarker, int const S3ListBucketContent *content = &(contents[i]); // printf("%-50s", content->key); char *object_key = strdup(content->key); - taosArrayPush(data->objectArray, &object_key); + (void)taosArrayPush(data->objectArray, &object_key); } data->keyCount += contentsCount; @@ -1139,7 +1139,7 @@ int32_t s3DeleteObjects(const char *object_name[], int nobject) { void s3DeleteObjectsByPrefix(const char *prefix) { SArray *objectArray = getListByPrefix(prefix); if (objectArray == NULL) return; - s3DeleteObjects(TARRAY_DATA(objectArray), TARRAY_SIZE(objectArray)); + (void)s3DeleteObjects(TARRAY_DATA(objectArray), TARRAY_SIZE(objectArray)); taosArrayDestroyEx(objectArray, s3FreeObjectKey); } @@ -1156,7 +1156,7 @@ static S3Status getObjectDataCallback(int bufferSize, const char *buffer, void * } if (cbd->buf) { - memcpy(cbd->buf + cbd->buf_pos, buffer, bufferSize); + (void)memcpy(cbd->buf + cbd->buf_pos, buffer, bufferSize); cbd->buf_pos += bufferSize; cbd->status = S3StatusOK; return S3StatusOK; @@ -1196,7 +1196,7 @@ int32_t s3GetObjectBlock(const char *object_name, int64_t offset, int64_t size, TAOS_RETURN(TAOS_SYSTEM_ERROR(EIO)); } - *ppBlock = cbd.buf; + *ppBlock = (uint8_t *)cbd.buf; TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -1231,11 +1231,11 @@ int32_t s3GetObjectToFile(const char *object_name, const char *fileName) { if (cbd.status != S3StatusOK) { uError("%s: %d(%s)", __func__, cbd.status, cbd.err_msg); - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); TAOS_RETURN(TAOS_SYSTEM_ERROR(EIO)); } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -1250,9 +1250,9 @@ int32_t s3GetObjectsByPrefix(const char *prefix, const char *path) { tmp = (tmp == NULL) ? object : tmp + 1; char fileName[PATH_MAX] = {0}; if (path[strlen(path) - 1] != TD_DIRSEP_CHAR) { - snprintf(fileName, PATH_MAX, "%s%s%s", path, TD_DIRSEP, tmp); + (void)snprintf(fileName, PATH_MAX, "%s%s%s", path, TD_DIRSEP, tmp); } else { - snprintf(fileName, PATH_MAX, "%s%s", path, tmp); + (void)snprintf(fileName, PATH_MAX, "%s%s", path, tmp); } if (s3GetObjectToFile(object, fileName) != 0) { taosArrayDestroyEx(objectArray, s3FreeObjectKey); diff --git a/source/common/src/cos_cp.c b/source/common/src/cos_cp.c index d7be47ce45..e9af9c0306 100644 --- a/source/common/src/cos_cp.c +++ b/source/common/src/cos_cp.c @@ -43,12 +43,12 @@ static int32_t cos_cp_parse_body(char* cp_body, SCheckpoint* cp) { item = cJSON_GetObjectItem(json, "md5"); if (cJSON_IsString(item)) { - memcpy(cp->md5, item->valuestring, strlen(item->valuestring)); + (void)memcpy(cp->md5, item->valuestring, strlen(item->valuestring)); } item = cJSON_GetObjectItem(json, "upload_id"); if (cJSON_IsString(item)) { - strncpy(cp->upload_id, item->valuestring, 128); + (void)strncpy(cp->upload_id, item->valuestring, 128); } item2 = cJSON_GetObjectItem(json, "file"); @@ -65,12 +65,12 @@ static int32_t cos_cp_parse_body(char* cp_body, SCheckpoint* cp) { item = cJSON_GetObjectItem(item2, "path"); if (cJSON_IsString(item)) { - strncpy(cp->file_path, item->valuestring, TSDB_FILENAME_LEN); + (void)strncpy(cp->file_path, item->valuestring, TSDB_FILENAME_LEN); } item = cJSON_GetObjectItem(item2, "file_md5"); if (cJSON_IsString(item)) { - strncpy(cp->file_md5, item->valuestring, 64); + (void)strncpy(cp->file_md5, item->valuestring, 64); } } @@ -83,17 +83,17 @@ static int32_t cos_cp_parse_body(char* cp_body, SCheckpoint* cp) { item = cJSON_GetObjectItem(item2, "object_name"); if (cJSON_IsString(item)) { - strncpy(cp->object_name, item->valuestring, 128); + (void)strncpy(cp->object_name, item->valuestring, 128); } item = cJSON_GetObjectItem(item2, "object_last_modified"); if (cJSON_IsString(item)) { - strncpy(cp->object_last_modified, item->valuestring, 64); + (void)strncpy(cp->object_last_modified, item->valuestring, 64); } item = cJSON_GetObjectItem(item2, "object_etag"); if (cJSON_IsString(item)) { - strncpy(cp->object_etag, item->valuestring, 128); + (void)strncpy(cp->object_etag, item->valuestring, 128); } } @@ -141,7 +141,7 @@ static int32_t cos_cp_parse_body(char* cp_body, SCheckpoint* cp) { item3 = cJSON_GetObjectItem(item, "etag"); if (cJSON_IsString(item3)) { - strncpy(cp->parts[index].etag, item3->valuestring, 128); + (void)strncpy(cp->parts[index].etag, item3->valuestring, 128); } } } @@ -179,7 +179,7 @@ int32_t cos_cp_load(char const* filepath, SCheckpoint* checkpoint) { } else if (n != size) { TAOS_CHECK_GOTO(TSDB_CODE_FILE_CORRUPTED, &lino, _exit); } - taosCloseFile(&fd); + (void)taosCloseFile(&fd); cp_body[size] = '\0'; return cos_cp_parse_body(cp_body, checkpoint); @@ -189,7 +189,7 @@ _exit: uError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } if (fd) { - taosCloseFile(&fd); + (void)taosCloseFile(&fd); } if (cp_body) { taosMemoryFree(cp_body); @@ -309,7 +309,7 @@ int32_t cos_cp_dump(SCheckpoint* cp) { if (!item) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } - cJSON_AddItemToArray(ajson, item); + (void)cJSON_AddItemToArray(ajson, item); if (NULL == cJSON_AddNumberToObject(item, "index", cp->parts[i].index)) { TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); @@ -346,7 +346,7 @@ void cos_cp_get_undo_parts(SCheckpoint* checkpoint, int* part_num, SCheckpointPa void cos_cp_update(SCheckpoint* checkpoint, int32_t part_index, char const* etag, uint64_t crc64) { checkpoint->parts[part_index].completed = 1; - strncpy(checkpoint->parts[part_index].etag, etag, 127); + (void)strncpy(checkpoint->parts[part_index].etag, etag, 127); checkpoint->parts[part_index].crc64 = crc64; } @@ -355,12 +355,12 @@ void cos_cp_build_upload(SCheckpoint* checkpoint, char const* filepath, int64_t int i = 0; checkpoint->cp_type = COS_CP_TYPE_UPLOAD; - memset(checkpoint->file_path, 0, TSDB_FILENAME_LEN); - strncpy(checkpoint->file_path, filepath, TSDB_FILENAME_LEN - 1); + (void)memset(checkpoint->file_path, 0, TSDB_FILENAME_LEN); + (void)strncpy(checkpoint->file_path, filepath, TSDB_FILENAME_LEN - 1); checkpoint->file_size = size; checkpoint->file_last_modified = mtime; - strncpy(checkpoint->upload_id, upload_id, 127); + (void)strncpy(checkpoint->upload_id, upload_id, 127); checkpoint->part_size = part_size; for (; i * part_size < size; i++) { diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 6746d0343b..08efd9cc08 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -456,7 +456,7 @@ int32_t colDataMergeCol(SColumnInfoData* pColumnInfoData, int32_t numOfRow1, int int32_t colDataAssign(SColumnInfoData* pColumnInfoData, const SColumnInfoData* pSource, int32_t numOfRows, const SDataBlockInfo* pBlockInfo) { if (pColumnInfoData->info.type != pSource->info.type || (pBlockInfo != NULL && pBlockInfo->capacity < numOfRows)) { - return TSDB_CODE_FAILED; + return TSDB_CODE_INVALID_PARA; } if (numOfRows <= 0) { @@ -1510,6 +1510,9 @@ int32_t blockDataEnsureCapacity(SSDataBlock* pDataBlock, uint32_t numOfRows) { } void blockDataFreeRes(SSDataBlock* pBlock) { + if (pBlock == NULL){ + return; + } int32_t numOfOutput = taosArrayGetSize(pBlock->pDataBlock); for (int32_t i = 0; i < numOfOutput; ++i) { SColumnInfoData* pColInfoData = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, i); diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 27f865353e..dabdc630f5 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -310,7 +310,7 @@ static int32_t tRowBuildTupleRow(SArray *aColVal, const SRowBuildScanInfo *sinfo } } else { (void)memcpy(fixed + schema->columns[i].offset, &colValArray[colValIndex].value.val, - tDataTypes[schema->columns[i].type].bytes); + tDataTypes[schema->columns[i].type].bytes); } } else if (COL_VAL_IS_NULL(&colValArray[colValIndex])) { // NULL ROW_SET_BITMAP(bitmap, sinfo->tupleFlag, i - 1, BIT_FLG_NULL); @@ -384,13 +384,14 @@ static int32_t tRowBuildKVRow(SArray *aColVal, const SRowBuildScanInfo *sinfo, c payloadSize += tPutI16v(payload + payloadSize, colValArray[colValIndex].cid); payloadSize += tPutU32v(payload + payloadSize, colValArray[colValIndex].value.nData); if (colValArray[colValIndex].value.nData > 0) { - (void)memcpy(payload + payloadSize, colValArray[colValIndex].value.pData, colValArray[colValIndex].value.nData); + (void)memcpy(payload + payloadSize, colValArray[colValIndex].value.pData, + colValArray[colValIndex].value.nData); } payloadSize += colValArray[colValIndex].value.nData; } else { payloadSize += tPutI16v(payload + payloadSize, colValArray[colValIndex].cid); (void)memcpy(payload + payloadSize, &colValArray[colValIndex].value.val, - tDataTypes[schema->columns[i].type].bytes); + tDataTypes[schema->columns[i].type].bytes); payloadSize += tDataTypes[schema->columns[i].type].bytes; } } else if (COL_VAL_IS_NULL(&colValArray[colValIndex])) { // NULL @@ -476,11 +477,14 @@ int32_t tRowBuildFromBind(SBindInfo *infos, int32_t numOfInfos, bool infoSorted, value.pData = (uint8_t *)infos[iInfo].bind->buffer + infos[iInfo].bind->buffer_length * iRow; } else { (void)memcpy(&value.val, (uint8_t *)infos[iInfo].bind->buffer + infos[iInfo].bind->buffer_length * iRow, - infos[iInfo].bind->buffer_length); + infos[iInfo].bind->buffer_length); } colVal = COL_VAL_VALUE(infos[iInfo].columnId, value); } - taosArrayPush(colValArray, &colVal); + if (taosArrayPush(colValArray, &colVal) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } } SRow *row; @@ -689,7 +693,12 @@ static int32_t tRowMergeImpl(SArray *aRowP, STSchema *pTSchema, int32_t iStart, } } - if (pColVal) taosArrayPush(aColVal, pColVal); + if (pColVal) { + if (taosArrayPush(aColVal, pColVal) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } + } } // build @@ -1750,7 +1759,10 @@ int32_t tTagToValArray(const STag *pTag, SArray **ppArray) { offset = pTag->idx[iTag]; } tGetTagVal(p + offset, &tv, pTag->flags & TD_TAG_JSON); - taosArrayPush(*ppArray, &tv); + if (taosArrayPush(*ppArray, &tv) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _err; + } } return code; @@ -1783,6 +1795,7 @@ void tTagSetCid(const STag *pTag, int16_t iTag, int16_t cid) { STSchema *tBuildTSchema(SSchema *aSchema, int32_t numOfCols, int32_t version) { STSchema *pTSchema = taosMemoryCalloc(1, sizeof(STSchema) + sizeof(STColumn) * numOfCols); if (pTSchema == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; } @@ -2592,7 +2605,8 @@ static FORCE_INLINE void tColDataGetValue4(SColData *pColData, int32_t iVal, SCo } value.pData = pColData->pData + pColData->aOffset[iVal]; } else { - (void)memcpy(&value.val, pColData->pData + tDataTypes[pColData->type].bytes * iVal, tDataTypes[pColData->type].bytes); + (void)memcpy(&value.val, pColData->pData + tDataTypes[pColData->type].bytes * iVal, + tDataTypes[pColData->type].bytes); } *pColVal = COL_VAL_VALUE(pColData->cid, value); } @@ -3118,10 +3132,10 @@ static int32_t tColDataCopyRowCell(SColData *pFromColData, int32_t iFromRow, SCo } (void)memcpy(pToColData->pData + pToColData->aOffset[iToRow], pFromColData->pData + pFromColData->aOffset[iFromRow], - nData); + nData); } else { (void)memcpy(&pToColData->pData[TYPE_BYTES[pToColData->type] * iToRow], - &pFromColData->pData[TYPE_BYTES[pToColData->type] * iFromRow], TYPE_BYTES[pToColData->type]); + &pFromColData->pData[TYPE_BYTES[pToColData->type] * iFromRow], TYPE_BYTES[pToColData->type]); } return code; } @@ -3209,12 +3223,12 @@ static int32_t tColDataMergeSortMerge(SColData *aColData, int32_t start, int32_t if (end > start) { aDstColData = taosMemoryCalloc(1, sizeof(SColData) * nColData); - for (int c = 0; c < nColData; ++c) { - tColDataInit(&aDstColData[c], aColData[c].cid, aColData[c].type, aColData[c].cflag); - } if (aDstColData == NULL) { return TSDB_CODE_OUT_OF_MEMORY; } + for (int c = 0; c < nColData; ++c) { + tColDataInit(&aDstColData[c], aColData[c].cid, aColData[c].type, aColData[c].cflag); + } } tColDataArrGetRowKey(aColData, nColData, i, &keyi); @@ -3360,7 +3374,7 @@ static void tColDataMergeImpl(SColData *pColData, int32_t iStart, int32_t iEnd / } else { if (iv != iStart) { (void)memcpy(&pColData->pData[TYPE_BYTES[pColData->type] * iStart], - &pColData->pData[TYPE_BYTES[pColData->type] * iv], TYPE_BYTES[pColData->type]); + &pColData->pData[TYPE_BYTES[pColData->type] * iv], TYPE_BYTES[pColData->type]); } memmove(&pColData->pData[TYPE_BYTES[pColData->type] * (iStart + 1)], &pColData->pData[TYPE_BYTES[pColData->type] * iEnd], @@ -4476,6 +4490,9 @@ int32_t tDecompressData(void *input, // input buffer = &local; } code = tBufferEnsureCapacity(buffer, info->originalSize + COMP_OVERFLOW_BYTES); + if (code) { + return code; + } int32_t decompressedSize = tDataCompress[info->dataType].decompFunc( input, // input diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 8ed5191c82..04e3316bed 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -322,7 +322,7 @@ int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24; // in ms, default to 1d #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { SConfigItem *pItem = cfgGetItem(pCfg, "dataDir"); - memset(tsDataDir, 0, PATH_MAX); + (void)memset(tsDataDir, 0, PATH_MAX); int32_t size = taosArrayGetSize(pItem->array); tsDiskCfgNum = 1; @@ -332,10 +332,11 @@ int32_t taosSetTfsCfg(SConfig *pCfg) { tsDiskCfg[0].disable = 0; tstrncpy(tsDataDir, pItem->str, PATH_MAX); if (taosMulMkDir(tsDataDir) != 0) { - uError("failed to create dataDir:%s", tsDataDir); - return -1; + int32_t code = TAOS_SYSTEM_ERROR(errno); + uError("failed to create dataDir:%s, since:%s", tsDataDir, tstrerror(code)); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } #else int32_t taosSetTfsCfg(SConfig *pCfg); @@ -344,12 +345,12 @@ int32_t taosSetTfsCfg(SConfig *pCfg); int32_t taosSetS3Cfg(SConfig *pCfg) { tstrncpy(tsS3AccessKey, cfgGetItem(pCfg, "s3Accesskey")->str, TSDB_FQDN_LEN); if (tsS3AccessKey[0] == '<') { - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } char *colon = strchr(tsS3AccessKey, ':'); if (!colon) { uError("invalid access key:%s", tsS3AccessKey); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } *colon = '\0'; tstrncpy(tsS3AccessKeyId, tsS3AccessKey, TSDB_FQDN_LEN); @@ -369,7 +370,7 @@ int32_t taosSetS3Cfg(SConfig *pCfg) { char *appid = strrchr(tsS3BucketName, '-'); if (!appid) { uError("failed to locate appid in bucket:%s", tsS3BucketName); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } else { tstrncpy(tsS3AppId, appid + 1, TSDB_FQDN_LEN); } @@ -388,7 +389,7 @@ int32_t taosSetS3Cfg(SConfig *pCfg) { #endif } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } struct SConfig *taosGetCfg() { return tsCfg; } @@ -398,7 +399,7 @@ static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *input char cfgDir[PATH_MAX] = {0}; char cfgFile[PATH_MAX + 100] = {0}; - taosExpandDir(inputCfgDir, cfgDir, PATH_MAX); + TAOS_CHECK_RETURN(taosExpandDir(inputCfgDir, cfgDir, PATH_MAX)); char lastC = cfgDir[strlen(cfgDir) - 1]; char *tdDirsep = TD_DIRSEP; if (lastC == '\\' || lastC == '/') { @@ -406,217 +407,206 @@ static int32_t taosLoadCfg(SConfig *pCfg, const char **envCmd, const char *input } if (taosIsDir(cfgDir)) { #ifdef CUS_PROMPT - snprintf(cfgFile, sizeof(cfgFile), - "%s" - "%s" - "%s.cfg", - cfgDir, tdDirsep, CUS_PROMPT); + (void)snprintf(cfgFile, sizeof(cfgFile), + "%s" + "%s" + "%s.cfg", + cfgDir, tdDirsep, CUS_PROMPT); #else - snprintf(cfgFile, sizeof(cfgFile), - "%s" - "%s" - "taos.cfg", - cfgDir, tdDirsep); + (void)snprintf(cfgFile, sizeof(cfgFile), + "%s" + "%s" + "taos.cfg", + cfgDir, tdDirsep); #endif } else { tstrncpy(cfgFile, cfgDir, sizeof(cfgDir)); } if (apolloUrl != NULL && apolloUrl[0] == '\0') { - cfgGetApollUrl(envCmd, envFile, apolloUrl); + TAOS_CHECK_RETURN(cfgGetApollUrl(envCmd, envFile, apolloUrl)); } if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) { uError("failed to load from apollo url:%s since %s", apolloUrl, terrstr()); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } if (cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile) != 0) { uError("failed to load from cfg file:%s since %s", cfgFile, terrstr()); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) { uError("failed to load from env file:%s since %s", envFile, terrstr()); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } if (cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL) != 0) { uError("failed to load from global env variables since %s", terrstr()); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } if (cfgLoad(pCfg, CFG_STYPE_ENV_CMD, envCmd) != 0) { uError("failed to load from cmd env variables since %s", terrstr()); - return -1; + TAOS_RETURN(TSDB_CODE_INVALID_CFG); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t taosAddClientLogCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH) != 0) - return -1; - if (cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "simDebugFlag", simDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - return 0; + TAOS_CHECK_RETURN(cfgAddDir(pCfg, "configDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddDir(pCfg, "scriptDir", configDir, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddDir(pCfg, "logDir", tsLogDir, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "asyncLog", tsAsyncLog, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "simDebugFlag", simDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t taosAddServerLogCfg(SConfig *pCfg) { - if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - return 0; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "udfDebugFlag", udfDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "smaDebugFlag", smaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tdbDebugFlag", tdbDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "metaDebugFlag", metaDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "stDebugFlag", stDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "sndDebugFlag", sndDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t taosAddClientCfg(SConfig *pCfg) { char defaultFqdn[TSDB_FQDN_LEN] = {0}; int32_t defaultServerPort = 6030; if (taosGetFqdn(defaultFqdn) != 0) { - strcpy(defaultFqdn, "localhost"); + (void)strcpy(defaultFqdn, "localhost"); } - if (cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT, - CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter, CFG_SCOPE_CLIENT, - CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - // if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, CFG_SCOPE_CLIENT, CFG_DYN_NONE) != 0) return -1; - // if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, CFG_SCOPE_CLIENT, CFG_DYN_NONE) != 0) - // return -1; - if (cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_CLIENT, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != - 0) - return -1; - if (cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX, CFG_SCOPE_CLIENT, - CFG_DYN_NONE) != 0) - return -1; - if (cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) - return -1; + TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddDir(pCfg, "tempDir", tsTempDir, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalTmpDirGB", 1.0f, 0.001f, 10000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryPolicy", tsQueryPolicy, 1, 4, CFG_SCOPE_CLIENT, CFG_DYN_ENT_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableQueryHb", tsEnableQueryHb, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableScience", tsEnableScience, CFG_SCOPE_CLIENT, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "querySmaOptimize", tsQuerySmaOptimize, 0, 1, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "queryPlannerTrace", tsQueryPlannerTrace, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryNodeChunkSize", tsQueryNodeChunkSize, 1024, 128 * 1024, CFG_SCOPE_CLIENT, + CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddBool(pCfg, "queryUseNodeAllocator", tsQueryUseNodeAllocator, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "keepColumnName", tsKeepColumnName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlChildTableName", tsSmlChildTableName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlAutoChildTableNameDelimiter", tsSmlAutoChildTableNameDelimiter, + CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlTagName", tsSmlTagName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "smlTsDefaultName", tsSmlTsDefaultName, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "smlDot2Underline", tsSmlDot2Underline, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, CFG_SCOPE_CLIENT, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxInsertBatchRows", tsMaxInsertBatchRows, 1, INT32_MAX, CFG_SCOPE_CLIENT, + CFG_DYN_CLIENT) != 0); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "useAdapter", tsUseAdapter, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "crashReporting", tsEnableCrashReport, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "queryMaxConcurrentTables", tsQueryMaxConcurrentTables, INT64_MIN, INT64_MAX, + CFG_SCOPE_CLIENT, CFG_DYN_NONE)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "metaCacheMaxSize", tsMetaCacheMaxSize, -1, INT32_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); tsNumOfRpcThreads = tsNumOfCores / 2; tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS); - if (cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_NONE)); tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000); - if (cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) - return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE)); tsTimeToGetAvailableConn = TRANGE(tsTimeToGetAvailableConn, 20, 10000000); - if (cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH, - CFG_DYN_NONE) != 0) - return -1; + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "timeToGetAvailableConn", tsTimeToGetAvailableConn, 20, 1000000, CFG_SCOPE_BOTH, CFG_DYN_NONE)); tsKeepAliveIdle = TRANGE(tsKeepAliveIdle, 1, 72000); - if (cfgAddInt32(pCfg, "keepAliveIdle", tsKeepAliveIdle, 1, 7200000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "keepAliveIdle", tsKeepAliveIdle, 1, 7200000, CFG_SCOPE_BOTH, CFG_DYN_ENT_BOTH)); tsNumOfTaskQueueThreads = tsNumOfCores; tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16); - if (cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT, CFG_DYN_NONE) != 0) - return -1; - if (cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); - if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, - CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) - return -1; - if (cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX, CFG_SCOPE_CLIENT, - CFG_DYN_CLIENT) != 0) - return -1; - return 0; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, + CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN( + cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX, + CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t taosAddSystemCfg(SConfig *pCfg) { SysNameInfo info = taosGetSysNameInfo(); - if (cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "assert", tsAssert, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddBool(pCfg, "enableCoreFile", 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddTimezone(pCfg, "timezone", tsTimezoneStr, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddLocale(pCfg, "locale", tsLocale, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddCharset(pCfg, "charset", tsCharset, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "assert", tsAssert, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableCoreFile", 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "numOfCores", tsNumOfCores, 1, 100000, CFG_SCOPE_BOTH, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "ssd42", tsSSE42Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "avx", tsAVXSupported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "avx2", tsAVX2Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "fma", tsFMASupported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "avx512", tsAVX512Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ssd42", tsSSE42Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx", tsAVXSupported, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx2", tsAVX2Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "fma", tsFMASupported, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "avx512", tsAVX512Supported, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "simdEnable", tsSIMDEnable, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "AVX512Enable", tsAVX512Enable, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "tagFilterCache", tsTagFilterCache, CFG_SCOPE_BOTH, CFG_DYN_NONE)); - if (cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE)); #if !defined(_ALPINE) - if (cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE)); #endif - if (cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pageSizeKB", tsPageSizeKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "totalMemoryKB", tsTotalMemoryKB, 0, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "os sysname", info.sysname, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "os nodename", info.nodename, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "os release", info.release, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "os version", info.version, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "os machine", info.machine, CFG_SCOPE_BOTH, CFG_DYN_NONE)); - if (cfgAddString(pCfg, "version", version, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "compatible_version", compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "gitinfo", gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "buildinfo", buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - return 0; + TAOS_CHECK_RETURN(cfgAddString(pCfg, "version", version, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "compatible_version", compatible_version, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "gitinfo", gitinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "buildinfo", buildinfo, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t taosAddServerCfg(SConfig *pCfg) { @@ -651,144 +641,141 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { tsRpcQueueMemoryAllowed = TRANGE(tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10LL, TSDB_MAX_MSG_SIZE * 10000LL); // clang-format off - if (cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT)); - if (cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRspPolicy", tsQueryRspPolicy, 0, 1, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "retentionSpeedLimitMB", tsRetentionSpeedLimitMB, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfMnodeReadThreads", tsNumOfMnodeReadThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeQueryThreads", tsNumOfVnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "ratioOfVnodeStreamThreads", tsRatioOfVnodeStreamThreads, 0.01, 4, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeFetchThreads", tsNumOfVnodeFetchThreads, 4, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfVnodeRsmaThreads", tsNumOfVnodeRsmaThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfQnodeQueryThreads", tsNumOfQnodeQueryThreads, 1, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - // tsNumOfQnodeFetchThreads = tsNumOfCores / 2; - // tsNumOfQnodeFetchThreads = TMAX(tsNumOfQnodeFetchThreads, 4); - // if (cfgAddInt32(pCfg, "numOfQnodeFetchThreads", tsNumOfQnodeFetchThreads, 1, 1024, 0) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE)); - if (cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsRpcQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "arbSetAssignedTimeoutSec", tsArbSetAssignedTimeoutSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt64(pCfg, "mndSdbWriteDelta", tsMndSdbWriteDelta, 20, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt64(pCfg, "mndLogRetention", tsMndLogRetention, 500, 10000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "skipGrant", tsMndSkipGrant, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); - if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 86400, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThresholdTest", tsSlowLogThresholdTest, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); - if (cfgAddInt32(pCfg, "slowLogThresholdTest", tsSlowLogThresholdTest, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "slowLogThreshold", tsSlowLogThreshold, 1, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "slowLogMaxLen", tsSlowLogMaxLen, 1, 16384, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddString(pCfg, "slowLogScope", tsSlowLogScopeString, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddString(pCfg, "slowLogExceptDb", tsSlowLogExceptDb, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddString(pCfg, "monitorFqdn", tsMonitorFqdn, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "monitorPort", tsMonitorPort, 1, 65056, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "monitorMaxLogs", tsMonitorMaxLogs, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "monitorComp", tsMonitorComp, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "monitorLogProtocol", tsMonitorLogProtocol, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddBool(pCfg, "monitorForceV2", tsMonitorForceV2, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "audit", tsEnableAudit, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddBool(pCfg, "auditCreateTable", tsEnableAuditCreateTable, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "auditInterval", tsAuditInterval, 500, 200000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_BOTH, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_BOTH, CFG_DYN_BOTH)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_BOTH, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "telemetryReporting", tsEnableTelem, CFG_SCOPE_BOTH, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "telemetryInterval", tsTelemInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "telemetryServer", tsTelemServer, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; - if (cfgAddInt32(pCfg, "telemetryPort", tsTelemPort, 1, 65056, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_BOTH, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); - if (cfgAddInt32(pCfg, "rsyncPort", tsRsyncPort, 1, 65535, CFG_SCOPE_BOTH, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddString(pCfg, "snodeAddress", tsSnodeAddress, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddString(pCfg, "checkpointBackupDir", tsCheckpointBackupDir, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "compactPullupInterval", tsCompactPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "ttlBatchDropNum", tsTtlBatchDropNum, 0, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddBool(pCfg, "ttlChangeOnWrite", tsTtlChangeOnWrite, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "ttlFlushThreshold", tsTtlFlushThreshold, -1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "trimVDbIntervalSec", tsTrimVDbIntervalSec, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "s3MigrateIntervalSec", tsS3MigrateIntervalSec, 600, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddBool(pCfg, "s3MigrateEnabled", tsS3MigrateEnabled, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "uptimeInterval", tsUptimeInterval, 1, 100000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "queryRsmaTolerance", tsQueryRsmaTolerance, 0, 900000, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "timeseriesThreshold", tsTimeSeriesThreshold, 0, 2000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddInt64(pCfg, "walFsyncDataSizeLimit", tsWalFsyncDataSizeLimit, 100 * 1024 * 1024, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "udf", tsStartUdfd, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "disableStream", tsDisableStream, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt64(pCfg, "streamBufferSize", tsStreamBufferSize, 0, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt64(pCfg, "streamAggCnt", tsStreamAggCnt, 2, INT32_MAX, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "checkpointInterval", tsStreamCheckpointInterval, 60, 1800, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddFloat(pCfg, "streamSinkDataRate", tsSinkDataRate, 0.1, 5, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "concurrentCheckpoint", tsMaxConcurrentCheckpoint, 1, 10, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); - if (cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "ifAdtFse", tsIfAdtFse, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "compressor", tsCompressor, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "resolveFQDNRetryTime", tsResolveFQDNRetryTime, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddBool(pCfg, "filterScalarMode", tsFilterScalarMode, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "maxStreamBackendCache", tsMaxStreamBackendCache, 16, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "pqSortMemThreshold", tsPQSortMemThreshold, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddInt32(pCfg, "resolveFQDNRetryTime", tsResolveFQDNRetryTime, 1, 10240, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint, CFG_SCOPE_SERVER, CFG_DYN_NONE)); + TAOS_CHECK_RETURN(cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_NONE)); - if (cfgAddString(pCfg, "s3Accesskey", tsS3AccessKey, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "s3Endpoint", tsS3Endpoint, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - if (cfgAddString(pCfg, "s3BucketName", tsS3BucketName, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - - if (cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3PageCacheSize", tsS3PageCacheSize, 4, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "s3UploadDelaySec", tsS3UploadDelaySec, 1, 60 * 60 * 24 * 30, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); // min free disk space used to check if the disk is full [50MB, 1GB] - if (cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; + TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "minDiskFreeSize", tsMinDiskFreeSize, TFS_MIN_DISK_FREE_SIZE, 1024 * 1024 * 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER)); + TAOS_CHECK_RETURN(cfgAddBool(pCfg, "enableWhiteList", tsEnableWhiteList, CFG_SCOPE_SERVER, CFG_DYN_SERVER)); // clang-format on // GRANT_CFG_ADD; - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t taosUpdateServerCfg(SConfig *pCfg) { @@ -799,7 +786,7 @@ static int32_t taosUpdateServerCfg(SConfig *pCfg) { pItem = cfgGetItem(tsCfg, "numOfCores"); if (pItem == NULL) { - return -1; + TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); } else { stype = pItem->stype; numOfCores = pItem->fval; @@ -917,7 +904,7 @@ static int32_t taosUpdateServerCfg(SConfig *pCfg) { pItem = cfgGetItem(tsCfg, "totalMemoryKB"); if (pItem == NULL) { - return -1; + TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); } else { stype = pItem->stype; totalMemoryKB = pItem->i64; @@ -931,7 +918,7 @@ static int32_t taosUpdateServerCfg(SConfig *pCfg) { pItem->stype = stype; } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static void taosSetClientLogCfg(SConfig *pCfg) { @@ -969,19 +956,20 @@ static void taosSetServerLogCfg(SConfig *pCfg) { sndDebugFlag = cfgGetItem(pCfg, "sndDebugFlag")->i32; } -int32_t taosSetSlowLogScope(char *pScope) { - if (NULL == pScope || 0 == strlen(pScope)) { - return SLOW_LOG_TYPE_QUERY; +int32_t taosSetSlowLogScope(char *pScopeStr, int32_t *pScope) { + if (NULL == pScopeStr || 0 == strlen(pScopeStr)) { + *pScope = SLOW_LOG_TYPE_QUERY; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t slowScope = 0; char* scope = NULL; char *tmp = NULL; - while((scope = strsep(&pScope, "|")) != NULL){ + while((scope = strsep(&pScopeStr, "|")) != NULL){ taosMemoryFreeClear(tmp); tmp = taosStrdup(scope); - strtrim(tmp); + (void)strtrim(tmp); if (0 == strcasecmp(tmp, "all")) { slowScope |= SLOW_LOG_TYPE_ALL; continue; @@ -1008,42 +996,43 @@ int32_t taosSetSlowLogScope(char *pScope) { } taosMemoryFreeClear(tmp); - uError("Invalid slowLog scope value:%s", pScope); - terrno = TSDB_CODE_INVALID_CFG_VALUE; - return -1; + uError("Invalid slowLog scope value:%s", pScopeStr); + TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE); } + *pScope = slowScope; taosMemoryFreeClear(tmp); - return slowScope; + TAOS_RETURN(TSDB_CODE_SUCCESS); } // for common configs static int32_t taosSetClientCfg(SConfig *pCfg) { tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN); tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; - snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); char defaultFirstEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); SEp firstEp = {0}; - taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp); - snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); - cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, true); + TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp)); + (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); + TAOS_CHECK_RETURN(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, true)); SConfigItem *pSecondpItem = cfgGetItem(pCfg, "secondEp"); SEp secondEp = {0}; - taosGetFqdnPortFromEp(strlen(pSecondpItem->str) == 0 ? defaultFirstEp : pSecondpItem->str, &secondEp); - snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port); - cfgSetItem(pCfg, "secondEp", tsSecond, pSecondpItem->stype, true); + TAOS_CHECK_RETURN(taosGetFqdnPortFromEp(strlen(pSecondpItem->str) == 0 ? defaultFirstEp : pSecondpItem->str, &secondEp)); + (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port); + TAOS_CHECK_RETURN(cfgSetItem(pCfg, "secondEp", tsSecond, pSecondpItem->stype, true)); tstrncpy(tsTempDir, cfgGetItem(pCfg, "tempDir")->str, PATH_MAX); - taosExpandDir(tsTempDir, tsTempDir, PATH_MAX); + TAOS_CHECK_RETURN(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX)); tsTempSpace.reserved = (int64_t)(((double)cfgGetItem(pCfg, "minimalTmpDirGB")->fval) * 1024 * 1024 * 1024); if (taosMulMkDir(tsTempDir) != 0) { - uError("failed to create tempDir:%s since %s", tsTempDir, terrstr()); - return -1; + int32_t code = TAOS_SYSTEM_ERROR(errno); + uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code)); + TAOS_RETURN(code); } tstrncpy(tsSmlAutoChildTableNameDelimiter, cfgGetItem(pCfg, "smlAutoChildTableNameDelimiter")->str, @@ -1088,28 +1077,41 @@ static int32_t taosSetClientCfg(SConfig *pCfg) { tsMultiResultFunctionStarReturnTags = cfgGetItem(pCfg, "multiResultFunctionStarReturnTags")->bval; tsMaxTsmaCalcDelay = cfgGetItem(pCfg, "maxTsmaCalcDelay")->i32; tsmaDataDeleteMark = cfgGetItem(pCfg, "tsmaDataDeleteMark")->i32; - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } -static void taosSetSystemCfg(SConfig *pCfg) { +static int32_t taosSetSystemCfg(SConfig *pCfg) { SConfigItem *pItem = cfgGetItem(pCfg, "timezone"); + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); - osSetTimezone(pItem->str); + TAOS_CHECK_RETURN(osSetTimezone(pItem->str)); uDebug("timezone format changed from %s to %s", pItem->str, tsTimezoneStr); - cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, true); + TAOS_CHECK_RETURN(cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, true)); + + pItem = cfgGetItem(pCfg, "locale"); + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + const char *locale = pItem->str; + + pItem = cfgGetItem(pCfg, "charset"); + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + const char *charset = pItem->str; - const char *locale = cfgGetItem(pCfg, "locale")->str; - const char *charset = cfgGetItem(pCfg, "charset")->str; taosSetSystemLocale(locale, charset); osSetSystemLocale(locale, charset); - bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval; + pItem = cfgGetItem(pCfg, "enableCoreFile"); + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + bool enableCore = pItem->bval; taosSetCoreDump(enableCore); - tsAssert = cfgGetItem(pCfg, "assert")->bval; + pItem = cfgGetItem(pCfg, "assert"); + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + tsAssert = pItem->bval; // todo tsVersion = 30000000; + + TAOS_RETURN(TSDB_CODE_SUCCESS); } // for server configs @@ -1149,10 +1151,8 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsSlowLogThresholdTest = cfgGetItem(pCfg, "slowLogThresholdTest")->i32; tsSlowLogThreshold = cfgGetItem(pCfg, "slowLogThreshold")->i32; tsSlowLogMaxLen = cfgGetItem(pCfg, "slowLogMaxLen")->i32; - int32_t scope = taosSetSlowLogScope(cfgGetItem(pCfg, "slowLogScope")->str); - if(scope < 0){ - return -1; - } + int32_t scope = 0; + TAOS_CHECK_RETURN(taosSetSlowLogScope(cfgGetItem(pCfg, "slowLogScope")->str, &scope)); tsSlowLogScope = scope; tsEnableMonitor = cfgGetItem(pCfg, "monitor")->bval; @@ -1248,7 +1248,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsExperimental = cfgGetItem(pCfg, "experimental")->bval; // GRANT_CFG_GET; - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } #ifndef TD_ENTERPRISE @@ -1257,43 +1257,36 @@ static int32_t taosSetReleaseCfg(SConfig *pCfg) { return 0; } int32_t taosSetReleaseCfg(SConfig *pCfg); #endif -static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag); +static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag); int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) { - if (tsCfg == NULL) osDefaultInit(); + int32_t code = TSDB_CODE_SUCCESS; + + if (tsCfg == NULL) { + TAOS_CHECK_RETURN(osDefaultInit()); + } SConfig *pCfg = NULL; TAOS_CHECK_RETURN(cfgInit(&pCfg)); if (tsc) { tsLogEmbedded = 0; - if (taosAddClientLogCfg(pCfg) != 0) { - cfgCleanup(pCfg); - return -1; - } + TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), NULL, _exit); } else { tsLogEmbedded = 1; - if (taosAddClientLogCfg(pCfg) != 0) { - cfgCleanup(pCfg); - return -1; - } - if (taosAddServerLogCfg(pCfg) != 0) { - cfgCleanup(pCfg); - return -1; - } + TAOS_CHECK_GOTO(taosAddClientLogCfg(pCfg), NULL, _exit); + TAOS_CHECK_GOTO(taosAddServerLogCfg(pCfg), NULL, _exit); } - if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) { - printf("failed to load cfg since %s", terrstr()); - cfgCleanup(pCfg); - return -1; + if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != TSDB_CODE_SUCCESS) { + printf("failed to load cfg since %s", tstrerror(code)); + goto _exit; } - if (cfgLoadFromArray(pCfg, pArgs) != 0) { - printf("failed to load cfg from array since %s", terrstr()); - cfgCleanup(pCfg); - return -1; + if ((code = cfgLoadFromArray(pCfg, pArgs)) != TSDB_CODE_SUCCESS) { + printf("failed to load cfg from array since %s", tstrerror(code)); + goto _exit; } if (tsc) { @@ -1303,26 +1296,30 @@ int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDi taosSetServerLogCfg(pCfg); } - taosSetAllDebugFlag(pCfg, cfgGetItem(pCfg, "debugFlag")->i32); + SConfigItem *pDebugItem = cfgGetItem(pCfg, "debugFlag"); + if (NULL == pDebugItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); - if (taosMulModeMkDir(tsLogDir, 0777, true) != 0) { - printf("failed to create dir:%s since %s", tsLogDir, terrstr()); - cfgCleanup(pCfg); - return -1; + TAOS_CHECK_RETURN(taosSetAllDebugFlag(pCfg, pDebugItem->i32)); + + if ((code = taosMulModeMkDir(tsLogDir, 0777, true)) != TSDB_CODE_SUCCESS) { + printf("failed to create dir:%s since %s", tsLogDir, tstrerror(code)); + goto _exit; } - if (taosInitLog(logname, logFileNum) != 0) { + if ((code = taosInitLog(logname, logFileNum)) != 0) { printf("failed to init log file since %s", terrstr()); - cfgCleanup(pCfg); - return -1; + goto _exit; } +_exit: cfgCleanup(pCfg); - return 0; + TAOS_RETURN(code); } int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs) { + int32_t code = TSDB_CODE_SUCCESS; + if (tsCfg == NULL) osDefaultInit(); SConfig *pCfg = NULL; @@ -1331,107 +1328,105 @@ int32_t taosReadDataFolder(const char *cfgDir, const char **envCmd, const char * if (cfgAddDir(pCfg, "dataDir", tsDataDir, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; - if (taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) { + if ((code = taosLoadCfg(pCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) { printf("failed to load cfg since %s", terrstr()); - cfgCleanup(pCfg); - return -1; + goto _exit; } - if (cfgLoadFromArray(pCfg, pArgs) != 0) { + if ((code = cfgLoadFromArray(pCfg, pArgs)) != 0) { printf("failed to load cfg from array since %s", terrstr()); - cfgCleanup(pCfg); - return -1; + goto _exit; } - if (taosSetTfsCfg(pCfg) != 0) { - cfgCleanup(pCfg); - return -1; - } + TAOS_CHECK_GOTO(taosSetTfsCfg(pCfg), NULL, _exit); dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32; +_exit: cfgCleanup(pCfg); - return 0; + TAOS_RETURN(code); } static int32_t taosCheckGlobalCfg() { uint32_t ipv4 = 0; int32_t code = taosGetIpv4FromFqdn(tsLocalFqdn, &ipv4); if (code) { - terrno = TSDB_CODE_RPC_FQDN_ERROR; - uError("failed to get ip from fqdn:%s since %s, dnode can not be initialized", tsLocalFqdn, terrstr()); - return -1; + uError("failed to get ip from fqdn:%s since %s, dnode can not be initialized", tsLocalFqdn, tstrerror(code)); + TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR); } if (tsServerPort <= 0) { uError("invalid server port:%u, dnode can not be initialized", tsServerPort); - return -1; + TAOS_RETURN(TSDB_CODE_RPC_FQDN_ERROR); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t cfgInitWrapper(SConfig **pCfg) { if (*pCfg == NULL) { TAOS_CHECK_RETURN(cfgInit(pCfg)); } - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) { - if (tsCfg != NULL) return 0; + if (tsCfg != NULL) TAOS_RETURN(TSDB_CODE_SUCCESS); - int32_t code = cfgInitWrapper(&tsCfg); + TAOS_CHECK_RETURN(cfgInitWrapper(&tsCfg)); if (tsc) { - if ((code = taosAddClientCfg(tsCfg)) != 0) return code; - if ((code = taosAddClientLogCfg(tsCfg)) != 0) return code; + TAOS_CHECK_RETURN(taosAddClientCfg(tsCfg)); + TAOS_CHECK_RETURN(taosAddClientLogCfg(tsCfg)); } else { - if ((code = taosAddClientCfg(tsCfg)) != 0) return code; - if ((code = taosAddServerCfg(tsCfg)) != 0) return code; - if ((code = taosAddClientLogCfg(tsCfg)) != 0) return code; - if ((code = taosAddServerLogCfg(tsCfg)) != 0) return code; + TAOS_CHECK_RETURN(taosAddClientCfg(tsCfg)); + TAOS_CHECK_RETURN(taosAddServerCfg(tsCfg)); + TAOS_CHECK_RETURN(taosAddClientLogCfg(tsCfg)); + TAOS_CHECK_RETURN(taosAddServerLogCfg(tsCfg)); } - code = taosAddSystemCfg(tsCfg); + TAOS_CHECK_RETURN(taosAddSystemCfg(tsCfg)); + int32_t code = TSDB_CODE_SUCCESS; if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) { uError("failed to load cfg since %s", tstrerror(code)); cfgCleanup(tsCfg); tsCfg = NULL; - return code; + TAOS_RETURN(code); } if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) { uError("failed to load cfg from array since %s", tstrerror(code)); cfgCleanup(tsCfg); tsCfg = NULL; - return code; + TAOS_RETURN(code); } if (tsc) { - if ((code = taosSetClientCfg(tsCfg)) != 0) return code; + TAOS_CHECK_RETURN(taosSetClientCfg(tsCfg)); } else { - if ((code = taosSetClientCfg(tsCfg)) != 0) return code; - if ((code = taosUpdateServerCfg(tsCfg)) != 0) return code; - if ((code = taosSetServerCfg(tsCfg)) != 0) return code; - if ((code = taosSetReleaseCfg(tsCfg)) != 0) return code; - if ((code = taosSetTfsCfg(tsCfg)) != 0) return code; - if ((code = taosSetS3Cfg(tsCfg)) != 0) return code; + TAOS_CHECK_RETURN(taosSetClientCfg(tsCfg)); + TAOS_CHECK_RETURN(taosUpdateServerCfg(tsCfg)); + TAOS_CHECK_RETURN(taosSetServerCfg(tsCfg)); + TAOS_CHECK_RETURN(taosSetReleaseCfg(tsCfg)); + TAOS_CHECK_RETURN(taosSetTfsCfg(tsCfg)); + TAOS_CHECK_RETURN(taosSetS3Cfg(tsCfg)); } - taosSetSystemCfg(tsCfg); + TAOS_CHECK_RETURN(taosSetSystemCfg(tsCfg)); + TAOS_CHECK_RETURN(taosSetFileHandlesLimit()); - if ((code = taosSetFileHandlesLimit()) != 0) return code; - - taosSetAllDebugFlag(tsCfg, cfgGetItem(tsCfg, "debugFlag")->i32); + SConfigItem *pItem = cfgGetItem(tsCfg, "debugFlag"); + if (NULL == pItem) { + uError("debugFlag not found in cfg"); + TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + } + TAOS_CHECK_RETURN(taosSetAllDebugFlag(tsCfg, pItem->i32)); cfgDumpCfg(tsCfg, tsc, false); - if ((code = taosCheckGlobalCfg()) != 0) { - return code; - } + TAOS_CHECK_RETURN(taosCheckGlobalCfg()); - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } void taosCleanupCfg() { @@ -1447,18 +1442,18 @@ typedef struct { } OptionNameAndVar; static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) { - terrno = TSDB_CODE_INVALID_CFG; + int32_t code = TSDB_CODE_CFG_NOT_FOUND; char *name = pItem->name; for (int32_t d = 0; d < optionSize; ++d) { const char *optName = pOptions[d].optionName; if (strcasecmp(name, optName) != 0) continue; + code = TSDB_CODE_SUCCESS; switch (pItem->dtype) { case CFG_DTYPE_BOOL: { int32_t flag = pItem->i32; bool *pVar = pOptions[d].optionVar; uInfo("%s set from %d to %d", optName, *pVar, flag); *pVar = flag; - terrno = TSDB_CODE_SUCCESS; } break; case CFG_DTYPE_INT32: { int32_t flag = pItem->i32; @@ -1467,16 +1462,14 @@ static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, *pVar = flag; if (isDebugflag) { - taosSetDebugFlag(pOptions[d].optionVar, optName, flag); + TAOS_CHECK_RETURN(taosSetDebugFlag(pOptions[d].optionVar, optName, flag)); } - terrno = TSDB_CODE_SUCCESS; } break; case CFG_DTYPE_INT64: { int64_t flag = pItem->i64; int64_t *pVar = pOptions[d].optionVar; uInfo("%s set from %" PRId64 " to %" PRId64, optName, *pVar, flag); *pVar = flag; - terrno = TSDB_CODE_SUCCESS; } break; case CFG_DTYPE_FLOAT: case CFG_DTYPE_DOUBLE: { @@ -1484,27 +1477,26 @@ static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, float *pVar = pOptions[d].optionVar; uInfo("%s set from %f to %f", optName, *pVar, flag); *pVar = flag; - terrno = TSDB_CODE_SUCCESS; } break; default: - terrno = TSDB_CODE_INVALID_CFG; + code = TSDB_CODE_INVALID_CFG; break; } break; } - return terrno == TSDB_CODE_SUCCESS ? 0 : -1; + TAOS_RETURN(code); } static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) { - terrno = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; if (strcasecmp(name, "resetlog") == 0) { // trigger, no item in cfg taosResetLog(); cfgDumpCfg(tsCfg, 0, false); - return 0; + TAOS_RETURN(TSDB_CODE_SUCCESS); } cfgLock(pCfg); @@ -1512,33 +1504,27 @@ static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) { SConfigItem *pItem = cfgGetItem(pCfg, name); if (!pItem || (pItem->dynScope & CFG_DYN_SERVER) == 0) { uError("failed to config:%s, not support", name); - terrno = TSDB_CODE_INVALID_CFG; - - cfgUnLock(pCfg); - return -1; + code = TSDB_CODE_INVALID_CFG; + goto _exit; } if (strncasecmp(name, "debugFlag", 9) == 0) { - taosSetAllDebugFlag(pCfg, pItem->i32); - cfgUnLock(pCfg); - return 0; + code = taosSetAllDebugFlag(pCfg, pItem->i32); + goto _exit; } if (strcasecmp("slowLogScope", name) == 0) { - int32_t scope = taosSetSlowLogScope(pItem->str); - if(scope < 0){ - cfgUnLock(pCfg); - return -1; - } + int32_t scope = 0; + TAOS_CHECK_GOTO(taosSetSlowLogScope(pItem->str, &scope), NULL, _exit); tsSlowLogScope = scope; - cfgUnLock(pCfg); - return 0; + code = TSDB_CODE_SUCCESS; + goto _exit; } if (strcasecmp("slowLogExceptDb", name) == 0) { tstrncpy(tsSlowLogExceptDb, pItem->str, TSDB_DB_NAME_LEN); - cfgUnLock(pCfg); - return 0; + code = TSDB_CODE_SUCCESS; + goto _exit; } { // 'bool/int32_t/int64_t/float/double' variables with general modification function @@ -1593,39 +1579,39 @@ static int32_t taosCfgDynamicOptionsForServer(SConfig *pCfg, const char *name) { {"experimental", &tsExperimental}, {"maxTsmaNum", &tsMaxTsmaNum}}; - if (taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true) != 0) { - taosCfgSetOption(options, tListLen(options), pItem, false); + if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) { + code = taosCfgSetOption(options, tListLen(options), pItem, false); } } +_exit: cfgUnLock(pCfg); - return terrno == TSDB_CODE_SUCCESS ? 0 : -1; + TAOS_RETURN(code); } static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { - terrno = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; cfgLock(pCfg); SConfigItem *pItem = cfgGetItem(pCfg, name); if ((pItem == NULL) || (pItem->dynScope & CFG_DYN_CLIENT) == 0) { uError("failed to config:%s, not support", name); - terrno = TSDB_CODE_INVALID_CFG; - - cfgUnLock(pCfg); - return -1; + code = TSDB_CODE_INVALID_CFG; + goto _out; } bool matched = false; int32_t len = strlen(name); char lowcaseName[CFG_NAME_MAX_LEN + 1] = {0}; - strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len)); + (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len)); switch (lowcaseName[0]) { case 'd': { if (strcasecmp("debugFlag", name) == 0) { - taosSetAllDebugFlag(pCfg, pItem->i32); + code = taosSetAllDebugFlag(pCfg, pItem->i32); matched = true; } break; @@ -1641,35 +1627,55 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { } case 'f': { if (strcasecmp("fqdn", name) == 0) { - tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN); - tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; - snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); + SConfigItem* pFqdnItem = cfgGetItem(pCfg, "fqdn"); + SConfigItem* pServerPortItem = cfgGetItem(pCfg, "serverPort"); + SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); + if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) { + uError("failed to get fqdn or serverPort or firstEp from cfg"); + code = TSDB_CODE_CFG_NOT_FOUND; + goto _out; + } + + tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN); + tsServerPort = (uint16_t)pServerPortItem->i32; + (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); char defaultFirstEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); - SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); SEp firstEp = {0}; - taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp); - snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); + TAOS_CHECK_GOTO( + taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino, + _out); + (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); - cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false); + TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out); uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst); matched = true; } else if (strcasecmp("firstEp", name) == 0) { - tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN); - tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; - snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); + SConfigItem *pFqdnItem = cfgGetItem(pCfg, "fqdn"); + SConfigItem *pServerPortItem = cfgGetItem(pCfg, "serverPort"); + SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); + if (pFqdnItem == NULL || pServerPortItem == NULL || pFirstEpItem == NULL) { + uError("failed to get fqdn or serverPort or firstEp from cfg"); + code = TSDB_CODE_CFG_NOT_FOUND; + goto _out; + } + + tstrncpy(tsLocalFqdn, pFqdnItem->str, TSDB_FQDN_LEN); + tsServerPort = (uint16_t)pServerPortItem->i32; + (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); char defaultFirstEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); - SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); - SEp firstEp = {0}; - taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp); - snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); + SEp firstEp = {0}; + TAOS_CHECK_GOTO( + taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino, + _out); + (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); - cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false); + TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out); uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst); matched = true; } @@ -1677,8 +1683,16 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { } case 'l': { if (strcasecmp("locale", name) == 0) { - const char *locale = cfgGetItem(pCfg, "locale")->str; - const char *charset = cfgGetItem(pCfg, "charset")->str; + SConfigItem* pLocaleItem = cfgGetItem(pCfg, "locale"); + SConfigItem* pCharsetItem = cfgGetItem(pCfg, "charset"); + if (pLocaleItem == NULL || pCharsetItem == NULL) { + uError("failed to get locale or charset from cfg"); + code = TSDB_CODE_CFG_NOT_FOUND; + goto _out; + } + + const char *locale = pLocaleItem->str; + const char *charset = pCharsetItem->str; taosSetSystemLocale(locale, charset); osSetSystemLocale(locale, charset); uInfo("locale set to '%s', charset set to '%s'", locale, charset); @@ -1686,7 +1700,7 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { } else if (strcasecmp("logDir", name) == 0) { uInfo("%s set from '%s' to '%s'", name, tsLogDir, pItem->str); tstrncpy(tsLogDir, pItem->str, PATH_MAX); - taosExpandDir(tsLogDir, tsLogDir, PATH_MAX); + TAOS_CHECK_GOTO(taosExpandDir(tsLogDir, tsLogDir, PATH_MAX), &lino, _out); matched = true; } break; @@ -1710,9 +1724,9 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { case 's': { if (strcasecmp("secondEp", name) == 0) { SEp secondEp = {0}; - taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp); - snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port); - cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false); + TAOS_CHECK_GOTO(taosGetFqdnPortFromEp(strlen(pItem->str) == 0 ? tsFirst : pItem->str, &secondEp), &lino, _out); + (void)snprintf(tsSecond, sizeof(tsSecond), "%s:%u", secondEp.fqdn, secondEp.port); + TAOS_CHECK_GOTO(cfgSetItem(pCfg, "secondEp", tsSecond, pItem->stype, false), &lino, _out); uInfo("%s set to %s", name, tsSecond); matched = true; } else if (strcasecmp("smlChildTableName", name) == 0) { @@ -1734,17 +1748,25 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { } else if (strcasecmp("serverPort", name) == 0) { tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN); tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; - snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); char defaultFirstEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp"); - SEp firstEp = {0}; - taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp); - snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); + if (pFirstEpItem == NULL) { + uError("failed to get firstEp from cfg"); + code = TSDB_CODE_CFG_NOT_FOUND; + goto _out; + } - cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false); + SEp firstEp = {0}; + TAOS_CHECK_GOTO( + taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp), &lino, + _out); + (void)snprintf(tsFirst, sizeof(tsFirst), "%s:%u", firstEp.fqdn, firstEp.port); + + TAOS_CHECK_GOTO(cfgSetItem(pCfg, "firstEp", tsFirst, pFirstEpItem->stype, false), &lino, _out); uInfo("localEp set to '%s', tsFirst set to '%s'", tsLocalEp, tsFirst); matched = true; } @@ -1752,26 +1774,26 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { } case 't': { if (strcasecmp("timezone", name) == 0) { - osSetTimezone(pItem->str); + TAOS_CHECK_GOTO(osSetTimezone(pItem->str), &lino, _out); uInfo("%s set from %s to %s", name, tsTimezoneStr, pItem->str); - cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, false); + TAOS_CHECK_GOTO(cfgSetItem(pCfg, "timezone", tsTimezoneStr, pItem->stype, false), &lino, _out); matched = true; } else if (strcasecmp("tempDir", name) == 0) { uInfo("%s set from %s to %s", name, tsTempDir, pItem->str); tstrncpy(tsTempDir, pItem->str, PATH_MAX); - taosExpandDir(tsTempDir, tsTempDir, PATH_MAX); + TAOS_CHECK_GOTO(taosExpandDir(tsTempDir, tsTempDir, PATH_MAX), &lino, _out); if (taosMulMkDir(tsTempDir) != 0) { - uError("failed to create tempDir:%s since %s", tsTempDir, terrstr()); - cfgUnLock(pCfg); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + uError("failed to create tempDir:%s since %s", tsTempDir, tstrerror(code)); + goto _out; } matched = true; } break; } default: - terrno = TSDB_CODE_CFG_NOT_FOUND; + code = TSDB_CODE_CFG_NOT_FOUND; break; } @@ -1813,14 +1835,18 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) { {"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay}, {"tsmaDataDeleteMark", &tsmaDataDeleteMark}}; - if (taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true) != 0) { - taosCfgSetOption(options, tListLen(options), pItem, false); + if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) { + code = taosCfgSetOption(options, tListLen(options), pItem, false); } } _out: + if (TSDB_CODE_SUCCESS != code) { + uError("failed to set option:%s, lino:%d, since:%s", name, lino, tstrerror(code)); + } + cfgUnLock(pCfg); - return terrno == TSDB_CODE_SUCCESS ? 0 : -1; + TAOS_RETURN(code); } int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) { @@ -1831,14 +1857,15 @@ int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer) { } } -void taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) { +int32_t taosSetDebugFlag(int32_t *pFlagPtr, const char *flagName, int32_t flagVal) { SConfigItem *pItem = cfgGetItem(tsCfg, flagName); - if (pItem != NULL) { - pItem->i32 = flagVal; - } + if (!pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); + + pItem->i32 = flagVal; if (pFlagPtr != NULL) { *pFlagPtr = flagVal; } + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int taosLogVarComp(void const *lp, void const *rp) { @@ -1847,58 +1874,55 @@ static int taosLogVarComp(void const *lp, void const *rp) { return strcasecmp(lpVar->name, rpVar->name); } -static void taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) { +static int32_t taosCheckAndSetDebugFlag(int32_t *pFlagPtr, char *name, int32_t flag, SArray *noNeedToSetVars) { if (noNeedToSetVars != NULL && taosArraySearch(noNeedToSetVars, name, taosLogVarComp, TD_EQ) != NULL) { - return; + TAOS_RETURN(TSDB_CODE_SUCCESS); } - taosSetDebugFlag(pFlagPtr, name, flag); + return taosSetDebugFlag(pFlagPtr, name, flag); } -void taosSetGlobalDebugFlag(int32_t flag) { taosSetAllDebugFlag(tsCfg, flag); } +int32_t taosSetGlobalDebugFlag(int32_t flag) { return taosSetAllDebugFlag(tsCfg, flag); } // NOTE: set all command does not change the tmrDebugFlag -static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { - if (flag <= 0) { - return; - } +static int32_t taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { + if (flag < 0) TAOS_RETURN(TSDB_CODE_INVALID_PARA); + if (flag == 0) TAOS_RETURN(TSDB_CODE_SUCCESS); // just ignore SArray *noNeedToSetVars = NULL; SConfigItem *pItem = cfgGetItem(pCfg, "debugFlag"); - if (pItem != NULL) { - pItem->i32 = flag; - noNeedToSetVars = pItem->array; - } + if (NULL == pItem) TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); - taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars); + pItem->i32 = flag; + noNeedToSetVars = pItem->array; - taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&simDebugFlag, "simDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&uDebugFlag, "uDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&rpcDebugFlag, "rpcDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&qDebugFlag, "qDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars); - taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&jniDebugFlag, "jniDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&cDebugFlag, "cDebugFlag", flag, noNeedToSetVars); + + (void)taosCheckAndSetDebugFlag(&dDebugFlag, "dDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&vDebugFlag, "vDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&mDebugFlag, "mDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&wDebugFlag, "wDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&sDebugFlag, "sDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&tsdbDebugFlag, "tsdbDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&tqDebugFlag, "tqDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&fsDebugFlag, "fsDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&udfDebugFlag, "udfDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&smaDebugFlag, "smaDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&idxDebugFlag, "idxDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&tdbDebugFlag, "tdbDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&metaDebugFlag, "metaDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&stDebugFlag, "stDebugFlag", flag, noNeedToSetVars); + (void)taosCheckAndSetDebugFlag(&sndDebugFlag, "sndDebugFlag", flag, noNeedToSetVars); taosArrayClear(noNeedToSetVars); // reset array uInfo("all debug flag are set to %d", flag); - if (terrno == TSDB_CODE_CFG_NOT_FOUND) { - terrno = TSDB_CODE_SUCCESS; // ignore not exist - } + TAOS_RETURN(TSDB_CODE_SUCCESS); } int8_t taosGranted(int8_t type) { diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 809630a9ae..c17b8ef526 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -374,13 +374,13 @@ static int32_t tDeserializeSClientHbReq(SDecoder *pDecoder, SClientHbReq *pReq) SQuerySubDesc sDesc = {0}; if (tDecodeI64(pDecoder, &sDesc.tid) < 0) return -1; if (tDecodeCStrTo(pDecoder, sDesc.status) < 0) return -1; - taosArrayPush(desc.subDesc, &sDesc); + if (!taosArrayPush(desc.subDesc, &sDesc)) return -1; } } ASSERT(desc.subPlanNum == taosArrayGetSize(desc.subDesc)); - taosArrayPush(pReq->query->queryDesc, &desc); + if (!taosArrayPush(pReq->query->queryDesc, &desc)) return -1; } } } @@ -395,7 +395,11 @@ static int32_t tDeserializeSClientHbReq(SDecoder *pDecoder, SClientHbReq *pReq) for (int32_t i = 0; i < kvNum; i++) { SKv kv = {0}; if (tDecodeSKv(pDecoder, &kv) < 0) return -1; - taosHashPut(pReq->info, &kv.key, sizeof(kv.key), &kv, sizeof(kv)); + int32_t code = taosHashPut(pReq->info, &kv.key, sizeof(kv.key), &kv, sizeof(kv)); + if (code) { + terrno = code; + return -1; + } } return 0; @@ -458,7 +462,7 @@ static int32_t tDeserializeSClientHbRsp(SDecoder *pDecoder, SClientHbRsp *pRsp) for (int32_t i = 0; i < pQnodeNum; ++i) { SQueryNodeLoad load = {0}; if (tDecodeSQueryNodeLoad(pDecoder, &load) < 0) return -1; - taosArrayPush(pRsp->query->pQnodeList, &load); + if (!taosArrayPush(pRsp->query->pQnodeList, &load)) return -1; } } } @@ -469,8 +473,8 @@ static int32_t tDeserializeSClientHbRsp(SDecoder *pDecoder, SClientHbRsp *pRsp) if (pRsp->info == NULL) return -1; for (int32_t i = 0; i < kvNum; i++) { SKv kv = {0}; - tDecodeSKv(pDecoder, &kv); - taosArrayPush(pRsp->info, &kv); + if (tDecodeSKv(pDecoder, &kv)) return -1; + if (!taosArrayPush(pRsp->info, &kv)) return -1; } return 0; @@ -513,8 +517,8 @@ int32_t tDeserializeSClientHbBatchReq(void *buf, int32_t bufLen, SClientHbBatchR } for (int32_t i = 0; i < reqNum; i++) { SClientHbReq req = {0}; - tDeserializeSClientHbReq(&decoder, &req); - taosArrayPush(pBatchReq->reqs, &req); + if (tDeserializeSClientHbReq(&decoder, &req) < 0) return -1; + if (!taosArrayPush(pBatchReq->reqs, &req)) return -1; } if (!tDecodeIsEnd(&decoder)) { @@ -561,12 +565,12 @@ int32_t tDeserializeSClientHbBatchRsp(void *buf, int32_t bufLen, SClientHbBatchR int32_t rspNum = 0; if (tDecodeI32(&decoder, &rspNum) < 0) return -1; if (pBatchRsp->rsps == NULL) { - pBatchRsp->rsps = taosArrayInit(rspNum, sizeof(SClientHbRsp)); + if ((pBatchRsp->rsps = taosArrayInit(rspNum, sizeof(SClientHbRsp))) == NULL) return -1; } for (int32_t i = 0; i < rspNum; i++) { SClientHbRsp rsp = {0}; - tDeserializeSClientHbRsp(&decoder, &rsp); - taosArrayPush(pBatchRsp->rsps, &rsp); + if (tDeserializeSClientHbRsp(&decoder, &rsp) < 0) return -1; + if (taosArrayPush(pBatchRsp->rsps, &rsp) == NULL) return -1; } if (!tDecodeIsEnd(&decoder)) { @@ -673,13 +677,9 @@ int32_t tDeserializeSMCreateStbReq(void *buf, int32_t bufLen, SMCreateStbReq *pR if (tDecodeI32(&decoder, &pReq->ast1Len) < 0) return -1; if (tDecodeI32(&decoder, &pReq->ast2Len) < 0) return -1; - pReq->pColumns = taosArrayInit(pReq->numOfColumns, sizeof(SFieldWithOptions)); - pReq->pTags = taosArrayInit(pReq->numOfTags, sizeof(SField)); - pReq->pFuncs = taosArrayInit(pReq->numOfFuncs, TSDB_FUNC_NAME_LEN); - if (pReq->pColumns == NULL || pReq->pTags == NULL || pReq->pFuncs == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } + if ((pReq->pColumns = taosArrayInit(pReq->numOfColumns, sizeof(SFieldWithOptions))) == NULL) return -1; + if ((pReq->pTags = taosArrayInit(pReq->numOfTags, sizeof(SField))) == NULL) return -1; + if ((pReq->pFuncs = taosArrayInit(pReq->numOfFuncs, TSDB_FUNC_NAME_LEN)) == NULL) return -1; for (int32_t i = 0; i < pReq->numOfColumns; ++i) { SFieldWithOptions field = {0}; @@ -689,7 +689,6 @@ int32_t tDeserializeSMCreateStbReq(void *buf, int32_t bufLen, SMCreateStbReq *pR if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (tDecodeU32(&decoder, &field.compress) < 0) return -1; if (taosArrayPush(pReq->pColumns, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -701,7 +700,6 @@ int32_t tDeserializeSMCreateStbReq(void *buf, int32_t bufLen, SMCreateStbReq *pR if (tDecodeI32(&decoder, &field.bytes) < 0) return -1; if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (taosArrayPush(pReq->pTags, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -710,7 +708,6 @@ int32_t tDeserializeSMCreateStbReq(void *buf, int32_t bufLen, SMCreateStbReq *pR char pFunc[TSDB_FUNC_NAME_LEN] = {0}; if (tDecodeCStrTo(&decoder, pFunc) < 0) return -1; if (taosArrayPush(pReq->pFuncs, pFunc) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -844,21 +841,19 @@ int32_t tDeserializeSMAlterStbReq(void *buf, int32_t bufLen, SMAlterStbReq *pReq if (tDecodeI32(&decoder, &pReq->numOfFields) < 0) return -1; pReq->pFields = taosArrayInit(pReq->numOfFields, sizeof(SField)); if (pReq->pFields == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } for (int32_t i = 0; i < pReq->numOfFields; ++i) { if (pReq->alterType == TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION) { taosArrayDestroy(pReq->pFields); - pReq->pFields = taosArrayInit(pReq->numOfFields, sizeof(SFieldWithOptions)); + if ((pReq->pFields = taosArrayInit(pReq->numOfFields, sizeof(SFieldWithOptions))) == NULL) return -1; SFieldWithOptions field = {0}; if (tDecodeI8(&decoder, &field.type) < 0) return -1; if (tDecodeI32(&decoder, &field.bytes) < 0) return -1; if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (tDecodeU32(&decoder, &field.compress) < 0) return -1; if (taosArrayPush(pReq->pFields, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } else { @@ -867,7 +862,6 @@ int32_t tDeserializeSMAlterStbReq(void *buf, int32_t bufLen, SMAlterStbReq *pReq if (tDecodeI32(&decoder, &field.bytes) < 0) return -1; if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (taosArrayPush(pReq->pFields, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -1020,7 +1014,6 @@ int32_t tDeserializeSMCreateSmaReq(void *buf, int32_t bufLen, SMCreateSmaReq *pR if (numOfVgVer > 0) { pReq->pVgroupVerList = taosArrayInit(numOfVgVer, sizeof(SVgroupVer)); if (pReq->pVgroupVerList == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -1029,7 +1022,6 @@ int32_t tDeserializeSMCreateSmaReq(void *buf, int32_t bufLen, SMCreateSmaReq *pR if (tDecodeI32(&decoder, &v.vgId) < 0) return -1; if (tDecodeI64(&decoder, &v.ver) < 0) return -1; if (taosArrayPush(pReq->pVgroupVerList, &v) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -1224,7 +1216,7 @@ int32_t tDeserializeSNotifyReq(void *buf, int32_t bufLen, SNotifyReq *pReq) { if (nVgroup > 0) { pReq->pVloads = taosArrayInit_s(sizeof(SVnodeLoadLite), nVgroup); if (!pReq->pVloads) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _exit; } for (int32_t i = 0; i < nVgroup; ++i) { @@ -1381,7 +1373,6 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) { if (tDecodeI32(&decoder, &vlen) < 0) return -1; pReq->pVloads = taosArrayInit(vlen, sizeof(SVnodeLoad)); if (pReq->pVloads == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -1404,7 +1395,6 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) { if (tDecodeI64(&decoder, &vload.roleTimeMs) < 0) return -1; if (tDecodeI64(&decoder, &vload.startTimeMs) < 0) return -1; if (taosArrayPush(pReq->pVloads, &vload) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -1519,7 +1509,6 @@ int32_t tDeserializeSStatusRsp(void *buf, int32_t bufLen, SStatusRsp *pRsp) { if (tDecodeI32(&decoder, &dlen) < 0) return -1; pRsp->pDnodeEps = taosArrayInit(dlen, sizeof(SDnodeEp)); if (pRsp->pDnodeEps == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -1530,7 +1519,6 @@ int32_t tDeserializeSStatusRsp(void *buf, int32_t bufLen, SStatusRsp *pRsp) { if (tDecodeCStrTo(&decoder, dnodeEp.ep.fqdn) < 0) return -1; if (tDecodeU16(&decoder, &dnodeEp.ep.port) < 0) return -1; if (taosArrayPush(pRsp->pDnodeEps, &dnodeEp) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -1659,7 +1647,9 @@ SIpWhiteList *cloneIpWhiteList(SIpWhiteList *pIpWhiteList) { int32_t sz = sizeof(SIpWhiteList) + pIpWhiteList->num * sizeof(SIpV4Range); SIpWhiteList *pNew = taosMemoryCalloc(1, sz); - memcpy(pNew, pIpWhiteList, sz); + if (pNew) { + memcpy(pNew, pIpWhiteList, sz); + } return pNew; } @@ -1754,14 +1744,14 @@ int32_t tDeserializeSUpdateIpWhite(void *buf, int32_t bufLen, SUpdateIpWhite *pR if (tDecodeI64(&decoder, &pReq->ver) < 0) return -1; if (tDecodeI32(&decoder, &pReq->numOfUser) < 0) return -1; - pReq->pUserIpWhite = taosMemoryCalloc(1, sizeof(SUpdateUserIpWhite) * pReq->numOfUser); + if ((pReq->pUserIpWhite = taosMemoryCalloc(1, sizeof(SUpdateUserIpWhite) * pReq->numOfUser)) == NULL) return -1; for (int i = 0; i < pReq->numOfUser; i++) { SUpdateUserIpWhite *pUserWhite = &pReq->pUserIpWhite[i]; if (tDecodeI64(&decoder, &pUserWhite->ver) < 0) return -1; if (tDecodeCStrTo(&decoder, pUserWhite->user) < 0) return -1; if (tDecodeI32(&decoder, &pUserWhite->numOfRange) < 0) return -1; - pUserWhite->pIpRanges = taosMemoryCalloc(1, pUserWhite->numOfRange * sizeof(SIpV4Range)); + if ((pUserWhite->pIpRanges = taosMemoryCalloc(1, pUserWhite->numOfRange * sizeof(SIpV4Range))) == NULL) return -1; for (int j = 0; j < pUserWhite->numOfRange; j++) { SIpV4Range *pRange = &pUserWhite->pIpRanges[j]; if (tDecodeU32(&decoder, &pRange->ip) < 0) return -1; @@ -1784,10 +1774,14 @@ void tFreeSUpdateIpWhiteReq(SUpdateIpWhite *pReq) { } SUpdateIpWhite *cloneSUpdateIpWhiteReq(SUpdateIpWhite *pReq) { SUpdateIpWhite *pClone = taosMemoryCalloc(1, sizeof(SUpdateIpWhite)); + if (pClone == NULL) return NULL; pClone->numOfUser = pReq->numOfUser; pClone->ver = pReq->ver; - pClone->pUserIpWhite = taosMemoryCalloc(1, sizeof(SUpdateUserIpWhite) * pReq->numOfUser); + if ((pClone->pUserIpWhite = taosMemoryCalloc(1, sizeof(SUpdateUserIpWhite) * pReq->numOfUser)) == NULL) { + taosMemoryFree(pClone); + return NULL; + } for (int i = 0; i < pReq->numOfUser; i++) { SUpdateUserIpWhite *pNew = &pClone->pUserIpWhite[i]; @@ -1798,7 +1792,14 @@ SUpdateIpWhite *cloneSUpdateIpWhiteReq(SUpdateIpWhite *pReq) { pNew->numOfRange = pOld->numOfRange; int32_t sz = pOld->numOfRange * sizeof(SIpV4Range); - pNew->pIpRanges = taosMemoryCalloc(1, sz); + if ((pNew->pIpRanges = taosMemoryCalloc(1, sz)) == NULL) { + for (int j = 0; j < i; j++) { + taosMemoryFree(pClone->pUserIpWhite[j].pIpRanges); + } + taosMemoryFree(pClone->pUserIpWhite); + taosMemoryFree(pClone); + return NULL; + } memcpy(pNew->pIpRanges, pOld->pIpRanges, sz); } return pClone; @@ -2185,13 +2186,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->readTbs, key, keyLen, value, valuelen + 1); @@ -2204,13 +2205,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->writeTbs, key, keyLen, value, valuelen + 1); @@ -2223,13 +2224,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->alterTbs, key, keyLen, value, valuelen + 1); @@ -2242,13 +2243,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->readViews, key, keyLen, value, valuelen + 1); @@ -2261,13 +2262,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->writeViews, key, keyLen, value, valuelen + 1); @@ -2280,13 +2281,13 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t valuelen = 0; if (tDecodeI32(pDecoder, &valuelen) < 0) goto _err; - value = taosMemoryCalloc(valuelen + 1, sizeof(char)); + if ((value = taosMemoryCalloc(valuelen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, value) < 0) goto _err; taosHashPut(pRsp->alterViews, key, keyLen, value, valuelen + 1); @@ -2299,7 +2300,7 @@ int32_t tDeserializeSGetUserAuthRspImpl(SDecoder *pDecoder, SGetUserAuthRsp *pRs int32_t keyLen = 0; if (tDecodeI32(pDecoder, &keyLen) < 0) goto _err; - key = taosMemoryCalloc(keyLen + 1, sizeof(char)); + if ((key = taosMemoryCalloc(keyLen + 1, sizeof(char))) == NULL) goto _err; if (tDecodeCStrTo(pDecoder, key) < 0) goto _err; int32_t ref = 0; @@ -2711,7 +2712,6 @@ int32_t tDeserializeSCreateFuncReq(void *buf, int32_t bufLen, SCreateFuncReq *pR if (pReq->codeLen > 0) { pReq->pCode = taosMemoryCalloc(1, pReq->codeLen); if (pReq->pCode == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } if (tDecodeCStrTo(&decoder, pReq->pCode) < 0) return -1; @@ -2722,7 +2722,6 @@ int32_t tDeserializeSCreateFuncReq(void *buf, int32_t bufLen, SCreateFuncReq *pR if (commentSize > 0) { pReq->pComment = taosMemoryCalloc(1, commentSize); if (pReq->pComment == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } if (tDecodeCStrTo(&decoder, pReq->pComment) < 0) return -1; @@ -2807,7 +2806,7 @@ int32_t tDeserializeSRetrieveFuncReq(void *buf, int32_t bufLen, SRetrieveFuncReq for (int32_t i = 0; i < pReq->numOfFuncs; ++i) { char fname[TSDB_FUNC_NAME_LEN] = {0}; if (tDecodeCStrTo(&decoder, fname) < 0) return -1; - taosArrayPush(pReq->pFuncNames, fname); + if (taosArrayPush(pReq->pFuncNames, fname) == NULL) return -1; } tEndDecode(&decoder); @@ -2883,7 +2882,6 @@ int32_t tDeserializeSRetrieveFuncRsp(void *buf, int32_t bufLen, SRetrieveFuncRsp if (fInfo.codeSize) { fInfo.pCode = taosMemoryCalloc(1, fInfo.codeSize); if (fInfo.pCode == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } if (tDecodeCStrTo(&decoder, fInfo.pCode) < 0) return -1; @@ -2891,13 +2889,12 @@ int32_t tDeserializeSRetrieveFuncRsp(void *buf, int32_t bufLen, SRetrieveFuncRsp if (fInfo.commentSize) { fInfo.pComment = taosMemoryCalloc(1, fInfo.commentSize); if (fInfo.pComment == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } if (tDecodeCStrTo(&decoder, fInfo.pComment) < 0) return -1; } - taosArrayPush(pRsp->pFuncInfos, &fInfo); + if (taosArrayPush(pRsp->pFuncInfos, &fInfo) == NULL) return -1; } pRsp->pFuncExtraInfos = taosArrayInit(pRsp->numOfFuncs, sizeof(SFuncExtraInfo)); @@ -2905,14 +2902,14 @@ int32_t tDeserializeSRetrieveFuncRsp(void *buf, int32_t bufLen, SRetrieveFuncRsp if (tDecodeIsEnd(&decoder)) { for (int32_t i = 0; i < pRsp->numOfFuncs; ++i) { SFuncExtraInfo extraInfo = {0}; - taosArrayPush(pRsp->pFuncExtraInfos, &extraInfo); + if (taosArrayPush(pRsp->pFuncExtraInfos, &extraInfo) == NULL) return -1; } } else { for (int32_t i = 0; i < pRsp->numOfFuncs; ++i) { SFuncExtraInfo extraInfo = {0}; if (tDecodeI32(&decoder, &extraInfo.funcVersion) < 0) return -1; if (tDecodeI64(&decoder, &extraInfo.funcCreatedTime) < 0) return -1; - taosArrayPush(pRsp->pFuncExtraInfos, &extraInfo); + if (taosArrayPush(pRsp->pFuncExtraInfos, &extraInfo) == NULL) return -1; } } tEndDecode(&decoder); @@ -3064,7 +3061,6 @@ int32_t tDeserializeSTableCfgRsp(void *buf, int32_t bufLen, STableCfgRsp *pRsp) char pFunc[TSDB_FUNC_NAME_LEN]; if (tDecodeCStrTo(&decoder, pFunc) < 0) return -1; if (taosArrayPush(pRsp->pFuncs, pFunc) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -3217,7 +3213,6 @@ int32_t tDeserializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq) if (tDecodeI32(&decoder, &pReq->numOfRetensions) < 0) return -1; pReq->pRetensions = taosArrayInit(pReq->numOfRetensions, sizeof(SRetention)); if (pReq->pRetensions == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -3228,7 +3223,6 @@ int32_t tDeserializeSCreateDbReq(void *buf, int32_t bufLen, SCreateDbReq *pReq) if (tDecodeI8(&decoder, &rentension.freqUnit) < 0) return -1; if (tDecodeI8(&decoder, &rentension.keepUnit) < 0) return -1; if (taosArrayPush(pReq->pRetensions, &rentension) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -3579,7 +3573,7 @@ int32_t tDeserializeSQnodeListRsp(void *buf, int32_t bufLen, SQnodeListRsp *pRsp for (int32_t i = 0; i < num; ++i) { SQueryNodeLoad load = {0}; if (tDecodeSQueryNodeLoad(&decoder, &load) < 0) return -1; - taosArrayPush(pRsp->qnodeList, &load); + if (taosArrayPush(pRsp->qnodeList, &load) == NULL) return -1; } tEndDecode(&decoder); @@ -3622,7 +3616,7 @@ int32_t tDeserializeSDnodeListRsp(void *buf, int32_t bufLen, SDnodeListRsp *pRsp for (int32_t i = 0; i < num; ++i) { SEpSet epSet = {0}; if (tDecodeSEpSet(&decoder, &epSet) < 0) return -1; - taosArrayPush(pRsp->dnodeList, &epSet); + if (taosArrayPush(pRsp->dnodeList, &epSet) == NULL) return -1; } tEndDecode(&decoder); @@ -3818,7 +3812,6 @@ int32_t tDeserializeSUseDbRspImp(SDecoder *pDecoder, SUseDbRsp *pRsp) { if (pRsp->vgNum > 0) { pRsp->pVgroupInfos = taosArrayInit(pRsp->vgNum, sizeof(SVgroupInfo)); if (pRsp->pVgroupInfos == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -3829,7 +3822,7 @@ int32_t tDeserializeSUseDbRspImp(SDecoder *pDecoder, SUseDbRsp *pRsp) { if (tDecodeU32(pDecoder, &vgInfo.hashEnd) < 0) return -1; if (tDecodeSEpSet(pDecoder, &vgInfo.epSet) < 0) return -1; if (tDecodeI32(pDecoder, &vgInfo.numOfTable) < 0) return -1; - taosArrayPush(pRsp->pVgroupInfos, &vgInfo); + if (taosArrayPush(pRsp->pVgroupInfos, &vgInfo) == NULL) return -1; } } @@ -3890,7 +3883,6 @@ int32_t tDeserializeSDbHbBatchRsp(void *buf, int32_t bufLen, SDbHbBatchRsp *pRsp pRsp->pArray = taosArrayInit(numOfBatch, sizeof(SDbHbRsp)); if (pRsp->pArray == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -3900,7 +3892,10 @@ int32_t tDeserializeSDbHbBatchRsp(void *buf, int32_t bufLen, SDbHbBatchRsp *pRsp tDecoderClear(&decoder); return -1; } - taosArrayPush(pRsp->pArray, &rsp); + if (taosArrayPush(pRsp->pArray, &rsp) == NULL) { + tDecoderClear(&decoder); + return -1; + } } tEndDecode(&decoder); @@ -3970,14 +3965,13 @@ int32_t tDeserializeSUserAuthBatchRsp(void *buf, int32_t bufLen, SUserAuthBatchR pRsp->pArray = taosArrayInit(numOfBatch, sizeof(SGetUserAuthRsp)); if (pRsp->pArray == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } for (int32_t i = 0; i < numOfBatch; ++i) { SGetUserAuthRsp rsp = {0}; if (tDeserializeSGetUserAuthRspImpl(&decoder, &rsp) < 0) return -1; - taosArrayPush(pRsp->pArray, &rsp); + if (taosArrayPush(pRsp->pArray, &rsp) == NULL) return -1; } tEndDecode(&decoder); @@ -4159,7 +4153,6 @@ int32_t tDeserializeSVDropTtlTableReq(void *buf, int32_t bufLen, SVDropTtlTableR if (pReq->nUids > 0) { pReq->pTbUids = taosArrayInit(pReq->nUids, sizeof(tb_uid_t)); if (pReq->pTbUids == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -4168,7 +4161,6 @@ int32_t tDeserializeSVDropTtlTableReq(void *buf, int32_t bufLen, SVDropTtlTableR for (int32_t i = 0; i < pReq->nUids; ++i) { if (tDecodeI64(&decoder, &tbUid) < 0) return -1; if (taosArrayPush(pReq->pTbUids, &tbUid) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -4275,7 +4267,6 @@ int32_t tDeserializeSDbCfgRspImpl(SDecoder *decoder, SDbCfgRsp *pRsp) { if (pRsp->numOfRetensions > 0) { pRsp->pRetensions = taosArrayInit(pRsp->numOfRetensions, sizeof(SRetention)); if (pRsp->pRetensions == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -4287,7 +4278,6 @@ int32_t tDeserializeSDbCfgRspImpl(SDecoder *decoder, SDbCfgRsp *pRsp) { if (tDecodeI8(decoder, &rentension.freqUnit) < 0) return -1; if (tDecodeI8(decoder, &rentension.keepUnit) < 0) return -1; if (taosArrayPush(pRsp->pRetensions, &rentension) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -4829,14 +4819,17 @@ int32_t tDeserializeSSTbHbRsp(void *buf, int32_t bufLen, SSTbHbRsp *pRsp) { if (tDecodeI32(&decoder, &numOfMeta) < 0) return -1; pRsp->pMetaRsp = taosArrayInit(numOfMeta, sizeof(STableMetaRsp)); if (pRsp->pMetaRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } for (int32_t i = 0; i < numOfMeta; ++i) { STableMetaRsp tableMetaRsp = {0}; if (tDecodeSTableMetaRsp(&decoder, &tableMetaRsp) < 0) return -1; - taosArrayPush(pRsp->pMetaRsp, &tableMetaRsp); + if (taosArrayPush(pRsp->pMetaRsp, &tableMetaRsp) == NULL) { + taosMemoryFree(tableMetaRsp.pSchemas); + taosMemoryFree(tableMetaRsp.pSchemaExt); + return -1; + } } int32_t numOfIndex = 0; @@ -4844,7 +4837,6 @@ int32_t tDeserializeSSTbHbRsp(void *buf, int32_t bufLen, SSTbHbRsp *pRsp) { pRsp->pIndexRsp = taosArrayInit(numOfIndex, sizeof(STableIndexRsp)); if (pRsp->pIndexRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -4869,7 +4861,10 @@ int32_t tDeserializeSSTbHbRsp(void *buf, int32_t bufLen, SSTbHbRsp *pRsp) { } } } - taosArrayPush(pRsp->pIndexRsp, &tableIndexRsp); + if (taosArrayPush(pRsp->pIndexRsp, &tableIndexRsp) == NULL) { + taosArrayDestroyEx(tableIndexRsp.pIndex, tFreeSTableIndexInfo); + return -1; + } } tEndDecode(&decoder); @@ -5423,7 +5418,6 @@ int32_t tDeserializeSCreateVnodeReq(void *buf, int32_t bufLen, SCreateVnodeReq * if (tDecodeI32(&decoder, &pReq->numOfRetensions) < 0) return -1; pReq->pRetensions = taosArrayInit(pReq->numOfRetensions, sizeof(SRetention)); if (pReq->pRetensions == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -5434,7 +5428,6 @@ int32_t tDeserializeSCreateVnodeReq(void *buf, int32_t bufLen, SCreateVnodeReq * if (tDecodeI8(&decoder, &rentension.freqUnit) < 0) return -1; if (tDecodeI8(&decoder, &rentension.keepUnit) < 0) return -1; if (taosArrayPush(pReq->pRetensions, &rentension) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -6305,18 +6298,18 @@ int32_t tDeserializeSVArbHeartBeatReq(void *buf, int32_t bufLen, SVArbHeartBeatR if (tStartDecode(&decoder) < 0) return -1; if (tDecodeI32(&decoder, &pReq->dnodeId) < 0) return -1; - pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->arbToken) < 0) return -1; if (tDecodeI64(&decoder, &pReq->arbTerm) < 0) return -1; - pReq->hbMembers = taosArrayInit(16, sizeof(SVArbHbReqMember)); + if ((pReq->hbMembers = taosArrayInit(16, sizeof(SVArbHbReqMember))) == NULL) return -1; int32_t size = 0; if (tDecodeI32(&decoder, &size) < 0) return -1; for (int32_t i = 0; i < size; i++) { SVArbHbReqMember member = {0}; if (tDecodeI32(&decoder, &member.vgId) < 0) return -1; if (tDecodeI32(&decoder, &member.hbSeq) < 0) return -1; - taosArrayPush(pReq->hbMembers, &member); + if (taosArrayPush(pReq->hbMembers, &member) == NULL) return -1; } tEndDecode(&decoder); @@ -6362,13 +6355,13 @@ int32_t tDeserializeSVArbHeartBeatRsp(void *buf, int32_t bufLen, SVArbHeartBeatR if (tDecodeI32(&decoder, &pRsp->dnodeId) < 0) return -1; int32_t sz = 0; if (tDecodeI32(&decoder, &sz) < 0) return -1; - pRsp->hbMembers = taosArrayInit(sz, sizeof(SVArbHbRspMember)); + if ((pRsp->hbMembers = taosArrayInit(sz, sizeof(SVArbHbRspMember))) == NULL) return -1; for (int32_t i = 0; i < sz; i++) { SVArbHbRspMember hbMember = {0}; if (tDecodeI32(&decoder, &hbMember.vgId) < 0) return -1; if (tDecodeI32(&decoder, &hbMember.hbSeq) < 0) return -1; if (tDecodeCStrTo(&decoder, hbMember.memberToken) < 0) return -1; - taosArrayPush(pRsp->hbMembers, &hbMember); + if (taosArrayPush(pRsp->hbMembers, &hbMember) == NULL) return -1; } tEndDecode(&decoder); @@ -6405,12 +6398,12 @@ int32_t tDeserializeSVArbCheckSyncReq(void *buf, int32_t bufLen, SVArbCheckSyncR tDecoderInit(&decoder, buf, bufLen); if (tStartDecode(&decoder) < 0) return -1; - pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->arbToken) < 0) return -1; if (tDecodeI64(&decoder, &pReq->arbTerm) < 0) return -1; - pReq->member0Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->member0Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->member0Token) < 0) return -1; - pReq->member1Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->member1Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->member1Token) < 0) return -1; tEndDecode(&decoder); @@ -6451,11 +6444,11 @@ int32_t tDeserializeSVArbCheckSyncRsp(void *buf, int32_t bufLen, SVArbCheckSyncR tDecoderInit(&decoder, buf, bufLen); if (tStartDecode(&decoder) < 0) return -1; - pRsp->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pRsp->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pRsp->arbToken) < 0) return -1; - pRsp->member0Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pRsp->member0Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pRsp->member0Token) < 0) return -1; - pRsp->member1Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pRsp->member1Token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pRsp->member1Token) < 0) return -1; if (tDecodeI32(&decoder, &pRsp->vgId) < 0) return -1; if (tDecodeI32(&decoder, &pRsp->errCode) < 0) return -1; @@ -6496,10 +6489,10 @@ int32_t tDeserializeSVArbSetAssignedLeaderReq(void *buf, int32_t bufLen, SVArbSe tDecoderInit(&decoder, buf, bufLen); if (tStartDecode(&decoder) < 0) return -1; - pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->arbToken) < 0) return -1; if (tDecodeI64(&decoder, &pReq->arbTerm) < 0) return -1; - pReq->memberToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pReq->memberToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pReq->memberToken) < 0) return -1; tEndDecode(&decoder); @@ -6537,9 +6530,9 @@ int32_t tDeserializeSVArbSetAssignedLeaderRsp(void *buf, int32_t bufLen, SVArbSe tDecoderInit(&decoder, buf, bufLen); if (tStartDecode(&decoder) < 0) return -1; - pRsp->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pRsp->arbToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pRsp->arbToken) < 0) return -1; - pRsp->memberToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((pRsp->memberToken = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, pRsp->memberToken) < 0) return -1; if (tDecodeI32(&decoder, &pRsp->vgId) < 0) return -1; @@ -6609,17 +6602,17 @@ int32_t tDeserializeSMArbUpdateGroupBatchReq(void *buf, int32_t bufLen, SMArbUpd if (tDecodeI64(&decoder, &group.dbUid) < 0) return -1; for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { if (tDecodeI32(&decoder, &group.members[i].dnodeId) < 0) return -1; - group.members[i].token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((group.members[i].token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, group.members[i].token) < 0) return -1; } if (tDecodeI8(&decoder, &group.isSync) < 0) return -1; if (tDecodeI32(&decoder, &group.assignedLeader.dnodeId) < 0) return -1; - group.assignedLeader.token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE); + if ((group.assignedLeader.token = taosMemoryMalloc(TSDB_ARB_TOKEN_SIZE)) == NULL) return -1; if (tDecodeCStrTo(&decoder, group.assignedLeader.token) < 0) return -1; if (tDecodeI64(&decoder, &group.version) < 0) return -1; group.assignedLeader.acked = false; - taosArrayPush(updateArray, &group); + if (taosArrayPush(updateArray, &group) == NULL) return -1; } if (!tDecodeIsEnd(&decoder)) { @@ -7230,7 +7223,7 @@ int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam *pOpParam) for (int32_t m = 0; m < uidNum; ++m) { if (tDecodeI64(pDecoder, &uid) < 0) return -1; - taosArrayPush(pScan->pUidList, &uid); + if (taosArrayPush(pScan->pUidList, &uid) == NULL) return -1; } } else { pScan->pUidList = NULL; @@ -7252,7 +7245,7 @@ int32_t tDeserializeSOperatorParam(SDecoder *pDecoder, SOperatorParam *pOpParam) SOperatorParam *pChild = taosMemoryCalloc(1, sizeof(SOperatorParam)); if (NULL == pChild) return -1; if (tDeserializeSOperatorParam(pDecoder, pChild) < 0) return -1; - taosArrayPush(pOpParam->pChildren, &pChild); + if (taosArrayPush(pOpParam->pChildren, &pChild) == NULL) return -1; } } else { pOpParam->pChildren = NULL; @@ -7633,7 +7626,7 @@ int32_t tDeserializeSSchedulerHbReq(void *buf, int32_t bufLen, SSchedulerHbReq * if (tDecodeU64(&decoder, &action.queryId) < 0) return -1; if (tDecodeU64(&decoder, &action.taskId) < 0) return -1; if (tDecodeI8(&decoder, &action.action) < 0) return -1; - taosArrayPush(pReq->taskAction, &action); + if (taosArrayPush(pReq->taskAction, &action) == NULL) return -1; } } else { pReq->taskAction = NULL; @@ -7695,7 +7688,7 @@ int32_t tDeserializeSSchedulerHbRsp(void *buf, int32_t bufLen, SSchedulerHbRsp * if (tDecodeI64(&decoder, &status.refId) < 0) return -1; if (tDecodeI32(&decoder, &status.execId) < 0) return -1; if (tDecodeI8(&decoder, &status.status) < 0) return -1; - taosArrayPush(pRsp->taskStatus, &status); + if (taosArrayPush(pRsp->taskStatus, &status) == NULL) return -1; } } else { pRsp->taskStatus = NULL; @@ -8090,7 +8083,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (pReq->numOfTags > 0) { pReq->pTags = taosArrayInit(pReq->numOfTags, sizeof(SField)); if (pReq->pTags == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -8101,7 +8093,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (tDecodeI32(&decoder, &field.bytes) < 0) return -1; if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (taosArrayPush(pReq->pTags, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -8112,7 +8103,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (numOfFillNullCols > 0) { pReq->fillNullCols = taosArrayInit(numOfFillNullCols, sizeof(SColLocation)); if (pReq->fillNullCols == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -8122,7 +8112,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (tDecodeI16(&decoder, &col.colId) < 0) return -1; if (tDecodeI8(&decoder, &col.type) < 0) return -1; if (taosArrayPush(pReq->fillNullCols, &col) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -8136,7 +8125,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (numOfVgVer > 0) { pReq->pVgroupVerList = taosArrayInit(numOfVgVer, sizeof(SVgroupVer)); if (pReq->pVgroupVerList == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -8145,7 +8133,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (tDecodeI32(&decoder, &v.vgId) < 0) return -1; if (tDecodeI64(&decoder, &v.ver) < 0) return -1; if (taosArrayPush(pReq->pVgroupVerList, &v) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -8155,7 +8142,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (colSize > 0) { pReq->pCols = taosArrayInit(colSize, sizeof(SField)); if (pReq->pCols == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -8166,7 +8152,6 @@ int32_t tDeserializeSCMCreateStreamReq(void *buf, int32_t bufLen, SCMCreateStrea if (tDecodeI32(&decoder, &field.bytes) < 0) return -1; if (tDecodeCStrTo(&decoder, field.name) < 0) return -1; if (taosArrayPush(pReq->pCols, &field) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } } @@ -8445,7 +8430,7 @@ int tDecodeSVCreateTbReq(SDecoder *pCoder, SVCreateTbReq *pReq) { char *tmp = NULL; if (tDecodeCStr(pCoder, &tmp) < 0) return -1; strncpy(name, tmp, TSDB_COL_NAME_LEN - 1); - taosArrayPush(pReq->ctb.tagName, name); + if (taosArrayPush(pReq->ctb.tagName, name) == NULL) return -1; } } else if (pReq->type == TSDB_NORMAL_TABLE) { if (tDecodeSSchemaWrapperEx(pCoder, &pReq->ntb.schemaRow) < 0) return -1; @@ -9207,17 +9192,15 @@ int32_t tFormatOffset(char *buf, int32_t maxLen, const STqOffsetVal *pVal) { } else if (pVal->type == TMQ_OFFSET__SNAPSHOT_DATA || pVal->type == TMQ_OFFSET__SNAPSHOT_META) { if (IS_VAR_DATA_TYPE(pVal->primaryKey.type)) { char *tmp = taosMemoryCalloc(1, pVal->primaryKey.nData + 1); - if (tmp == NULL) return TSDB_CODE_OUT_OF_MEMORY; + if (tmp == NULL) return terrno; (void)memcpy(tmp, pVal->primaryKey.pData, pVal->primaryKey.nData); (void)snprintf(buf, maxLen, "tsdb:%" PRId64 "|%" PRId64 ",pk type:%d,val:%s", pVal->uid, pVal->ts, - pVal->primaryKey.type, tmp); + pVal->primaryKey.type, tmp); taosMemoryFree(tmp); } else { (void)snprintf(buf, maxLen, "tsdb:%" PRId64 "|%" PRId64 ",pk type:%d,val:%" PRId64, pVal->uid, pVal->ts, - pVal->primaryKey.type, pVal->primaryKey.val); + pVal->primaryKey.type, pVal->primaryKey.val); } - } else { - return TSDB_CODE_INVALID_PARA; } return 0; @@ -9243,13 +9226,16 @@ bool tOffsetEqual(const STqOffsetVal *pLeft, const STqOffsetVal *pRight) { return false; } -void tOffsetCopy(STqOffsetVal *pLeft, const STqOffsetVal *pRight) { +int32_t tOffsetCopy(STqOffsetVal *pLeft, const STqOffsetVal *pRight) { tOffsetDestroy(pLeft); *pLeft = *pRight; if (IS_VAR_DATA_TYPE(pRight->primaryKey.type)) { - pLeft->primaryKey.pData = taosMemoryMalloc(pRight->primaryKey.nData); + if ((pLeft->primaryKey.pData = taosMemoryMalloc(pRight->primaryKey.nData)) == NULL) { + return terrno; + } (void)memcpy(pLeft->primaryKey.pData, pRight->primaryKey.pData, pRight->primaryKey.nData); } + return 0; } void tOffsetDestroy(void *param) { @@ -9310,7 +9296,7 @@ int32_t tDecodeSTqCheckInfo(SDecoder *pDecoder, STqCheckInfo *pInfo) { for (int32_t i = 0; i < sz; i++) { int16_t colId = 0; if (tDecodeI16(pDecoder, &colId) < 0) return -1; - taosArrayPush(pInfo->colIdList, &colId); + if (taosArrayPush(pInfo->colIdList, &colId) == NULL) return -1; } return 0; } @@ -9388,7 +9374,9 @@ int32_t tDecodeDeleteRes(SDecoder *pCoder, SDeleteRes *pRes) { if (tDecodeI32v(pCoder, &nUid) < 0) return -1; for (int32_t iUid = 0; iUid < nUid; iUid++) { if (tDecodeU64(pCoder, &uid) < 0) return -1; - if (pRes->uidList) taosArrayPush(pRes->uidList, &uid); + if (pRes->uidList) { + if (taosArrayPush(pRes->uidList, &uid) == NULL) return -1; + } } if (tDecodeI64(pCoder, &pRes->skey) < 0) return -1; if (tDecodeI64(pCoder, &pRes->ekey) < 0) return -1; @@ -9459,24 +9447,24 @@ int32_t tDecodeMqDataRspCommon(SDecoder *pDecoder, SMqDataRspCommon *pRsp) { if (tDecodeSTqOffsetVal(pDecoder, &pRsp->rspOffset) < 0) return -1; if (tDecodeI32(pDecoder, &pRsp->blockNum) < 0) return -1; if (pRsp->blockNum != 0) { - pRsp->blockData = taosArrayInit(pRsp->blockNum, sizeof(void *)); - pRsp->blockDataLen = taosArrayInit(pRsp->blockNum, sizeof(int32_t)); + if ((pRsp->blockData = taosArrayInit(pRsp->blockNum, sizeof(void *))) == NULL) return -1; + if ((pRsp->blockDataLen = taosArrayInit(pRsp->blockNum, sizeof(int32_t))) == NULL) return -1; if (tDecodeI8(pDecoder, &pRsp->withTbName) < 0) return -1; if (tDecodeI8(pDecoder, &pRsp->withSchema) < 0) return -1; if (pRsp->withTbName) { - pRsp->blockTbName = taosArrayInit(pRsp->blockNum, sizeof(void *)); + if ((pRsp->blockTbName = taosArrayInit(pRsp->blockNum, sizeof(void *))) == NULL) return -1; } if (pRsp->withSchema) { - pRsp->blockSchema = taosArrayInit(pRsp->blockNum, sizeof(void *)); + if ((pRsp->blockSchema = taosArrayInit(pRsp->blockNum, sizeof(void *))) == NULL) return -1; } for (int32_t i = 0; i < pRsp->blockNum; i++) { void *data; uint64_t bLen; if (tDecodeBinaryAlloc(pDecoder, &data, &bLen) < 0) return -1; - taosArrayPush(pRsp->blockData, &data); + if (taosArrayPush(pRsp->blockData, &data) == NULL) return -1; int32_t len = bLen; - taosArrayPush(pRsp->blockDataLen, &len); + if (taosArrayPush(pRsp->blockDataLen, &len) == NULL) return -1; if (pRsp->withSchema) { SSchemaWrapper *pSW = (SSchemaWrapper *)taosMemoryCalloc(1, sizeof(SSchemaWrapper)); @@ -9486,13 +9474,16 @@ int32_t tDecodeMqDataRspCommon(SDecoder *pDecoder, SMqDataRspCommon *pRsp) { return -1; } - taosArrayPush(pRsp->blockSchema, &pSW); + if (taosArrayPush(pRsp->blockSchema, &pSW) == NULL) { + taosMemoryFree(pSW); + return -1; + } } if (pRsp->withTbName) { char *tbName; if (tDecodeCStrAlloc(pDecoder, &tbName) < 0) return -1; - taosArrayPush(pRsp->blockTbName, &tbName); + if (taosArrayPush(pRsp->blockTbName, &tbName) == NULL) return -1; } } } @@ -9546,15 +9537,15 @@ int32_t tDecodeSTaosxRsp(SDecoder *pDecoder, void *rsp) { STaosxRsp *pRsp = (STaosxRsp *)rsp; if (tDecodeI32(pDecoder, &pRsp->createTableNum) < 0) return -1; if (pRsp->createTableNum) { - pRsp->createTableLen = taosArrayInit(pRsp->createTableNum, sizeof(int32_t)); - pRsp->createTableReq = taosArrayInit(pRsp->createTableNum, sizeof(void *)); + if ((pRsp->createTableLen = taosArrayInit(pRsp->createTableNum, sizeof(int32_t))) == NULL) return -1; + if ((pRsp->createTableReq = taosArrayInit(pRsp->createTableNum, sizeof(void *))) == NULL) return -1; for (int32_t i = 0; i < pRsp->createTableNum; i++) { void *pCreate = NULL; uint64_t len = 0; if (tDecodeBinaryAlloc(pDecoder, &pCreate, &len) < 0) return -1; int32_t l = (int32_t)len; - taosArrayPush(pRsp->createTableLen, &l); - taosArrayPush(pRsp->createTableReq, &pCreate); + if (taosArrayPush(pRsp->createTableLen, &l) == NULL) return -1; + if (taosArrayPush(pRsp->createTableReq, &pCreate) == NULL) return -1; } } @@ -9607,7 +9598,7 @@ static int32_t tDecodeSBatchDeleteReqCommon(SDecoder *pDecoder, SBatchDeleteReq for (int32_t i = 0; i < sz; i++) { SSingleDeleteReq deleteReq; if (tDecodeSSingleDeleteReq(pDecoder, &deleteReq) < 0) return -1; - taosArrayPush(pReq->deleteReqs, &deleteReq); + if (taosArrayPush(pReq->deleteReqs, &deleteReq) == NULL) return -1; } return 0; } @@ -9696,7 +9687,6 @@ static int32_t tDecodeSSubmitTbData(SDecoder *pCoder, SSubmitTbData *pSubmitTbDa if (pSubmitTbData->flags & SUBMIT_REQ_AUTO_CREATE_TABLE) { pSubmitTbData->pCreateTbReq = taosMemoryCalloc(1, sizeof(SVCreateTbReq)); if (pSubmitTbData->pCreateTbReq == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; goto _exit; } @@ -9730,7 +9720,7 @@ static int32_t tDecodeSSubmitTbData(SDecoder *pCoder, SSubmitTbData *pSubmitTbDa pSubmitTbData->aCol = taosArrayInit(nColData, sizeof(SColData)); if (pSubmitTbData->aCol == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _exit; } @@ -9746,7 +9736,7 @@ static int32_t tDecodeSSubmitTbData(SDecoder *pCoder, SSubmitTbData *pSubmitTbDa pSubmitTbData->aRowP = taosArrayInit(nRow, sizeof(SRow *)); if (pSubmitTbData->aRowP == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _exit; } @@ -9806,7 +9796,7 @@ int32_t tDecodeSubmitReq(SDecoder *pCoder, SSubmitReq2 *pReq) { pReq->aSubmitTbData = taosArrayInit(nSubmitTbData, sizeof(SSubmitTbData)); if (pReq->aSubmitTbData == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _exit; } @@ -9931,7 +9921,7 @@ int32_t tDecodeSSubmitRsp2(SDecoder *pCoder, SSubmitRsp2 *pRsp) { if (nCreateTbRsp) { pRsp->aCreateTbRsp = taosArrayInit(nCreateTbRsp, sizeof(SVCreateTbRsp)); if (pRsp->aCreateTbRsp == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _exit; } @@ -10063,7 +10053,10 @@ void *tDecodeMqSubTopicEp(void *buf, SMqSubTopicEp *pTopicEp) { for (int32_t i = 0; i < sz; i++) { SMqSubVgEp vgEp; buf = tDecodeSMqSubVgEp(buf, &vgEp); - taosArrayPush(pTopicEp->vgs, &vgEp); + if (taosArrayPush(pTopicEp->vgs, &vgEp) == NULL) { + taosArrayDestroy(pTopicEp->vgs); + return NULL; + } } buf = taosDecodeSSchemaWrapper(buf, &pTopicEp->schema); return buf; @@ -10117,7 +10110,6 @@ int32_t tDeserializeSCMCreateViewReq(void *buf, int32_t bufLen, SCMCreateViewReq if (pReq->numOfCols > 0) { pReq->pSchema = taosMemoryCalloc(pReq->numOfCols, sizeof(SSchema)); if (pReq->pSchema == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -10259,7 +10251,6 @@ static int32_t tDecodeSViewMetaRsp(SDecoder *pDecoder, SViewMetaRsp *pRsp) { if (pRsp->numOfCols > 0) { pRsp->pSchema = taosMemoryCalloc(pRsp->numOfCols, sizeof(SSchema)); if (pRsp->pSchema == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -10325,7 +10316,6 @@ int32_t tDeserializeSViewHbRsp(void *buf, int32_t bufLen, SViewHbRsp *pRsp) { if (tDecodeI32(&decoder, &numOfMeta) < 0) return -1; pRsp->pViewRsp = taosArrayInit(numOfMeta, POINTER_BYTES); if (pRsp->pViewRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } @@ -10333,7 +10323,7 @@ int32_t tDeserializeSViewHbRsp(void *buf, int32_t bufLen, SViewHbRsp *pRsp) { SViewMetaRsp *metaRsp = taosMemoryCalloc(1, sizeof(SViewMetaRsp)); if (NULL == metaRsp) return -1; if (tDecodeSViewMetaRsp(&decoder, metaRsp) < 0) return -1; - taosArrayPush(pRsp->pViewRsp, &metaRsp); + if (taosArrayPush(pRsp->pViewRsp, &metaRsp) == NULL) return -1; } tEndDecode(&decoder); @@ -10471,7 +10461,7 @@ static int32_t tDecodeTableTSMAInfo(SDecoder *pDecoder, STableTSMAInfo *pTsmaInf for (int32_t i = 0; i < size; ++i) { SSchema schema = {0}; if (tDecodeSSchema(pDecoder, &schema) < 0) return -1; - taosArrayPush(pTsmaInfo->pTags, &schema); + if (taosArrayPush(pTsmaInfo->pTags, &schema) == NULL) return -1; } } @@ -10482,7 +10472,7 @@ static int32_t tDecodeTableTSMAInfo(SDecoder *pDecoder, STableTSMAInfo *pTsmaInf for (int32_t i = 0; i < size; ++i) { SSchema schema = {0}; if (tDecodeSSchema(pDecoder, &schema) < 0) return -1; - taosArrayPush(pTsmaInfo->pUsedCols, &schema); + if (taosArrayPush(pTsmaInfo->pUsedCols, &schema) == NULL) return -1; } } if (tDecodeCStrAlloc(pDecoder, &pTsmaInfo->ast) < 0) return -1; @@ -10513,7 +10503,7 @@ static int32_t tDecodeTableTSMAInfoRsp(SDecoder *pDecoder, STableTSMAInfoRsp *pR for (int32_t i = 0; i < size; ++i) { STableTSMAInfo *pTsma = taosMemoryCalloc(1, sizeof(STableTSMAInfo)); if (!pTsma) return -1; - taosArrayPush(pRsp->pTsmas, &pTsma); + if (taosArrayPush(pRsp->pTsmas, &pTsma) == NULL) return -1; if (tDecodeTableTSMAInfo(pDecoder, pTsma) < 0) return -1; } return 0; @@ -10719,13 +10709,12 @@ int32_t tDecodeSMDropTbReqOnSingleVg(SDecoder *pDecoder, SMDropTbReqsOnSingleVg if (tDecodeI32(pDecoder, &size) < 0) return -1; pReq->pTbs = taosArrayInit(size, sizeof(SVDropTbReq)); if (!pReq->pTbs) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } SVDropTbReq pTbReq = {0}; for (int32_t i = 0; i < size; ++i) { if (tDecodeSVDropTbReq(pDecoder, &pTbReq) < 0) return -1; - taosArrayPush(pReq->pTbs, &pTbReq); + if (taosArrayPush(pReq->pTbs, &pTbReq) == NULL) return -1; } return 0; } @@ -10759,13 +10748,12 @@ int32_t tDeserializeSMDropTbsReq(void *buf, int32_t bufLen, SMDropTbsReq *pReq) if (tDecodeI32(&decoder, &size) < 0) return -1; pReq->pVgReqs = taosArrayInit(size, sizeof(SMDropTbReqsOnSingleVg)); if (!pReq->pVgReqs) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } for (int32_t i = 0; i < size; ++i) { SMDropTbReqsOnSingleVg vgReq = {0}; - tDecodeSMDropTbReqOnSingleVg(&decoder, &vgReq); - taosArrayPush(pReq->pVgReqs, &vgReq); + if (tDecodeSMDropTbReqOnSingleVg(&decoder, &vgReq) < 0) return -1; + if (taosArrayPush(pReq->pVgReqs, &vgReq) == NULL) return -1; } tEndDecode(&decoder); tDecoderClear(&decoder); @@ -10793,11 +10781,11 @@ int32_t tDecodeVFetchTtlExpiredTbsRsp(SDecoder *pCoder, SVFetchTtlExpiredTbsRsp if (tDecodeI32(pCoder, &size) < 0) return -1; if (size > 0) { pRsp->pExpiredTbs = taosArrayInit(size, sizeof(SVDropTbReq)); - if (!pRsp->pExpiredTbs) return TSDB_CODE_OUT_OF_MEMORY; + if (!pRsp->pExpiredTbs) return terrno; SVDropTbReq tb = {0}; for (int32_t i = 0; i < size; ++i) { if (tDecodeSVDropTbReq(pCoder, &tb) < 0) return -1; - taosArrayPush(pRsp->pExpiredTbs, &tb); + if (taosArrayPush(pRsp->pExpiredTbs, &tb) == NULL) return -1; } } return 0; @@ -10836,8 +10824,8 @@ int32_t tDecodeMqBatchMetaRsp(SDecoder *pDecoder, SMqBatchMetaRsp *pRsp) { uint64_t len = 0; if (tDecodeBinaryAlloc(pDecoder, &pCreate, &len) < 0) return -1; int32_t l = (int32_t)len; - taosArrayPush(pRsp->batchMetaReq, &pCreate); - taosArrayPush(pRsp->batchMetaLen, &l); + if (taosArrayPush(pRsp->batchMetaReq, &pCreate) == NULL) return -1; + if (taosArrayPush(pRsp->batchMetaLen, &l) == NULL) return -1; } } return 0; @@ -10850,6 +10838,9 @@ int32_t tSemiDecodeMqBatchMetaRsp(SDecoder *pDecoder, SMqBatchMetaRsp *pRsp) { } pRsp->metaBuffLen = TD_CODER_REMAIN_CAPACITY(pDecoder); pRsp->pMetaBuff = taosMemoryCalloc(1, pRsp->metaBuffLen); + if (pRsp->pMetaBuff == NULL) { + return -1; + } memcpy(pRsp->pMetaBuff, TD_CODER_CURRENT(pDecoder), pRsp->metaBuffLen); return 0; } diff --git a/source/common/src/tname.c b/source/common/src/tname.c index d817fac292..d38105d6ce 100644 --- a/source/common/src/tname.c +++ b/source/common/src/tname.c @@ -181,7 +181,7 @@ int32_t tNameSetDbName(SName* dst, int32_t acct, const char* dbName, size_t name int32_t tNameAddTbName(SName* dst, const char* tbName, size_t nameLen) { // too long account id or too long db name if (nameLen >= tListLen(dst->tname) || nameLen <= 0) { - return -1; + return TSDB_CODE_INVALID_PARA; } dst->type = TSDB_TABLE_NAME_T; @@ -225,14 +225,14 @@ bool tNameTbNameEqual(SName* left, SName* right) { int32_t tNameFromString(SName* dst, const char* str, uint32_t type) { if (strlen(str) == 0) { - return -1; + return TSDB_CODE_INVALID_PARA; } char* p = NULL; if ((type & T_NAME_ACCT) == T_NAME_ACCT) { p = strstr(str, TS_PATH_DELIMITER); if (p == NULL) { - return -1; + return TSDB_CODE_INVALID_PARA; } dst->acctId = taosStr2Int32(str, NULL, 10); @@ -252,7 +252,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) { // too long account id or too long db name if ((len >= tListLen(dst->dbname)) || (len <= 0)) { - return -1; + return TSDB_CODE_INVALID_PARA; } memcpy(dst->dbname, start, len); @@ -266,7 +266,7 @@ int32_t tNameFromString(SName* dst, const char* str, uint32_t type) { // too long account id or too long db name int32_t len = (int32_t)strlen(start); if ((len >= tListLen(dst->tname)) || (len <= 0)) { - return -1; + return TSDB_CODE_INVALID_PARA; } memcpy(dst->tname, start, len); @@ -302,7 +302,7 @@ int32_t buildChildTableName(RandTableName* rName) { for (int j = 0; j < taosArrayGetSize(rName->tags); ++j) { taosStringBuilderAppendChar(&sb, ','); SSmlKv* tagKv = taosArrayGet(rName->tags, j); - if(tagKv == NULL) { + if (tagKv == NULL) { return TSDB_CODE_SML_INVALID_DATA; } taosStringBuilderAppendStringLen(&sb, tagKv->key, tagKv->keyLen); diff --git a/source/common/src/ttime.c b/source/common/src/ttime.c index d3207a1912..efabe5cf07 100644 --- a/source/common/src/ttime.c +++ b/source/common/src/ttime.c @@ -1252,13 +1252,13 @@ static bool isSeperatorChar(char c) { return (c > 0x20 && c < 0x7F && !(c >= 'A' && c <= 'Z') && !(c >= 'a' && c <= 'z') && !(c >= '0' && c <= '9')); } -static void parseTsFormat(const char* formatStr, SArray* formats) { +static int32_t parseTsFormat(const char* formatStr, SArray* formats) { TSFormatNode* lastOtherFormat = NULL; while (*formatStr) { const TSFormatKeyWord* key = keywordSearch(formatStr); if (key) { TSFormatNode format = {.key = key, .type = TS_FORMAT_NODE_TYPE_KEYWORD}; - taosArrayPush(formats, &format); + if (NULL == taosArrayPush(formats, &format)) TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); formatStr += key->len; lastOtherFormat = NULL; } else { @@ -1286,7 +1286,7 @@ static void parseTsFormat(const char* formatStr, SArray* formats) { TSFormatNode format = {.type = TS_FORMAT_NODE_TYPE_CHAR, .key = NULL}; format.c = formatStr; format.len = 1; - taosArrayPush(formats, &format); + if (NULL == taosArrayPush(formats, &format)) TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); formatStr++; last = taosArrayGetLast(formats); } @@ -1314,13 +1314,14 @@ static void parseTsFormat(const char* formatStr, SArray* formats) { .key = NULL}; format.c = formatStr; format.len = 1; - taosArrayPush(formats, &format); + if (NULL == taosArrayPush(formats, &format)) TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); formatStr++; if (format.type == TS_FORMAT_NODE_TYPE_CHAR) lastOtherFormat = taosArrayGetLast(formats); } } } } + TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t tm2char(const SArray* formats, const struct STm* tm, char* s, int32_t outLen) { @@ -1488,7 +1489,7 @@ static int32_t tm2char(const SArray* formats, const struct STm* tm, char* s, int s += 6; break; case TSFKW_NS: - sprintf(s, "%09" PRId64, tm->fsec); + (void)sprintf(s, "%09" PRId64, tm->fsec); s += 9; break; case TSFKW_TZH: @@ -1925,7 +1926,7 @@ int32_t taosTs2Char(const char* format, SArray** formats, int64_t ts, int32_t pr if (!*formats){ TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - parseTsFormat(format, *formats); + TAOS_CHECK_RETURN(parseTsFormat(format, *formats)); } struct STm tm; TAOS_CHECK_RETURN(taosTs2Tm(ts, precision, &tm)); @@ -1941,7 +1942,7 @@ int32_t taosChar2Ts(const char* format, SArray** formats, const char* tsStr, int if (!*formats) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - parseTsFormat(format, *formats); + TAOS_CHECK_RETURN(parseTsFormat(format, *formats)); } int32_t code = char2ts(tsStr, *formats, ts, precision, &sErrPos, &fErrIdx); if (code == -1) { @@ -1966,7 +1967,7 @@ int32_t TEST_ts2char(const char* format, int64_t ts, int32_t precision, char* ou if (!formats) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - parseTsFormat(format, formats); + TAOS_CHECK_RETURN(parseTsFormat(format, formats)); struct STm tm; TAOS_CHECK_GOTO(taosTs2Tm(ts, precision, &tm), NULL, _exit); TAOS_CHECK_GOTO(tm2char(formats, &tm, out, outLen), NULL, _exit); @@ -1980,11 +1981,11 @@ int32_t TEST_char2ts(const char* format, int64_t* ts, int32_t precision, const c const char* sErrPos; int32_t fErrIdx; SArray* formats = taosArrayInit(4, sizeof(TSFormatNode)); - parseTsFormat(format, formats); + TAOS_CHECK_RETURN(parseTsFormat(format, formats)); int32_t code = char2ts(tsStr, formats, ts, precision, &sErrPos, &fErrIdx); if (code == -1) { - printf("failed position: %s\n", sErrPos); - printf("failed format: %s\n", ((TSFormatNode*)taosArrayGet(formats, fErrIdx))->key->name); + (void)printf("failed position: %s\n", sErrPos); + (void)printf("failed format: %s\n", ((TSFormatNode*)taosArrayGet(formats, fErrIdx))->key->name); } taosArrayDestroy(formats); return code; diff --git a/source/common/src/ttypes.c b/source/common/src/ttypes.c index f37c5f1fc3..766e91f54e 100644 --- a/source/common/src/ttypes.c +++ b/source/common/src/ttypes.c @@ -175,7 +175,7 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) { break; default: { if (len > 0) { - memcpy(val, src, len); + (void)memcpy(val, src, len); } break; diff --git a/source/common/src/tvariant.c b/source/common/src/tvariant.c index d8e7b83c37..cd238fef25 100644 --- a/source/common/src/tvariant.c +++ b/source/common/src/tvariant.c @@ -426,7 +426,7 @@ void taosVariantCreateFromBinary(SVariant *pVar, const char *pz, size_t len, uin size_t lenInwchar = len / TSDB_NCHAR_SIZE; pVar->ucs4 = taosMemoryCalloc(1, (lenInwchar + 1) * TSDB_NCHAR_SIZE); - memcpy(pVar->ucs4, pz, lenInwchar * TSDB_NCHAR_SIZE); + (void)memcpy(pVar->ucs4, pz, lenInwchar * TSDB_NCHAR_SIZE); pVar->nLen = (int32_t)len; break; @@ -435,7 +435,7 @@ void taosVariantCreateFromBinary(SVariant *pVar, const char *pz, size_t len, uin case TSDB_DATA_TYPE_VARBINARY: case TSDB_DATA_TYPE_GEOMETRY: { // todo refactor, extract a method pVar->pz = taosMemoryCalloc(len + 1, sizeof(char)); - memcpy(pVar->pz, pz, len); + (void)memcpy(pVar->pz, pz, len); pVar->nLen = (int32_t)len; break; } @@ -470,10 +470,10 @@ void taosVariantAssign(SVariant *pDst, const SVariant *pSrc) { char *p = taosMemoryRealloc(pDst->pz, len); ASSERT(p); - memset(p, 0, len); + (void)memset(p, 0, len); pDst->pz = p; - memcpy(pDst->pz, pSrc->pz, pSrc->nLen); + (void)memcpy(pDst->pz, pSrc->pz, pSrc->nLen); pDst->nLen = pSrc->nLen; return; } diff --git a/source/common/test/commonTests.cpp b/source/common/test/commonTests.cpp index b539d6731f..1f396feb81 100644 --- a/source/common/test/commonTests.cpp +++ b/source/common/test/commonTests.cpp @@ -733,16 +733,17 @@ TEST(AlreadyAddGroupIdTest, GroupIdAddedWithDifferentLength) { #define SLOW_LOG_TYPE_OTHERS 0x4 #define SLOW_LOG_TYPE_ALL 0x7 -static int32_t taosSetSlowLogScope(char *pScope) { - if (NULL == pScope || 0 == strlen(pScope)) { - return SLOW_LOG_TYPE_QUERY; +static int32_t taosSetSlowLogScope(char* pScopeStr, int32_t* pScope) { + if (NULL == pScopeStr || 0 == strlen(pScopeStr)) { + *pScope = SLOW_LOG_TYPE_QUERY; + TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t slowScope = 0; char* scope = NULL; char *tmp = NULL; - while((scope = strsep(&pScope, "|")) != NULL){ + while((scope = strsep(&pScopeStr, "|")) != NULL){ taosMemoryFreeClear(tmp); tmp = taosStrdup(scope); strtrim(tmp); @@ -772,73 +773,94 @@ static int32_t taosSetSlowLogScope(char *pScope) { } taosMemoryFreeClear(tmp); - uError("Invalid slowLog scope value:%s", pScope); - terrno = TSDB_CODE_INVALID_CFG_VALUE; - return -1; + uError("Invalid slowLog scope value:%s", pScopeStr); + TAOS_RETURN(TSDB_CODE_INVALID_CFG_VALUE); } + *pScope = slowScope; taosMemoryFreeClear(tmp); - return slowScope; + TAOS_RETURN(TSDB_CODE_SUCCESS); } TEST(TaosSetSlowLogScopeTest, NullPointerInput) { - char *pScope = NULL; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_QUERY); + char* pScopeStr = NULL; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_QUERY); } TEST(TaosSetSlowLogScopeTest, EmptyStringInput) { - char pScope[1] = ""; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_QUERY); + char pScopeStr[1] = ""; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_QUERY); } TEST(TaosSetSlowLogScopeTest, AllScopeInput) { - char pScope[] = "all"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_ALL); + char pScopeStr[] = "all"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + + EXPECT_EQ(scope, SLOW_LOG_TYPE_ALL); } TEST(TaosSetSlowLogScopeTest, QueryScopeInput) { - char pScope[] = " query"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_QUERY); + char pScopeStr[] = " query"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_QUERY); } TEST(TaosSetSlowLogScopeTest, InsertScopeInput) { - char pScope[] = "insert"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_INSERT); + char pScopeStr[] = "insert"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_INSERT); } TEST(TaosSetSlowLogScopeTest, OthersScopeInput) { - char pScope[] = "others"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_OTHERS); + char pScopeStr[] = "others"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_OTHERS); } TEST(TaosSetSlowLogScopeTest, NoneScopeInput) { - char pScope[] = "none"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, SLOW_LOG_TYPE_NULL); + char pScopeStr[] = "none"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, SLOW_LOG_TYPE_NULL); } TEST(TaosSetSlowLogScopeTest, InvalidScopeInput) { - char pScope[] = "invalid"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, -1); + char pScopeStr[] = "invalid"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, -1); } TEST(TaosSetSlowLogScopeTest, MixedScopesInput) { - char pScope[] = "query|insert|others|none"; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, (SLOW_LOG_TYPE_QUERY | SLOW_LOG_TYPE_INSERT | SLOW_LOG_TYPE_OTHERS)); + char pScopeStr[] = "query|insert|others|none"; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, (SLOW_LOG_TYPE_QUERY | SLOW_LOG_TYPE_INSERT | SLOW_LOG_TYPE_OTHERS)); } TEST(TaosSetSlowLogScopeTest, MixedScopesInputWithSpaces) { - char pScope[] = "query | insert | others "; - int32_t result = taosSetSlowLogScope(pScope); - EXPECT_EQ(result, (SLOW_LOG_TYPE_QUERY | SLOW_LOG_TYPE_INSERT | SLOW_LOG_TYPE_OTHERS)); + char pScopeStr[] = "query | insert | others "; + int32_t scope = 0; + int32_t result = taosSetSlowLogScope(pScopeStr, &scope); + EXPECT_EQ(result, TSDB_CODE_SUCCESS); + EXPECT_EQ(scope, (SLOW_LOG_TYPE_QUERY | SLOW_LOG_TYPE_INSERT | SLOW_LOG_TYPE_OTHERS)); } #pragma GCC diagnostic pop diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 85b0317541..2d748706b5 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -74,7 +74,7 @@ static struct { char encryptKey[ENCRYPT_KEY_LEN + 1]; } global = {0}; -static void dmSetDebugFlag(int32_t signum, void *sigInfo, void *context) { taosSetGlobalDebugFlag(143); } +static void dmSetDebugFlag(int32_t signum, void *sigInfo, void *context) { (void)taosSetGlobalDebugFlag(143); } static void dmSetAssert(int32_t signum, void *sigInfo, void *context) { tsAssert = 1; } static void dmStopDnode(int signum, void *sigInfo, void *context) { diff --git a/source/dnode/mnode/impl/src/mndArbGroup.c b/source/dnode/mnode/impl/src/mndArbGroup.c index 2adb420abe..32b62422e9 100644 --- a/source/dnode/mnode/impl/src/mndArbGroup.c +++ b/source/dnode/mnode/impl/src/mndArbGroup.c @@ -104,7 +104,7 @@ void mndReleaseArbGroup(SMnode *pMnode, SArbGroup *pGroup) { void mndArbGroupInitFromVgObj(SVgObj *pVgObj, SArbGroup *outGroup) { ASSERT(pVgObj->replica == 2); - memset(outGroup, 0, sizeof(SArbGroup)); + (void)memset(outGroup, 0, sizeof(SArbGroup)); outGroup->dbUid = pVgObj->dbUid; outGroup->vgId = pVgObj->vgId; for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { @@ -223,7 +223,7 @@ static int32_t mndArbGroupActionInsert(SSdb *pSdb, SArbGroup *pGroup) { static int32_t mndArbGroupActionDelete(SSdb *pSdb, SArbGroup *pGroup) { mTrace("arbgroup:%d, perform delete action, row:%p", pGroup->vgId, pGroup); if (pGroup->mutexInited) { - taosThreadMutexDestroy(&pGroup->mutex); + (void)taosThreadMutexDestroy(&pGroup->mutex); pGroup->mutexInited = false; } return 0; @@ -231,7 +231,7 @@ static int32_t mndArbGroupActionDelete(SSdb *pSdb, SArbGroup *pGroup) { static int32_t mndArbGroupActionUpdate(SSdb *pSdb, SArbGroup *pOld, SArbGroup *pNew) { mTrace("arbgroup:%d, perform update action, old row:%p new row:%p", pOld->vgId, pOld, pNew); - taosThreadMutexLock(&pOld->mutex); + (void)taosThreadMutexLock(&pOld->mutex); if (pOld->version != pNew->version) { mInfo("arbgroup:%d, skip to perform update action, old row:%p new row:%p, old version:%" PRId64 @@ -241,18 +241,18 @@ static int32_t mndArbGroupActionUpdate(SSdb *pSdb, SArbGroup *pOld, SArbGroup *p } for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { - memcpy(pOld->members[i].state.token, pNew->members[i].state.token, TSDB_ARB_TOKEN_SIZE); + (void)memcpy(pOld->members[i].state.token, pNew->members[i].state.token, TSDB_ARB_TOKEN_SIZE); } pOld->isSync = pNew->isSync; pOld->assignedLeader.dnodeId = pNew->assignedLeader.dnodeId; - memcpy(pOld->assignedLeader.token, pNew->assignedLeader.token, TSDB_ARB_TOKEN_SIZE); + (void)memcpy(pOld->assignedLeader.token, pNew->assignedLeader.token, TSDB_ARB_TOKEN_SIZE); pOld->assignedLeader.acked = pNew->assignedLeader.acked; pOld->version++; _OVER: - taosThreadMutexUnlock(&pOld->mutex); + (void)taosThreadMutexUnlock(&pOld->mutex); - taosHashRemove(arbUpdateHash, &pOld->vgId, sizeof(int32_t)); + (void)taosHashRemove(arbUpdateHash, &pOld->vgId, sizeof(int32_t)); return 0; } @@ -389,7 +389,7 @@ static int32_t mndProcessArbHbTimer(SRpcMsg *pReq) { pIter = sdbFetch(pSdb, SDB_ARBGROUP, pIter, (void **)&pArbGroup); if (pIter == NULL) break; - taosThreadMutexLock(&pArbGroup->mutex); + (void)taosThreadMutexLock(&pArbGroup->mutex); for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { SArbGroupMember *pMember = &pArbGroup->members[i]; @@ -400,13 +400,13 @@ static int32_t mndProcessArbHbTimer(SRpcMsg *pReq) { hbMembers = *(SArray **)pObj; } else { hbMembers = taosArrayInit(16, sizeof(SVArbHbReqMember)); - taosHashPut(pDnodeHash, &dnodeId, sizeof(int32_t), &hbMembers, POINTER_BYTES); + (void)taosHashPut(pDnodeHash, &dnodeId, sizeof(int32_t), &hbMembers, POINTER_BYTES); } SVArbHbReqMember reqMember = {.vgId = pArbGroup->vgId, .hbSeq = pMember->state.nextHbSeq++}; - taosArrayPush(hbMembers, &reqMember); + (void)taosArrayPush(hbMembers, &reqMember); } - taosThreadMutexUnlock(&pArbGroup->mutex); + (void)taosThreadMutexUnlock(&pArbGroup->mutex); sdbRelease(pSdb, pArbGroup); } @@ -602,9 +602,9 @@ static int32_t mndProcessArbCheckSyncTimer(SRpcMsg *pReq) { pIter = sdbFetch(pSdb, SDB_ARBGROUP, pIter, (void **)&pArbGroup); if (pIter == NULL) break; - taosThreadMutexLock(&pArbGroup->mutex); + (void)taosThreadMutexLock(&pArbGroup->mutex); mndArbGroupDupObj(pArbGroup, &arbGroupDup); - taosThreadMutexUnlock(&pArbGroup->mutex); + (void)taosThreadMutexUnlock(&pArbGroup->mutex); int32_t vgId = arbGroupDup.vgId; @@ -668,7 +668,10 @@ static int32_t mndProcessArbCheckSyncTimer(SRpcMsg *pReq) { SArbGroup newGroup = {0}; mndArbGroupDupObj(&arbGroupDup, &newGroup); mndArbGroupSetAssignedLeader(&newGroup, candidateIndex); - taosArrayPush(pUpdateArray, &newGroup); + if (taosArrayPush(pUpdateArray, &newGroup) == NULL) { + taosArrayDestroy(pUpdateArray); + return TSDB_CODE_OUT_OF_MEMORY; + } sdbRelease(pSdb, pArbGroup); } @@ -722,7 +725,7 @@ static int32_t mndPullupArbUpdateGroup(SMnode *pMnode, SArbGroup *pNewGroup) { mndInitArbUpdateGroup(pNewGroup, &newGroup); SArray *pArray = taosArrayInit(1, sizeof(SMArbUpdateGroup)); - taosArrayPush(pArray, &newGroup); + if (taosArrayPush(pArray, &newGroup) == NULL) goto _OVER; int32_t contLen = 0; void *pHead = mndBuildArbUpdateGroupBatchReq(&contLen, pArray); @@ -736,7 +739,7 @@ static int32_t mndPullupArbUpdateGroup(SMnode *pMnode, SArbGroup *pNewGroup) { ret = tmsgPutToQueue(&pMnode->msgCb, WRITE_QUEUE, &rpcMsg); if (ret != 0) goto _OVER; - taosHashPut(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId), NULL, 0); + if ((ret = taosHashPut(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId), NULL, 0)) != 0) goto _OVER; _OVER: taosArrayDestroy(pArray); @@ -758,8 +761,8 @@ static int32_t mndPullupArbUpdateGroupBatch(SMnode *pMnode, SArray *newGroupArra SMArbUpdateGroup newGroup = {0}; mndInitArbUpdateGroup(pNewGroup, &newGroup); - taosArrayPush(pArray, &newGroup); - taosHashPut(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId), NULL, 0); + if (taosArrayPush(pArray, &newGroup) == NULL) goto _OVER; + if (taosHashPut(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId), NULL, 0) != 0) goto _OVER; } if (taosArrayGetSize(pArray) == 0) { @@ -784,7 +787,7 @@ _OVER: if (ret != 0) { for (size_t i = 0; i < sz; i++) { SArbGroup *pNewGroup = taosArrayGet(newGroupArray, i); - taosHashRemove(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId)); + (void)taosHashRemove(arbUpdateHash, &pNewGroup->vgId, sizeof(pNewGroup->vgId)); } } @@ -816,19 +819,19 @@ static int32_t mndProcessArbUpdateGroupBatchReq(SRpcMsg *pReq) { newGroup.dbUid = pUpdateGroup->dbUid; for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { newGroup.members[i].info.dnodeId = pUpdateGroup->members[i].dnodeId; - memcpy(newGroup.members[i].state.token, pUpdateGroup->members[i].token, TSDB_ARB_TOKEN_SIZE); + (void)memcpy(newGroup.members[i].state.token, pUpdateGroup->members[i].token, TSDB_ARB_TOKEN_SIZE); } newGroup.isSync = pUpdateGroup->isSync; newGroup.assignedLeader.dnodeId = pUpdateGroup->assignedLeader.dnodeId; - memcpy(newGroup.assignedLeader.token, pUpdateGroup->assignedLeader.token, TSDB_ARB_TOKEN_SIZE); + (void)memcpy(newGroup.assignedLeader.token, pUpdateGroup->assignedLeader.token, TSDB_ARB_TOKEN_SIZE); newGroup.assignedLeader.acked = pUpdateGroup->assignedLeader.acked; newGroup.version = pUpdateGroup->version; SArbGroup *pOldGroup = sdbAcquire(pMnode->pSdb, SDB_ARBGROUP, &newGroup.vgId); if (!pOldGroup) { mInfo("vgId:%d, arb skip to update arbgroup, since no obj found", newGroup.vgId); - taosHashRemove(arbUpdateHash, &newGroup.vgId, sizeof(int32_t)); + (void)taosHashRemove(arbUpdateHash, &newGroup.vgId, sizeof(int32_t)); continue; } @@ -858,7 +861,7 @@ _OVER: // failed to update arbgroup for (size_t i = 0; i < sz; i++) { SMArbUpdateGroup *pUpdateGroup = taosArrayGet(req.updateArray, i); - taosHashRemove(arbUpdateHash, &pUpdateGroup->vgId, sizeof(int32_t)); + (void)taosHashRemove(arbUpdateHash, &pUpdateGroup->vgId, sizeof(int32_t)); } } @@ -868,20 +871,20 @@ _OVER: } static void mndArbGroupDupObj(SArbGroup *pGroup, SArbGroup *pNew) { - memcpy(pNew, pGroup, offsetof(SArbGroup, mutexInited)); + (void)memcpy(pNew, pGroup, offsetof(SArbGroup, mutexInited)); } static void mndArbGroupSetAssignedLeader(SArbGroup *pGroup, int32_t index) { SArbGroupMember *pMember = &pGroup->members[index]; pGroup->assignedLeader.dnodeId = pMember->info.dnodeId; - strncpy(pGroup->assignedLeader.token, pMember->state.token, TSDB_ARB_TOKEN_SIZE); + (void)strncpy(pGroup->assignedLeader.token, pMember->state.token, TSDB_ARB_TOKEN_SIZE); pGroup->assignedLeader.acked = false; } static void mndArbGroupResetAssignedLeader(SArbGroup *pGroup) { pGroup->assignedLeader.dnodeId = 0; - memset(pGroup->assignedLeader.token, 0, TSDB_ARB_TOKEN_SIZE); + (void)memset(pGroup->assignedLeader.token, 0, TSDB_ARB_TOKEN_SIZE); pGroup->assignedLeader.acked = false; } @@ -923,7 +926,7 @@ bool mndUpdateArbGroupByHeartBeat(SArbGroup *pGroup, SVArbHbRspMember *pRspMembe bool updateToken = false; SArbGroupMember *pMember = NULL; - taosThreadMutexLock(&pGroup->mutex); + (void)taosThreadMutexLock(&pGroup->mutex); int index = 0; for (; index < TSDB_ARB_GROUP_MEMBER_NUM; index++) { @@ -957,7 +960,7 @@ bool mndUpdateArbGroupByHeartBeat(SArbGroup *pGroup, SVArbHbRspMember *pRspMembe // update token mndArbGroupDupObj(pGroup, pNewGroup); - memcpy(pNewGroup->members[index].state.token, pRspMember->memberToken, TSDB_ARB_TOKEN_SIZE); + (void)memcpy(pNewGroup->members[index].state.token, pRspMember->memberToken, TSDB_ARB_TOKEN_SIZE); pNewGroup->isSync = false; bool resetAssigned = false; @@ -970,7 +973,7 @@ bool mndUpdateArbGroupByHeartBeat(SArbGroup *pGroup, SVArbHbRspMember *pRspMembe mInfo("dnodeId:%d vgId:%d, arb token updating, resetAssigned:%d", dnodeId, pRspMember->vgId, resetAssigned); _OVER: - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); return updateToken; } @@ -991,7 +994,7 @@ static int32_t mndUpdateArbHeartBeat(SMnode *pMnode, int32_t dnodeId, SArray *me bool updateToken = mndUpdateArbGroupByHeartBeat(pGroup, pRspMember, nowMs, dnodeId, &newGroup); if (updateToken) { - taosArrayPush(pUpdateArray, &newGroup); + (void)taosArrayPush(pUpdateArray, &newGroup); } sdbRelease(pMnode->pSdb, pGroup); @@ -1007,7 +1010,7 @@ bool mndUpdateArbGroupByCheckSync(SArbGroup *pGroup, int32_t vgId, char *member0 bool newIsSync, SArbGroup *pNewGroup) { bool updateIsSync = false; - taosThreadMutexLock(&pGroup->mutex); + (void)taosThreadMutexLock(&pGroup->mutex); if (pGroup->assignedLeader.dnodeId != 0) { terrno = TSDB_CODE_SUCCESS; @@ -1033,7 +1036,7 @@ bool mndUpdateArbGroupByCheckSync(SArbGroup *pGroup, int32_t vgId, char *member0 } _OVER: - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); return updateIsSync; } @@ -1148,7 +1151,7 @@ bool mndUpdateArbGroupBySetAssignedLeader(SArbGroup *pGroup, int32_t vgId, char SArbGroup *pNewGroup) { bool updateAssigned = false; - taosThreadMutexLock(&pGroup->mutex); + (void)taosThreadMutexLock(&pGroup->mutex); if (mndArbCheckToken(pGroup->assignedLeader.token, memberToken) != 0) { mInfo("skip update arb assigned for vgId:%d, member token mismatch, local:[%s] msg:[%s]", vgId, pGroup->assignedLeader.token, memberToken); @@ -1171,7 +1174,7 @@ bool mndUpdateArbGroupBySetAssignedLeader(SArbGroup *pGroup, int32_t vgId, char } _OVER: - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); return updateAssigned; } @@ -1241,43 +1244,43 @@ static int32_t mndRetrieveArbGroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock pShow->pIter = sdbFetch(pSdb, SDB_ARBGROUP, pShow->pIter, (void **)&pGroup); if (pShow->pIter == NULL) break; - taosThreadMutexLock(&pGroup->mutex); + (void)taosThreadMutexLock(&pGroup->mutex); cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); SVgObj *pVgObj = sdbAcquire(pSdb, SDB_VGROUP, &pGroup->vgId); if (!pVgObj) { - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); sdbRelease(pSdb, pGroup); continue; } char dbname[TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(dbname, mndGetDbStr(pVgObj->dbName), TSDB_ARB_TOKEN_SIZE + VARSTR_HEADER_SIZE); - colDataSetVal(pColInfo, numOfRows, (const char *)dbname, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)dbname, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->vgId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->vgId, false); for (int i = 0; i < TSDB_ARB_GROUP_MEMBER_NUM; i++) { SArbGroupMember *pMember = &pGroup->members[i]; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pMember->info.dnodeId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pMember->info.dnodeId, false); } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->isSync, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->isSync, false); if (pGroup->assignedLeader.dnodeId != 0) { pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->assignedLeader.dnodeId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->assignedLeader.dnodeId, false); char token[TSDB_ARB_TOKEN_SIZE + VARSTR_HEADER_SIZE] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(token, pGroup->assignedLeader.token, TSDB_ARB_TOKEN_SIZE + VARSTR_HEADER_SIZE); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)token, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)token, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->assignedLeader.acked, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pGroup->assignedLeader.acked, false); } else { pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); colDataSetNULL(pColInfo, numOfRows); @@ -1289,7 +1292,7 @@ static int32_t mndRetrieveArbGroups(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock colDataSetNULL(pColInfo, numOfRows); } - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); numOfRows++; sdbRelease(pSdb, pVgObj); diff --git a/source/dnode/mnode/impl/src/mndCluster.c b/source/dnode/mnode/impl/src/mndCluster.c index db9b8a2bb2..27bd47c569 100644 --- a/source/dnode/mnode/impl/src/mndCluster.c +++ b/source/dnode/mnode/impl/src/mndCluster.c @@ -243,7 +243,7 @@ static int32_t mndCreateDefaultCluster(SMnode *pMnode) { int32_t code = taosGetSystemUUID(clusterObj.name, TSDB_CLUSTER_ID_LEN); if (code != 0) { - strcpy(clusterObj.name, "tdengine3.0"); + (void)strcpy(clusterObj.name, "tdengine3.0"); mError("failed to get name from system, set to default val %s", clusterObj.name); } @@ -355,7 +355,7 @@ static int32_t mndProcessUptimeTimer(SRpcMsg *pReq) { void *pIter = NULL; SClusterObj *pCluster = mndAcquireCluster(pMnode, &pIter); if (pCluster != NULL) { - memcpy(&clusterObj, pCluster, sizeof(SClusterObj)); + (void)memcpy(&clusterObj, pCluster, sizeof(SClusterObj)); clusterObj.upTime += tsUptimeInterval; mndReleaseCluster(pMnode, pCluster, pIter); } @@ -420,7 +420,7 @@ int32_t mndProcessConfigClusterReq(SRpcMsg *pReq) { if (pCluster) mndReleaseCluster(pMnode, pCluster, pIter); goto _exit; } - memcpy(&clusterObj, pCluster, sizeof(SClusterObj)); + (void)memcpy(&clusterObj, pCluster, sizeof(SClusterObj)); mndReleaseCluster(pMnode, pCluster, pIter); if (strncmp(cfgReq.config, GRANT_ACTIVE_CODE, TSDB_DNODE_CONFIG_LEN) == 0) { diff --git a/source/dnode/mnode/impl/src/mndCompact.c b/source/dnode/mnode/impl/src/mndCompact.c index cdb4680ad6..da01a4b2f6 100644 --- a/source/dnode/mnode/impl/src/mndCompact.c +++ b/source/dnode/mnode/impl/src/mndCompact.c @@ -231,7 +231,7 @@ int32_t mndAddCompactToTran(SMnode *pMnode, STrans *pTrans, SCompactObj *pCompac int32_t code = 0; pCompact->compactId = tGenIdPI32(); - strcpy(pCompact->dbname, pDb->name); + (void)strcpy(pCompact->dbname, pDb->name); pCompact->startTime = taosGetTimestampMs(); @@ -283,21 +283,21 @@ int32_t mndRetrieveCompact(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, char tmpBuf[TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE] = {0}; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompact->compactId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompact->compactId, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); if (pDb != NULL || !IS_SYS_DBNAME(pCompact->dbname)) { SName name = {0}; - tNameFromString(&name, pCompact->dbname, T_NAME_ACCT | T_NAME_DB); - tNameGetDbName(&name, varDataVal(tmpBuf)); + (void)tNameFromString(&name, pCompact->dbname, T_NAME_ACCT | T_NAME_DB); + (void)tNameGetDbName(&name, varDataVal(tmpBuf)); } else { - strncpy(varDataVal(tmpBuf), pCompact->dbname, TSDB_SHOW_SQL_LEN); + (void)strncpy(varDataVal(tmpBuf), pCompact->dbname, TSDB_SHOW_SQL_LEN); } varDataSetLen(tmpBuf, strlen(varDataVal(tmpBuf))); - colDataSetVal(pColInfo, numOfRows, (const char *)tmpBuf, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)tmpBuf, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompact->startTime, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompact->startTime, false); numOfRows++; sdbRelease(pSdb, pCompact); @@ -334,7 +334,7 @@ static void *mndBuildKillCompactReq(SMnode *pMnode, SVgObj *pVgroup, int32_t *pC pHead->contLen = htonl(contLen); pHead->vgId = htonl(pVgroup->vgId); - tSerializeSVKillCompactReq((char *)pReq + sizeof(SMsgHead), contLen, &req); + (void)tSerializeSVKillCompactReq((char *)pReq + sizeof(SMsgHead), contLen, &req); *pContLen = contLen; return pReq; } @@ -478,7 +478,7 @@ int32_t mndProcessKillCompactReq(SRpcMsg *pReq) { code = TSDB_CODE_ACTION_IN_PROGRESS; char obj[TSDB_INT32_ID_LEN] = {0}; - sprintf(obj, "%d", pCompact->compactId); + (void)sprintf(obj, "%d", pCompact->compactId); auditRecord(pReq, pMnode->clusterId, "killCompact", pCompact->dbname, obj, killCompactReq.sql, killCompactReq.sqlLen); @@ -587,7 +587,7 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact) { pHead->contLen = htonl(contLen); pHead->vgId = htonl(pDetail->vgId); - tSerializeSQueryCompactProgressReq((char *)pHead + sizeof(SMsgHead), contLen - sizeof(SMsgHead), &req); + (void)tSerializeSQueryCompactProgressReq((char *)pHead + sizeof(SMsgHead), contLen - sizeof(SMsgHead), &req); SRpcMsg rpcMsg = {.msgType = TDMT_VND_QUERY_COMPACT_PROGRESS, .contLen = contLen}; @@ -602,7 +602,10 @@ void mndCompactSendProgressReq(SMnode *pMnode, SCompactObj *pCompact) { mDebug("compact:%d, send update progress msg to %s", pDetail->compactId, detail); - tmsgSendReq(&epSet, &rpcMsg); + if (tmsgSendReq(&epSet, &rpcMsg) < 0) { + sdbRelease(pMnode->pSdb, pDetail); + continue; + } } sdbRelease(pMnode->pSdb, pDetail); @@ -806,7 +809,7 @@ void mndCompactPullup(SMnode *pMnode) { SCompactObj *pCompact = NULL; pIter = sdbFetch(pMnode->pSdb, SDB_COMPACT, pIter, (void **)&pCompact); if (pIter == NULL) break; - taosArrayPush(pArray, &pCompact->compactId); + (void)taosArrayPush(pArray, &pCompact->compactId); sdbRelease(pSdb, pCompact); } diff --git a/source/dnode/mnode/impl/src/mndCompactDetail.c b/source/dnode/mnode/impl/src/mndCompactDetail.c index c68fbfac2d..86d398e7bd 100644 --- a/source/dnode/mnode/impl/src/mndCompactDetail.c +++ b/source/dnode/mnode/impl/src/mndCompactDetail.c @@ -68,22 +68,22 @@ int32_t mndRetrieveCompactDetail(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB char tmpBuf[TSDB_SHOW_SQL_LEN + VARSTR_HEADER_SIZE] = {0}; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->compactId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->compactId, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->vgId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->vgId, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->dnodeId, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->dnodeId, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->numberFileset, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->numberFileset, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->finished, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->finished, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->startTime, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pCompactDetail->startTime, false); numOfRows++; sdbRelease(pSdb, pCompactDetail); diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c index c4cfa13c09..fbbe9a742a 100644 --- a/source/dnode/mnode/impl/src/mndConsumer.c +++ b/source/dnode/mnode/impl/src/mndConsumer.c @@ -946,7 +946,7 @@ static int32_t mndRetrieveConsumer(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock * char buf[TSDB_OFFSET_LEN] = {0}; STqOffsetVal pVal = {.type = pConsumer->resetOffsetCfg}; - MND_TMQ_RETURN_CHECK(tFormatOffset(buf, TSDB_OFFSET_LEN, &pVal)); + tFormatOffset(buf, TSDB_OFFSET_LEN, &pVal); char parasStr[64 + TSDB_OFFSET_LEN + VARSTR_HEADER_SIZE] = {0}; (void)sprintf(varDataVal(parasStr), "tbname:%d,commit:%d,interval:%dms,reset:%s", pConsumer->withTbName, diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index a6d37a5566..973215fdbd 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -738,15 +738,15 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, 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); + (void)memcpy(dbObj.name, pCreate->db, TSDB_DB_FNAME_LEN); + (void)memcpy(dbObj.acct, pUser->acct, TSDB_USER_LEN); dbObj.createdTime = taosGetTimestampMs(); dbObj.updateTime = dbObj.createdTime; dbObj.uid = mndGenerateUid(dbObj.name, TSDB_DB_FNAME_LEN); dbObj.cfgVersion = 1; dbObj.vgVersion = 1; dbObj.tsmaVersion = 1; - memcpy(dbObj.createUser, pUser->user, TSDB_USER_LEN); + (void)memcpy(dbObj.createUser, pUser->user, TSDB_USER_LEN); dbObj.cfg = (SDbCfg){ .numOfVgroups = pCreate->numOfVgroups, .numOfStables = pCreate->numOfStables, @@ -820,8 +820,10 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, 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); - taosHashPut(newUserObj.writeDbs, dbObj.name, strlen(dbObj.name) + 1, dbObj.name, TSDB_FILENAME_LEN); + TAOS_CHECK_GOTO(taosHashPut(newUserObj.readDbs, dbObj.name, strlen(dbObj.name) + 1, dbObj.name, TSDB_FILENAME_LEN), + NULL, _OVER); + TAOS_CHECK_GOTO(taosHashPut(newUserObj.writeDbs, dbObj.name, strlen(dbObj.name) + 1, dbObj.name, TSDB_FILENAME_LEN), + NULL, _OVER); pNewUserDuped = &newUserObj; } @@ -855,17 +857,17 @@ _OVER: static void mndBuildAuditDetailInt32(char *detail, char *tmp, char *format, int32_t para) { if (para > 0) { - if (strlen(detail) > 0) strcat(detail, ", "); - sprintf(tmp, format, para); - strcat(detail, tmp); + if (strlen(detail) > 0) (void)strcat(detail, ", "); + (void)sprintf(tmp, format, para); + (void)strcat(detail, tmp); } } static void mndBuildAuditDetailInt64(char *detail, char *tmp, char *format, int64_t para) { if (para > 0) { - if (strlen(detail) > 0) strcat(detail, ", "); - sprintf(tmp, format, para); - strcat(detail, tmp); + if (strlen(detail) > 0) (void)strcat(detail, ", "); + (void)sprintf(tmp, format, para); + (void)strcat(detail, tmp); } } @@ -967,7 +969,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; SName name = {0}; - tNameFromString(&name, createReq.db, T_NAME_ACCT | T_NAME_DB); + (void)tNameFromString(&name, createReq.db, T_NAME_ACCT | T_NAME_DB); auditRecord(pReq, pMnode->clusterId, "createDB", name.dbname, "", createReq.sql, createReq.sqlLen); @@ -1250,7 +1252,7 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { goto _OVER; } - memcpy(&dbObj, pDb, sizeof(SDbObj)); + (void)memcpy(&dbObj, pDb, sizeof(SDbObj)); if (dbObj.cfg.pRetensions != NULL) { dbObj.cfg.pRetensions = taosArrayDup(pDb->cfg.pRetensions, NULL); if (dbObj.cfg.pRetensions == NULL) goto _OVER; @@ -1276,7 +1278,7 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { } SName name = {0}; - tNameFromString(&name, alterReq.db, T_NAME_ACCT | T_NAME_DB); + (void)tNameFromString(&name, alterReq.db, T_NAME_ACCT | T_NAME_DB); auditRecord(pReq, pMnode->clusterId, "alterDB", name.dbname, "", alterReq.sql, alterReq.sqlLen); @@ -1294,7 +1296,7 @@ _OVER: } static void mndDumpDbCfgInfo(SDbCfgRsp *cfgRsp, SDbObj *pDb) { - strcpy(cfgRsp->db, pDb->name); + (void)strcpy(cfgRsp->db, pDb->name); cfgRsp->dbId = pDb->uid; cfgRsp->cfgVersion = pDb->cfgVersion; cfgRsp->numOfVgroups = pDb->cfg.numOfVgroups; @@ -1363,7 +1365,7 @@ static int32_t mndProcessGetDbCfgReq(SRpcMsg *pReq) { goto _OVER; } - tSerializeSDbCfgRsp(pRsp, contLen, &cfgRsp); + (void)tSerializeSDbCfgRsp(pRsp, contLen, &cfgRsp); pReq->info.rsp = pRsp; pReq->info.rspLen = contLen; @@ -1537,7 +1539,7 @@ static int32_t mndBuildDropDbRsp(SDbObj *pDb, int32_t *pRspLen, void **ppRsp, bo int32_t code = 0; SDropDbRsp dropRsp = {0}; if (pDb != NULL) { - memcpy(dropRsp.db, pDb->name, TSDB_DB_FNAME_LEN); + (void)memcpy(dropRsp.db, pDb->name, TSDB_DB_FNAME_LEN); dropRsp.uid = pDb->uid; } @@ -1554,7 +1556,7 @@ static int32_t mndBuildDropDbRsp(SDbObj *pDb, int32_t *pRspLen, void **ppRsp, bo TAOS_RETURN(code); } - tSerializeSDropDbRsp(pRsp, rspLen, &dropRsp); + (void)tSerializeSDropDbRsp(pRsp, rspLen, &dropRsp); *pRspLen = rspLen; *ppRsp = pRsp; TAOS_RETURN(code); @@ -1635,7 +1637,7 @@ static int32_t mndProcessDropDbReq(SRpcMsg *pReq) { } SName name = {0}; - tNameFromString(&name, dropReq.db, T_NAME_ACCT | T_NAME_DB); + (void)tNameFromString(&name, dropReq.db, T_NAME_ACCT | T_NAME_DB); auditRecord(pReq, pMnode->clusterId, "dropDB", name.dbname, "", dropReq.sql, dropReq.sqlLen); @@ -1694,7 +1696,7 @@ void mndBuildDBVgroupInfo(SDbObj *pDb, SMnode *pMnode, SArray *pVgList) { SEp *pEp = &vgInfo.epSet.eps[gid]; SDnodeObj *pDnode = mndAcquireDnode(pMnode, pVgid->dnodeId); if (pDnode != NULL) { - memcpy(pEp->fqdn, pDnode->fqdn, TSDB_FQDN_LEN); + (void)memcpy(pEp->fqdn, pDnode->fqdn, TSDB_FQDN_LEN); pEp->port = pDnode->port; } mndReleaseDnode(pMnode, pDnode); @@ -1703,7 +1705,7 @@ void mndBuildDBVgroupInfo(SDbObj *pDb, SMnode *pMnode, SArray *pVgList) { } } vindex++; - taosArrayPush(pVgList, &vgInfo); + (void)taosArrayPush(pVgList, &vgInfo); } sdbRelease(pSdb, pVgroup); @@ -1730,7 +1732,7 @@ int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUs mndBuildDBVgroupInfo(pDb, pMnode, pRsp->pVgroupInfos); } - memcpy(pRsp->db, pDb->name, TSDB_DB_FNAME_LEN); + (void)memcpy(pRsp->db, pDb->name, TSDB_DB_FNAME_LEN); pRsp->uid = pDb->uid; pRsp->vgVersion = pDb->vgVersion; pRsp->stateTs = pDb->stateTs; @@ -1752,7 +1754,7 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { char *p = strchr(usedbReq.db, '.'); if (p && ((0 == strcmp(p + 1, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcmp(p + 1, TSDB_PERFORMANCE_SCHEMA_DB))))) { - memcpy(usedbRsp.db, usedbReq.db, TSDB_DB_FNAME_LEN); + (void)memcpy(usedbRsp.db, usedbReq.db, TSDB_DB_FNAME_LEN); int32_t vgVersion = mndGetGlobalVgroupVersion(pMnode); if (usedbReq.vgVersion < vgVersion) { usedbRsp.pVgroupInfos = taosArrayInit(10, sizeof(SVgroupInfo)); @@ -1768,7 +1770,7 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { } else { pDb = mndAcquireDb(pMnode, usedbReq.db); if (pDb == NULL) { - memcpy(usedbRsp.db, usedbReq.db, TSDB_DB_FNAME_LEN); + (void)memcpy(usedbRsp.db, usedbReq.db, TSDB_DB_FNAME_LEN); usedbRsp.uid = usedbReq.dbId; usedbRsp.vgVersion = usedbReq.vgVersion; usedbRsp.errCode = terrno; @@ -1795,7 +1797,7 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { goto _OVER; } - tSerializeSUseDbRsp(pRsp, contLen, &usedbRsp); + (void)tSerializeSUseDbRsp(pRsp, contLen, &usedbRsp); pReq->info.rsp = pRsp; pReq->info.rspLen = contLen; @@ -1839,7 +1841,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, } rsp.useDbRsp = taosMemoryCalloc(1, sizeof(SUseDbRsp)); - memcpy(rsp.useDbRsp->db, pDbCacheInfo->dbFName, TSDB_DB_FNAME_LEN); + (void)memcpy(rsp.useDbRsp->db, pDbCacheInfo->dbFName, TSDB_DB_FNAME_LEN); rsp.useDbRsp->pVgroupInfos = taosArrayInit(10, sizeof(SVgroupInfo)); mndBuildDBVgroupInfo(NULL, pMnode, rsp.useDbRsp->pVgroupInfos); @@ -1847,7 +1849,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, rsp.useDbRsp->vgNum = taosArrayGetSize(rsp.useDbRsp->pVgroupInfos); - taosArrayPush(batchRsp.pArray, &rsp); + (void)taosArrayPush(batchRsp.pArray, &rsp); continue; } @@ -1856,10 +1858,10 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, if (pDb == NULL) { mTrace("db:%s, no exist", pDbCacheInfo->dbFName); rsp.useDbRsp = taosMemoryCalloc(1, sizeof(SUseDbRsp)); - memcpy(rsp.useDbRsp->db, pDbCacheInfo->dbFName, TSDB_DB_FNAME_LEN); + (void)memcpy(rsp.useDbRsp->db, pDbCacheInfo->dbFName, TSDB_DB_FNAME_LEN); rsp.useDbRsp->uid = pDbCacheInfo->dbId; rsp.useDbRsp->vgVersion = -1; - taosArrayPush(batchRsp.pArray, &rsp); + (void)taosArrayPush(batchRsp.pArray, &rsp); continue; } @@ -1892,7 +1894,11 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, if (rsp.pTsmaRsp && rsp.pTsmaRsp->pTsmas) { rsp.dbTsmaVersion = pDb->tsmaVersion; bool exist = false; - mndGetDbTsmas(pMnode, 0, pDb->uid, rsp.pTsmaRsp, &exist); + if (mndGetDbTsmas(pMnode, 0, pDb->uid, rsp.pTsmaRsp, &exist) != 0) { + mndReleaseDb(pMnode, pDb); + mError("db:%s, failed to get db tsmas", pDb->name); + continue; + } } } @@ -1907,7 +1913,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, } mndBuildDBVgroupInfo(pDb, pMnode, rsp.useDbRsp->pVgroupInfos); - memcpy(rsp.useDbRsp->db, pDb->name, TSDB_DB_FNAME_LEN); + (void)memcpy(rsp.useDbRsp->db, pDb->name, TSDB_DB_FNAME_LEN); rsp.useDbRsp->uid = pDb->uid; rsp.useDbRsp->vgVersion = pDb->vgVersion; rsp.useDbRsp->stateTs = pDb->stateTs; @@ -1917,7 +1923,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, rsp.useDbRsp->hashSuffix = pDb->cfg.hashSuffix; } - taosArrayPush(batchRsp.pArray, &rsp); + (void)taosArrayPush(batchRsp.pArray, &rsp); mndReleaseDb(pMnode, pDb); } @@ -1928,7 +1934,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, tFreeSDbHbBatchRsp(&batchRsp); return -1; } - tSerializeSDbHbBatchRsp(pRsp, rspLen, &batchRsp); + (void)tSerializeSDbHbBatchRsp(pRsp, rspLen, &batchRsp); *ppRsp = pRsp; *pRspLen = rspLen; @@ -1957,7 +1963,7 @@ static int32_t mndTrimDb(SMnode *pMnode, SDbObj *pDb) { } pHead->contLen = htonl(contLen); pHead->vgId = htonl(pVgroup->vgId); - tSerializeSVTrimDbReq((char *)pHead + sizeof(SMsgHead), contLen, &trimReq); + (void)tSerializeSVTrimDbReq((char *)pHead + sizeof(SMsgHead), contLen, &trimReq); SRpcMsg rpcMsg = {.msgType = TDMT_VND_TRIM, .pCont = pHead, .contLen = contLen}; SEpSet epSet = mndGetVgroupEpset(pMnode, pVgroup); @@ -2025,7 +2031,7 @@ static int32_t mndS3MigrateDb(SMnode *pMnode, SDbObj *pDb) { } pHead->contLen = htonl(contLen); pHead->vgId = htonl(pVgroup->vgId); - tSerializeSVS3MigrateDbReq((char *)pHead + sizeof(SMsgHead), contLen, &s3migrateReq); + (void)tSerializeSVS3MigrateDbReq((char *)pHead + sizeof(SMsgHead), contLen, &s3migrateReq); SRpcMsg rpcMsg = {.msgType = TDMT_VND_S3MIGRATE, .pCont = pHead, .contLen = contLen}; SEpSet epSet = mndGetVgroupEpset(pMnode, pVgroup); @@ -2250,46 +2256,46 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, for (int32_t i = 0; i < pShow->numOfColumns; ++i) { SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, i); if (i == 0) { - colDataSetVal(pColInfo, rows, buf, false); + (void)colDataSetVal(pColInfo, rows, buf, false); } else if (i == 1) { - colDataSetVal(pColInfo, rows, (const char *)&pDb->createdTime, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->createdTime, false); } else if (i == 3) { - colDataSetVal(pColInfo, rows, (const char *)&numOfTables, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&numOfTables, false); } else if (i == 14) { - colDataSetVal(pColInfo, rows, precVstr, false); + (void)colDataSetVal(pColInfo, rows, precVstr, false); } else if (i == 15) { - colDataSetVal(pColInfo, rows, statusVstr, false); + (void)colDataSetVal(pColInfo, rows, statusVstr, false); } else { colDataSetNULL(pColInfo, rows); } } } else { SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, buf, false); + (void)colDataSetVal(pColInfo, rows, buf, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->createdTime, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->createdTime, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.numOfVgroups, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.numOfVgroups, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&numOfTables, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&numOfTables, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.replications, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.replications, false); const char *strictStr = pDb->cfg.strict ? "on" : "off"; char strictVstr[24] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(strictVstr, strictStr, 24); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)strictVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)strictVstr, false); char durationVstr[128] = {0}; int32_t len = sprintf(&durationVstr[VARSTR_HEADER_SIZE], "%dm", pDb->cfg.daysPerFile); varDataSetLen(durationVstr, len); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)durationVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)durationVstr, false); char keepVstr[128] = {0}; if (pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep1 || pDb->cfg.daysToKeep0 > pDb->cfg.daysToKeep2) { @@ -2301,67 +2307,67 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, } varDataSetLen(keepVstr, len); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)keepVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)keepVstr, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.buffer, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.buffer, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.pageSize, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.pageSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.pages, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.pages, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.minRows, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.minRows, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.maxRows, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.maxRows, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.compression, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.compression, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)precVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)precVstr, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)statusVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)statusVstr, false); char *rentensionVstr = buildRetension(pDb->cfg.pRetensions); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); if (rentensionVstr == NULL) { colDataSetNULL(pColInfo, rows); } else { - colDataSetVal(pColInfo, rows, (const char *)rentensionVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)rentensionVstr, false); taosMemoryFree(rentensionVstr); } pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.numOfStables, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.numOfStables, false); const char *cacheModelStr = getCacheModelStr(pDb->cfg.cacheLast); char cacheModelVstr[24] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(cacheModelVstr, cacheModelStr, 24); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)cacheModelVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)cacheModelVstr, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.cacheLastSize, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.cacheLastSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walLevel, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walLevel, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walFsyncPeriod, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walFsyncPeriod, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walRetentionPeriod, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walRetentionPeriod, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walRetentionSize, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.walRetentionSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.sstTrigger, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.sstTrigger, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); int16_t hashPrefix = pDb->cfg.hashPrefix; @@ -2370,37 +2376,37 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb, } else if (hashPrefix < 0) { hashPrefix = pDb->cfg.hashPrefix + strlen(pDb->name) + 1; } - colDataSetVal(pColInfo, rows, (const char *)&hashPrefix, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&hashPrefix, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.hashSuffix, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.hashSuffix, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.tsdbPageSize, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.tsdbPageSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.keepTimeOffset, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.keepTimeOffset, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.s3ChunkSize, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.s3ChunkSize, false); char keeplocalVstr[128] = {0}; len = sprintf(&keeplocalVstr[VARSTR_HEADER_SIZE], "%dm", pDb->cfg.s3KeepLocal); varDataSetLen(keeplocalVstr, len); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)keeplocalVstr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)keeplocalVstr, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.s3Compact, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.s3Compact, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.withArbitrator, false); + (void)colDataSetVal(pColInfo, rows, (const char *)&pDb->cfg.withArbitrator, false); const char *encryptAlgorithmStr = getEncryptAlgorithmStr(pDb->cfg.encryptAlgorithm); char encryptAlgorithmVStr[24] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(encryptAlgorithmVStr, encryptAlgorithmStr, 24); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, rows, (const char *)encryptAlgorithmVStr, false); + (void)colDataSetVal(pColInfo, rows, (const char *)encryptAlgorithmVStr, false); } taosMemoryFree(buf); diff --git a/source/dnode/mnode/impl/src/mndDef.c b/source/dnode/mnode/impl/src/mndDef.c index 32f8fb8548..6fdd77af98 100644 --- a/source/dnode/mnode/impl/src/mndDef.c +++ b/source/dnode/mnode/impl/src/mndDef.c @@ -158,10 +158,19 @@ int32_t tDecodeSStreamObj(SDecoder *pDecoder, SStreamObj *pObj, int32_t sver) { taosArrayDestroy(pArray); TAOS_RETURN(code); } - taosArrayPush(pArray, &pTask); + if (taosArrayPush(pArray, &pTask) == NULL) { + taosMemoryFree(pTask); + taosArrayDestroy(pArray); + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); + } } } - taosArrayPush(pObj->tasks, &pArray); + if (taosArrayPush(pObj->tasks, &pArray) == NULL) { + taosArrayDestroy(pArray); + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); + } } } @@ -436,10 +445,15 @@ void *tDecodeSMqConsumerObj(const void *buf, SMqConsumerObj *pConsumer, int8_t s // current topics buf = taosDecodeFixedI32(buf, &sz); pConsumer->currentTopics = taosArrayInit(sz, sizeof(void *)); + if (pConsumer->currentTopics == NULL) { + return NULL; + } for (int32_t i = 0; i < sz; i++) { char *topic; buf = taosDecodeString(buf, &topic); - taosArrayPush(pConsumer->currentTopics, &topic); + if (taosArrayPush(pConsumer->currentTopics, &topic) == NULL) { + return NULL; + } } // reb new topics @@ -448,7 +462,9 @@ void *tDecodeSMqConsumerObj(const void *buf, SMqConsumerObj *pConsumer, int8_t s for (int32_t i = 0; i < sz; i++) { char *topic; buf = taosDecodeString(buf, &topic); - taosArrayPush(pConsumer->rebNewTopics, &topic); + if (taosArrayPush(pConsumer->rebNewTopics, &topic) == NULL) { + return NULL; + } } // reb removed topics @@ -457,7 +473,9 @@ void *tDecodeSMqConsumerObj(const void *buf, SMqConsumerObj *pConsumer, int8_t s for (int32_t i = 0; i < sz; i++) { char *topic; buf = taosDecodeString(buf, &topic); - taosArrayPush(pConsumer->rebRemovedTopics, &topic); + if (taosArrayPush(pConsumer->rebRemovedTopics, &topic) == NULL) { + return NULL; + } } // reb removed topics @@ -466,7 +484,9 @@ void *tDecodeSMqConsumerObj(const void *buf, SMqConsumerObj *pConsumer, int8_t s for (int32_t i = 0; i < sz; i++) { char *topic; buf = taosDecodeString(buf, &topic); - taosArrayPush(pConsumer->assignedTopics, &topic); + if (taosArrayPush(pConsumer->assignedTopics, &topic) == NULL) { + return NULL; + } } if (sver > 1) { @@ -597,7 +617,9 @@ int32_t tCloneSubscribeObj(const SMqSubscribeObj *pSub, SMqSubscribeObj **ppSub) .consumerId = pConsumerEp->consumerId, .vgs = taosArrayDup(pConsumerEp->vgs, (__array_item_dup_fn_t)tCloneSMqVgEp), }; - taosHashPut(pSubNew->consumerHash, &newEp.consumerId, sizeof(int64_t), &newEp, sizeof(SMqConsumerEp)); + if ((code = taosHashPut(pSubNew->consumerHash, &newEp.consumerId, sizeof(int64_t), &newEp, + sizeof(SMqConsumerEp))) != 0) + goto END; } pSubNew->unassignedVgs = taosArrayDup(pSub->unassignedVgs, (__array_item_dup_fn_t)tCloneSMqVgEp); pSubNew->offsetRows = taosArrayDup(pSub->offsetRows, NULL); @@ -672,7 +694,9 @@ void *tDecodeSubscribeObj(const void *buf, SMqSubscribeObj *pSub, int8_t sver) { for (int32_t i = 0; i < sz; i++) { SMqConsumerEp consumerEp = {0}; buf = tDecodeSMqConsumerEp(buf, &consumerEp, sver); - taosHashPut(pSub->consumerHash, &consumerEp.consumerId, sizeof(int64_t), &consumerEp, sizeof(SMqConsumerEp)); + if (taosHashPut(pSub->consumerHash, &consumerEp.consumerId, sizeof(int64_t), &consumerEp, sizeof(SMqConsumerEp)) != + 0) + return NULL; } buf = taosDecodeArray(buf, &pSub->unassignedVgs, (FDecode)tDecodeSMqVgEp, sizeof(SMqVgEp), sver); diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index cd3b613ff6..b02f754943 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -152,11 +152,11 @@ static int32_t mndCreateDefaultDnode(SMnode *pMnode) { dnodeObj.port = tsServerPort; tstrncpy(dnodeObj.fqdn, tsLocalFqdn, TSDB_FQDN_LEN); dnodeObj.fqdn[TSDB_FQDN_LEN - 1] = 0; - snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", tsLocalFqdn, tsServerPort); + (void)snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", tsLocalFqdn, tsServerPort); char *machineId = NULL; code = tGetMachineId(&machineId); if (machineId) { - memcpy(dnodeObj.machineId, machineId, TSDB_MACHINE_ID_LEN); + (void)memcpy(dnodeObj.machineId, machineId, TSDB_MACHINE_ID_LEN); taosMemoryFreeClear(machineId); } else { #if defined(TD_ENTERPRISE) && !defined(GRANTS_CFG) @@ -284,7 +284,7 @@ static int32_t mndDnodeActionInsert(SSdb *pSdb, SDnodeObj *pDnode) { pDnode->offlineReason = DND_REASON_STATUS_NOT_RECEIVED; char ep[TSDB_EP_LEN] = {0}; - snprintf(ep, TSDB_EP_LEN - 1, "%s:%u", pDnode->fqdn, pDnode->port); + (void)snprintf(ep, TSDB_EP_LEN - 1, "%s:%u", pDnode->fqdn, pDnode->port); tstrncpy(pDnode->ep, ep, TSDB_EP_LEN); return 0; } @@ -329,7 +329,7 @@ void mndReleaseDnode(SMnode *pMnode, SDnodeObj *pDnode) { SEpSet mndGetDnodeEpset(SDnodeObj *pDnode) { SEpSet epSet = {0}; - addEpIntoEpSet(&epSet, pDnode->fqdn, pDnode->port); + terrno = addEpIntoEpSet(&epSet, pDnode->fqdn, pDnode->port); return epSet; } @@ -428,7 +428,7 @@ static void mndGetDnodeEps(SMnode *pMnode, SArray *pDnodeEps) { if (mndIsMnode(pMnode, pDnode->id)) { dnodeEp.isMnode = 1; } - taosArrayPush(pDnodeEps, &dnodeEp); + (void)taosArrayPush(pDnodeEps, &dnodeEp); } } @@ -748,7 +748,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { if (statusReq.mload.roleTimeMs == 0) { statusReq.mload.roleTimeMs = statusReq.rebootTime; } - mndUpdateMnodeState(pObj, &statusReq.mload); + (void)mndUpdateMnodeState(pObj, &statusReq.mload); mndReleaseMnode(pMnode, pObj); } @@ -808,7 +808,9 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { pDnode->encryptionKeyChksum = statusReq.clusterCfg.encryptionKeyChksum; if (memcmp(pDnode->machineId, statusReq.machineId, TSDB_MACHINE_ID_LEN) != 0) { tstrncpy(pDnode->machineId, statusReq.machineId, TSDB_MACHINE_ID_LEN + 1); - mndUpdateDnodeObj(pMnode, pDnode); + if ((terrno = mndUpdateDnodeObj(pMnode, pDnode)) != 0) { + goto _OVER; + } } SStatusRsp statusRsp = {0}; @@ -827,7 +829,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { int32_t contLen = tSerializeSStatusRsp(NULL, 0, &statusRsp); void *pHead = rpcMallocCont(contLen); - tSerializeSStatusRsp(pHead, contLen, &statusRsp); + (void)tSerializeSStatusRsp(pHead, contLen, &statusRsp); taosArrayDestroy(statusRsp.pDnodeEps); pReq->info.rspLen = contLen; @@ -841,7 +843,7 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { _OVER: mndReleaseDnode(pMnode, pDnode); taosArrayDestroy(statusReq.pVloads); - mndUpdClusterInfo(pReq); + (void)mndUpdClusterInfo(pReq); return code; } @@ -873,7 +875,7 @@ static int32_t mndProcessNotifyReq(SRpcMsg *pReq) { mndReleaseVgroup(pMnode, pVgroup); } } - mndUpdClusterInfo(pReq); + code = mndUpdClusterInfo(pReq); _OVER: tFreeSNotifyReq(¬ifyReq); return code; @@ -890,7 +892,7 @@ static int32_t mndCreateDnode(SMnode *pMnode, SRpcMsg *pReq, SCreateDnodeReq *pC dnodeObj.updateTime = dnodeObj.createdTime; dnodeObj.port = pCreate->port; tstrncpy(dnodeObj.fqdn, pCreate->fqdn, TSDB_FQDN_LEN); - snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", pCreate->fqdn, pCreate->port); + (void)snprintf(dnodeObj.ep, TSDB_EP_LEN - 1, "%s:%u", pCreate->fqdn, pCreate->port); pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_GLOBAL, pReq, "create-dnode"); if (pTrans == NULL) { @@ -957,7 +959,7 @@ static int32_t mndProcessDnodeListReq(SRpcMsg *pReq) { goto _OVER; } - tSerializeSDnodeListRsp(pRsp, rspLen, &rsp); + (void)tSerializeSDnodeListRsp(pRsp, rspLen, &rsp); pReq->info.rspLen = rspLen; pReq->info.rsp = pRsp; @@ -976,26 +978,26 @@ _OVER: static void getSlowLogScopeString(int32_t scope, char* result){ if(scope == SLOW_LOG_TYPE_NULL) { - strcat(result, "NONE"); + (void)strcat(result, "NONE"); return; } while(scope > 0){ if(scope & SLOW_LOG_TYPE_QUERY) { - strcat(result, "QUERY"); + (void)strcat(result, "QUERY"); scope &= ~SLOW_LOG_TYPE_QUERY; } else if(scope & SLOW_LOG_TYPE_INSERT) { - strcat(result, "INSERT"); + (void)strcat(result, "INSERT"); scope &= ~SLOW_LOG_TYPE_INSERT; } else if(scope & SLOW_LOG_TYPE_OTHERS) { - strcat(result, "OTHERS"); + (void)strcat(result, "OTHERS"); scope &= ~SLOW_LOG_TYPE_OTHERS; } else{ - printf("invalid slow log scope:%d", scope); + (void)printf("invalid slow log scope:%d", scope); return; } if(scope > 0) { - strcat(result, "|"); + (void)strcat(result, "|"); } } } @@ -1017,52 +1019,79 @@ static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) { SVariablesInfo info = {0}; - strcpy(info.name, "statusInterval"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsStatusInterval); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "statusInterval"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsStatusInterval); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "timezone"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsTimezoneStr); - strcpy(info.scope, "both"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "timezone"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsTimezoneStr); + (void)strcpy(info.scope, "both"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "locale"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsLocale); - strcpy(info.scope, "both"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "locale"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsLocale); + (void)strcpy(info.scope, "both"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "charset"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsCharset); - strcpy(info.scope, "both"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "charset"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", tsCharset); + (void)strcpy(info.scope, "both"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "monitor"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsEnableMonitor); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "monitor"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsEnableMonitor); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "monitorInterval"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsMonitorInterval); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "monitorInterval"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsMonitorInterval); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "slowLogThreshold"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogThreshold); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "slowLogThreshold"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogThreshold); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } - strcpy(info.name, "slowLogMaxLen"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogMaxLen); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "slowLogMaxLen"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogMaxLen); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } char scopeStr[64] = {0}; getSlowLogScopeString(tsSlowLogScope, scopeStr); - strcpy(info.name, "slowLogScope"); - snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", scopeStr); - strcpy(info.scope, "server"); - taosArrayPush(rsp.variables, &info); + (void)strcpy(info.name, "slowLogScope"); + (void)snprintf(info.value, TSDB_CONFIG_VALUE_LEN, "%s", scopeStr); + (void)strcpy(info.scope, "server"); + if (taosArrayPush(rsp.variables, &info) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } int32_t rspLen = tSerializeSShowVariablesRsp(NULL, 0, &rsp); void *pRsp = rpcMallocCont(rspLen); @@ -1071,7 +1100,7 @@ static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) { goto _OVER; } - tSerializeSShowVariablesRsp(pRsp, rspLen, &rsp); + (void)tSerializeSShowVariablesRsp(pRsp, rspLen, &rsp); pReq->info.rspLen = rspLen; pReq->info.rsp = pRsp; @@ -1108,7 +1137,7 @@ static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq) { } char ep[TSDB_EP_LEN]; - snprintf(ep, TSDB_EP_LEN, "%s:%d", createReq.fqdn, createReq.port); + (void)snprintf(ep, TSDB_EP_LEN, "%s:%d", createReq.fqdn, createReq.port); pDnode = mndAcquireDnodeByEp(pMnode, ep); if (pDnode != NULL) { code = TSDB_CODE_MND_DNODE_ALREADY_EXIST; @@ -1122,7 +1151,7 @@ static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq) { } char obj[200] = {0}; - sprintf(obj, "%s:%d", createReq.fqdn, createReq.port); + (void)sprintf(obj, "%s:%d", createReq.fqdn, createReq.port); auditRecord(pReq, pMnode->clusterId, "createDnode", "", obj, createReq.sql, createReq.sqlLen); @@ -1261,7 +1290,7 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { if (pDnode == NULL) { int32_t err = terrno; char ep[TSDB_EP_LEN + 1] = {0}; - snprintf(ep, sizeof(ep), dropReq.fqdn, dropReq.port); + (void)snprintf(ep, sizeof(ep), dropReq.fqdn, dropReq.port); pDnode = mndAcquireDnodeByEp(pMnode, ep); if (pDnode == NULL) { code = err; @@ -1305,7 +1334,7 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; char obj1[30] = {0}; - sprintf(obj1, "%d", dropReq.dnodeId); + (void)sprintf(obj1, "%d", dropReq.dnodeId); auditRecord(pReq, pMnode->clusterId, "dropDnode", "", obj1, dropReq.sql, dropReq.sqlLen); @@ -1333,17 +1362,17 @@ static int32_t mndMCfg2DCfg(SMCfgDnodeReq *pMCfgReq, SDCfgDnodeReq *pDCfgReq) { } size_t optLen = p - pMCfgReq->config; - strncpy(pDCfgReq->config, pMCfgReq->config, optLen); + (void)strncpy(pDCfgReq->config, pMCfgReq->config, optLen); pDCfgReq->config[optLen] = 0; if (' ' == pMCfgReq->config[optLen]) { // 'key value' if (strlen(pMCfgReq->value) != 0) goto _err; - strcpy(pDCfgReq->value, p + 1); + (void)strcpy(pDCfgReq->value, p + 1); } else { // 'key' 'value' if (strlen(pMCfgReq->value) == 0) goto _err; - strcpy(pDCfgReq->value, pMCfgReq->value); + (void)strcpy(pDCfgReq->value, pMCfgReq->value); } TAOS_RETURN(code); @@ -1369,11 +1398,10 @@ static int32_t mndSendCfgDnodeReq(SMnode *pMnode, int32_t dnodeId, SDCfgDnodeReq void *pBuf = rpcMallocCont(bufLen); if (pBuf != NULL) { - tSerializeSDCfgDnodeReq(pBuf, bufLen, pDcfgReq); + (void)tSerializeSDCfgDnodeReq(pBuf, bufLen, pDcfgReq); mInfo("dnode:%d, send config req to dnode, config:%s value:%s", dnodeId, pDcfgReq->config, pDcfgReq->value); SRpcMsg rpcMsg = {.msgType = TDMT_DND_CONFIG_DNODE, .pCont = pBuf, .contLen = bufLen}; - tmsgSendReq(&epSet, &rpcMsg); - code = 0; + code = tmsgSendReq(&epSet, &rpcMsg); } } @@ -1400,7 +1428,7 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) { SDCfgDnodeReq dcfgReq = {0}; if (strcasecmp(cfgReq.config, "resetlog") == 0) { - strcpy(dcfgReq.config, "resetlog"); + (void)strcpy(dcfgReq.config, "resetlog"); #ifdef TD_ENTERPRISE } else if (strncasecmp(cfgReq.config, "s3blocksize", 11) == 0) { int32_t optLen = strlen("s3blocksize"); @@ -1435,7 +1463,7 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) { { // audit char obj[50] = {0}; - sprintf(obj, "%d", cfgReq.dnodeId); + (void)sprintf(obj, "%d", cfgReq.dnodeId); auditRecord(pReq, pMnode->clusterId, "alterDnode", obj, "", cfgReq.sql, cfgReq.sqlLen); } @@ -1510,10 +1538,10 @@ static int32_t mndProcessCreateEncryptKeyReqImpl(SRpcMsg *pReq, int32_t dnodeId, void *pBuf = rpcMallocCont(bufLen); if (pBuf != NULL) { - tSerializeSDCfgDnodeReq(pBuf, bufLen, pDcfgReq); + (void)tSerializeSDCfgDnodeReq(pBuf, bufLen, pDcfgReq); SRpcMsg rpcMsg = {.msgType = TDMT_DND_CREATE_ENCRYPT_KEY, .pCont = pBuf, .contLen = bufLen}; if (0 == tmsgSendReq(&epSet, &rpcMsg)) { - atomic_add_fetch_16(&pMnode->encryptMgmt.nEncrypt, 1); + (void)atomic_add_fetch_16(&pMnode->encryptMgmt.nEncrypt, 1); } } } @@ -1597,41 +1625,41 @@ static int32_t mndRetrieveConfigs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p int32_t cols = 0; cfgOpts[totalRows] = "statusInterval"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsStatusInterval); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsStatusInterval); totalRows++; cfgOpts[totalRows] = "timezone"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsTimezoneStr); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsTimezoneStr); totalRows++; cfgOpts[totalRows] = "locale"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsLocale); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsLocale); totalRows++; cfgOpts[totalRows] = "charset"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsCharset); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", tsCharset); totalRows++; cfgOpts[totalRows] = "monitor"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsEnableMonitor); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsEnableMonitor); totalRows++; cfgOpts[totalRows] = "monitorInterval"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsMonitorInterval); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsMonitorInterval); totalRows++; cfgOpts[totalRows] = "slowLogThreshold"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogThreshold); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogThreshold); totalRows++; cfgOpts[totalRows] = "slowLogMaxLen"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogMaxLen); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%d", tsSlowLogMaxLen); totalRows++; char scopeStr[64] = {0}; getSlowLogScopeString(tsSlowLogScope, scopeStr); cfgOpts[totalRows] = "slowLogScope"; - snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", scopeStr); + (void)snprintf(cfgVals[totalRows], TSDB_CONFIG_VALUE_LEN, "%s", scopeStr); totalRows++; char buf[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0}; @@ -1642,11 +1670,11 @@ static int32_t mndRetrieveConfigs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *p STR_WITH_MAXSIZE_TO_VARSTR(buf, cfgOpts[i], TSDB_CONFIG_OPTION_LEN); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)buf, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)buf, false); STR_WITH_MAXSIZE_TO_VARSTR(bufVal, cfgVals[i], TSDB_CONFIG_VALUE_LEN); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)bufVal, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)bufVal, false); numOfRows++; } @@ -1675,19 +1703,19 @@ static int32_t mndRetrieveDnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB cols = 0; SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->id, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->id, false); STR_WITH_MAXSIZE_TO_VARSTR(buf, pDnode->ep, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, buf, false); + (void)colDataSetVal(pColInfo, numOfRows, buf, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); int16_t id = mndGetVnodesNum(pMnode, pDnode->id); - colDataSetVal(pColInfo, numOfRows, (const char *)&id, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&id, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->numOfSupportVnodes, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->numOfSupportVnodes, false); const char *status = "ready"; if (objStatus == SDB_STATUS_CREATING) status = "creating"; @@ -1703,19 +1731,19 @@ static int32_t mndRetrieveDnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB STR_TO_VARSTR(buf, status); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, buf, false); + (void)colDataSetVal(pColInfo, numOfRows, buf, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->createdTime, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->createdTime, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->rebootTime, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pDnode->rebootTime, false); char *b = taosMemoryCalloc(VARSTR_HEADER_SIZE + strlen(offlineReason[pDnode->offlineReason]) + 1, 1); STR_TO_VARSTR(b, online ? "" : offlineReason[pDnode->offlineReason]); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, b, false); + (void)colDataSetVal(pColInfo, numOfRows, b, false); taosMemoryFreeClear(b); #ifdef TD_ENTERPRISE @@ -1772,7 +1800,7 @@ SArray *mndGetAllDnodeFqdns(SMnode *pMnode) { if (pIter == NULL) break; char *fqdn = taosStrdup(pObj->fqdn); - taosArrayPush(fqdns, &fqdn); + (void)taosArrayPush(fqdns, &fqdn); sdbRelease(pSdb, pObj); } return fqdns; diff --git a/source/dnode/mnode/impl/src/mndDump.c b/source/dnode/mnode/impl/src/mndDump.c index 22dbc8eb57..ca7b5bbac6 100644 --- a/source/dnode/mnode/impl/src/mndDump.c +++ b/source/dnode/mnode/impl/src/mndDump.c @@ -41,7 +41,7 @@ int32_t sendSyncReq(const SEpSet *pEpSet, SRpcMsg *pMsg) { char *i642str(int64_t val) { static char str[24] = {0}; - snprintf(str, sizeof(str), "%" PRId64, val); + (void)snprintf(str, sizeof(str), "%" PRId64, val); return str; } @@ -55,18 +55,18 @@ void dumpFunc(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", pObj->name); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "funcType", i642str(pObj->funcType)); - tjsonAddStringToObject(item, "scriptType", i642str(pObj->scriptType)); - tjsonAddStringToObject(item, "align", i642str(pObj->align)); - tjsonAddStringToObject(item, "outputType", i642str(pObj->outputType)); - tjsonAddStringToObject(item, "outputLen", i642str(pObj->outputLen)); - tjsonAddStringToObject(item, "bufSize", i642str(pObj->bufSize)); - tjsonAddStringToObject(item, "signature", i642str(pObj->signature)); - tjsonAddStringToObject(item, "commentSize", i642str(pObj->commentSize)); - tjsonAddStringToObject(item, "codeSize", i642str(pObj->codeSize)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", pObj->name); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "funcType", i642str(pObj->funcType)); + (void)tjsonAddStringToObject(item, "scriptType", i642str(pObj->scriptType)); + (void)tjsonAddStringToObject(item, "align", i642str(pObj->align)); + (void)tjsonAddStringToObject(item, "outputType", i642str(pObj->outputType)); + (void)tjsonAddStringToObject(item, "outputLen", i642str(pObj->outputLen)); + (void)tjsonAddStringToObject(item, "bufSize", i642str(pObj->bufSize)); + (void)tjsonAddStringToObject(item, "signature", i642str(pObj->signature)); + (void)tjsonAddStringToObject(item, "commentSize", i642str(pObj->commentSize)); + (void)tjsonAddStringToObject(item, "codeSize", i642str(pObj->codeSize)); sdbRelease(pSdb, pObj); } } @@ -84,56 +84,56 @@ void dumpDb(SSdb *pSdb, SJson *json) { SJson *item = tjsonCreateObject(); tjsonAddItemToObject(items, "db", item); - tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); - tjsonAddStringToObject(item, "acct", pObj->acct); - tjsonAddStringToObject(item, "createUser", pObj->createUser); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); - tjsonAddStringToObject(item, "cfgVersion", i642str(pObj->cfgVersion)); - tjsonAddStringToObject(item, "vgVersion", i642str(pObj->vgVersion)); - tjsonAddStringToObject(item, "numOfVgroups", i642str(pObj->cfg.numOfVgroups)); - tjsonAddStringToObject(item, "numOfStables", i642str(pObj->cfg.numOfStables)); - tjsonAddStringToObject(item, "buffer", i642str(pObj->cfg.buffer)); - tjsonAddStringToObject(item, "pageSize", i642str(pObj->cfg.pageSize)); - tjsonAddStringToObject(item, "pages", i642str(pObj->cfg.pages)); - tjsonAddStringToObject(item, "cacheLastSize", i642str(pObj->cfg.cacheLastSize)); - tjsonAddStringToObject(item, "daysPerFile", i642str(pObj->cfg.daysPerFile)); - tjsonAddStringToObject(item, "daysToKeep0", i642str(pObj->cfg.daysToKeep0)); - tjsonAddStringToObject(item, "daysToKeep1", i642str(pObj->cfg.daysToKeep1)); - tjsonAddStringToObject(item, "daysToKeep2", i642str(pObj->cfg.daysToKeep2)); - tjsonAddStringToObject(item, "minRows", i642str(pObj->cfg.minRows)); - tjsonAddStringToObject(item, "maxRows", i642str(pObj->cfg.maxRows)); - tjsonAddStringToObject(item, "precision", i642str(pObj->cfg.precision)); - tjsonAddStringToObject(item, "compression", i642str(pObj->cfg.compression)); - tjsonAddStringToObject(item, "encryptAlgorithm", i642str(pObj->cfg.encryptAlgorithm)); - tjsonAddStringToObject(item, "replications", i642str(pObj->cfg.replications)); - tjsonAddStringToObject(item, "strict", i642str(pObj->cfg.strict)); - tjsonAddStringToObject(item, "cacheLast", i642str(pObj->cfg.cacheLast)); - tjsonAddStringToObject(item, "hashMethod", i642str(pObj->cfg.hashMethod)); - tjsonAddStringToObject(item, "hashPrefix", i642str(pObj->cfg.hashPrefix)); - tjsonAddStringToObject(item, "hashSuffix", i642str(pObj->cfg.hashSuffix)); - tjsonAddStringToObject(item, "sstTrigger", i642str(pObj->cfg.sstTrigger)); - tjsonAddStringToObject(item, "tsdbPageSize", i642str(pObj->cfg.tsdbPageSize)); - tjsonAddStringToObject(item, "schemaless", i642str(pObj->cfg.schemaless)); - tjsonAddStringToObject(item, "walLevel", i642str(pObj->cfg.walLevel)); - tjsonAddStringToObject(item, "walFsyncPeriod", i642str(pObj->cfg.walFsyncPeriod)); - tjsonAddStringToObject(item, "walRetentionPeriod", i642str(pObj->cfg.walRetentionPeriod)); - tjsonAddStringToObject(item, "walRetentionSize", i642str(pObj->cfg.walRetentionSize)); - tjsonAddStringToObject(item, "walRollPeriod", i642str(pObj->cfg.walRollPeriod)); - tjsonAddStringToObject(item, "walSegmentSize", i642str(pObj->cfg.walSegmentSize)); + (void)tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); + (void)tjsonAddStringToObject(item, "acct", pObj->acct); + (void)tjsonAddStringToObject(item, "createUser", pObj->createUser); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); + (void)tjsonAddStringToObject(item, "cfgVersion", i642str(pObj->cfgVersion)); + (void)tjsonAddStringToObject(item, "vgVersion", i642str(pObj->vgVersion)); + (void)tjsonAddStringToObject(item, "numOfVgroups", i642str(pObj->cfg.numOfVgroups)); + (void)tjsonAddStringToObject(item, "numOfStables", i642str(pObj->cfg.numOfStables)); + (void)tjsonAddStringToObject(item, "buffer", i642str(pObj->cfg.buffer)); + (void)tjsonAddStringToObject(item, "pageSize", i642str(pObj->cfg.pageSize)); + (void)tjsonAddStringToObject(item, "pages", i642str(pObj->cfg.pages)); + (void)tjsonAddStringToObject(item, "cacheLastSize", i642str(pObj->cfg.cacheLastSize)); + (void)tjsonAddStringToObject(item, "daysPerFile", i642str(pObj->cfg.daysPerFile)); + (void)tjsonAddStringToObject(item, "daysToKeep0", i642str(pObj->cfg.daysToKeep0)); + (void)tjsonAddStringToObject(item, "daysToKeep1", i642str(pObj->cfg.daysToKeep1)); + (void)tjsonAddStringToObject(item, "daysToKeep2", i642str(pObj->cfg.daysToKeep2)); + (void)tjsonAddStringToObject(item, "minRows", i642str(pObj->cfg.minRows)); + (void)tjsonAddStringToObject(item, "maxRows", i642str(pObj->cfg.maxRows)); + (void)tjsonAddStringToObject(item, "precision", i642str(pObj->cfg.precision)); + (void)tjsonAddStringToObject(item, "compression", i642str(pObj->cfg.compression)); + (void)tjsonAddStringToObject(item, "encryptAlgorithm", i642str(pObj->cfg.encryptAlgorithm)); + (void)tjsonAddStringToObject(item, "replications", i642str(pObj->cfg.replications)); + (void)tjsonAddStringToObject(item, "strict", i642str(pObj->cfg.strict)); + (void)tjsonAddStringToObject(item, "cacheLast", i642str(pObj->cfg.cacheLast)); + (void)tjsonAddStringToObject(item, "hashMethod", i642str(pObj->cfg.hashMethod)); + (void)tjsonAddStringToObject(item, "hashPrefix", i642str(pObj->cfg.hashPrefix)); + (void)tjsonAddStringToObject(item, "hashSuffix", i642str(pObj->cfg.hashSuffix)); + (void)tjsonAddStringToObject(item, "sstTrigger", i642str(pObj->cfg.sstTrigger)); + (void)tjsonAddStringToObject(item, "tsdbPageSize", i642str(pObj->cfg.tsdbPageSize)); + (void)tjsonAddStringToObject(item, "schemaless", i642str(pObj->cfg.schemaless)); + (void)tjsonAddStringToObject(item, "walLevel", i642str(pObj->cfg.walLevel)); + (void)tjsonAddStringToObject(item, "walFsyncPeriod", i642str(pObj->cfg.walFsyncPeriod)); + (void)tjsonAddStringToObject(item, "walRetentionPeriod", i642str(pObj->cfg.walRetentionPeriod)); + (void)tjsonAddStringToObject(item, "walRetentionSize", i642str(pObj->cfg.walRetentionSize)); + (void)tjsonAddStringToObject(item, "walRollPeriod", i642str(pObj->cfg.walRollPeriod)); + (void)tjsonAddStringToObject(item, "walSegmentSize", i642str(pObj->cfg.walSegmentSize)); - tjsonAddStringToObject(item, "numOfRetensions", i642str(pObj->cfg.numOfRetensions)); + (void)tjsonAddStringToObject(item, "numOfRetensions", i642str(pObj->cfg.numOfRetensions)); for (int32_t i = 0; i < pObj->cfg.numOfRetensions; ++i) { SJson *rentensions = tjsonAddArrayToObject(item, "rentensions"); SJson *rentension = tjsonCreateObject(); - tjsonAddItemToArray(rentensions, rentension); + (void)tjsonAddItemToArray(rentensions, rentension); SRetention *pRetension = taosArrayGet(pObj->cfg.pRetensions, i); - tjsonAddStringToObject(item, "freq", i642str(pRetension->freq)); - tjsonAddStringToObject(item, "freqUnit", i642str(pRetension->freqUnit)); - tjsonAddStringToObject(item, "keep", i642str(pRetension->keep)); - tjsonAddStringToObject(item, "keepUnit", i642str(pRetension->keepUnit)); + (void)tjsonAddStringToObject(item, "freq", i642str(pRetension->freq)); + (void)tjsonAddStringToObject(item, "freqUnit", i642str(pRetension->freqUnit)); + (void)tjsonAddStringToObject(item, "keep", i642str(pRetension->keep)); + (void)tjsonAddStringToObject(item, "keepUnit", i642str(pRetension->keepUnit)); } sdbRelease(pSdb, pObj); @@ -150,55 +150,55 @@ void dumpStb(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)); - tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); - tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); - tjsonAddStringToObject(item, "tagVer", i642str(pObj->tagVer)); - tjsonAddStringToObject(item, "colVer", i642str(pObj->colVer)); - tjsonAddStringToObject(item, "smaVer", i642str(pObj->smaVer)); - tjsonAddStringToObject(item, "nextColId", i642str(pObj->nextColId)); - tjsonAddStringToObject(item, "watermark1", i642str(pObj->watermark[0])); - tjsonAddStringToObject(item, "watermark2", i642str(pObj->watermark[1])); - tjsonAddStringToObject(item, "maxdelay0", i642str(pObj->maxdelay[0])); - tjsonAddStringToObject(item, "maxdelay1", i642str(pObj->maxdelay[1])); - tjsonAddStringToObject(item, "ttl", i642str(pObj->ttl)); - tjsonAddStringToObject(item, "numOfFuncs", i642str(pObj->numOfFuncs)); - tjsonAddStringToObject(item, "commentLen", i642str(pObj->commentLen)); - tjsonAddStringToObject(item, "ast1Len", i642str(pObj->ast1Len)); - tjsonAddStringToObject(item, "ast2Len", i642str(pObj->ast2Len)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)); + (void)tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); + (void)tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); + (void)tjsonAddStringToObject(item, "tagVer", i642str(pObj->tagVer)); + (void)tjsonAddStringToObject(item, "colVer", i642str(pObj->colVer)); + (void)tjsonAddStringToObject(item, "smaVer", i642str(pObj->smaVer)); + (void)tjsonAddStringToObject(item, "nextColId", i642str(pObj->nextColId)); + (void)tjsonAddStringToObject(item, "watermark1", i642str(pObj->watermark[0])); + (void)tjsonAddStringToObject(item, "watermark2", i642str(pObj->watermark[1])); + (void)tjsonAddStringToObject(item, "maxdelay0", i642str(pObj->maxdelay[0])); + (void)tjsonAddStringToObject(item, "maxdelay1", i642str(pObj->maxdelay[1])); + (void)tjsonAddStringToObject(item, "ttl", i642str(pObj->ttl)); + (void)tjsonAddStringToObject(item, "numOfFuncs", i642str(pObj->numOfFuncs)); + (void)tjsonAddStringToObject(item, "commentLen", i642str(pObj->commentLen)); + (void)tjsonAddStringToObject(item, "ast1Len", i642str(pObj->ast1Len)); + (void)tjsonAddStringToObject(item, "ast2Len", i642str(pObj->ast2Len)); - tjsonAddStringToObject(item, "numOfColumns", i642str(pObj->numOfColumns)); + (void)tjsonAddStringToObject(item, "numOfColumns", i642str(pObj->numOfColumns)); SJson *columns = tjsonAddArrayToObject(item, "columns"); for (int32_t i = 0; i < pObj->numOfColumns; ++i) { SJson *column = tjsonCreateObject(); - tjsonAddItemToArray(columns, column); + (void)tjsonAddItemToArray(columns, column); SSchema *pColumn = &pObj->pColumns[i]; - tjsonAddStringToObject(column, "type", i642str(pColumn->type)); - tjsonAddStringToObject(column, "typestr", tDataTypes[pColumn->type].name); - tjsonAddStringToObject(column, "flags", i642str(pColumn->flags)); - tjsonAddStringToObject(column, "colId", i642str(pColumn->colId)); - tjsonAddStringToObject(column, "bytes", i642str(pColumn->bytes)); - tjsonAddStringToObject(column, "name", pColumn->name); + (void)tjsonAddStringToObject(column, "type", i642str(pColumn->type)); + (void)tjsonAddStringToObject(column, "typestr", tDataTypes[pColumn->type].name); + (void)tjsonAddStringToObject(column, "flags", i642str(pColumn->flags)); + (void)tjsonAddStringToObject(column, "colId", i642str(pColumn->colId)); + (void)tjsonAddStringToObject(column, "bytes", i642str(pColumn->bytes)); + (void)tjsonAddStringToObject(column, "name", pColumn->name); } - tjsonAddStringToObject(item, "numOfTags", i642str(pObj->numOfTags)); + (void)tjsonAddStringToObject(item, "numOfTags", i642str(pObj->numOfTags)); SJson *tags = tjsonAddArrayToObject(item, "tags"); for (int32_t i = 0; i < pObj->numOfTags; ++i) { SJson *tag = tjsonCreateObject(); - tjsonAddItemToArray(tags, tag); + (void)tjsonAddItemToArray(tags, tag); SSchema *pTag = &pObj->pTags[i]; - tjsonAddStringToObject(tag, "type", i642str(pTag->type)); - tjsonAddStringToObject(tag, "typestr", tDataTypes[pTag->type].name); - tjsonAddStringToObject(tag, "flags", i642str(pTag->flags)); - tjsonAddStringToObject(tag, "colId", i642str(pTag->colId)); - tjsonAddStringToObject(tag, "bytes", i642str(pTag->bytes)); - tjsonAddStringToObject(tag, "name", pTag->name); + (void)tjsonAddStringToObject(tag, "type", i642str(pTag->type)); + (void)tjsonAddStringToObject(tag, "typestr", tDataTypes[pTag->type].name); + (void)tjsonAddStringToObject(tag, "flags", i642str(pTag->flags)); + (void)tjsonAddStringToObject(tag, "colId", i642str(pTag->colId)); + (void)tjsonAddStringToObject(tag, "bytes", i642str(pTag->bytes)); + (void)tjsonAddStringToObject(tag, "name", pTag->name); } sdbRelease(pSdb, pObj); @@ -215,27 +215,27 @@ void dumpSma(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)); - tjsonAddStringToObject(item, "stb", mndGetStbStr(pObj->stb)); - tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)); - tjsonAddStringToObject(item, "dstTbName", mndGetStbStr(pObj->dstTbName)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); - tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); - tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); - tjsonAddStringToObject(item, "dstTbUid", i642str(pObj->dstTbUid)); - tjsonAddStringToObject(item, "intervalUnit", i642str(pObj->intervalUnit)); - tjsonAddStringToObject(item, "slidingUnit", i642str(pObj->slidingUnit)); - tjsonAddStringToObject(item, "timezone", i642str(pObj->timezone)); - tjsonAddStringToObject(item, "dstVgId", i642str(pObj->dstVgId)); - tjsonAddStringToObject(item, "interval", i642str(pObj->interval)); - tjsonAddStringToObject(item, "offset", i642str(pObj->offset)); - tjsonAddStringToObject(item, "sliding", i642str(pObj->sliding)); - tjsonAddStringToObject(item, "exprLen", i642str(pObj->exprLen)); - tjsonAddStringToObject(item, "tagsFilterLen", i642str(pObj->tagsFilterLen)); - tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); - tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", mndGetStbStr(pObj->name)); + (void)tjsonAddStringToObject(item, "stb", mndGetStbStr(pObj->stb)); + (void)tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->db)); + (void)tjsonAddStringToObject(item, "dstTbName", mndGetStbStr(pObj->dstTbName)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); + (void)tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); + (void)tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); + (void)tjsonAddStringToObject(item, "dstTbUid", i642str(pObj->dstTbUid)); + (void)tjsonAddStringToObject(item, "intervalUnit", i642str(pObj->intervalUnit)); + (void)tjsonAddStringToObject(item, "slidingUnit", i642str(pObj->slidingUnit)); + (void)tjsonAddStringToObject(item, "timezone", i642str(pObj->timezone)); + (void)tjsonAddStringToObject(item, "dstVgId", i642str(pObj->dstVgId)); + (void)tjsonAddStringToObject(item, "interval", i642str(pObj->interval)); + (void)tjsonAddStringToObject(item, "offset", i642str(pObj->offset)); + (void)tjsonAddStringToObject(item, "sliding", i642str(pObj->sliding)); + (void)tjsonAddStringToObject(item, "exprLen", i642str(pObj->exprLen)); + (void)tjsonAddStringToObject(item, "tagsFilterLen", i642str(pObj->tagsFilterLen)); + (void)tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); + (void)tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)); sdbRelease(pSdb, pObj); } } @@ -250,22 +250,22 @@ void dumpVgroup(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "vgId", i642str(pObj->vgId)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "version", i642str(pObj->version)); - tjsonAddStringToObject(item, "hashBegin", i642str(pObj->hashBegin)); - tjsonAddStringToObject(item, "hashEnd", i642str(pObj->hashEnd)); - tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->dbName)); - tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); - tjsonAddStringToObject(item, "isTsma", i642str(pObj->isTsma)); - tjsonAddStringToObject(item, "replica", i642str(pObj->replica)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "vgId", i642str(pObj->vgId)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "version", i642str(pObj->version)); + (void)tjsonAddStringToObject(item, "hashBegin", i642str(pObj->hashBegin)); + (void)tjsonAddStringToObject(item, "hashEnd", i642str(pObj->hashEnd)); + (void)tjsonAddStringToObject(item, "db", mndGetDbStr(pObj->dbName)); + (void)tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); + (void)tjsonAddStringToObject(item, "isTsma", i642str(pObj->isTsma)); + (void)tjsonAddStringToObject(item, "replica", i642str(pObj->replica)); for (int32_t i = 0; i < pObj->replica; ++i) { SJson *replicas = tjsonAddArrayToObject(item, "replicas"); SJson *replica = tjsonCreateObject(); - tjsonAddItemToArray(replicas, replica); - tjsonAddStringToObject(replica, "dnodeId", i642str(pObj->vnodeGid[i].dnodeId)); + (void)tjsonAddItemToArray(replicas, replica); + (void)tjsonAddStringToObject(replica, "dnodeId", i642str(pObj->vnodeGid[i].dnodeId)); } sdbRelease(pSdb, pObj); } @@ -281,23 +281,23 @@ void dumpTopic(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); - tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->db)); - tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); - tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); - tjsonAddStringToObject(item, "version", i642str(pObj->version)); - tjsonAddStringToObject(item, "subType", i642str(pObj->subType)); - tjsonAddStringToObject(item, "withMeta", i642str(pObj->withMeta)); - tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); - tjsonAddStringToObject(item, "stbName", mndGetStableStr(pObj->stbName)); - tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); - tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)); - tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); - tjsonAddStringToObject(item, "ntbUid", i642str(pObj->ntbUid)); - tjsonAddStringToObject(item, "ctbStbUid", i642str(pObj->ctbStbUid)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); + (void)tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->db)); + (void)tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); + (void)tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); + (void)tjsonAddStringToObject(item, "version", i642str(pObj->version)); + (void)tjsonAddStringToObject(item, "subType", i642str(pObj->subType)); + (void)tjsonAddStringToObject(item, "withMeta", i642str(pObj->withMeta)); + (void)tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); + (void)tjsonAddStringToObject(item, "stbName", mndGetStableStr(pObj->stbName)); + (void)tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); + (void)tjsonAddStringToObject(item, "astLen", i642str(pObj->astLen)); + (void)tjsonAddStringToObject(item, "sqlLen", i642str(pObj->sqlLen)); + (void)tjsonAddStringToObject(item, "ntbUid", i642str(pObj->ntbUid)); + (void)tjsonAddStringToObject(item, "ctbStbUid", i642str(pObj->ctbStbUid)); sdbRelease(pSdb, pObj); } } @@ -312,9 +312,9 @@ void dumpConsumer(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "consumerId", i642str(pObj->consumerId)); - tjsonAddStringToObject(item, "cgroup", pObj->cgroup); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "consumerId", i642str(pObj->consumerId)); + (void)tjsonAddStringToObject(item, "cgroup", pObj->cgroup); sdbRelease(pSdb, pObj); } } @@ -329,10 +329,10 @@ void dumpSubscribe(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "key", pObj->key); - tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); - tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "key", pObj->key); + (void)tjsonAddStringToObject(item, "dbUid", i642str(pObj->dbUid)); + (void)tjsonAddStringToObject(item, "stbUid", i642str(pObj->stbUid)); sdbRelease(pSdb, pObj); } } @@ -347,26 +347,26 @@ void dumpStream(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); - tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "version", i642str(pObj->version)); - tjsonAddStringToObject(item, "totalLevel", i642str(pObj->totalLevel)); - tjsonAddStringToObject(item, "smaId", i642str(pObj->smaId)); - tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); - tjsonAddStringToObject(item, "status", i642str(pObj->status)); - tjsonAddStringToObject(item, "igExpired", i642str(pObj->conf.igExpired)); - tjsonAddStringToObject(item, "trigger", i642str(pObj->conf.trigger)); - tjsonAddStringToObject(item, "triggerParam", i642str(pObj->conf.triggerParam)); - tjsonAddStringToObject(item, "watermark", i642str(pObj->conf.watermark)); - tjsonAddStringToObject(item, "sourceDbUid", i642str(pObj->sourceDbUid)); - tjsonAddStringToObject(item, "targetDbUid", i642str(pObj->targetDbUid)); - tjsonAddStringToObject(item, "sourceDb", mndGetDbStr(pObj->sourceDb)); - tjsonAddStringToObject(item, "targetDb", mndGetDbStr(pObj->targetDb)); - tjsonAddStringToObject(item, "targetSTbName", mndGetStbStr(pObj->targetSTbName)); - tjsonAddStringToObject(item, "targetStbUid", i642str(pObj->targetStbUid)); - tjsonAddStringToObject(item, "fixedSinkVgId", i642str(pObj->fixedSinkVgId)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", mndGetDbStr(pObj->name)); + (void)tjsonAddStringToObject(item, "createTime", i642str(pObj->createTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "version", i642str(pObj->version)); + (void)tjsonAddStringToObject(item, "totalLevel", i642str(pObj->totalLevel)); + (void)tjsonAddStringToObject(item, "smaId", i642str(pObj->smaId)); + (void)tjsonAddStringToObject(item, "uid", i642str(pObj->uid)); + (void)tjsonAddStringToObject(item, "status", i642str(pObj->status)); + (void)tjsonAddStringToObject(item, "igExpired", i642str(pObj->conf.igExpired)); + (void)tjsonAddStringToObject(item, "trigger", i642str(pObj->conf.trigger)); + (void)tjsonAddStringToObject(item, "triggerParam", i642str(pObj->conf.triggerParam)); + (void)tjsonAddStringToObject(item, "watermark", i642str(pObj->conf.watermark)); + (void)tjsonAddStringToObject(item, "sourceDbUid", i642str(pObj->sourceDbUid)); + (void)tjsonAddStringToObject(item, "targetDbUid", i642str(pObj->targetDbUid)); + (void)tjsonAddStringToObject(item, "sourceDb", mndGetDbStr(pObj->sourceDb)); + (void)tjsonAddStringToObject(item, "targetDb", mndGetDbStr(pObj->targetDb)); + (void)tjsonAddStringToObject(item, "targetSTbName", mndGetStbStr(pObj->targetSTbName)); + (void)tjsonAddStringToObject(item, "targetStbUid", i642str(pObj->targetStbUid)); + (void)tjsonAddStringToObject(item, "fixedSinkVgId", i642str(pObj->fixedSinkVgId)); sdbRelease(pSdb, pObj); } } @@ -381,11 +381,11 @@ void dumpAcct(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "acct", pObj->acct); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "acctId", i642str(pObj->acctId)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "acct", pObj->acct); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "acctId", i642str(pObj->acctId)); sdbRelease(pSdb, pObj); } } @@ -404,16 +404,16 @@ void dumpUser(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "name", pObj->user); - tjsonAddStringToObject(item, "acct", pObj->acct); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "superUser", i642str(pObj->superUser)); - tjsonAddStringToObject(item, "authVersion", i642str(pObj->authVersion)); - tjsonAddStringToObject(item, "passVersion", i642str(pObj->passVersion)); - tjsonAddStringToObject(item, "numOfReadDbs", i642str(taosHashGetSize(pObj->readDbs))); - tjsonAddStringToObject(item, "numOfWriteDbs", i642str(taosHashGetSize(pObj->writeDbs))); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "name", pObj->user); + (void)tjsonAddStringToObject(item, "acct", pObj->acct); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "superUser", i642str(pObj->superUser)); + (void)tjsonAddStringToObject(item, "authVersion", i642str(pObj->authVersion)); + (void)tjsonAddStringToObject(item, "passVersion", i642str(pObj->passVersion)); + (void)tjsonAddStringToObject(item, "numOfReadDbs", i642str(taosHashGetSize(pObj->readDbs))); + (void)tjsonAddStringToObject(item, "numOfWriteDbs", i642str(taosHashGetSize(pObj->writeDbs))); sdbRelease(pSdb, pObj); } } @@ -428,12 +428,12 @@ void dumpDnode(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "port", i642str(pObj->port)); - tjsonAddStringToObject(item, "fqdn", pObj->fqdn); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "port", i642str(pObj->port)); + (void)tjsonAddStringToObject(item, "fqdn", pObj->fqdn); sdbRelease(pSdb, pObj); } } @@ -448,10 +448,10 @@ void dumpSnode(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); sdbRelease(pSdb, pObj); } } @@ -466,10 +466,10 @@ void dumpQnode(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); sdbRelease(pSdb, pObj); } } @@ -484,10 +484,10 @@ void dumpMnode(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); sdbRelease(pSdb, pObj); } } @@ -502,11 +502,11 @@ void dumpCluster(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); - tjsonAddStringToObject(item, "name", pObj->name); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "updateTime", i642str(pObj->updateTime)); + (void)tjsonAddStringToObject(item, "name", pObj->name); sdbRelease(pSdb, pObj); } } @@ -521,29 +521,29 @@ void dumpTrans(SSdb *pSdb, SJson *json) { if (pIter == NULL) break; SJson *item = tjsonCreateObject(); - tjsonAddItemToArray(items, item); - tjsonAddStringToObject(item, "id", i642str(pObj->id)); - tjsonAddStringToObject(item, "stage", i642str(pObj->stage)); - tjsonAddStringToObject(item, "policy", i642str(pObj->policy)); - tjsonAddStringToObject(item, "conflict", i642str(pObj->conflict)); - tjsonAddStringToObject(item, "exec", i642str(pObj->exec)); - tjsonAddStringToObject(item, "oper", i642str(pObj->oper)); - tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); - tjsonAddStringToObject(item, "dbname", pObj->dbname); - tjsonAddStringToObject(item, "stbname", pObj->stbname); - tjsonAddStringToObject(item, "opername", pObj->opername); - tjsonAddStringToObject(item, "commitLogNum", i642str(taosArrayGetSize(pObj->commitActions))); - tjsonAddStringToObject(item, "redoActionNum", i642str(taosArrayGetSize(pObj->redoActions))); - tjsonAddStringToObject(item, "undoActionNum", i642str(taosArrayGetSize(pObj->undoActions))); + (void)tjsonAddItemToArray(items, item); + (void)tjsonAddStringToObject(item, "id", i642str(pObj->id)); + (void)tjsonAddStringToObject(item, "stage", i642str(pObj->stage)); + (void)tjsonAddStringToObject(item, "policy", i642str(pObj->policy)); + (void)tjsonAddStringToObject(item, "conflict", i642str(pObj->conflict)); + (void)tjsonAddStringToObject(item, "exec", i642str(pObj->exec)); + (void)tjsonAddStringToObject(item, "oper", i642str(pObj->oper)); + (void)tjsonAddStringToObject(item, "createdTime", i642str(pObj->createdTime)); + (void)tjsonAddStringToObject(item, "dbname", pObj->dbname); + (void)tjsonAddStringToObject(item, "stbname", pObj->stbname); + (void)tjsonAddStringToObject(item, "opername", pObj->opername); + (void)tjsonAddStringToObject(item, "commitLogNum", i642str(taosArrayGetSize(pObj->commitActions))); + (void)tjsonAddStringToObject(item, "redoActionNum", i642str(taosArrayGetSize(pObj->redoActions))); + (void)tjsonAddStringToObject(item, "undoActionNum", i642str(taosArrayGetSize(pObj->undoActions))); sdbRelease(pSdb, pObj); } } void dumpHeader(SSdb *pSdb, SJson *json) { - tjsonAddStringToObject(json, "sver", i642str(1)); - tjsonAddStringToObject(json, "applyIndex", i642str(pSdb->applyIndex)); - tjsonAddStringToObject(json, "applyTerm", i642str(pSdb->applyTerm)); - tjsonAddStringToObject(json, "applyConfig", i642str(pSdb->applyConfig)); + (void)tjsonAddStringToObject(json, "sver", i642str(1)); + (void)tjsonAddStringToObject(json, "applyIndex", i642str(pSdb->applyIndex)); + (void)tjsonAddStringToObject(json, "applyTerm", i642str(pSdb->applyTerm)); + (void)tjsonAddStringToObject(json, "applyConfig", i642str(pSdb->applyConfig)); SJson *maxIdsJson = tjsonCreateObject(); tjsonAddItemToObject(json, "maxIds", maxIdsJson); @@ -553,7 +553,7 @@ void dumpHeader(SSdb *pSdb, SJson *json) { if (i < SDB_MAX) { maxId = pSdb->maxId[i]; } - tjsonAddStringToObject(maxIdsJson, sdbTableName(i), i642str(maxId)); + (void)tjsonAddStringToObject(maxIdsJson, sdbTableName(i), i642str(maxId)); } SJson *tableVersJson = tjsonCreateObject(); @@ -563,7 +563,7 @@ void dumpHeader(SSdb *pSdb, SJson *json) { if (i < SDB_MAX) { tableVer = pSdb->tableVer[i]; } - tjsonAddStringToObject(tableVersJson, sdbTableName(i), i642str(tableVer)); + (void)tjsonAddStringToObject(tableVersJson, sdbTableName(i), i642str(tableVer)); } } @@ -571,7 +571,7 @@ void mndDumpSdb() { mInfo("start to dump sdb info to sdb.json"); char path[PATH_MAX * 2] = {0}; - snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP); + (void)snprintf(path, sizeof(path), "%s%smnode", tsDataDir, TD_DIRSEP); SMsgCb msgCb = {0}; msgCb.reportStartupFp = reportStartup; diff --git a/source/dnode/mnode/impl/src/mndFunc.c b/source/dnode/mnode/impl/src/mndFunc.c index 0642cb0153..442da63b31 100644 --- a/source/dnode/mnode/impl/src/mndFunc.c +++ b/source/dnode/mnode/impl/src/mndFunc.c @@ -205,7 +205,7 @@ static int32_t mndFuncActionUpdate(SSdb *pSdb, SFuncObj *pOld, SFuncObj *pNew) { if (pNew->commentSize > 0 && pNew->pComment != NULL) { pOld->commentSize = pNew->commentSize; pOld->pComment = taosMemoryMalloc(pOld->commentSize); - memcpy(pOld->pComment, pNew->pComment, pOld->commentSize); + (void)memcpy(pOld->pComment, pNew->pComment, pOld->commentSize); } if (pOld->pCode != NULL) { @@ -215,7 +215,7 @@ static int32_t mndFuncActionUpdate(SSdb *pSdb, SFuncObj *pOld, SFuncObj *pNew) { if (pNew->codeSize > 0 && pNew->pCode != NULL) { pOld->codeSize = pNew->codeSize; pOld->pCode = taosMemoryMalloc(pOld->codeSize); - memcpy(pOld->pCode, pNew->pCode, pOld->codeSize); + (void)memcpy(pOld->pCode, pNew->pCode, pOld->codeSize); } pOld->scriptType = pNew->scriptType; @@ -250,7 +250,7 @@ static int32_t mndCreateFunc(SMnode *pMnode, SRpcMsg *pReq, SCreateFuncReq *pCre } SFuncObj func = {0}; - memcpy(func.name, pCreate->name, TSDB_FUNC_NAME_LEN); + (void)memcpy(func.name, pCreate->name, TSDB_FUNC_NAME_LEN); func.createdTime = taosGetTimestampMs(); func.funcType = pCreate->funcType; func.scriptType = pCreate->scriptType; @@ -270,9 +270,9 @@ static int32_t mndCreateFunc(SMnode *pMnode, SRpcMsg *pReq, SCreateFuncReq *pCre } if (func.commentSize > 0) { - memcpy(func.pComment, pCreate->pComment, func.commentSize); + (void)memcpy(func.pComment, pCreate->pComment, func.commentSize); } - memcpy(func.pCode, pCreate->pCode, func.codeSize); + (void)memcpy(func.pCode, pCreate->pCode, func.codeSize); pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "create-func"); if (pTrans == NULL) { @@ -548,7 +548,7 @@ static int32_t mndProcessRetrieveFuncReq(SRpcMsg *pReq) { } SFuncInfo funcInfo = {0}; - memcpy(funcInfo.name, pFunc->name, TSDB_FUNC_NAME_LEN); + (void)memcpy(funcInfo.name, pFunc->name, TSDB_FUNC_NAME_LEN); funcInfo.funcType = pFunc->funcType; funcInfo.scriptType = pFunc->scriptType; funcInfo.outputType = pFunc->outputType; @@ -566,21 +566,27 @@ static int32_t mndProcessRetrieveFuncReq(SRpcMsg *pReq) { terrno = TSDB_CODE_OUT_OF_MEMORY; goto RETRIEVE_FUNC_OVER; } - memcpy(funcInfo.pCode, pFunc->pCode, pFunc->codeSize); + (void)memcpy(funcInfo.pCode, pFunc->pCode, pFunc->codeSize); if (funcInfo.commentSize > 0) { funcInfo.pComment = taosMemoryCalloc(1, funcInfo.commentSize); if (funcInfo.pComment == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; goto RETRIEVE_FUNC_OVER; } - memcpy(funcInfo.pComment, pFunc->pComment, pFunc->commentSize); + (void)memcpy(funcInfo.pComment, pFunc->pComment, pFunc->commentSize); } } - taosArrayPush(retrieveRsp.pFuncInfos, &funcInfo); + if (taosArrayPush(retrieveRsp.pFuncInfos, &funcInfo) == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto RETRIEVE_FUNC_OVER; + } SFuncExtraInfo extraInfo = {0}; extraInfo.funcVersion = pFunc->funcVersion; extraInfo.funcCreatedTime = pFunc->createdTime; - taosArrayPush(retrieveRsp.pFuncExtraInfos, &extraInfo); + if (taosArrayPush(retrieveRsp.pFuncExtraInfos, &extraInfo) == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto RETRIEVE_FUNC_OVER; + } mndReleaseFunc(pMnode, pFunc); } @@ -616,7 +622,7 @@ static void *mnodeGenTypeStr(char *buf, int32_t buflen, uint8_t type, int32_t le type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_GEOMETRY) { int32_t bytes = len > 0 ? (int32_t)(len - VARSTR_HEADER_SIZE) : len; - snprintf(buf, buflen - 1, "%s(%d)", tDataTypes[type].name, type == TSDB_DATA_TYPE_NCHAR ? bytes / 4 : bytes); + (void)snprintf(buf, buflen - 1, "%s(%d)", tDataTypes[type].name, type == TSDB_DATA_TYPE_NCHAR ? bytes / 4 : bytes); buf[buflen - 1] = 0; return buf; @@ -643,40 +649,40 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl STR_WITH_MAXSIZE_TO_VARSTR(b1, pFunc->name, pShow->pMeta->pSchemas[cols].bytes); SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)b1, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)b1, false); if (pFunc->pComment) { char *b2 = taosMemoryCalloc(1, pShow->pMeta->pSchemas[cols].bytes); STR_WITH_MAXSIZE_TO_VARSTR(b2, pFunc->pComment, pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)b2, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)b2, false); taosMemoryFree(b2); } else { pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, NULL, true); + (void)colDataSetVal(pColInfo, numOfRows, NULL, true); } int32_t isAgg = (pFunc->funcType == TSDB_FUNC_TYPE_AGGREGATE) ? 1 : 0; pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&isAgg, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&isAgg, false); char b3[TSDB_TYPE_STR_MAX_LEN + 1] = {0}; STR_WITH_MAXSIZE_TO_VARSTR(b3, mnodeGenTypeStr(buf, TSDB_TYPE_STR_MAX_LEN, pFunc->outputType, pFunc->outputLen), pShow->pMeta->pSchemas[cols].bytes); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)b3, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)b3, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->createdTime, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->createdTime, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->codeSize, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->codeSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->bufSize, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->bufSize, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); char *language = ""; @@ -688,20 +694,20 @@ static int32_t mndRetrieveFuncs(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBl char varLang[TSDB_TYPE_STR_MAX_LEN + 1] = {0}; varDataSetLen(varLang, strlen(language)); strcpy(varDataVal(varLang), language); - colDataSetVal(pColInfo, numOfRows, (const char *)varLang, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)varLang, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); int32_t varCodeLen = (pFunc->codeSize + VARSTR_HEADER_SIZE) > TSDB_MAX_BINARY_LEN ? TSDB_MAX_BINARY_LEN : pFunc->codeSize + VARSTR_HEADER_SIZE; char *b4 = taosMemoryMalloc(varCodeLen); - memcpy(varDataVal(b4), pFunc->pCode, varCodeLen - VARSTR_HEADER_SIZE); + (void)memcpy(varDataVal(b4), pFunc->pCode, varCodeLen - VARSTR_HEADER_SIZE); varDataSetLen(b4, varCodeLen - VARSTR_HEADER_SIZE); - colDataSetVal(pColInfo, numOfRows, (const char *)b4, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)b4, false); taosMemoryFree(b4); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->funcVersion, false); + (void)colDataSetVal(pColInfo, numOfRows, (const char *)&pFunc->funcVersion, false); numOfRows++; sdbRelease(pSdb, pFunc); diff --git a/source/dnode/mnode/impl/src/mndSubscribe.c b/source/dnode/mnode/impl/src/mndSubscribe.c index 2e058db9d0..bb59af2808 100644 --- a/source/dnode/mnode/impl/src/mndSubscribe.c +++ b/source/dnode/mnode/impl/src/mndSubscribe.c @@ -1375,7 +1375,7 @@ static int32_t buildResult(SSDataBlock *pBlock, int32_t *numOfRows, int64_t cons if (data) { // vg id char buf[TSDB_OFFSET_LEN * 2 + VARSTR_HEADER_SIZE] = {0}; - MND_TMQ_RETURN_CHECK(tFormatOffset(varDataVal(buf), TSDB_OFFSET_LEN, &data->offset)); + tFormatOffset(varDataVal(buf), TSDB_OFFSET_LEN, &data->offset); (void)sprintf(varDataVal(buf) + strlen(varDataVal(buf)), "/%" PRId64, data->ever); varDataSetLen(buf, strlen(varDataVal(buf))); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 6dc777b6df..d01db56013 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -223,9 +223,9 @@ bool tqGetTablePrimaryKey(STqReader *pReader); void tqSetTablePrimaryKey(STqReader *pReader, int64_t uid); void tqReaderSetColIdList(STqReader *pReader, SArray *pColIdList); -int32_t tqReaderSetTbUidList(STqReader *pReader, const SArray *tbUidList, const char *id); -int32_t tqReaderAddTbUidList(STqReader *pReader, const SArray *pTableUidList); -int32_t tqReaderRemoveTbUidList(STqReader *pReader, const SArray *tbUidList); +void tqReaderSetTbUidList(STqReader *pReader, const SArray *tbUidList, const char *id); +void tqReaderAddTbUidList(STqReader *pReader, const SArray *pTableUidList); +void tqReaderRemoveTbUidList(STqReader *pReader, const SArray *tbUidList); bool tqReaderIsQueriedTable(STqReader *pReader, uint64_t uid); bool tqCurrentBlockConsumed(const STqReader *pReader); @@ -261,9 +261,9 @@ void taosXSetTablePrimaryKey(SSnapContext *ctx, int64_t uid); int32_t buildSnapContext(SVnode *pVnode, int64_t snapVersion, int64_t suid, int8_t subType, int8_t withMeta, SSnapContext **ctxRet); int32_t getTableInfoFromSnapshot(SSnapContext *ctx, void **pBuf, int32_t *contLen, int16_t *type, int64_t *uid); -SMetaTableInfo getMetaTableInfoFromSnapshot(SSnapContext *ctx); +int32_t getMetaTableInfoFromSnapshot(SSnapContext *ctx, SMetaTableInfo* info); int32_t setForSnapShot(SSnapContext *ctx, int64_t uid); -int32_t destroySnapContext(SSnapContext *ctx); +void destroySnapContext(SSnapContext *ctx); // structs struct STsdbCfg { diff --git a/source/dnode/vnode/src/inc/metaTtl.h b/source/dnode/vnode/src/inc/metaTtl.h index ead2d89b28..f0e93c16bf 100644 --- a/source/dnode/vnode/src/inc/metaTtl.h +++ b/source/dnode/vnode/src/inc/metaTtl.h @@ -85,18 +85,18 @@ typedef struct { TXN* pTxn; } STtlDelTtlCtx; -int ttlMgrOpen(STtlManger** ppTtlMgr, TDB* pEnv, int8_t rollback, const char* logPrefix, int32_t flushThreshold); -void ttlMgrClose(STtlManger* pTtlMgr); +int32_t ttlMgrOpen(STtlManger** ppTtlMgr, TDB* pEnv, int8_t rollback, const char* logPrefix, int32_t flushThreshold); +void ttlMgrClose(STtlManger* pTtlMgr); -bool ttlMgrNeedUpgrade(TDB* pEnv); -int ttlMgrUpgrade(STtlManger* pTtlMgr, void* pMeta); +bool ttlMgrNeedUpgrade(TDB* pEnv); +int32_t ttlMgrUpgrade(STtlManger* pTtlMgr, void* pMeta); -int ttlMgrInsertTtl(STtlManger* pTtlMgr, const STtlUpdTtlCtx* pUpdCtx); -int ttlMgrDeleteTtl(STtlManger* pTtlMgr, const STtlDelTtlCtx* pDelCtx); -int ttlMgrUpdateChangeTime(STtlManger* pTtlMgr, const STtlUpdCtimeCtx* pUpdCtimeCtx); +int32_t ttlMgrInsertTtl(STtlManger* pTtlMgr, const STtlUpdTtlCtx* pUpdCtx); +int32_t ttlMgrDeleteTtl(STtlManger* pTtlMgr, const STtlDelTtlCtx* pDelCtx); +int32_t ttlMgrUpdateChangeTime(STtlManger* pTtlMgr, const STtlUpdCtimeCtx* pUpdCtimeCtx); -int ttlMgrFlush(STtlManger* pTtlMgr, TXN* pTxn); -int ttlMgrFindExpired(STtlManger* pTtlMgr, int64_t timePointMs, SArray* pTbUids, int32_t ttlDropMaxCount); +int32_t ttlMgrFlush(STtlManger* pTtlMgr, TXN* pTxn); +int32_t ttlMgrFindExpired(STtlManger* pTtlMgr, int64_t timePointMs, SArray* pTbUids, int32_t ttlDropMaxCount); #ifdef __cplusplus } diff --git a/source/dnode/vnode/src/inc/tq.h b/source/dnode/vnode/src/inc/tq.h index 56a3c00fee..050c6d09dc 100644 --- a/source/dnode/vnode/src/inc/tq.h +++ b/source/dnode/vnode/src/inc/tq.h @@ -121,11 +121,11 @@ int32_t tqTaosxScanLog(STQ* pTq, STqHandle* pHandle, SPackedData submit, STaosxR int32_t tqAddBlockDataToRsp(const SSDataBlock* pBlock, void* pRsp, int32_t numOfCols, int8_t precision); int32_t tqSendDataRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPollReq* pReq, const void* pRsp, int32_t type, int32_t vgId); -int32_t tqPushEmptyDataRsp(STqHandle* pHandle, int32_t vgId); +void tqPushEmptyDataRsp(STqHandle* pHandle, int32_t vgId); // tqMeta int32_t tqMetaOpen(STQ* pTq); -int32_t tqMetaClose(STQ* pTq); +void tqMetaClose(STQ* pTq); int32_t tqMetaSaveHandle(STQ* pTq, const char* key, const STqHandle* pHandle); int32_t tqMetaSaveInfo(STQ* pTq, TTB* ttb, const void* key, int32_t kLen, const void* value, int32_t vLen); int32_t tqMetaDeleteInfo(STQ* pTq, TTB* ttb, const void* key, int32_t kLen); @@ -133,7 +133,7 @@ int32_t tqMetaCreateHandle(STQ* pTq, SMqRebVgReq* req, STqHandle* handle); int32_t tqMetaDecodeCheckInfo(STqCheckInfo *info, void *pVal, int32_t vLen); int32_t tqMetaDecodeOffsetInfo(STqOffset *info, void *pVal, int32_t vLen); int32_t tqMetaGetHandle(STQ* pTq, const char* key, STqHandle** pHandle); -void* tqMetaGetOffset(STQ* pTq, const char* subkey); +int32_t tqMetaGetOffset(STQ* pTq, const char* subkey, STqOffset** pOffset); int32_t tqMetaTransform(STQ* pTq); // tqSink int32_t tqBuildDeleteReq(STQ* pTq, const char* stbFullName, const SSDataBlock* pDataBlock, SBatchDeleteReq* deleteReq, @@ -166,12 +166,12 @@ int32_t buildAutoCreateTableReq(const char* stbFullName, int64_t suid, int32_t n } \ } while (0) -#define TQ_ERR_RETURN(c) \ - do { \ - code = c; \ - if (code != TSDB_CODE_SUCCESS) { \ - return code; \ - } \ +#define TQ_NULL_GO_TO_END(c) \ + do { \ + if (c == NULL) { \ + code = (terrno == 0 ? TSDB_CODE_OUT_OF_MEMORY : terrno); \ + goto END; \ + } \ } while (0) #define TQ_SUBSCRIBE_NAME "subscribe" diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index 32e4fea336..c45d6e6edf 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -239,12 +239,12 @@ int32_t tsdbSetKeepCfg(STsdb* pTsdb, STsdbCfg* pCfg); int64_t tsdbGetEarliestTs(STsdb* pTsdb); // tq -STQ* tqOpen(const char* path, SVnode* pVnode); +int32_t tqOpen(const char* path, SVnode* pVnode); void tqNotifyClose(STQ*); void tqClose(STQ*); int tqPushMsg(STQ*, tmsg_t msgType); int tqRegisterPushHandle(STQ* pTq, void* handle, SRpcMsg* pMsg); -int tqUnregisterPushHandle(STQ* pTq, void* pHandle); +void tqUnregisterPushHandle(STQ* pTq, void* pHandle); int tqScanWalAsync(STQ* pTq, bool ckPause); int32_t tqStopStreamTasksAsync(STQ* pTq); int32_t tqProcessTaskCheckPointSourceReq(STQ* pTq, SRpcMsg* pMsg, SRpcMsg* pRsp); @@ -345,7 +345,7 @@ int32_t tsdbSnapRAWWriterPrepareClose(STsdbSnapRAWWriter* pWriter); int32_t tsdbSnapRAWWriterClose(STsdbSnapRAWWriter** ppWriter, int8_t rollback); // STqSnapshotReader == int32_t tqSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, int8_t type, STqSnapReader** ppReader); -int32_t tqSnapReaderClose(STqSnapReader** ppReader); +void tqSnapReaderClose(STqSnapReader** ppReader); int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData); // STqSnapshotWriter ====================================== int32_t tqSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, STqSnapWriter** ppWriter); diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c index 87140cfa12..b8043c00de 100644 --- a/source/dnode/vnode/src/meta/metaSnapshot.c +++ b/source/dnode/vnode/src/meta/metaSnapshot.c @@ -219,50 +219,91 @@ static void destroySTableInfoForChildTable(void* data) { tDeleteSchemaWrapper(pData->tagRow); } -static void MoveToSnapShotVersion(SSnapContext* ctx) { - tdbTbcClose((TBC*)ctx->pCur); - tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); +static int32_t MoveToSnapShotVersion(SSnapContext* ctx) { + int32_t code = 0; + (void)tdbTbcClose((TBC*)ctx->pCur); + code = tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } STbDbKey key = {.version = ctx->snapVersion, .uid = INT64_MAX}; int c = 0; - tdbTbcMoveTo((TBC*)ctx->pCur, &key, sizeof(key), &c); + code = tdbTbcMoveTo((TBC*)ctx->pCur, &key, sizeof(key), &c); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } if (c < 0) { tdbTbcMoveToPrev((TBC*)ctx->pCur); } + return 0; } static int32_t MoveToPosition(SSnapContext* ctx, int64_t ver, int64_t uid) { - tdbTbcClose((TBC*)ctx->pCur); - tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); + (void)tdbTbcClose((TBC*)ctx->pCur); + int32_t code = tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } STbDbKey key = {.version = ver, .uid = uid}; int c = 0; - tdbTbcMoveTo((TBC*)ctx->pCur, &key, sizeof(key), &c); + code = tdbTbcMoveTo((TBC*)ctx->pCur, &key, sizeof(key), &c); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } return c; } -static void MoveToFirst(SSnapContext* ctx) { - tdbTbcClose((TBC*)ctx->pCur); - tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); - tdbTbcMoveToFirst((TBC*)ctx->pCur); +static int32_t MoveToFirst(SSnapContext* ctx) { + (void)tdbTbcClose((TBC*)ctx->pCur); + int32_t code = tdbTbcOpen(ctx->pMeta->pTbDb, (TBC**)&ctx->pCur, NULL); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } + code = tdbTbcMoveToFirst((TBC*)ctx->pCur); + if (code != 0){ + return TAOS_GET_TERRNO(code); + } + return 0; } -static void saveSuperTableInfoForChildTable(SMetaEntry* me, SHashObj* suidInfo) { +static int32_t saveSuperTableInfoForChildTable(SMetaEntry* me, SHashObj* suidInfo) { STableInfoForChildTable* data = (STableInfoForChildTable*)taosHashGet(suidInfo, &me->uid, sizeof(tb_uid_t)); if (data) { - return; + return 0; } + int32_t code = 0; STableInfoForChildTable dataTmp = {0}; dataTmp.tableName = taosStrdup(me->name); - + if (dataTmp.tableName == NULL){ + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } dataTmp.schemaRow = tCloneSSchemaWrapper(&me->stbEntry.schemaRow); + if (dataTmp.schemaRow == NULL){ + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } dataTmp.tagRow = tCloneSSchemaWrapper(&me->stbEntry.schemaTag); - taosHashPut(suidInfo, &me->uid, sizeof(tb_uid_t), &dataTmp, sizeof(STableInfoForChildTable)); + if (dataTmp.tagRow == NULL){ + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } + code = taosHashPut(suidInfo, &me->uid, sizeof(tb_uid_t), &dataTmp, sizeof(STableInfoForChildTable)); + if (code != 0){ + goto END; + } + return 0; + +END: + destroySTableInfoForChildTable(&dataTmp); + return TAOS_GET_TERRNO(code);; } 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 terrno; + if (ctx == NULL){ + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } *ctxRet = ctx; ctx->pMeta = pVnode->pMeta; @@ -273,23 +314,29 @@ 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 terrno; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } ctx->suidInfo = taosHashInit(100, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); if (ctx->suidInfo == NULL) { - return terrno; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY);; } taosHashSetFreeFp(ctx->suidInfo, destroySTableInfoForChildTable); ctx->index = 0; ctx->idList = taosArrayInit(100, sizeof(int64_t)); + if (ctx->idList == NULL){ + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY);; + } void* pKey = NULL; void* pVal = NULL; int vLen = 0, kLen = 0; metaDebug("tmqsnap init snapVersion:%" PRIi64, ctx->snapVersion); - MoveToFirst(ctx); + int32_t code = MoveToFirst(ctx); + if (code != 0){ + return code; + } while (1) { int32_t ret = tdbTbcNext((TBC*)ctx->pCur, &pKey, &kLen, &pVal, &vLen); if (ret < 0) break; @@ -301,15 +348,18 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 continue; } - if (tdbTbGet(ctx->pMeta->pUidIdx, &tmp->uid, sizeof(tb_uid_t), NULL, NULL) < - 0) { // check if table exist for now, need optimize later + if (tdbTbGet(ctx->pMeta->pUidIdx, &tmp->uid, sizeof(tb_uid_t), NULL, NULL) < 0) { // check if table exist for now, need optimize later continue; } SDecoder dc = {0}; SMetaEntry me = {0}; tDecoderInit(&dc, pVal, vLen); - metaDecodeEntry(&dc, &me); + ret = metaDecodeEntry(&dc, &me); + if (ret < 0){ + tDecoderClear(&dc); + return TAOS_GET_TERRNO(ret); + } if (ctx->subType == TOPIC_SUB_TYPE__TABLE) { if ((me.uid != ctx->suid && me.type == TSDB_SUPER_TABLE) || (me.ctbEntry.suid != ctx->suid && me.type == TSDB_CHILD_TABLE)) { @@ -318,16 +368,24 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 } } - taosArrayPush(ctx->idList, &tmp->uid); + if (taosArrayPush(ctx->idList, &tmp->uid) == NULL){ + tDecoderClear(&dc); + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } metaDebug("tmqsnap init idlist name:%s, uid:%" PRIi64, me.name, tmp->uid); - SIdInfo info = {0}; - taosHashPut(ctx->idVersion, &tmp->uid, sizeof(tb_uid_t), &info, sizeof(SIdInfo)); - tDecoderClear(&dc); + + SIdInfo info = {0}; + if (taosHashPut(ctx->idVersion, &tmp->uid, sizeof(tb_uid_t), &info, sizeof(SIdInfo)) != 0) { + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } } taosHashClear(ctx->idVersion); - MoveToSnapShotVersion(ctx); + code = MoveToSnapShotVersion(ctx); + if (code != 0){ + return code; + } while (1) { int32_t ret = tdbTbcPrev((TBC*)ctx->pCur, &pKey, &kLen, &pVal, &vLen); if (ret < 0) break; @@ -338,12 +396,20 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 continue; } SIdInfo info = {.version = tmp->version, .index = 0}; - taosHashPut(ctx->idVersion, &tmp->uid, sizeof(tb_uid_t), &info, sizeof(SIdInfo)); + ret = taosHashPut(ctx->idVersion, &tmp->uid, sizeof(tb_uid_t), &info, sizeof(SIdInfo)); + if (ret != 0) { + return TAOS_GET_TERRNO(ret); + } SDecoder dc = {0}; SMetaEntry me = {0}; tDecoderInit(&dc, pVal, vLen); - metaDecodeEntry(&dc, &me); + ret = metaDecodeEntry(&dc, &me); + if (ret < 0){ + tDecoderClear(&dc); + return TAOS_GET_TERRNO(ret); + } + if (ctx->subType == TOPIC_SUB_TYPE__TABLE) { if ((me.uid != ctx->suid && me.type == TSDB_SUPER_TABLE) || (me.ctbEntry.suid != ctx->suid && me.type == TSDB_CHILD_TABLE)) { @@ -354,17 +420,24 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 if ((ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_SUPER_TABLE) || (ctx->subType == TOPIC_SUB_TYPE__TABLE && me.uid == ctx->suid)) { - saveSuperTableInfoForChildTable(&me, ctx->suidInfo); + ret = saveSuperTableInfoForChildTable(&me, ctx->suidInfo); + if (ret != 0){ + tDecoderClear(&dc); + return ret; + } } tDecoderClear(&dc); } for (int i = 0; i < taosArrayGetSize(ctx->idList); i++) { int64_t* uid = taosArrayGet(ctx->idList, i); + if (uid == NULL){ + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } SIdInfo* idData = (SIdInfo*)taosHashGet(ctx->idVersion, uid, sizeof(int64_t)); if (!idData) { metaError("meta/snap: null idData"); - return TSDB_CODE_FAILED; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } idData->index = i; @@ -377,13 +450,12 @@ int32_t buildSnapContext(SVnode* pVnode, int64_t snapVersion, int64_t suid, int8 return TDB_CODE_SUCCESS; } -int32_t destroySnapContext(SSnapContext* ctx) { - tdbTbcClose((TBC*)ctx->pCur); +void destroySnapContext(SSnapContext* ctx) { + (void)tdbTbcClose((TBC*)ctx->pCur); taosArrayDestroy(ctx->idList); taosHashCleanup(ctx->idVersion); taosHashCleanup(ctx->suidInfo); taosMemoryFree(ctx); - return 0; } static int32_t buildNormalChildTableInfo(SVCreateTbReq* req, void** pBuf, int32_t* contLen) { @@ -392,32 +464,36 @@ static int32_t buildNormalChildTableInfo(SVCreateTbReq* req, void** pBuf, int32_ reqs.pArray = taosArrayInit(1, sizeof(struct SVCreateTbReq)); if (NULL == reqs.pArray) { - ret = -1; + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto end; + } + if (taosArrayPush(reqs.pArray, req) == NULL){ + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); goto end; } - taosArrayPush(reqs.pArray, req); reqs.nReqs = 1; tEncodeSize(tEncodeSVCreateTbBatchReq, &reqs, *contLen, ret); if (ret < 0) { - ret = -1; + ret = TAOS_GET_TERRNO(ret); goto end; } *contLen += sizeof(SMsgHead); *pBuf = taosMemoryMalloc(*contLen); if (NULL == *pBuf) { - ret = -1; + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); goto end; } SEncoder coder = {0}; tEncoderInit(&coder, POINTER_SHIFT(*pBuf, sizeof(SMsgHead)), *contLen); - if (tEncodeSVCreateTbBatchReq(&coder, &reqs) < 0) { + ret = tEncodeSVCreateTbBatchReq(&coder, &reqs); + tEncoderClear(&coder); + + if (ret < 0) { taosMemoryFreeClear(*pBuf); - tEncoderClear(&coder); - ret = -1; + ret = TAOS_GET_TERRNO(ret); goto end; } - tEncoderClear(&coder); end: taosArrayDestroy(reqs.pArray); @@ -428,48 +504,46 @@ static int32_t buildSuperTableInfo(SVCreateStbReq* req, void** pBuf, int32_t* co int32_t ret = 0; tEncodeSize(tEncodeSVCreateStbReq, req, *contLen, ret); if (ret < 0) { - return ret; + return TAOS_GET_TERRNO(ret); } *contLen += sizeof(SMsgHead); *pBuf = taosMemoryMalloc(*contLen); if (NULL == *pBuf) { - return terrno; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } SEncoder encoder = {0}; tEncoderInit(&encoder, POINTER_SHIFT(*pBuf, sizeof(SMsgHead)), *contLen); - if ((ret = tEncodeSVCreateStbReq(&encoder, req)) < 0) { - taosMemoryFreeClear(*pBuf); - tEncoderClear(&encoder); - return ret; - } + ret = tEncodeSVCreateStbReq(&encoder, req); tEncoderClear(&encoder); + if (ret < 0) { + taosMemoryFreeClear(*pBuf); + return TAOS_GET_TERRNO(ret); + } return 0; } int32_t setForSnapShot(SSnapContext* ctx, int64_t uid) { - int c = 0; - if (uid == 0) { ctx->index = 0; - return c; + return 0; } SIdInfo* idInfo = (SIdInfo*)taosHashGet(ctx->idVersion, &uid, sizeof(tb_uid_t)); - if (!idInfo) { - return -1; + if (idInfo == NULL) { + return terrno; } ctx->index = idInfo->index; - return c; + return 0; } -void taosXSetTablePrimaryKey(SSnapContext* ctx, int64_t uid) { - bool ret = false; - SSchemaWrapper* schema = metaGetTableSchema(ctx->pMeta, uid, -1, 1); - if (schema->nCols >= 2 && schema->pSchema[1].flags & COL_IS_KEY) { +void taosXSetTablePrimaryKey(SSnapContext* ctx, int64_t uid){ + bool ret = false; + SSchemaWrapper *schema = metaGetTableSchema(ctx->pMeta, uid, -1, 1); + if (schema && schema->nCols >= 2 && schema->pSchema[1].flags & COL_IS_KEY){ ret = true; } tDeleteSchemaWrapper(schema); @@ -493,11 +567,15 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe } int64_t* uidTmp = taosArrayGet(ctx->idList, ctx->index); + if (uidTmp == NULL) { + metaError("tmqsnap get meta null uid"); + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } ctx->index++; SIdInfo* idInfo = (SIdInfo*)taosHashGet(ctx->idVersion, uidTmp, sizeof(tb_uid_t)); if (!idInfo) { metaError("meta/snap: null idInfo"); - return TSDB_CODE_FAILED; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } *uid = *uidTmp; @@ -508,11 +586,18 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe metaDebug("tmqsnap get meta not exist uid:%" PRIi64 " version:%" PRIi64, *uid, idInfo->version); } - tdbTbcGet((TBC*)ctx->pCur, (const void**)&pKey, &kLen, (const void**)&pVal, &vLen); + ret = tdbTbcGet((TBC*)ctx->pCur, (const void**)&pKey, &kLen, (const void**)&pVal, &vLen); + if (ret < 0) { + return TAOS_GET_TERRNO(ret); + } SDecoder dc = {0}; SMetaEntry me = {0}; tDecoderInit(&dc, pVal, vLen); - metaDecodeEntry(&dc, &me); + ret = metaDecodeEntry(&dc, &me); + if (ret < 0) { + ret = TAOS_GET_TERRNO(ret); + goto END; + } metaDebug("tmqsnap get meta uid:%" PRIi64 " name:%s index:%d", *uid, me.name, ctx->index - 1); if ((ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_SUPER_TABLE) || @@ -528,14 +613,14 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe ret = buildSuperTableInfo(&req, pBuf, contLen); *type = TDMT_VND_CREATE_STB; - } else if ((ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_CHILD_TABLE) || (ctx->subType == TOPIC_SUB_TYPE__TABLE && me.type == TSDB_CHILD_TABLE && me.ctbEntry.suid == ctx->suid)) { STableInfoForChildTable* data = (STableInfoForChildTable*)taosHashGet(ctx->suidInfo, &me.ctbEntry.suid, sizeof(tb_uid_t)); if (!data) { metaError("meta/snap: null data"); - return TSDB_CODE_FAILED; + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; } SVCreateTbReq req = {0}; @@ -549,46 +634,48 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe req.ctb.stbName = data->tableName; SArray* tagName = taosArrayInit(req.ctb.tagNum, TSDB_COL_NAME_LEN); + if (tagName == NULL) { + metaError("meta/snap: init tag name failed."); + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } STag* p = (STag*)me.ctbEntry.pTags; if (tTagIsJson(p)) { if (p->nTag != 0) { SSchema* schema = &data->tagRow->pSchema[0]; - taosArrayPush(tagName, schema->name); + if (taosArrayPush(tagName, schema->name) == NULL) { + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + taosArrayDestroy(tagName); + goto END; + } } } else { SArray* pTagVals = NULL; - if (tTagToValArray((const STag*)p, &pTagVals) != 0) { + ret = tTagToValArray((const STag*)p, &pTagVals); + if (ret != 0) { metaError("meta/snap: tag to val array failed."); - return TSDB_CODE_FAILED; + taosArrayDestroy(pTagVals); + taosArrayDestroy(tagName); + goto END; } int16_t nCols = taosArrayGetSize(pTagVals); for (int j = 0; j < nCols; ++j) { STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, j); - for (int i = 0; i < data->tagRow->nCols; i++) { + for (int i = 0; pTagVal && i < data->tagRow->nCols; i++) { SSchema* schema = &data->tagRow->pSchema[i]; if (schema->colId == pTagVal->cid) { - taosArrayPush(tagName, schema->name); + if (taosArrayPush(tagName, schema->name) == NULL) { + ret = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + taosArrayDestroy(pTagVals); + taosArrayDestroy(tagName); + goto END; + } } } } taosArrayDestroy(pTagVals); } - // SIdInfo* sidInfo = (SIdInfo*)taosHashGet(ctx->idVersion, &me.ctbEntry.suid, sizeof(tb_uid_t)); - // if(sidInfo->version >= idInfo->version){ - // // need parse tag - // STag* p = (STag*)me.ctbEntry.pTags; - // SArray* pTagVals = NULL; - // if (tTagToValArray((const STag*)p, &pTagVals) != 0) { - // } - // - // int16_t nCols = taosArrayGetSize(pTagVals); - // for (int j = 0; j < nCols; ++j) { - // STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, j); - // } - // }else{ req.ctb.pTag = me.ctbEntry.pTags; - // } - req.ctb.tagName = tagName; ret = buildNormalChildTableInfo(&req, pBuf, contLen); *type = TDMT_VND_CREATE_TABLE; @@ -605,15 +692,15 @@ int32_t getTableInfoFromSnapshot(SSnapContext* ctx, void** pBuf, int32_t* contLe *type = TDMT_VND_CREATE_TABLE; } else { metaError("meta/snap: invalid topic sub type: %" PRId8 " get meta from snap failed.", ctx->subType); - ret = -1; + ret = TSDB_CODE_SDB_INVALID_TABLE_TYPE; } - tDecoderClear(&dc); +END: + tDecoderClear(&dc); return ret; } -SMetaTableInfo getMetaTableInfoFromSnapshot(SSnapContext* ctx) { - SMetaTableInfo result = {0}; +int32_t getMetaTableInfoFromSnapshot(SSnapContext* ctx, SMetaTableInfo* result) { void* pKey = NULL; void* pVal = NULL; int vLen, kLen; @@ -621,14 +708,17 @@ SMetaTableInfo getMetaTableInfoFromSnapshot(SSnapContext* ctx) { while (1) { if (ctx->index >= taosArrayGetSize(ctx->idList)) { metaDebug("tmqsnap get uid info end"); - return result; + return 0; } int64_t* uidTmp = taosArrayGet(ctx->idList, ctx->index); + if (uidTmp == NULL){ + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } ctx->index++; SIdInfo* idInfo = (SIdInfo*)taosHashGet(ctx->idVersion, uidTmp, sizeof(tb_uid_t)); if (!idInfo) { metaError("meta/snap: null idInfo"); - return result; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } int32_t ret = MoveToPosition(ctx, idInfo->version, *uidTmp); @@ -637,44 +727,46 @@ SMetaTableInfo getMetaTableInfoFromSnapshot(SSnapContext* ctx) { idInfo->version); continue; } - tdbTbcGet((TBC*)ctx->pCur, (const void**)&pKey, &kLen, (const void**)&pVal, &vLen); + ret = tdbTbcGet((TBC*)ctx->pCur, (const void**)&pKey, &kLen, (const void**)&pVal, &vLen); + if (ret != 0){ + return TAOS_GET_TERRNO(ret); + } SDecoder dc = {0}; SMetaEntry me = {0}; tDecoderInit(&dc, pVal, vLen); - metaDecodeEntry(&dc, &me); + ret = metaDecodeEntry(&dc, &me); + if (ret != 0){ + tDecoderClear(&dc); + return TAOS_GET_TERRNO(ret); + } metaDebug("tmqsnap get uid info uid:%" PRIi64 " name:%s index:%d", me.uid, me.name, ctx->index - 1); - if (ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_CHILD_TABLE) { + if ((ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_CHILD_TABLE) || + (ctx->subType == TOPIC_SUB_TYPE__TABLE && me.type == TSDB_CHILD_TABLE && me.ctbEntry.suid == ctx->suid)){ STableInfoForChildTable* data = (STableInfoForChildTable*)taosHashGet(ctx->suidInfo, &me.ctbEntry.suid, sizeof(tb_uid_t)); - result.uid = me.uid; - result.suid = me.ctbEntry.suid; - result.schema = tCloneSSchemaWrapper(data->schemaRow); - strcpy(result.tbName, me.name); - tDecoderClear(&dc); - break; + if (data == NULL) { + tDecoderClear(&dc); + metaError("meta/snap: null data"); + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } + result->suid = me.ctbEntry.suid; + result->schema = tCloneSSchemaWrapper(data->schemaRow); } else if (ctx->subType == TOPIC_SUB_TYPE__DB && me.type == TSDB_NORMAL_TABLE) { - result.uid = me.uid; - result.suid = 0; - strcpy(result.tbName, me.name); - result.schema = tCloneSSchemaWrapper(&me.ntbEntry.schemaRow); - tDecoderClear(&dc); - break; - } else if (ctx->subType == TOPIC_SUB_TYPE__TABLE && me.type == TSDB_CHILD_TABLE && me.ctbEntry.suid == ctx->suid) { - STableInfoForChildTable* data = - (STableInfoForChildTable*)taosHashGet(ctx->suidInfo, &me.ctbEntry.suid, sizeof(tb_uid_t)); - result.uid = me.uid; - result.suid = me.ctbEntry.suid; - strcpy(result.tbName, me.name); - result.schema = tCloneSSchemaWrapper(data->schemaRow); - tDecoderClear(&dc); - break; + result->suid = 0; + result->schema = tCloneSSchemaWrapper(&me.ntbEntry.schemaRow); } else { metaDebug("tmqsnap get uid continue"); tDecoderClear(&dc); continue; } + result->uid = me.uid; + tstrncpy(result->tbName, me.name, TSDB_TABLE_NAME_LEN); + tDecoderClear(&dc); + if(result->schema == NULL){ + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } + break; } - - return result; + return 0; } diff --git a/source/dnode/vnode/src/meta/metaTtl.c b/source/dnode/vnode/src/meta/metaTtl.c index 58ecf54512..6b203b146d 100644 --- a/source/dnode/vnode/src/meta/metaTtl.c +++ b/source/dnode/vnode/src/meta/metaTtl.c @@ -46,39 +46,38 @@ static bool ttlMgrNeedFlush(STtlManger *pTtlMgr); const char *ttlTbname = "ttl.idx"; const char *ttlV1Tbname = "ttlv1.idx"; -int ttlMgrOpen(STtlManger **ppTtlMgr, TDB *pEnv, int8_t rollback, const char *logPrefix, int32_t flushThreshold) { - int ret = TSDB_CODE_SUCCESS; +int32_t ttlMgrOpen(STtlManger **ppTtlMgr, TDB *pEnv, int8_t rollback, const char *logPrefix, int32_t flushThreshold) { + int32_t code = TSDB_CODE_SUCCESS; int64_t startNs = taosGetTimestampNs(); *ppTtlMgr = NULL; STtlManger *pTtlMgr = (STtlManger *)tdbOsCalloc(1, sizeof(*pTtlMgr)); - if (pTtlMgr == NULL) return TSDB_CODE_OUT_OF_MEMORY; + if (pTtlMgr == NULL) TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); char *logBuffer = (char *)tdbOsCalloc(1, strlen(logPrefix) + 1); if (logBuffer == NULL) { tdbOsFree(pTtlMgr); - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - strcpy(logBuffer, logPrefix); + (void)strcpy(logBuffer, logPrefix); pTtlMgr->logPrefix = logBuffer; pTtlMgr->flushThreshold = flushThreshold; - ret = tdbTbOpen(ttlV1Tbname, TDB_VARIANT_LEN, TDB_VARIANT_LEN, ttlIdxKeyV1Cmpr, pEnv, &pTtlMgr->pTtlIdx, rollback); - if (ret < 0) { - metaError("%s, failed to open %s since %s", pTtlMgr->logPrefix, ttlV1Tbname, tstrerror(terrno)); + code = tdbTbOpen(ttlV1Tbname, TDB_VARIANT_LEN, TDB_VARIANT_LEN, ttlIdxKeyV1Cmpr, pEnv, &pTtlMgr->pTtlIdx, rollback); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, failed to open %s since %s", pTtlMgr->logPrefix, ttlV1Tbname, tstrerror(code)); tdbOsFree(pTtlMgr); - return ret; + TAOS_RETURN(code); } pTtlMgr->pTtlCache = taosHashInit(8192, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); pTtlMgr->pDirtyUids = taosHashInit(8192, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); - ret = ttlMgrFillCache(pTtlMgr); - if (ret < 0) { + if ((code = ttlMgrFillCache(pTtlMgr)) != TSDB_CODE_SUCCESS) { metaError("%s, failed to fill hash since %s", pTtlMgr->logPrefix, tstrerror(terrno)); ttlMgrCleanup(pTtlMgr); - return ret; + TAOS_RETURN(code); } int64_t endNs = taosGetTimestampNs(); @@ -86,7 +85,7 @@ int ttlMgrOpen(STtlManger **ppTtlMgr, TDB *pEnv, int8_t rollback, const char *lo taosHashGetSize(pTtlMgr->pTtlCache), endNs - startNs); *ppTtlMgr = pTtlMgr; - return TSDB_CODE_SUCCESS; + TAOS_RETURN(TSDB_CODE_SUCCESS); } void ttlMgrClose(STtlManger *pTtlMgr) { ttlMgrCleanup(pTtlMgr); } @@ -99,37 +98,34 @@ bool ttlMgrNeedUpgrade(TDB *pEnv) { return needUpgrade; } -int ttlMgrUpgrade(STtlManger *pTtlMgr, void *pMeta) { - SMeta *meta = (SMeta *)pMeta; - int ret = TSDB_CODE_SUCCESS; +int32_t ttlMgrUpgrade(STtlManger *pTtlMgr, void *pMeta) { + SMeta *meta = (SMeta *)pMeta; + int32_t code = TSDB_CODE_SUCCESS; - if (!tdbTbExist(ttlTbname, meta->pEnv)) return TSDB_CODE_SUCCESS; + if (!tdbTbExist(ttlTbname, meta->pEnv)) TAOS_RETURN(TSDB_CODE_SUCCESS); metaInfo("%s, ttl mgr start upgrade", pTtlMgr->logPrefix); int64_t startNs = taosGetTimestampNs(); - ret = tdbTbOpen(ttlTbname, sizeof(STtlIdxKey), 0, ttlIdxKeyCmpr, meta->pEnv, &pTtlMgr->pOldTtlIdx, 0); - if (ret < 0) { - metaError("%s, failed to open %s index since %s", pTtlMgr->logPrefix, ttlTbname, tstrerror(terrno)); + code = tdbTbOpen(ttlTbname, sizeof(STtlIdxKey), 0, ttlIdxKeyCmpr, meta->pEnv, &pTtlMgr->pOldTtlIdx, 0); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, failed to open %s index since %s", pTtlMgr->logPrefix, ttlTbname, tstrerror(code)); goto _out; } - ret = ttlMgrConvert(pTtlMgr->pOldTtlIdx, pTtlMgr->pTtlIdx, pMeta); - if (ret < 0) { - metaError("%s, failed to convert ttl index since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + if ((code = ttlMgrConvert(pTtlMgr->pOldTtlIdx, pTtlMgr->pTtlIdx, pMeta)) != TSDB_CODE_SUCCESS) { + metaError("%s, failed to convert ttl index since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } - ret = tdbTbDropByName(ttlTbname, meta->pEnv, meta->txn); - if (ret < 0) { - metaError("%s, failed to drop old ttl index since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + if ((code = tdbTbDropByName(ttlTbname, meta->pEnv, meta->txn)) != TSDB_CODE_SUCCESS) { + metaError("%s, failed to drop old ttl index since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } - ret = ttlMgrFillCache(pTtlMgr); - if (ret < 0) { - metaError("%s, failed to fill hash since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + if ((code = ttlMgrFillCache(pTtlMgr)) != TSDB_CODE_SUCCESS) { + metaError("%s, failed to fill hash since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } @@ -141,14 +137,14 @@ _out: tdbTbClose(pTtlMgr->pOldTtlIdx); pTtlMgr->pOldTtlIdx = NULL; - return ret; + TAOS_RETURN(code); } static void ttlMgrCleanup(STtlManger *pTtlMgr) { taosMemoryFree(pTtlMgr->logPrefix); taosHashCleanup(pTtlMgr->pTtlCache); taosHashCleanup(pTtlMgr->pDirtyUids); - tdbTbClose(pTtlMgr->pTtlIdx); + (void)tdbTbClose(pTtlMgr->pTtlIdx); taosMemoryFree(pTtlMgr); } @@ -215,30 +211,30 @@ static int32_t ttlMgrFillCacheOneEntry(const void *pKey, int keyLen, const void return taosHashPut(pCache, &uid, sizeof(uid), &data, sizeof(data)); } -static int ttlMgrConvertOneEntry(const void *pKey, int keyLen, const void *pVal, int valLen, void *pConvertData) { +static int32_t ttlMgrConvertOneEntry(const void *pKey, int keyLen, const void *pVal, int valLen, void *pConvertData) { SConvertData *pData = (SConvertData *)pConvertData; STtlIdxKey *ttlKey = (STtlIdxKey *)pKey; tb_uid_t uid = ttlKey->uid; int64_t ttlDays = 0; - int ret = metaGetTableTtlByUid(pData->pMeta, uid, &ttlDays); - if (ret < 0) { - metaError("ttlMgr convert failed to get ttl since %s", tstrerror(terrno)); + int32_t code = TSDB_CODE_SUCCESS; + if ((code = metaGetTableTtlByUid(pData->pMeta, uid, &ttlDays)) != TSDB_CODE_SUCCESS) { + metaError("ttlMgr convert failed to get ttl since %s", tstrerror(code)); goto _out; } STtlIdxKeyV1 ttlKeyV1 = {.deleteTimeMs = ttlKey->deleteTimeSec * 1000, .uid = uid}; - ret = tdbTbUpsert(pData->pNewTtlIdx, &ttlKeyV1, sizeof(ttlKeyV1), &ttlDays, sizeof(ttlDays), pData->pMeta->txn); - if (ret < 0) { - metaError("ttlMgr convert failed to upsert since %s", tstrerror(terrno)); + code = tdbTbUpsert(pData->pNewTtlIdx, &ttlKeyV1, sizeof(ttlKeyV1), &ttlDays, sizeof(ttlDays), pData->pMeta->txn); + if (code != TSDB_CODE_SUCCESS) { + metaError("ttlMgr convert failed to upsert since %s", tstrerror(code)); goto _out; } - ret = 0; + code = TSDB_CODE_SUCCESS; _out: - return ret; + TAOS_RETURN(code); } static int32_t ttlMgrFindExpiredOneEntry(const void *pKey, int keyLen, const void *pVal, int valLen, @@ -248,7 +244,10 @@ static int32_t ttlMgrFindExpiredOneEntry(const void *pKey, int keyLen, const voi int c = ttlIdxKeyV1Cmpr(&pCtx->expiredKey, sizeof(pCtx->expiredKey), pKey, keyLen); if (c > 0) { - taosArrayPush(pCtx->pTbUids, &((STtlIdxKeyV1 *)pKey)->uid); + if (NULL == taosArrayPush(pCtx->pTbUids, &((STtlIdxKeyV1 *)pKey)->uid)) { + metaError("ttlMgr find expired failed since %s", tstrerror(TSDB_CODE_OUT_OF_MEMORY)); + return -1; + } pCtx->count++; } @@ -262,16 +261,16 @@ static int ttlMgrConvert(TTB *pOldTtlIdx, TTB *pNewTtlIdx, void *pMeta) { SConvertData cvData = {.pNewTtlIdx = pNewTtlIdx, .pMeta = meta}; - int ret = tdbTbTraversal(pOldTtlIdx, &cvData, ttlMgrConvertOneEntry); - if (ret < 0) { - metaError("failed to convert since %s", tstrerror(terrno)); + int code = TSDB_CODE_SUCCESS; + if ((code = tdbTbTraversal(pOldTtlIdx, &cvData, ttlMgrConvertOneEntry)) != TSDB_CODE_SUCCESS) { + metaError("failed to convert since %s", tstrerror(code)); } metaInfo("ttlMgr convert end."); - return ret; + TAOS_RETURN(code); } -int ttlMgrInsertTtl(STtlManger *pTtlMgr, const STtlUpdTtlCtx *updCtx) { +int32_t ttlMgrInsertTtl(STtlManger *pTtlMgr, const STtlUpdTtlCtx *updCtx) { if (updCtx->ttlDays == 0) return 0; STtlCacheEntry cacheEntry = {.ttlDays = updCtx->ttlDays, @@ -280,56 +279,55 @@ int ttlMgrInsertTtl(STtlManger *pTtlMgr, const STtlUpdTtlCtx *updCtx) { .changeTimeMsDirty = updCtx->changeTimeMs}; STtlDirtyEntry dirtryEntry = {.type = ENTRY_TYPE_UPSERT}; - int ret = taosHashPut(pTtlMgr->pTtlCache, &updCtx->uid, sizeof(updCtx->uid), &cacheEntry, sizeof(cacheEntry)); - if (ret < 0) { - metaError("%s, ttlMgr insert failed to update cache since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + int32_t code = taosHashPut(pTtlMgr->pTtlCache, &updCtx->uid, sizeof(updCtx->uid), &cacheEntry, sizeof(cacheEntry)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr insert failed to update cache since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } - ret = taosHashPut(pTtlMgr->pDirtyUids, &updCtx->uid, sizeof(updCtx->uid), &dirtryEntry, sizeof(dirtryEntry)); - if (ret < 0) { - metaError("%s, ttlMgr insert failed to update dirty uids since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + code = taosHashPut(pTtlMgr->pDirtyUids, &updCtx->uid, sizeof(updCtx->uid), &dirtryEntry, sizeof(dirtryEntry)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr insert failed to update dirty uids since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } if (ttlMgrNeedFlush(pTtlMgr)) { - ttlMgrFlush(pTtlMgr, updCtx->pTxn); + (void)ttlMgrFlush(pTtlMgr, updCtx->pTxn); } - ret = 0; + code = TSDB_CODE_SUCCESS; _out: metaTrace("%s, ttl mgr insert ttl, uid: %" PRId64 ", ctime: %" PRId64 ", ttlDays: %" PRId64, pTtlMgr->logPrefix, updCtx->uid, updCtx->changeTimeMs, updCtx->ttlDays); - return ret; + TAOS_RETURN(code); } -int ttlMgrDeleteTtl(STtlManger *pTtlMgr, const STtlDelTtlCtx *delCtx) { +int32_t ttlMgrDeleteTtl(STtlManger *pTtlMgr, const STtlDelTtlCtx *delCtx) { if (delCtx->ttlDays == 0) return 0; STtlDirtyEntry dirtryEntry = {.type = ENTRY_TYPE_DELETE}; - int ret = taosHashPut(pTtlMgr->pDirtyUids, &delCtx->uid, sizeof(delCtx->uid), &dirtryEntry, sizeof(dirtryEntry)); - if (ret < 0) { - metaError("%s, ttlMgr del failed to update dirty uids since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + int32_t code = taosHashPut(pTtlMgr->pDirtyUids, &delCtx->uid, sizeof(delCtx->uid), &dirtryEntry, sizeof(dirtryEntry)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr del failed to update dirty uids since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } if (ttlMgrNeedFlush(pTtlMgr)) { - ttlMgrFlush(pTtlMgr, delCtx->pTxn); + (void)ttlMgrFlush(pTtlMgr, delCtx->pTxn); } - ret = 0; + code = TSDB_CODE_SUCCESS; _out: metaTrace("%s, ttl mgr delete ttl, uid: %" PRId64, pTtlMgr->logPrefix, delCtx->uid); - - return ret; + TAOS_RETURN(code); } -int ttlMgrUpdateChangeTime(STtlManger *pTtlMgr, const STtlUpdCtimeCtx *pUpdCtimeCtx) { - int ret = 0; +int32_t ttlMgrUpdateChangeTime(STtlManger *pTtlMgr, const STtlUpdCtimeCtx *pUpdCtimeCtx) { + int32_t code = TSDB_CODE_SUCCESS; STtlCacheEntry *oldData = taosHashGet(pTtlMgr->pTtlCache, &pUpdCtimeCtx->uid, sizeof(pUpdCtimeCtx->uid)); if (oldData == NULL) { @@ -342,43 +340,39 @@ int ttlMgrUpdateChangeTime(STtlManger *pTtlMgr, const STtlUpdCtimeCtx *pUpdCtime .changeTimeMsDirty = pUpdCtimeCtx->changeTimeMs}; STtlDirtyEntry dirtryEntry = {.type = ENTRY_TYPE_UPSERT}; - ret = taosHashPut(pTtlMgr->pTtlCache, &pUpdCtimeCtx->uid, sizeof(pUpdCtimeCtx->uid), &cacheEntry, sizeof(cacheEntry)); - if (ret < 0) { - metaError("%s, ttlMgr update ctime failed to update cache since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + code = taosHashPut(pTtlMgr->pTtlCache, &pUpdCtimeCtx->uid, sizeof(pUpdCtimeCtx->uid), &cacheEntry, sizeof(cacheEntry)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr update ctime failed to update cache since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } - ret = taosHashPut(pTtlMgr->pDirtyUids, &pUpdCtimeCtx->uid, sizeof(pUpdCtimeCtx->uid), &dirtryEntry, - sizeof(dirtryEntry)); - if (ret < 0) { + code = taosHashPut(pTtlMgr->pDirtyUids, &pUpdCtimeCtx->uid, sizeof(pUpdCtimeCtx->uid), &dirtryEntry, + sizeof(dirtryEntry)); + if (TSDB_CODE_SUCCESS != code) { metaError("%s, ttlMgr update ctime failed to update dirty uids since %s", pTtlMgr->logPrefix, - tstrerror(terrno)); + tstrerror(code)); goto _out; } if (ttlMgrNeedFlush(pTtlMgr)) { - ttlMgrFlush(pTtlMgr, pUpdCtimeCtx->pTxn); + (void)ttlMgrFlush(pTtlMgr, pUpdCtimeCtx->pTxn); } - ret = 0; + code = TSDB_CODE_SUCCESS; _out: metaTrace("%s, ttl mgr update ctime, uid: %" PRId64 ", ctime: %" PRId64, pTtlMgr->logPrefix, pUpdCtimeCtx->uid, pUpdCtimeCtx->changeTimeMs); - - return ret; + TAOS_RETURN(code); } -int ttlMgrFindExpired(STtlManger *pTtlMgr, int64_t timePointMs, SArray *pTbUids, int32_t ttlDropMaxCount) { - int ret = -1; +int32_t ttlMgrFindExpired(STtlManger *pTtlMgr, int64_t timePointMs, SArray *pTbUids, int32_t ttlDropMaxCount) { + int32_t code = TSDB_CODE_SUCCESS; STtlIdxKeyV1 ttlKey = {.deleteTimeMs = timePointMs, .uid = INT64_MAX}; STtlExpiredCtx expiredCtx = { .ttlDropMaxCount = ttlDropMaxCount, .count = 0, .expiredKey = ttlKey, .pTbUids = pTbUids}; - ret = tdbTbTraversal(pTtlMgr->pTtlIdx, &expiredCtx, ttlMgrFindExpiredOneEntry); - if (ret) { - goto _out; - } + TAOS_CHECK_GOTO(tdbTbTraversal(pTtlMgr->pTtlIdx, &expiredCtx, ttlMgrFindExpiredOneEntry), NULL, _out); size_t vIdx = 0; for (size_t i = 0; i < pTbUids->size; i++) { @@ -393,20 +387,20 @@ int ttlMgrFindExpired(STtlManger *pTtlMgr, int64_t timePointMs, SArray *pTbUids, taosArrayPopTailBatch(pTbUids, pTbUids->size - vIdx); _out: - return ret; + TAOS_RETURN(code); } static bool ttlMgrNeedFlush(STtlManger *pTtlMgr) { return pTtlMgr->flushThreshold > 0 && taosHashGetSize(pTtlMgr->pDirtyUids) > pTtlMgr->flushThreshold; } -int ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { +int32_t ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { int64_t startNs = taosGetTimestampNs(); int64_t endNs = startNs; metaTrace("%s, ttl mgr flush start. dirty uids:%d", pTtlMgr->logPrefix, taosHashGetSize(pTtlMgr->pDirtyUids)); - int ret = -1; + int32_t code = TSDB_CODE_SUCCESS; void *pIter = taosHashIterate(pTtlMgr->pDirtyUids, NULL); while (pIter != NULL) { @@ -415,8 +409,8 @@ int ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { STtlCacheEntry *cacheEntry = taosHashGet(pTtlMgr->pTtlCache, pUid, sizeof(*pUid)); if (cacheEntry == NULL) { - metaError("%s, ttlMgr flush failed to get ttl cache since %s, uid: %" PRId64 ", type: %d", pTtlMgr->logPrefix, - tstrerror(terrno), *pUid, pEntry->type); + metaError("%s, ttlMgr flush failed to get ttl cache, uid: %" PRId64 ", type: %d", pTtlMgr->logPrefix, *pUid, + pEntry->type); continue; } @@ -428,26 +422,26 @@ int ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { if (pEntry->type == ENTRY_TYPE_UPSERT) { // delete old key & upsert new key - tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); // maybe first insert, ignore error - ret = tdbTbUpsert(pTtlMgr->pTtlIdx, &ttlKeyDirty, sizeof(ttlKeyDirty), &cacheEntry->ttlDaysDirty, + (void)tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); // maybe first insert, ignore error + code = tdbTbUpsert(pTtlMgr->pTtlIdx, &ttlKeyDirty, sizeof(ttlKeyDirty), &cacheEntry->ttlDaysDirty, sizeof(cacheEntry->ttlDaysDirty), pTxn); - if (ret < 0) { - metaError("%s, ttlMgr flush failed to upsert since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr flush failed to upsert since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } cacheEntry->ttlDays = cacheEntry->ttlDaysDirty; cacheEntry->changeTimeMs = cacheEntry->changeTimeMsDirty; } else if (pEntry->type == ENTRY_TYPE_DELETE) { - ret = tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); - if (ret < 0) { - metaError("%s, ttlMgr flush failed to delete since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + code = tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr flush failed to delete since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } - ret = taosHashRemove(pTtlMgr->pTtlCache, pUid, sizeof(*pUid)); - if (ret < 0) { - metaError("%s, ttlMgr flush failed to remove cache since %s", pTtlMgr->logPrefix, tstrerror(terrno)); + code = taosHashRemove(pTtlMgr->pTtlCache, pUid, sizeof(*pUid)); + if (TSDB_CODE_SUCCESS != code) { + metaError("%s, ttlMgr flush failed to remove cache since %s", pTtlMgr->logPrefix, tstrerror(code)); goto _out; } } else { @@ -457,16 +451,16 @@ int ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { void *pIterTmp = pIter; pIter = taosHashIterate(pTtlMgr->pDirtyUids, pIterTmp); - taosHashRemove(pTtlMgr->pDirtyUids, pUid, sizeof(tb_uid_t)); + (void)taosHashRemove(pTtlMgr->pDirtyUids, pUid, sizeof(tb_uid_t)); } taosHashClear(pTtlMgr->pDirtyUids); - ret = 0; + code = TSDB_CODE_SUCCESS; _out: endNs = taosGetTimestampNs(); metaTrace("%s, ttl mgr flush end, time consumed: %" PRId64 " ns", pTtlMgr->logPrefix, endNs - startNs); - return ret; + TAOS_RETURN(code); } diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c index 45aa845696..0ab420ce63 100644 --- a/source/dnode/vnode/src/tq/tq.c +++ b/source/dnode/vnode/src/tq/tq.c @@ -60,35 +60,41 @@ static bool tqOffsetEqual(const STqOffset* pLeft, const STqOffset* pRight) { pLeft->val.version == pRight->val.version; } -STQ* tqOpen(const char* path, SVnode* pVnode) { +int32_t tqOpen(const char* path, SVnode* pVnode) { STQ* pTq = taosMemoryCalloc(1, sizeof(STQ)); if (pTq == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } - + pVnode->pTq = pTq; pTq->path = taosStrdup(path); pTq->pVnode = pVnode; pTq->pHandle = taosHashInit(64, MurmurHash3_32, true, HASH_ENTRY_LOCK); + if (pTq->pHandle == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } taosHashSetFreeFp(pTq->pHandle, tqDestroyTqHandle); taosInitRWLatch(&pTq->lock); + pTq->pPushMgr = taosHashInit(64, MurmurHash3_32, false, HASH_NO_LOCK); + if (pTq->pPushMgr == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } pTq->pCheckInfo = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); + if (pTq->pCheckInfo == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } taosHashSetFreeFp(pTq->pCheckInfo, (FDelete)tDeleteSTqCheckInfo); pTq->pOffset = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_VARCHAR), true, HASH_ENTRY_LOCK); + if (pTq->pOffset == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } taosHashSetFreeFp(pTq->pOffset, (FDelete)tDeleteSTqOffset); - int32_t code = tqInitialize(pTq); - if (code != TSDB_CODE_SUCCESS) { - tqClose(pTq); - return NULL; - } else { - return pTq; - } + return tqInitialize(pTq); } int32_t tqInitialize(STQ* pTq) { @@ -102,11 +108,7 @@ int32_t tqInitialize(STQ* pTq) { streamMetaLoadAllTasks(pTq->pStreamMeta); - if (tqMetaOpen(pTq) < 0) { - return -1; - } - - return 0; + return tqMetaOpen(pTq); } void tqClose(STQ* pTq) { @@ -150,25 +152,32 @@ void tqNotifyClose(STQ* pTq) { streamMetaNotifyClose(pTq->pStreamMeta); } -int32_t tqPushEmptyDataRsp(STqHandle* pHandle, int32_t vgId) { +void tqPushEmptyDataRsp(STqHandle* pHandle, int32_t vgId) { + int32_t code = 0; SMqPollReq req = {0}; - if (tDeserializeSMqPollReq(pHandle->msg->pCont, pHandle->msg->contLen, &req) < 0) { - tqError("tDeserializeSMqPollReq %d failed", pHandle->msg->contLen); - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = tDeserializeSMqPollReq(pHandle->msg->pCont, pHandle->msg->contLen, &req); + if (code < 0) { + tqError("tDeserializeSMqPollReq %d failed, code:%d", pHandle->msg->contLen, code); + return; } SMqDataRsp dataRsp = {0}; - tqInitDataRsp(&dataRsp.common, req.reqOffset); + code = tqInitDataRsp(&dataRsp.common, req.reqOffset); + if (code != 0) { + tqError("tqInitDataRsp failed, code:%d", code); + return; + } dataRsp.common.blockNum = 0; char buf[TSDB_OFFSET_LEN] = {0}; tFormatOffset(buf, TSDB_OFFSET_LEN, &dataRsp.common.reqOffset); tqInfo("tqPushEmptyDataRsp to consumer:0x%" PRIx64 " vgId:%d, offset:%s, reqId:0x%" PRIx64, req.consumerId, vgId, buf, req.reqId); - tqSendDataRsp(pHandle, pHandle->msg, &req, &dataRsp, TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); + code = tqSendDataRsp(pHandle, pHandle->msg, &req, &dataRsp, TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); + if (code != 0) { + tqError("tqSendDataRsp failed, code:%d", code); + } tDeleteMqDataRsp(&dataRsp); - return 0; } int32_t tqSendDataRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPollReq* pReq, const void* pRsp, @@ -176,8 +185,6 @@ int32_t tqSendDataRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPollReq* int64_t sver = 0, ever = 0; walReaderValidVersionRange(pHandle->execHandle.pTqReader->pWalReader, &sver, &ever); - tqDoSendDataRsp(&pMsg->info, pRsp, pReq->epoch, pReq->consumerId, type, sver, ever); - char buf1[TSDB_OFFSET_LEN] = {0}; char buf2[TSDB_OFFSET_LEN] = {0}; tFormatOffset(buf1, TSDB_OFFSET_LEN, &((SMqDataRspCommon*)pRsp)->reqOffset); @@ -186,7 +193,7 @@ int32_t tqSendDataRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPollReq* tqDebug("tmq poll vgId:%d consumer:0x%" PRIx64 " (epoch %d) send rsp, block num:%d, req:%s, rsp:%s, reqId:0x%" PRIx64, vgId, pReq->consumerId, pReq->epoch, ((SMqDataRspCommon*)pRsp)->blockNum, buf1, buf2, pReq->reqId); - return 0; + return tqDoSendDataRsp(&pMsg->info, pRsp, pReq->epoch, pReq->consumerId, type, sver, ever); } int32_t tqProcessOffsetCommitReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { @@ -217,8 +224,9 @@ int32_t tqProcessOffsetCommitReq(STQ* pTq, int64_t sversion, char* msg, int32_t goto end; } - STqOffset* pSavedOffset = (STqOffset*)tqMetaGetOffset(pTq, pOffset->subKey); - if (pSavedOffset != NULL && tqOffsetEqual(pOffset, pSavedOffset)) { + STqOffset* pSavedOffset = NULL; + code = tqMetaGetOffset(pTq, pOffset->subKey, &pSavedOffset); + if (code == 0 && tqOffsetEqual(pOffset, pSavedOffset)) { tqInfo("not update the offset, vgId:%d sub:%s since committed:%" PRId64 " less than/equal to existed:%" PRId64, vgId, pOffset->subKey, pOffset->val.version, pSavedOffset->val.version); goto end; // no need to update the offset value @@ -328,7 +336,7 @@ int32_t tqProcessPollPush(STQ* pTq, SRpcMsg* pMsg) { .pCont = pHandle->msg->pCont, .contLen = pHandle->msg->contLen, .info = pHandle->msg->info}; - tmsgPutToQueue(&pTq->pVnode->msgCb, QUERY_QUEUE, &msg); + (void)tmsgPutToQueue(&pTq->pVnode->msgCb, QUERY_QUEUE, &msg); taosMemoryFree(pHandle->msg); pHandle->msg = NULL; } @@ -434,18 +442,16 @@ int32_t tqProcessVgCommittedInfoReq(STQ* pTq, SRpcMsg* pMsg) { tDecoderClear(&decoder); - STqOffset* pSavedOffset = (STqOffset*)tqMetaGetOffset(pTq, vgOffset.offset.subKey); - if (pSavedOffset == NULL) { - terrno = TSDB_CODE_TMQ_NO_COMMITTED; - return terrno; + STqOffset* pSavedOffset = NULL; + int32_t code = tqMetaGetOffset(pTq, vgOffset.offset.subKey, &pSavedOffset); + if (code != 0) { + return TSDB_CODE_TMQ_NO_COMMITTED; } vgOffset.offset = *pSavedOffset; - int32_t code = 0; tEncodeSize(tEncodeMqVgOffset, &vgOffset, len, code); if (code < 0) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TAOS_GET_TERRNO(TSDB_CODE_INVALID_PARA); } void* buf = rpcMallocCont(len); @@ -455,8 +461,12 @@ int32_t tqProcessVgCommittedInfoReq(STQ* pTq, SRpcMsg* pMsg) { } SEncoder encoder; tEncoderInit(&encoder, buf, len); - tEncodeMqVgOffset(&encoder, &vgOffset); + code = tEncodeMqVgOffset(&encoder, &vgOffset); tEncoderClear(&encoder); + if (code < 0) { + rpcFreeCont(buf); + return TAOS_GET_TERRNO(TSDB_CODE_INVALID_PARA); + } SRpcMsg rsp = {.info = pMsg->info, .pCont = buf, .contLen = len, .code = 0}; @@ -465,11 +475,11 @@ int32_t tqProcessVgCommittedInfoReq(STQ* pTq, SRpcMsg* pMsg) { } int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { + int32_t code = 0; SMqPollReq req = {0}; if (tDeserializeSMqPollReq(pMsg->pCont, pMsg->contLen, &req) < 0) { tqError("tDeserializeSMqPollReq %d failed", pMsg->contLen); - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } int64_t consumerId = req.consumerId; @@ -481,18 +491,17 @@ int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { STqHandle* pHandle = taosHashGet(pTq->pHandle, req.subKey, strlen(req.subKey)); if (pHandle == NULL) { tqError("consumer:0x%" PRIx64 " vgId:%d subkey:%s not found", consumerId, vgId, req.subKey); - terrno = TSDB_CODE_INVALID_MSG; taosRUnLockLatch(&pTq->lock); - return -1; + return TSDB_CODE_INVALID_MSG; } // 2. check rebalance status if (pHandle->consumerId != consumerId) { tqDebug("ERROR consumer:0x%" PRIx64 " vgId:%d, subkey %s, mismatch for saved handle consumer:0x%" PRIx64, consumerId, vgId, req.subKey, pHandle->consumerId); - terrno = TSDB_CODE_TMQ_CONSUMER_MISMATCH; taosRUnLockLatch(&pTq->lock); - return -1; + return TSDB_CODE_TMQ_CONSUMER_MISMATCH; + } int64_t sver = 0, ever = 0; @@ -500,13 +509,15 @@ int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { taosRUnLockLatch(&pTq->lock); SMqDataRsp dataRsp = {0}; - tqInitDataRsp(&dataRsp.common, req.reqOffset); + code = tqInitDataRsp(&dataRsp.common, req.reqOffset); + if (code != 0) { + return code; + } if (req.useSnapshot == true) { tqError("consumer:0x%" PRIx64 " vgId:%d subkey:%s snapshot not support wal info", consumerId, vgId, req.subKey); - terrno = TSDB_CODE_INVALID_PARA; - tDeleteMqDataRsp(&dataRsp); - return -1; + code = TSDB_CODE_INVALID_PARA; + goto END; } dataRsp.common.rspOffset.type = TMQ_OFFSET__LOG; @@ -514,13 +525,13 @@ int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { if (reqOffset.type == TMQ_OFFSET__LOG) { dataRsp.common.rspOffset.version = reqOffset.version; } else if (reqOffset.type < 0) { - STqOffset* pOffset = (STqOffset*)(STqOffset*)tqMetaGetOffset(pTq, req.subKey); - if (pOffset != NULL) { + STqOffset* pOffset = NULL; + code = tqMetaGetOffset(pTq, req.subKey, &pOffset); + if (code == 0) { if (pOffset->val.type != TMQ_OFFSET__LOG) { tqError("consumer:0x%" PRIx64 " vgId:%d subkey:%s, no valid wal info", consumerId, vgId, req.subKey); - terrno = TSDB_CODE_INVALID_PARA; - tDeleteMqDataRsp(&dataRsp); - return -1; + code = TSDB_CODE_INVALID_PARA; + goto END; } dataRsp.common.rspOffset.version = pOffset->val.version; @@ -538,14 +549,15 @@ int32_t tqProcessVgWalInfoReq(STQ* pTq, SRpcMsg* pMsg) { } else { tqError("consumer:0x%" PRIx64 " vgId:%d subkey:%s invalid offset type:%d", consumerId, vgId, req.subKey, reqOffset.type); - terrno = TSDB_CODE_INVALID_PARA; - tDeleteMqDataRsp(&dataRsp); - return -1; + code = TSDB_CODE_INVALID_PARA; + goto END; } - tqDoSendDataRsp(&pMsg->info, &dataRsp, req.epoch, req.consumerId, TMQ_MSG_TYPE__WALINFO_RSP, sver, ever); + code = tqDoSendDataRsp(&pMsg->info, &dataRsp, req.epoch, req.consumerId, TMQ_MSG_TYPE__WALINFO_RSP, sver, ever); + +END: tDeleteMqDataRsp(&dataRsp); - return 0; + return code; } int32_t tqProcessDeleteSubReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { @@ -568,9 +580,7 @@ int32_t tqProcessDeleteSubReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg taosMsleep(10); continue; } - tqUnregisterPushHandle(pTq, pHandle); - code = taosHashRemove(pTq->pHandle, pReq->subKey, strlen(pReq->subKey)); if (code != 0) { tqError("cannot process tq delete req %s, since no such handle", pReq->subKey); @@ -598,33 +608,25 @@ int32_t tqProcessDeleteSubReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg int32_t tqProcessAddCheckInfoReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { STqCheckInfo info = {0}; - if(tqMetaDecodeCheckInfo(&info, msg, msgLen) != 0){ - return -1; + int32_t code = tqMetaDecodeCheckInfo(&info, msg, msgLen); + if(code != 0){ + return code; } - if (taosHashPut(pTq->pCheckInfo, info.topic, strlen(info.topic), &info, sizeof(STqCheckInfo)) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = taosHashPut(pTq->pCheckInfo, info.topic, strlen(info.topic), &info, sizeof(STqCheckInfo)); + if (code != 0) { tDeleteSTqCheckInfo(&info); - return -1; + return code; } - if (tqMetaSaveInfo(pTq, pTq->pCheckStore, info.topic, strlen(info.topic), msg, msgLen) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - return 0; + + return tqMetaSaveInfo(pTq, pTq->pCheckStore, info.topic, strlen(info.topic), msg, msgLen); } int32_t tqProcessDelCheckInfoReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { if (taosHashRemove(pTq->pCheckInfo, msg, strlen(msg)) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return TSDB_CODE_TSC_INTERNAL_ERROR; } - if (tqMetaDeleteInfo(pTq, pTq->pCheckStore, msg, strlen(msg)) < 0) { - tqError("cannot process tq delete check info req %s, since no such check info", msg); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - return 0; + return tqMetaDeleteInfo(pTq, pTq->pCheckStore, msg, strlen(msg)); } int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { @@ -633,12 +635,10 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t sversion, char* msg, int32_t msg SDecoder dc = {0}; tDecoderInit(&dc, (uint8_t*)msg, msgLen); - + ret = tDecodeSMqRebVgReq(&dc, &req); // decode req - if (tDecodeSMqRebVgReq(&dc, &req) < 0) { - terrno = TSDB_CODE_INVALID_MSG; - tDecoderClear(&dc); - return -1; + if (ret < 0) { + goto end; } tqInfo("vgId:%d, tq process sub req:%s, Id:0x%" PRIx64 " -> Id:0x%" PRIx64, pTq->pVnode->config.vgId, req.subKey, @@ -777,18 +777,14 @@ int32_t tqBuildStreamTask(void* pTqObj, SStreamTask* pTask, int64_t nextProcessV return 0; } -int32_t tqProcessTaskCheckReq(STQ* pTq, SRpcMsg* pMsg) { return tqStreamTaskProcessCheckReq(pTq->pStreamMeta, pMsg); } +int32_t tqProcessTaskCheckReq(STQ* pTq, SRpcMsg* pMsg) { + return tqStreamTaskProcessCheckReq(pTq->pStreamMeta, pMsg); } int32_t tqProcessTaskCheckRsp(STQ* pTq, SRpcMsg* pMsg) { return tqStreamTaskProcessCheckRsp(pTq->pStreamMeta, pMsg, vnodeIsRoleLeader(pTq->pVnode)); } int32_t tqProcessTaskDeployReq(STQ* pTq, int64_t sversion, char* msg, int32_t msgLen) { -// if (!pTq->pVnode->restored) { -// tqDebug("vgId:%d not restored, ignore the stream task deploy msg", TD_VID(pTq->pVnode)); -// return TSDB_CODE_SUCCESS; -// } - return tqStreamTaskProcessDeployReq(pTq->pStreamMeta, &pTq->pVnode->msgCb, sversion, msg, msgLen, vnodeIsRoleLeader(pTq->pVnode), pTq->pVnode->restored); } diff --git a/source/dnode/vnode/src/tq/tqMeta.c b/source/dnode/vnode/src/tq/tqMeta.c index d0519ec5e7..9e90c1cd59 100644 --- a/source/dnode/vnode/src/tq/tqMeta.c +++ b/source/dnode/vnode/src/tq/tqMeta.c @@ -58,12 +58,13 @@ int32_t tDecodeSTqHandle(SDecoder* pDecoder, STqHandle* pHandle) { } else if (pHandle->execHandle.subType == TOPIC_SUB_TYPE__DB) { pHandle->execHandle.execDb.pFilterOutTbUid = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_ENTRY_LOCK); + if (pHandle->execHandle.execDb.pFilterOutTbUid == NULL) return -1; int32_t size = 0; if (tDecodeI32(pDecoder, &size) < 0) return -1; for (int32_t i = 0; i < size; i++) { int64_t tbUid = 0; if (tDecodeI64(pDecoder, &tbUid) < 0) return -1; - taosHashPut(pHandle->execHandle.execDb.pFilterOutTbUid, &tbUid, sizeof(int64_t), NULL, 0); + if (taosHashPut(pHandle->execHandle.execDb.pFilterOutTbUid, &tbUid, sizeof(int64_t), NULL, 0) != 0) return -1; } } else if (pHandle->execHandle.subType == TOPIC_SUB_TYPE__TABLE) { if (tDecodeI64(pDecoder, &pHandle->execHandle.execTb.suid) < 0) return -1; @@ -79,11 +80,12 @@ int32_t tqMetaDecodeCheckInfo(STqCheckInfo* info, void* pVal, int32_t vLen) { SDecoder decoder = {0}; tDecoderInit(&decoder, (uint8_t*)pVal, vLen); int32_t code = tDecodeSTqCheckInfo(&decoder, info); + tDecoderClear(&decoder); + if (code != 0) { tDeleteSTqCheckInfo(info); return TSDB_CODE_OUT_OF_MEMORY; } - tDecoderClear(&decoder); return code; } @@ -91,11 +93,12 @@ int32_t tqMetaDecodeOffsetInfo(STqOffset* info, void* pVal, int32_t vLen) { SDecoder decoder = {0}; tDecoderInit(&decoder, (uint8_t*)pVal, vLen); int32_t code = tDecodeSTqOffset(&decoder, info); + tDecoderClear(&decoder); + if (code != 0) { tDeleteSTqOffset(info); return TSDB_CODE_OUT_OF_MEMORY; } - tDecoderClear(&decoder); return code; } @@ -131,32 +134,36 @@ END: return code; } -void* tqMetaGetOffset(STQ* pTq, const char* subkey) { +int32_t tqMetaGetOffset(STQ* pTq, const char* subkey, STqOffset** pOffset){ void* data = taosHashGet(pTq->pOffset, subkey, strlen(subkey)); if (data == NULL) { int vLen = 0; if (tdbTbGet(pTq->pOffsetStore, subkey, strlen(subkey), &data, &vLen) < 0) { tdbFree(data); - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } STqOffset offset = {0}; if (tqMetaDecodeOffsetInfo(&offset, data, vLen) != TDB_CODE_SUCCESS) { tdbFree(data); - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } if (taosHashPut(pTq->pOffset, subkey, strlen(subkey), &offset, sizeof(STqOffset)) != 0) { tDeleteSTqOffset(&offset); tdbFree(data); - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } tdbFree(data); - return taosHashGet(pTq->pOffset, subkey, strlen(subkey)); + *pOffset = taosHashGet(pTq->pOffset, subkey, strlen(subkey)); + if(*pOffset == NULL){ + return TSDB_CODE_OUT_OF_MEMORY; + } } else { - return data; + *pOffset = data; } + return 0; } int32_t tqMetaSaveHandle(STQ* pTq, const char* key, const STqHandle* pHandle) { @@ -199,10 +206,9 @@ static int tqMetaInitHandle(STQ* pTq, STqHandle* handle) { int32_t vgId = TD_VID(pVnode); handle->pRef = walOpenRef(pVnode->pWal); - if (handle->pRef == NULL) { - TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); - } - TQ_ERR_RETURN(walSetRefVer(handle->pRef, handle->snapshotVer)); + + TQ_NULL_GO_TO_END(handle->pRef); + TQ_ERR_GO_TO_END(walSetRefVer(handle->pRef, handle->snapshotVer)); SReadHandle reader = { .vnode = pVnode, @@ -214,43 +220,36 @@ static int tqMetaInitHandle(STQ* pTq, STqHandle* handle) { initStorageAPI(&reader.api); if (handle->execHandle.subType == TOPIC_SUB_TYPE__COLUMN) { - handle->execHandle.task = qCreateQueueExecTaskInfo(handle->execHandle.execCol.qmsg, &reader, vgId, - &handle->execHandle.numOfCols, handle->consumerId); - if (handle->execHandle.task == NULL) { - tqError("cannot create exec task for %s", handle->subKey); - return TSDB_CODE_OUT_OF_MEMORY; - } + handle->execHandle.task = + qCreateQueueExecTaskInfo(handle->execHandle.execCol.qmsg, &reader, vgId, &handle->execHandle.numOfCols, handle->consumerId); + TQ_NULL_GO_TO_END(handle->execHandle.task); void* scanner = NULL; - (void)qExtractStreamScanner(handle->execHandle.task, &scanner); - if (scanner == NULL) { - tqError("cannot extract stream scanner for %s", handle->subKey); - return TSDB_CODE_SCH_INTERNAL_ERROR; - } + qExtractStreamScanner(handle->execHandle.task, &scanner); + TQ_NULL_GO_TO_END(scanner); handle->execHandle.pTqReader = qExtractReaderFromStreamScanner(scanner); - if (handle->execHandle.pTqReader == NULL) { - tqError("cannot extract exec reader for %s", handle->subKey); - return TSDB_CODE_SCH_INTERNAL_ERROR; - } + TQ_NULL_GO_TO_END(handle->execHandle.pTqReader); } else if (handle->execHandle.subType == TOPIC_SUB_TYPE__DB) { handle->pWalReader = walOpenReader(pVnode->pWal, NULL, 0); + TQ_NULL_GO_TO_END(handle->pWalReader); handle->execHandle.pTqReader = tqReaderOpen(pVnode); - - buildSnapContext(reader.vnode, reader.version, 0, handle->execHandle.subType, handle->fetchMeta, - (SSnapContext**)(&reader.sContext)); + TQ_NULL_GO_TO_END(handle->execHandle.pTqReader); + TQ_ERR_GO_TO_END(buildSnapContext(reader.vnode, reader.version, 0, handle->execHandle.subType, handle->fetchMeta, + (SSnapContext**)(&reader.sContext))); handle->execHandle.task = qCreateQueueExecTaskInfo(NULL, &reader, vgId, NULL, handle->consumerId); + TQ_NULL_GO_TO_END(handle->execHandle.task); } else if (handle->execHandle.subType == TOPIC_SUB_TYPE__TABLE) { handle->pWalReader = walOpenReader(pVnode->pWal, NULL, 0); - - if (handle->execHandle.execTb.qmsg != NULL && strcmp(handle->execHandle.execTb.qmsg, "") != 0) { + TQ_NULL_GO_TO_END(handle->pWalReader); + if(handle->execHandle.execTb.qmsg != NULL && strcmp(handle->execHandle.execTb.qmsg, "") != 0) { if (nodesStringToNode(handle->execHandle.execTb.qmsg, &handle->execHandle.execTb.node) != 0) { tqError("nodesStringToNode error in sub stable, since %s", terrstr()); return TSDB_CODE_SCH_INTERNAL_ERROR; } } - buildSnapContext(reader.vnode, reader.version, handle->execHandle.execTb.suid, handle->execHandle.subType, - handle->fetchMeta, (SSnapContext**)(&reader.sContext)); + TQ_ERR_GO_TO_END(buildSnapContext(reader.vnode, reader.version, handle->execHandle.execTb.suid, handle->execHandle.subType, + handle->fetchMeta, (SSnapContext**)(&reader.sContext))); handle->execHandle.task = qCreateQueueExecTaskInfo(NULL, &reader, vgId, NULL, handle->consumerId); - + TQ_NULL_GO_TO_END(handle->execHandle.task); SArray* tbUidList = NULL; int ret = qGetTableList(handle->execHandle.execTb.suid, pVnode, handle->execHandle.execTb.node, &tbUidList, handle->execHandle.task); @@ -262,10 +261,13 @@ static int tqMetaInitHandle(STQ* pTq, STqHandle* handle) { tqInfo("vgId:%d, tq try to get ctb for stb subscribe, suid:%" PRId64, pVnode->config.vgId, handle->execHandle.execTb.suid); handle->execHandle.pTqReader = tqReaderOpen(pVnode); + TQ_NULL_GO_TO_END(handle->execHandle.pTqReader); tqReaderSetTbUidList(handle->execHandle.pTqReader, tbUidList, NULL); taosArrayDestroy(tbUidList); } - return 0; + +END: + return code; } static int32_t tqMetaRestoreHandle(STQ* pTq, void* pVal, int vLen, STqHandle* handle) { @@ -287,7 +289,7 @@ END: int32_t tqMetaCreateHandle(STQ* pTq, SMqRebVgReq* req, STqHandle* handle) { int32_t vgId = TD_VID(pTq->pVnode); - memcpy(handle->subKey, req->subKey, TSDB_SUBSCRIBE_KEY_LEN); + (void)memcpy(handle->subKey, req->subKey, TSDB_SUBSCRIBE_KEY_LEN); handle->consumerId = req->newConsumerId; handle->execHandle.subType = req->subType; @@ -297,15 +299,19 @@ int32_t tqMetaCreateHandle(STQ* pTq, SMqRebVgReq* req, STqHandle* handle) { } else if (req->subType == TOPIC_SUB_TYPE__DB) { handle->execHandle.execDb.pFilterOutTbUid = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_ENTRY_LOCK); - } else if (req->subType == TOPIC_SUB_TYPE__TABLE) { + if(handle->execHandle.execDb.pFilterOutTbUid == NULL){ + return TSDB_CODE_OUT_OF_MEMORY; + } + }else if(req->subType == TOPIC_SUB_TYPE__TABLE){ handle->execHandle.execTb.suid = req->suid; handle->execHandle.execTb.qmsg = taosStrdup(req->qmsg); } handle->snapshotVer = walGetCommittedVer(pTq->pVnode->pWal); - if (tqMetaInitHandle(pTq, handle) < 0) { - return -1; + int32_t code = tqMetaInitHandle(pTq, handle); + if (code != 0){ + return code; } tqInfo("tqMetaCreateHandle %s consumer 0x%" PRIx64 " vgId:%d, snapshotVer:%" PRId64, handle->subKey, handle->consumerId, vgId, handle->snapshotVer); @@ -377,10 +383,12 @@ END: return code; } -static int32_t replaceTqPath(char** path) { - char* tpath = NULL; - int32_t code = TDB_CODE_SUCCESS; - TQ_ERR_RETURN(tqBuildFName(&tpath, *path, TQ_SUBSCRIBE_NAME)); +static int32_t replaceTqPath(char** path){ + char* tpath = NULL; + int32_t code = tqBuildFName(&tpath, *path, TQ_SUBSCRIBE_NAME); + if (code != 0){ + return code; + } taosMemoryFree(*path); *path = tpath; return TDB_CODE_SUCCESS; @@ -407,7 +415,7 @@ static int32_t tqMetaRestoreCheckInfo(STQ* pTq) { END: tdbFree(pKey); tdbFree(pVal); - tdbTbcClose(pCur); + (void)tdbTbcClose(pCur); tDeleteSTqCheckInfo(&info); return code; } @@ -480,7 +488,7 @@ END: return code; } -int32_t tqMetaClose(STQ* pTq) { +void tqMetaClose(STQ* pTq) { if (pTq->pExecStore) { (void)tdbTbClose(pTq->pExecStore); } @@ -491,5 +499,4 @@ int32_t tqMetaClose(STQ* pTq) { (void)tdbTbClose(pTq->pOffsetStore); } (void)tdbClose(pTq->pMetaDB); - return 0; } diff --git a/source/dnode/vnode/src/tq/tqPush.c b/source/dnode/vnode/src/tq/tqPush.c index 7375478e61..386b61cce3 100644 --- a/source/dnode/vnode/src/tq/tqPush.c +++ b/source/dnode/vnode/src/tq/tqPush.c @@ -22,17 +22,28 @@ int32_t tqProcessSubmitReqForSubscribe(STQ* pTq) { } SRpcMsg msg = {.msgType = TDMT_VND_TMQ_CONSUME_PUSH}; msg.pCont = rpcMallocCont(sizeof(SMsgHead)); + if (msg.pCont == NULL) { + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } msg.contLen = sizeof(SMsgHead); SMsgHead *pHead = msg.pCont; pHead->vgId = TD_VID(pTq->pVnode); pHead->contLen = msg.contLen; - tmsgPutToQueue(&pTq->pVnode->msgCb, QUERY_QUEUE, &msg); - return 0; + int32_t code = tmsgPutToQueue(&pTq->pVnode->msgCb, QUERY_QUEUE, &msg); + if (code != 0){ + tqError("vgId:%d failed to push msg to queue, code:%d", TD_VID(pTq->pVnode), code); + rpcFreeCont(msg.pCont); + } + return code; } int32_t tqPushMsg(STQ* pTq, tmsg_t msgType) { + int32_t code = 0; if (msgType == TDMT_VND_SUBMIT) { - tqProcessSubmitReqForSubscribe(pTq); + code = tqProcessSubmitReqForSubscribe(pTq); + if (code != 0){ + tqError("vgId:%d failed to process submit request for subscribe, code:%d", TD_VID(pTq->pVnode), code); + } } streamMetaRLock(pTq->pStreamMeta); @@ -46,10 +57,10 @@ int32_t tqPushMsg(STQ* pTq, tmsg_t msgType) { // 2. the vnode should be the leader. // 3. the stream is not suspended yet. if ((!tsDisableStream) && (numOfTasks > 0)) { - tqScanWalAsync(pTq, true); + code = tqScanWalAsync(pTq, true); } - return 0; + return code; } int32_t tqRegisterPushHandle(STQ* pTq, void* handle, SRpcMsg* pMsg) { @@ -58,43 +69,52 @@ int32_t tqRegisterPushHandle(STQ* pTq, void* handle, SRpcMsg* pMsg) { if (pHandle->msg == NULL) { pHandle->msg = taosMemoryCalloc(1, sizeof(SRpcMsg)); - memcpy(pHandle->msg, pMsg, sizeof(SRpcMsg)); + if (pHandle->msg == NULL) { + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } + (void)memcpy(pHandle->msg, pMsg, sizeof(SRpcMsg)); pHandle->msg->pCont = rpcMallocCont(pMsg->contLen); + if (pHandle->msg->pCont == NULL) { + taosMemoryFree(pHandle->msg); + pHandle->msg = NULL; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + } } else { -// tqPushDataRsp(pHandle, vgId); tqPushEmptyDataRsp(pHandle, vgId); void* tmp = pHandle->msg->pCont; - memcpy(pHandle->msg, pMsg, sizeof(SRpcMsg)); + (void)memcpy(pHandle->msg, pMsg, sizeof(SRpcMsg)); pHandle->msg->pCont = tmp; } - memcpy(pHandle->msg->pCont, pMsg->pCont, pMsg->contLen); + (void)memcpy(pHandle->msg->pCont, pMsg->pCont, pMsg->contLen); pHandle->msg->contLen = pMsg->contLen; int32_t ret = taosHashPut(pTq->pPushMgr, pHandle->subKey, strlen(pHandle->subKey), &pHandle, POINTER_BYTES); tqDebug("vgId:%d data is over, ret:%d, consumerId:0x%" PRIx64 ", register to pHandle:%p, pCont:%p, len:%d", vgId, ret, pHandle->consumerId, pHandle, pHandle->msg->pCont, pHandle->msg->contLen); - return 0; + if (ret != 0) { + rpcFreeCont(pHandle->msg->pCont); + taosMemoryFree(pHandle->msg); + pHandle->msg = NULL; + } + return ret; } -int tqUnregisterPushHandle(STQ* pTq, void *handle) { +void tqUnregisterPushHandle(STQ* pTq, void *handle) { STqHandle *pHandle = (STqHandle*)handle; int32_t vgId = TD_VID(pTq->pVnode); if(taosHashGetSize(pTq->pPushMgr) <= 0) { - return 0; + return; } int32_t ret = taosHashRemove(pTq->pPushMgr, pHandle->subKey, strlen(pHandle->subKey)); tqInfo("vgId:%d remove pHandle:%p,ret:%d consumer Id:0x%" PRIx64, vgId, pHandle, ret, pHandle->consumerId); if(ret == 0 && pHandle->msg != NULL) { -// tqPushDataRsp(pHandle, vgId); tqPushEmptyDataRsp(pHandle, vgId); rpcFreeCont(pHandle->msg->pCont); taosMemoryFree(pHandle->msg); pHandle->msg = NULL; } - - return 0; } diff --git a/source/dnode/vnode/src/tq/tqRead.c b/source/dnode/vnode/src/tq/tqRead.c index 0cdfbdb50a..7c6194a3ea 100644 --- a/source/dnode/vnode/src/tq/tqRead.c +++ b/source/dnode/vnode/src/tq/tqRead.c @@ -27,26 +27,26 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { int64_t tbSuid = pHandle->execHandle.execTb.suid; int64_t realTbSuid = 0; - SDecoder coder; + SDecoder dcoder = {0}; void* data = POINTER_SHIFT(body, sizeof(SMsgHead)); int32_t len = bodyLen - sizeof(SMsgHead); - tDecoderInit(&coder, data, len); + tDecoderInit(&dcoder, data, len); if (msgType == TDMT_VND_CREATE_STB || msgType == TDMT_VND_ALTER_STB) { SVCreateStbReq req = {0}; - if (tDecodeSVCreateStbReq(&coder, &req) < 0) { + if (tDecodeSVCreateStbReq(&dcoder, &req) < 0) { goto end; } realTbSuid = req.suid; } else if (msgType == TDMT_VND_DROP_STB) { SVDropStbReq req = {0}; - if (tDecodeSVDropStbReq(&coder, &req) < 0) { + if (tDecodeSVDropStbReq(&dcoder, &req) < 0) { goto end; } realTbSuid = req.suid; } else if (msgType == TDMT_VND_CREATE_TABLE) { SVCreateTbBatchReq req = {0}; - if (tDecodeSVCreateTbBatchReq(&coder, &req) < 0) { + if (tDecodeSVCreateTbBatchReq(&dcoder, &req) < 0) { goto end; } @@ -66,34 +66,42 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { realTbSuid = tbSuid; SVCreateTbBatchReq reqNew = {0}; reqNew.pArray = taosArrayInit(req.nReqs, sizeof(struct SVCreateTbReq)); + if (reqNew.pArray == NULL) { + tDeleteSVCreateTbBatchReq(&req); + goto end; + } for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { pCreateReq = req.pReqs + iReq; if (pCreateReq->type == TSDB_CHILD_TABLE && pCreateReq->ctb.suid == tbSuid) { reqNew.nReqs++; - taosArrayPush(reqNew.pArray, pCreateReq); + if (taosArrayPush(reqNew.pArray, pCreateReq) == NULL){ + taosArrayDestroy(reqNew.pArray); + tDeleteSVCreateTbBatchReq(&req); + goto end; + } } } - int tlen; + int tlen = 0; int32_t ret = 0; tEncodeSize(tEncodeSVCreateTbBatchReq, &reqNew, tlen, ret); void* buf = taosMemoryMalloc(tlen); if (NULL == buf) { taosArrayDestroy(reqNew.pArray); - for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { - pCreateReq = req.pReqs + iReq; - taosMemoryFreeClear(pCreateReq->comment); - if (pCreateReq->type == TSDB_CHILD_TABLE) { - taosArrayDestroy(pCreateReq->ctb.tagName); - } - } + tDeleteSVCreateTbBatchReq(&req); goto end; } SEncoder coderNew = {0}; tEncoderInit(&coderNew, buf, tlen - sizeof(SMsgHead)); - tEncodeSVCreateTbBatchReq(&coderNew, &reqNew); + ret = tEncodeSVCreateTbBatchReq(&coderNew, &reqNew); tEncoderClear(&coderNew); - memcpy(pHead->body + sizeof(SMsgHead), buf, tlen); + if (ret < 0) { + taosMemoryFree(buf); + taosArrayDestroy(reqNew.pArray); + tDeleteSVCreateTbBatchReq(&req); + goto end; + } + (void)memcpy(pHead->body + sizeof(SMsgHead), buf, tlen); pHead->bodyLen = tlen + sizeof(SMsgHead); taosMemoryFree(buf); taosArrayDestroy(reqNew.pArray); @@ -103,7 +111,7 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { } else if (msgType == TDMT_VND_ALTER_TABLE) { SVAlterTbReq req = {0}; - if (tDecodeSVAlterTbReq(&coder, &req) < 0) { + if (tDecodeSVAlterTbReq(&dcoder, &req) < 0) { goto end; } @@ -119,7 +127,7 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { } else if (msgType == TDMT_VND_DROP_TABLE) { SVDropTbBatchReq req = {0}; - if (tDecodeSVDropTbBatchReq(&coder, &req) < 0) { + if (tDecodeSVDropTbBatchReq(&dcoder, &req) < 0) { goto end; } @@ -140,15 +148,21 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { realTbSuid = tbSuid; SVDropTbBatchReq reqNew = {0}; reqNew.pArray = taosArrayInit(req.nReqs, sizeof(SVDropTbReq)); + if (reqNew.pArray == NULL) { + goto end; + } for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { pDropReq = req.pReqs + iReq; if (pDropReq->suid == tbSuid) { reqNew.nReqs++; - taosArrayPush(reqNew.pArray, pDropReq); + if (taosArrayPush(reqNew.pArray, pDropReq) == NULL){ + taosArrayDestroy(reqNew.pArray); + goto end; + } } } - int tlen; + int tlen = 0; int32_t ret = 0; tEncodeSize(tEncodeSVDropTbBatchReq, &reqNew, tlen, ret); void* buf = taosMemoryMalloc(tlen); @@ -158,23 +172,28 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) { } SEncoder coderNew = {0}; tEncoderInit(&coderNew, buf, tlen - sizeof(SMsgHead)); - tEncodeSVDropTbBatchReq(&coderNew, &reqNew); + ret = tEncodeSVDropTbBatchReq(&coderNew, &reqNew); tEncoderClear(&coderNew); - memcpy(pHead->body + sizeof(SMsgHead), buf, tlen); + if (ret != 0) { + taosMemoryFree(buf); + taosArrayDestroy(reqNew.pArray); + goto end; + } + (void)memcpy(pHead->body + sizeof(SMsgHead), buf, tlen); pHead->bodyLen = tlen + sizeof(SMsgHead); taosMemoryFree(buf); taosArrayDestroy(reqNew.pArray); } } else if (msgType == TDMT_VND_DELETE) { SDeleteRes req = {0}; - if (tDecodeDeleteRes(&coder, &req) < 0) { + if (tDecodeDeleteRes(&dcoder, &req) < 0) { goto end; } realTbSuid = req.suid; } end: - tDecoderClear(&coder); + tDecoderClear(&dcoder); return tbSuid == realTbSuid; } @@ -242,10 +261,10 @@ END: bool tqGetTablePrimaryKey(STqReader* pReader) { return pReader->hasPrimaryKey; } -void tqSetTablePrimaryKey(STqReader* pReader, int64_t uid) { - bool ret = false; - SSchemaWrapper* schema = metaGetTableSchema(pReader->pVnodeMeta, uid, -1, 1); - if (schema->nCols >= 2 && schema->pSchema[1].flags & COL_IS_KEY) { +void tqSetTablePrimaryKey(STqReader* pReader, int64_t uid){ + bool ret = false; + SSchemaWrapper *schema = metaGetTableSchema(pReader->pVnodeMeta, uid, -1, 1); + if (schema && schema->nCols >= 2 && schema->pSchema[1].flags & COL_IS_KEY){ ret = true; } tDeleteSchemaWrapper(schema); @@ -333,7 +352,7 @@ int32_t extractMsgFromWal(SWalReader* pReader, void** pItem, int64_t maxVer, con return code; } - memcpy(data, pBody, len); + (void)memcpy(data, pBody, len); SPackedData data1 = (SPackedData){.ver = ver, .msgLen = len, .msgStr = data}; code = streamDataSubmitNew(&data1, STREAM_INPUT__DATA_SUBMIT, (SStreamDataSubmit**)pItem); @@ -379,6 +398,11 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id, int sourceExcluded) { pReader->msg.ver); SSubmitTbData* pSubmitTbData = taosArrayGet(pReader->submit.aSubmitTbData, pReader->nextBlk); + if (pSubmitTbData == NULL) { + tqError("tq reader next data block %d/%d, len:%d %" PRId64, pReader->nextBlk, numOfBlocks, pReader->msg.msgLen, + pReader->msg.ver); + return false; + } if ((pSubmitTbData->flags & sourceExcluded) != 0) { pReader->nextBlk += 1; continue; @@ -412,7 +436,9 @@ bool tqNextBlockInWal(STqReader* pReader, const char* id, int sourceExcluded) { void* pBody = POINTER_SHIFT(pWalReader->pHead->head.body, sizeof(SSubmitReq2Msg)); int32_t bodyLen = pWalReader->pHead->head.bodyLen - sizeof(SSubmitReq2Msg); int64_t ver = pWalReader->pHead->head.version; - tqReaderSetSubmitMsg(pReader, pBody, bodyLen, ver); + if (tqReaderSetSubmitMsg(pReader, pBody, bodyLen, ver) != 0) { + return false; + } pReader->nextBlk = 0; } } @@ -423,13 +449,14 @@ int32_t tqReaderSetSubmitMsg(STqReader* pReader, void* msgStr, int32_t msgLen, i pReader->msg.ver = ver; tqDebug("tq reader set msg %p %d", msgStr, msgLen); - SDecoder decoder; + SDecoder decoder = {0}; tDecoderInit(&decoder, pReader->msg.msgStr, pReader->msg.msgLen); - if (tDecodeSubmitReq(&decoder, &pReader->submit) < 0) { + int32_t code = tDecodeSubmitReq(&decoder, &pReader->submit); + if (code != 0) { tDecoderClear(&decoder); tqError("DecodeSSubmitReq2 error, msgLen:%d, ver:%" PRId64, msgLen, ver); - return -1; + return code; } tDecoderClear(&decoder); @@ -453,6 +480,9 @@ bool tqNextBlockImpl(STqReader* pReader, const char* idstr) { (pReader->nextBlk + 1), numOfBlocks, idstr); SSubmitTbData* pSubmitTbData = taosArrayGet(pReader->submit.aSubmitTbData, pReader->nextBlk); + if (pSubmitTbData == NULL){ + return false; + } if (pReader->tbIdHash == NULL) { return true; } @@ -482,6 +512,7 @@ bool tqNextDataBlockFilterOut(STqReader* pReader, SHashObj* filterOutUids) { int32_t blockSz = taosArrayGetSize(pReader->submit.aSubmitTbData); while (pReader->nextBlk < blockSz) { SSubmitTbData* pSubmitTbData = taosArrayGet(pReader->submit.aSubmitTbData, pReader->nextBlk); + if (pSubmitTbData == NULL) return false; if (filterOutUids == NULL) return true; void* ret = taosHashGet(filterOutUids, &pSubmitTbData->uid, sizeof(int64_t)); @@ -499,7 +530,7 @@ bool tqNextDataBlockFilterOut(STqReader* pReader, SHashObj* filterOutUids) { } int32_t tqMaskBlock(SSchemaWrapper* pDst, SSDataBlock* pBlock, const SSchemaWrapper* pSrc, char* mask) { - int32_t code; + int32_t code = 0; int32_t cnt = 0; for (int32_t i = 0; i < pSrc->nCols; i++) { @@ -509,7 +540,7 @@ int32_t tqMaskBlock(SSchemaWrapper* pDst, SSDataBlock* pBlock, const SSchemaWrap pDst->nCols = cnt; pDst->pSchema = taosMemoryCalloc(cnt, sizeof(SSchema)); if (pDst->pSchema == NULL) { - return -1; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } int32_t j = 0; @@ -520,7 +551,7 @@ int32_t tqMaskBlock(SSchemaWrapper* pDst, SSDataBlock* pBlock, const SSchemaWrap createColumnInfoData(pSrc->pSchema[i].type, pSrc->pSchema[i].bytes, pSrc->pSchema[i].colId); code = blockDataAppendColInfo(pBlock, &colInfo); if (code != 0) { - return -1; + return code; } } } @@ -556,10 +587,13 @@ static int32_t buildResSDataBlock(SSDataBlock* pBlock, SSchemaWrapper* pSchema, SSchema* pColSchema = &pSchema->pSchema[i]; col_id_t colIdSchema = pColSchema->colId; - col_id_t colIdNeed = *(col_id_t*)taosArrayGet(pColIdList, j); - if (colIdSchema < colIdNeed) { + col_id_t* pColIdNeed = (col_id_t*)taosArrayGet(pColIdList, j); + if (pColIdNeed == NULL) { + break; + } + if (colIdSchema < *pColIdNeed) { i++; - } else if (colIdSchema > colIdNeed) { + } else if (colIdSchema > *pColIdNeed) { j++; } else { SColumnInfoData colInfo = createColumnInfoData(pColSchema->type, pColSchema->bytes, pColSchema->colId); @@ -583,7 +617,7 @@ static int32_t doSetVal(SColumnInfoData* pColumnInfoData, int32_t rowIndex, SCol char val[65535 + 2] = {0}; if (COL_VAL_IS_VALUE(pColVal)) { if (pColVal->value.pData != NULL) { - memcpy(varDataVal(val), pColVal->value.pData, pColVal->value.nData); + (void)memcpy(varDataVal(val), pColVal->value.pData, pColVal->value.nData); } varDataSetLen(val, pColVal->value.nData); code = colDataSetVal(pColumnInfoData, rowIndex, val, false); @@ -599,8 +633,11 @@ static int32_t doSetVal(SColumnInfoData* pColumnInfoData, int32_t rowIndex, SCol int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* id) { tqTrace("tq reader retrieve data block %p, index:%d", pReader->msg.msgStr, pReader->nextBlk); + int32_t code = 0; + int32_t line = 0; + STSchema* pTSchema = NULL; SSubmitTbData* pSubmitTbData = taosArrayGet(pReader->submit.aSubmitTbData, pReader->nextBlk++); - + TSDB_CHECK_NULL(pSubmitTbData, code, line, END, terrno); SSDataBlock* pBlock = pReader->pResBlock; *pRes = pBlock; @@ -625,8 +662,7 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* "version %d, possibly dropped table", vgId, suid, uid, pReader->cachedSchemaVer); pReader->cachedSchemaSuid = 0; - terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND; - return -1; + return TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND; } pReader->cachedSchemaUid = uid; @@ -635,29 +671,23 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* ASSERT(pReader->cachedSchemaVer == pReader->pSchemaWrapper->version); if (blockDataGetNumOfCols(pBlock) == 0) { - int32_t code = buildResSDataBlock(pReader->pResBlock, pReader->pSchemaWrapper, pReader->pColIdList); - if (code != TSDB_CODE_SUCCESS) { - tqError("vgId:%d failed to build data block, code:%s", vgId, tstrerror(code)); - return code; - } + code = buildResSDataBlock(pReader->pResBlock, pReader->pSchemaWrapper, pReader->pColIdList); + TSDB_CHECK_CODE(code, line, END); } } int32_t numOfRows = 0; if (pSubmitTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { SColData* pCol = taosArrayGet(pSubmitTbData->aCol, 0); + TSDB_CHECK_NULL(pCol, code, line, END, terrno); numOfRows = pCol->nVal; } else { numOfRows = taosArrayGetSize(pSubmitTbData->aRowP); } - if (blockDataEnsureCapacity(pBlock, numOfRows) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - + code = blockDataEnsureCapacity(pBlock, numOfRows); + TSDB_CHECK_CODE(code, line, END); pBlock->info.rows = numOfRows; - int32_t colActual = blockDataGetNumOfCols(pBlock); // convert and scan one block @@ -668,7 +698,7 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* int32_t sourceIdx = 0; while (targetIdx < colActual) { SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, targetIdx); - + TSDB_CHECK_NULL(pColData, code, line, END, terrno); if (sourceIdx >= numOfCols) { tqError("lostdata tqRetrieveDataBlock sourceIdx:%d >= numOfCols:%d", sourceIdx, numOfCols); colDataSetNNULL(pColData, 0, numOfRows); @@ -676,20 +706,17 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* continue; } - SColData* pCol = taosArrayGet(pCols, sourceIdx); - SColVal colVal; - - tqTrace("lostdata colActual:%d, sourceIdx:%d, targetIdx:%d, numOfCols:%d, source cid:%d, dst cid:%d", colActual, - sourceIdx, targetIdx, numOfCols, pCol->cid, pColData->info.colId); + SColData* pCol = taosArrayGet(pCols, sourceIdx); + TSDB_CHECK_NULL(pCol, code, line, END, terrno); + SColVal colVal = {0}; + tqTrace("lostdata colActual:%d, sourceIdx:%d, targetIdx:%d, numOfCols:%d, source cid:%d, dst cid:%d", colActual, sourceIdx, targetIdx, numOfCols, pCol->cid, pColData->info.colId); if (pCol->cid < pColData->info.colId) { sourceIdx++; } else if (pCol->cid == pColData->info.colId) { for (int32_t i = 0; i < pCol->nVal; i++) { tColDataGetValue(pCol, i, &colVal); - int32_t code = doSetVal(pColData, i, &colVal); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = doSetVal(pColData, i, &colVal); + TSDB_CHECK_CODE(code, line, END); } sourceIdx++; targetIdx++; @@ -701,26 +728,28 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* } else { SArray* pRows = pSubmitTbData->aRowP; SSchemaWrapper* pWrapper = pReader->pSchemaWrapper; - STSchema* pTSchema = tBuildTSchema(pWrapper->pSchema, pWrapper->nCols, pWrapper->version); + pTSchema = tBuildTSchema(pWrapper->pSchema, pWrapper->nCols, pWrapper->version); + TSDB_CHECK_NULL(pTSchema, code, line, END, terrno); for (int32_t i = 0; i < numOfRows; i++) { SRow* pRow = taosArrayGetP(pRows, i); + TSDB_CHECK_NULL(pRow, code, line, END, terrno); int32_t sourceIdx = 0; - for (int32_t j = 0; j < colActual; j++) { SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, j); + TSDB_CHECK_NULL(pColData, code, line, END, terrno); + while (1) { - SColVal colVal; - tRowGet(pRow, pTSchema, sourceIdx, &colVal); + SColVal colVal = {0}; + code = tRowGet(pRow, pTSchema, sourceIdx, &colVal); + TSDB_CHECK_CODE(code, line, END); + if (colVal.cid < pColData->info.colId) { sourceIdx++; continue; } else if (colVal.cid == pColData->info.colId) { - int32_t code = doSetVal(pColData, i, &colVal); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - + code = doSetVal(pColData, i, &colVal); + TSDB_CHECK_CODE(code, line, END); sourceIdx++; break; } else { @@ -731,17 +760,196 @@ int32_t tqRetrieveDataBlock(STqReader* pReader, SSDataBlock** pRes, const char* } } - taosMemoryFreeClear(pTSchema); } - return 0; +END: + if (code != 0){ + tqError("tqRetrieveDataBlock failed, line:%d, code:%d", line, code); + } + taosMemoryFreeClear(pTSchema); + return code; +} + +#define PROCESS_VAL \ + if (curRow == 0) {\ + assigned[j] = !COL_VAL_IS_NONE(&colVal);\ + buildNew = true;\ + } else {\ + bool currentRowAssigned = !COL_VAL_IS_NONE(&colVal);\ + if (currentRowAssigned != assigned[j]) {\ + assigned[j] = currentRowAssigned;\ + buildNew = true;\ + }\ + } + +#define SET_DATA \ + if (colVal.cid < pColData->info.colId) {\ + sourceIdx++;\ + } else if (colVal.cid == pColData->info.colId) {\ + TQ_ERR_GO_TO_END(doSetVal(pColData, curRow - lastRow, &colVal));\ + sourceIdx++;\ + targetIdx++;\ + } + +static int32_t processBuildNew(STqReader* pReader, SSubmitTbData* pSubmitTbData, SArray* blocks, + SArray* schemas, SSchemaWrapper* pSchemaWrapper, char* assigned, + int32_t numOfRows, int32_t curRow, int32_t* lastRow){ + int32_t code = 0; + SSchemaWrapper* pSW = NULL; + SSDataBlock* block = NULL; + if (taosArrayGetSize(blocks) > 0) { + SSDataBlock* pLastBlock = taosArrayGetLast(blocks); + TQ_NULL_GO_TO_END(pLastBlock); + pLastBlock->info.rows = curRow - *lastRow; + *lastRow = curRow; + } + + block = taosMemoryCalloc(1, sizeof(SSDataBlock)); + TQ_NULL_GO_TO_END(block); + + pSW = taosMemoryCalloc(1, sizeof(SSchemaWrapper)); + TQ_NULL_GO_TO_END(pSW); + + TQ_ERR_GO_TO_END(tqMaskBlock(pSW, block, pSchemaWrapper, assigned)); + tqTrace("vgId:%d, build new block, col %d", pReader->pWalReader->pWal->cfg.vgId, + (int32_t)taosArrayGetSize(block->pDataBlock)); + + block->info.id.uid = pSubmitTbData->uid; + block->info.version = pReader->msg.ver; + TQ_ERR_GO_TO_END(blockDataEnsureCapacity(block, numOfRows - curRow)); + TQ_NULL_GO_TO_END(taosArrayPush(blocks, block)); + TQ_NULL_GO_TO_END(taosArrayPush(schemas, &pSW)); + pSW = NULL; + taosMemoryFreeClear(block); + +END: + tDeleteSchemaWrapper(pSW); + blockDataFreeRes(block); + taosMemoryFree(block); + return code; +} +static int32_t tqProcessColData(STqReader* pReader, SSubmitTbData* pSubmitTbData, SArray* blocks, SArray* schemas){ + int32_t code = 0; + int32_t curRow = 0; + int32_t lastRow = 0; + + SSchemaWrapper* pSchemaWrapper = pReader->pSchemaWrapper; + char* assigned = taosMemoryCalloc(1, pSchemaWrapper->nCols); + TQ_NULL_GO_TO_END(assigned); + + SArray* pCols = pSubmitTbData->aCol; + SColData* pCol = taosArrayGet(pCols, 0); + TQ_NULL_GO_TO_END(pCol); + int32_t numOfRows = pCol->nVal; + int32_t numOfCols = taosArrayGetSize(pCols); + for (int32_t i = 0; i < numOfRows; i++) { + bool buildNew = false; + + for (int32_t j = 0; j < numOfCols; j++) { + pCol = taosArrayGet(pCols, j); + TQ_NULL_GO_TO_END(pCol); + SColVal colVal = {0}; + tColDataGetValue(pCol, i, &colVal); + PROCESS_VAL + } + + if (buildNew) { + TQ_ERR_GO_TO_END(processBuildNew(pReader, pSubmitTbData, blocks, schemas, pSchemaWrapper, assigned, numOfRows, curRow, &lastRow)); + } + + SSDataBlock* pBlock = taosArrayGetLast(blocks); + TQ_NULL_GO_TO_END(pBlock); + + tqTrace("vgId:%d, taosx scan, block num: %d", pReader->pWalReader->pWal->cfg.vgId, + (int32_t)taosArrayGetSize(blocks)); + + int32_t targetIdx = 0; + int32_t sourceIdx = 0; + int32_t colActual = blockDataGetNumOfCols(pBlock); + while (targetIdx < colActual) { + pCol = taosArrayGet(pCols, sourceIdx); + TQ_NULL_GO_TO_END(pCol); + SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, targetIdx); + TQ_NULL_GO_TO_END(pColData); + SColVal colVal = {0}; + tColDataGetValue(pCol, i, &colVal); + SET_DATA + } + + curRow++; + } + SSDataBlock* pLastBlock = taosArrayGetLast(blocks); + pLastBlock->info.rows = curRow - lastRow; + +END: + taosMemoryFree(assigned); + return code; +} + +int32_t tqProcessRowData(STqReader* pReader, SSubmitTbData* pSubmitTbData, SArray* blocks, SArray* schemas){ + int32_t code = 0; + STSchema* pTSchema = NULL; + + SSchemaWrapper* pSchemaWrapper = pReader->pSchemaWrapper; + char* assigned = taosMemoryCalloc(1, pSchemaWrapper->nCols); + TQ_NULL_GO_TO_END(assigned); + + int32_t curRow = 0; + int32_t lastRow = 0; + SArray* pRows = pSubmitTbData->aRowP; + int32_t numOfRows = taosArrayGetSize(pRows); + pTSchema = tBuildTSchema(pSchemaWrapper->pSchema, pSchemaWrapper->nCols, pSchemaWrapper->version); + + for (int32_t i = 0; i < numOfRows; i++) { + bool buildNew = false; + SRow* pRow = taosArrayGetP(pRows, i); + TQ_NULL_GO_TO_END(pRow); + + for (int32_t j = 0; j < pTSchema->numOfCols; j++) { + SColVal colVal = {0}; + TQ_ERR_GO_TO_END(tRowGet(pRow, pTSchema, j, &colVal)); + PROCESS_VAL + } + + if (buildNew) { + TQ_ERR_GO_TO_END(processBuildNew(pReader, pSubmitTbData, blocks, schemas, pSchemaWrapper, assigned, numOfRows, curRow, &lastRow)); + } + + SSDataBlock* pBlock = taosArrayGetLast(blocks); + TQ_NULL_GO_TO_END(pBlock); + + tqTrace("vgId:%d, taosx scan, block num: %d", pReader->pWalReader->pWal->cfg.vgId, + (int32_t)taosArrayGetSize(blocks)); + + int32_t targetIdx = 0; + int32_t sourceIdx = 0; + int32_t colActual = blockDataGetNumOfCols(pBlock); + while (targetIdx < colActual) { + SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, targetIdx); + SColVal colVal = {0}; + TQ_ERR_GO_TO_END(tRowGet(pRow, pTSchema, sourceIdx, &colVal)); + SET_DATA + } + + curRow++; + } + SSDataBlock* pLastBlock = taosArrayGetLast(blocks); + pLastBlock->info.rows = curRow - lastRow; + +END: + taosMemoryFreeClear(pTSchema); + taosMemoryFree(assigned); + return code; } -// todo refactor: int32_t tqRetrieveTaosxBlock(STqReader* pReader, SArray* blocks, SArray* schemas, SSubmitTbData** pSubmitTbDataRet) { tqDebug("tq reader retrieve data block %p, %d", pReader->msg.msgStr, pReader->nextBlk); + SSDataBlock* block = NULL; SSubmitTbData* pSubmitTbData = taosArrayGet(pReader->submit.aSubmitTbData, pReader->nextBlk); + if(pSubmitTbData == NULL){ + return terrno; + } pReader->nextBlk++; if (pSubmitTbDataRet) { @@ -758,248 +966,57 @@ int32_t tqRetrieveTaosxBlock(STqReader* pReader, SArray* blocks, SArray* schemas tqWarn("vgId:%d, cannot found schema wrapper for table: suid:%" PRId64 ", version %d, possibly dropped table", pReader->pWalReader->pWal->cfg.vgId, uid, pReader->cachedSchemaVer); pReader->cachedSchemaSuid = 0; - terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND; - return -1; + return TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND; } - SSchemaWrapper* pSchemaWrapper = pReader->pSchemaWrapper; - int32_t numOfRows = 0; - if (pSubmitTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { - SArray* pCols = pSubmitTbData->aCol; - SColData* pCol = taosArrayGet(pCols, 0); - numOfRows = pCol->nVal; + return tqProcessColData(pReader, pSubmitTbData, blocks, schemas); } else { - SArray* pRows = pSubmitTbData->aRowP; - numOfRows = taosArrayGetSize(pRows); + return tqProcessRowData(pReader, pSubmitTbData, blocks, schemas); } - - int32_t curRow = 0; - int32_t lastRow = 0; - char* assigned = taosMemoryCalloc(1, pSchemaWrapper->nCols); - if (assigned == NULL) return -1; - - // convert and scan one block - if (pSubmitTbData->flags & SUBMIT_REQ_COLUMN_DATA_FORMAT) { - SArray* pCols = pSubmitTbData->aCol; - int32_t numOfCols = taosArrayGetSize(pCols); - for (int32_t i = 0; i < numOfRows; i++) { - bool buildNew = false; - - for (int32_t j = 0; j < numOfCols; j++) { - SColData* pCol = taosArrayGet(pCols, j); - SColVal colVal; - tColDataGetValue(pCol, i, &colVal); - if (curRow == 0) { - assigned[j] = !COL_VAL_IS_NONE(&colVal); - buildNew = true; - } else { - bool currentRowAssigned = !COL_VAL_IS_NONE(&colVal); - if (currentRowAssigned != assigned[j]) { - assigned[j] = currentRowAssigned; - buildNew = true; - } - } - } - - if (buildNew) { - if (taosArrayGetSize(blocks) > 0) { - SSDataBlock* pLastBlock = taosArrayGetLast(blocks); - pLastBlock->info.rows = curRow - lastRow; - lastRow = curRow; - } - - SSDataBlock block = {0}; - SSchemaWrapper* pSW = taosMemoryCalloc(1, sizeof(SSchemaWrapper)); - if (pSW == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto FAIL; - } - - if (tqMaskBlock(pSW, &block, pSchemaWrapper, assigned) < 0) { - blockDataFreeRes(&block); - tDeleteSchemaWrapper(pSW); - goto FAIL; - } - tqTrace("vgId:%d, build new block, col %d", pReader->pWalReader->pWal->cfg.vgId, - (int32_t)taosArrayGetSize(block.pDataBlock)); - - block.info.id.uid = uid; - block.info.version = pReader->msg.ver; - if (blockDataEnsureCapacity(&block, numOfRows - curRow) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - blockDataFreeRes(&block); - tDeleteSchemaWrapper(pSW); - goto FAIL; - } - taosArrayPush(blocks, &block); - taosArrayPush(schemas, &pSW); - } - - SSDataBlock* pBlock = taosArrayGetLast(blocks); - - tqTrace("vgId:%d, taosx scan, block num: %d", pReader->pWalReader->pWal->cfg.vgId, - (int32_t)taosArrayGetSize(blocks)); - - int32_t targetIdx = 0; - int32_t sourceIdx = 0; - int32_t colActual = blockDataGetNumOfCols(pBlock); - while (targetIdx < colActual) { - SColData* pCol = taosArrayGet(pCols, sourceIdx); - SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, targetIdx); - SColVal colVal; - - if (pCol->cid < pColData->info.colId) { - sourceIdx++; - } else if (pCol->cid == pColData->info.colId) { - tColDataGetValue(pCol, i, &colVal); - if (doSetVal(pColData, curRow - lastRow, &colVal) != TDB_CODE_SUCCESS) { - goto FAIL; - } - sourceIdx++; - targetIdx++; - } - } - - curRow++; - } - } else { - SSchemaWrapper* pWrapper = pReader->pSchemaWrapper; - STSchema* pTSchema = tBuildTSchema(pWrapper->pSchema, pWrapper->nCols, pWrapper->version); - SArray* pRows = pSubmitTbData->aRowP; - - for (int32_t i = 0; i < numOfRows; i++) { - SRow* pRow = taosArrayGetP(pRows, i); - bool buildNew = false; - - for (int32_t j = 0; j < pTSchema->numOfCols; j++) { - SColVal colVal; - tRowGet(pRow, pTSchema, j, &colVal); - if (curRow == 0) { - assigned[j] = !COL_VAL_IS_NONE(&colVal); - buildNew = true; - } else { - bool currentRowAssigned = !COL_VAL_IS_NONE(&colVal); - if (currentRowAssigned != assigned[j]) { - assigned[j] = currentRowAssigned; - buildNew = true; - } - } - } - - if (buildNew) { - if (taosArrayGetSize(blocks) > 0) { - SSDataBlock* pLastBlock = taosArrayGetLast(blocks); - pLastBlock->info.rows = curRow - lastRow; - lastRow = curRow; - } - - SSDataBlock block = {0}; - SSchemaWrapper* pSW = taosMemoryCalloc(1, sizeof(SSchemaWrapper)); - if (pSW == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto FAIL; - } - - if (tqMaskBlock(pSW, &block, pSchemaWrapper, assigned) < 0) { - blockDataFreeRes(&block); - tDeleteSchemaWrapper(pSW); - goto FAIL; - } - tqTrace("vgId:%d, build new block, col %d", pReader->pWalReader->pWal->cfg.vgId, - (int32_t)taosArrayGetSize(block.pDataBlock)); - - block.info.id.uid = uid; - block.info.version = pReader->msg.ver; - if (blockDataEnsureCapacity(&block, numOfRows - curRow) < 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - blockDataFreeRes(&block); - tDeleteSchemaWrapper(pSW); - goto FAIL; - } - taosArrayPush(blocks, &block); - taosArrayPush(schemas, &pSW); - } - - SSDataBlock* pBlock = taosArrayGetLast(blocks); - - tqTrace("vgId:%d, taosx scan, block num: %d", pReader->pWalReader->pWal->cfg.vgId, - (int32_t)taosArrayGetSize(blocks)); - - int32_t targetIdx = 0; - int32_t sourceIdx = 0; - int32_t colActual = blockDataGetNumOfCols(pBlock); - while (targetIdx < colActual) { - SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, targetIdx); - SColVal colVal; - tRowGet(pRow, pTSchema, sourceIdx, &colVal); - - if (colVal.cid < pColData->info.colId) { - sourceIdx++; - } else if (colVal.cid == pColData->info.colId) { - if (doSetVal(pColData, curRow - lastRow, &colVal) != TDB_CODE_SUCCESS) { - goto FAIL; - } - sourceIdx++; - targetIdx++; - } - } - curRow++; - } - - taosMemoryFreeClear(pTSchema); - } - - SSDataBlock* pLastBlock = taosArrayGetLast(blocks); - pLastBlock->info.rows = curRow - lastRow; - - taosMemoryFree(assigned); - return 0; - -FAIL: - taosMemoryFree(assigned); - return -1; } void tqReaderSetColIdList(STqReader* pReader, SArray* pColIdList) { pReader->pColIdList = pColIdList; } -int tqReaderSetTbUidList(STqReader* pReader, const SArray* tbUidList, const char* id) { +void tqReaderSetTbUidList(STqReader* pReader, const SArray* tbUidList, const char* id) { if (pReader->tbIdHash) { taosHashClear(pReader->tbIdHash); } else { pReader->tbIdHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_ENTRY_LOCK); - } - - if (pReader->tbIdHash == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + if (pReader->tbIdHash == NULL) { + tqError("s-task:%s failed to init hash table", id); + return; + } } for (int i = 0; i < taosArrayGetSize(tbUidList); i++) { int64_t* pKey = (int64_t*)taosArrayGet(tbUidList, i); - taosHashPut(pReader->tbIdHash, pKey, sizeof(int64_t), NULL, 0); + if (pKey && taosHashPut(pReader->tbIdHash, pKey, sizeof(int64_t), NULL, 0) != 0) { + tqError("s-task:%s failed to add table uid:%" PRId64 " to hash", id, *pKey); + continue; + } } tqDebug("s-task:%s %d tables are set to be queried target table", id, (int32_t)taosArrayGetSize(tbUidList)); - return 0; } -int tqReaderAddTbUidList(STqReader* pReader, const SArray* pTableUidList) { +void tqReaderAddTbUidList(STqReader* pReader, const SArray* pTableUidList) { if (pReader->tbIdHash == NULL) { pReader->tbIdHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_ENTRY_LOCK); if (pReader->tbIdHash == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + tqError("failed to init hash table"); + return; } } int32_t numOfTables = taosArrayGetSize(pTableUidList); for (int i = 0; i < numOfTables; i++) { int64_t* pKey = (int64_t*)taosArrayGet(pTableUidList, i); - taosHashPut(pReader->tbIdHash, pKey, sizeof(int64_t), NULL, 0); + if (taosHashPut(pReader->tbIdHash, pKey, sizeof(int64_t), NULL, 0) != 0) { + tqError("failed to add table uid:%" PRId64 " to hash", *pKey); + continue; + } } - - return 0; } bool tqReaderIsQueriedTable(STqReader* pReader, uint64_t uid) { @@ -1008,16 +1025,15 @@ bool tqReaderIsQueriedTable(STqReader* pReader, uint64_t uid) { bool tqCurrentBlockConsumed(const STqReader* pReader) { return pReader->msg.msgStr == NULL; } -int tqReaderRemoveTbUidList(STqReader* pReader, const SArray* tbUidList) { +void tqReaderRemoveTbUidList(STqReader* pReader, const SArray* tbUidList) { for (int32_t i = 0; i < taosArrayGetSize(tbUidList); i++) { int64_t* pKey = (int64_t*)taosArrayGet(tbUidList, i); - taosHashRemove(pReader->tbIdHash, pKey, sizeof(int64_t)); + if (pKey && taosHashRemove(pReader->tbIdHash, pKey, sizeof(int64_t)) != 0){ + tqError("failed to remove table uid:%" PRId64 " from hash", *pKey); + } } - - return 0; } -// todo update the table list in wal reader int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) { void* pIter = NULL; int32_t vgId = TD_VID(pTq->pVnode); @@ -1041,8 +1057,11 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) { if (!isAdd) { int32_t sz = taosArrayGetSize(tbUidList); for (int32_t i = 0; i < sz; i++) { - int64_t tbUid = *(int64_t*)taosArrayGet(tbUidList, i); - taosHashPut(pTqHandle->execHandle.execDb.pFilterOutTbUid, &tbUid, sizeof(int64_t), NULL, 0); + int64_t* tbUid = (int64_t*)taosArrayGet(tbUidList, i); + if (tbUid && taosHashPut(pTqHandle->execHandle.execDb.pFilterOutTbUid, tbUid, sizeof(int64_t), NULL, 0) != 0){ + tqError("failed to add table uid:%" PRId64 " to hash", *tbUid); + continue; + } } } } else if (pTqHandle->execHandle.subType == TOPIC_SUB_TYPE__TABLE) { diff --git a/source/dnode/vnode/src/tq/tqScan.c b/source/dnode/vnode/src/tq/tqScan.c index b9c9595c74..b72288425b 100644 --- a/source/dnode/vnode/src/tq/tqScan.c +++ b/source/dnode/vnode/src/tq/tqScan.c @@ -30,8 +30,14 @@ int32_t tqAddBlockDataToRsp(const SSDataBlock* pBlock, void* pRsp, int32_t numOf int32_t actualLen = blockEncode(pBlock, pRetrieve->data, numOfCols); actualLen += sizeof(SRetrieveTableRspForTmq); - taosArrayPush(((SMqDataRspCommon*)pRsp)->blockDataLen, &actualLen); - taosArrayPush(((SMqDataRspCommon*)pRsp)->blockData, &buf); + if (taosArrayPush(((SMqDataRspCommon*)pRsp)->blockDataLen, &actualLen) == NULL){ + taosMemoryFree(buf); + return TSDB_CODE_OUT_OF_MEMORY; + } + if (taosArrayPush(((SMqDataRspCommon*)pRsp)->blockData, &buf) == NULL) { + taosMemoryFree(buf); + return TSDB_CODE_OUT_OF_MEMORY; + } return TSDB_CODE_SUCCESS; } @@ -39,9 +45,11 @@ int32_t tqAddBlockDataToRsp(const SSDataBlock* pBlock, void* pRsp, int32_t numOf static int32_t tqAddBlockSchemaToRsp(const STqExecHandle* pExec, void* pRsp) { SSchemaWrapper* pSW = tCloneSSchemaWrapper(pExec->pTqReader->pSchemaWrapper); if (pSW == NULL) { - return -1; + return TSDB_CODE_OUT_OF_MEMORY; + } + if (taosArrayPush(((SMqDataRspCommon*)pRsp)->blockSchema, &pSW) == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; } - taosArrayPush(((SMqDataRspCommon*)pRsp)->blockSchema, &pSW); return 0; } @@ -49,15 +57,17 @@ static int32_t tqAddTbNameToRsp(const STQ* pTq, int64_t uid, void* pRsp, int32_t SMetaReader mr = {0}; metaReaderDoInit(&mr, pTq->pVnode->pMeta, META_READER_LOCK); - // TODO add reference to gurantee success - if (metaReaderGetTableEntryByUidCache(&mr, uid) < 0) { + int32_t code = metaReaderGetTableEntryByUidCache(&mr, uid); + if (code < 0) { metaReaderClear(&mr); - return -1; + return code; } for (int32_t i = 0; i < n; i++) { char* tbName = taosStrdup(mr.me.name); - taosArrayPush(((SMqDataRspCommon*)pRsp)->blockTbName, &tbName); + if(taosArrayPush(((SMqDataRspCommon*)pRsp)->blockTbName, &tbName) == NULL){ + continue; + } } metaReaderClear(&mr); return 0; @@ -71,8 +81,7 @@ int32_t getDataBlock(qTaskInfo_t task, const STqHandle* pHandle, int32_t vgId, S int32_t code = qExecTask(task, res, &ts); if (code != TSDB_CODE_SUCCESS) { tqError("consumer:0x%" PRIx64 " vgId:%d, task exec error since %s", pHandle->consumerId, vgId, tstrerror(code)); - terrno = code; - return -1; + return code; } tqDebug("consumer:0x%" PRIx64 " vgId:%d tmq one task end executed, pDataBlock:%p", pHandle->consumerId, vgId, *res); @@ -82,22 +91,20 @@ int32_t getDataBlock(qTaskInfo_t task, const STqHandle* pHandle, int32_t vgId, S int32_t tqScanData(STQ* pTq, STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVal* pOffset, const SMqPollReq* pRequest) { int32_t vgId = TD_VID(pTq->pVnode); int32_t code = 0; + int32_t line = 0; int32_t totalRows = 0; const STqExecHandle* pExec = &pHandle->execHandle; qTaskInfo_t task = pExec->task; - if (qStreamPrepareScan(task, pOffset, pHandle->execHandle.subType) < 0) { - return -1; - } + code = qStreamPrepareScan(task, pOffset, pHandle->execHandle.subType); + TSDB_CHECK_CODE(code, line, END); qStreamSetSourceExcluded(task, pRequest->sourceExcluded); while (1) { SSDataBlock* pDataBlock = NULL; code = getDataBlock(task, pHandle, vgId, &pDataBlock); - if (code != 0) { - return code; - } + TSDB_CHECK_CODE(code, line, END); if (pRequest->enableReplay) { if (IS_OFFSET_RESET_TYPE(pRequest->reqOffset.type) && pHandle->block != NULL) { @@ -111,27 +118,23 @@ int32_t tqScanData(STQ* pTq, STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVal* STqOffsetVal offset = {0}; qStreamExtractOffset(task, &offset); pHandle->block = createOneDataBlock(pDataBlock, true); + TSDB_CHECK_NULL(pDataBlock, code, line, END, terrno); pHandle->blockTime = offset.ts; tOffsetDestroy(&offset); code = getDataBlock(task, pHandle, vgId, &pDataBlock); - if (code != 0) { - return code; - } + TSDB_CHECK_CODE(code, line, END); } code = tqAddBlockDataToRsp(pHandle->block, pRsp, pExec->numOfCols, pTq->pVnode->config.tsdbCfg.precision); - if (code != TSDB_CODE_SUCCESS) { - tqError("vgId:%d, failed to add block to rsp msg", vgId); - return code; - } + TSDB_CHECK_CODE(code, line, END); pRsp->common.blockNum++; if (pDataBlock == NULL) { blockDataDestroy(pHandle->block); pHandle->block = NULL; } else { - copyDataBlock(pHandle->block, pDataBlock); - + code = copyDataBlock(pHandle->block, pDataBlock); + TSDB_CHECK_CODE(code, line, END); STqOffsetVal offset = {0}; qStreamExtractOffset(task, &offset); pRsp->sleepTime = offset.ts - pHandle->blockTime; @@ -144,10 +147,7 @@ int32_t tqScanData(STQ* pTq, STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVal* break; } code = tqAddBlockDataToRsp(pDataBlock, pRsp, pExec->numOfCols, pTq->pVnode->config.tsdbCfg.precision); - if (code != TSDB_CODE_SUCCESS) { - tqError("vgId:%d, failed to add block to rsp msg", vgId); - return code; - } + TSDB_CHECK_CODE(code, line, END); pRsp->common.blockNum++; totalRows += pDataBlock->info.rows; @@ -160,15 +160,19 @@ int32_t tqScanData(STQ* pTq, STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVal* tqDebug("consumer:0x%" PRIx64 " vgId:%d tmq task executed finished, total blocks:%d, totalRows:%d", pHandle->consumerId, vgId, pRsp->common.blockNum, totalRows); qStreamExtractOffset(task, &pRsp->common.rspOffset); - return 0; +END: + if ( code!= 0){ + tqError("consumer:0x%" PRIx64 " vgId:%d tmq task executed error, line:%d code:%d", pHandle->consumerId, vgId, line, code); + } + return code; } int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqBatchMetaRsp* pBatchMetaRsp, STqOffsetVal* pOffset) { const STqExecHandle* pExec = &pHandle->execHandle; qTaskInfo_t task = pExec->task; - - if (qStreamPrepareScan(task, pOffset, pHandle->execHandle.subType) < 0) { - return -1; + int code = qStreamPrepareScan(task, pOffset, pHandle->execHandle.subType); + if (code != 0) { + return code; } int32_t rowCnt = 0; @@ -176,11 +180,10 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqBatc SSDataBlock* pDataBlock = NULL; uint64_t ts = 0; tqDebug("tmqsnap task start to execute"); - int code = qExecTask(task, &pDataBlock, &ts); + code = qExecTask(task, &pDataBlock, &ts); if (code != 0) { tqError("vgId:%d, task exec error since %s", pTq->pVnode->config.vgId, tstrerror(code)); - terrno = code; - return -1; + return code; } tqDebug("tmqsnap task execute end, get %p", pDataBlock); @@ -190,24 +193,37 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqBatc if (pOffset->type == TMQ_OFFSET__LOG) { int64_t uid = pExec->pTqReader->lastBlkUid; if (tqAddTbNameToRsp(pTq, uid, pRsp, 1) < 0) { + tqError("vgId:%d, failed to add tbname to rsp msg", pTq->pVnode->config.vgId); continue; } } else { char* tbName = taosStrdup(qExtractTbnameFromTask(task)); - taosArrayPush(pRsp->common.blockTbName, &tbName); + if (taosArrayPush(pRsp->common.blockTbName, &tbName) == NULL){ + tqError("vgId:%d, failed to add tbname to rsp msg", pTq->pVnode->config.vgId); + continue; + } } } if (pRsp->common.withSchema) { if (pOffset->type == TMQ_OFFSET__LOG) { - tqAddBlockSchemaToRsp(pExec, pRsp); + if (tqAddBlockSchemaToRsp(pExec, pRsp) != 0){ + tqError("vgId:%d, failed to add schema to rsp msg", pTq->pVnode->config.vgId); + continue; + } } else { SSchemaWrapper* pSW = tCloneSSchemaWrapper(qExtractSchemaFromTask(task)); - taosArrayPush(pRsp->common.blockSchema, &pSW); + if(taosArrayPush(pRsp->common.blockSchema, &pSW) == NULL){ + tqError("vgId:%d, failed to add schema to rsp msg", pTq->pVnode->config.vgId); + continue; + } } } - tqAddBlockDataToRsp(pDataBlock, (SMqDataRsp*)pRsp, taosArrayGetSize(pDataBlock->pDataBlock), - pTq->pVnode->config.tsdbCfg.precision); + if (tqAddBlockDataToRsp(pDataBlock, (SMqDataRsp*)pRsp, taosArrayGetSize(pDataBlock->pDataBlock), + pTq->pVnode->config.tsdbCfg.precision) != 0) { + tqError("vgId:%d, failed to add block to rsp msg", pTq->pVnode->config.vgId); + continue; + } pRsp->common.blockNum++; if (pOffset->type == TMQ_OFFSET__LOG) { continue; @@ -222,7 +238,6 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqBatc if (taosArrayGetSize(tmp->batchMetaReq) > 0) { qStreamExtractOffset(task, &tmp->rspOffset); *pBatchMetaRsp = *tmp; - tqDebug("tmqsnap task get meta"); break; } @@ -248,150 +263,135 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqBatc return 0; } + +static void tqProcessSubData(STQ* pTq, STqHandle* pHandle, STaosxRsp* pRsp, int32_t* totalRows, int8_t sourceExcluded){ + int32_t code = 0; + STqExecHandle* pExec = &pHandle->execHandle; + STqReader* pReader = pExec->pTqReader; + SArray* pBlocks = NULL; + SArray* pSchemas = NULL; + pBlocks = taosArrayInit(0, sizeof(SSDataBlock)); + if (pBlocks == NULL) { + code = terrno; + goto END; + } + pSchemas = taosArrayInit(0, sizeof(void*)); + if(pSchemas == NULL){ + code = terrno; + goto END; + } + + SSubmitTbData* pSubmitTbDataRet = NULL; + code = tqRetrieveTaosxBlock(pReader, pBlocks, pSchemas, &pSubmitTbDataRet); + if (code != 0) { + tqError("vgId:%d, failed to retrieve block", pTq->pVnode->config.vgId); + goto END; + } + + if ((pSubmitTbDataRet->flags & sourceExcluded) != 0) { + goto END; + } + if (pRsp->common.withTbName) { + int64_t uid = pExec->pTqReader->lastBlkUid; + code = tqAddTbNameToRsp(pTq, uid, pRsp, taosArrayGetSize(pBlocks)); + if (code != 0) { + tqError("vgId:%d, failed to add tbname to rsp msg", pTq->pVnode->config.vgId); + goto END; + } + } + if (pHandle->fetchMeta != WITH_DATA && pSubmitTbDataRet->pCreateTbReq != NULL) { + if (pRsp->createTableNum == 0) { + pRsp->createTableLen = taosArrayInit(0, sizeof(int32_t)); + if (pRsp->createTableLen == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } + pRsp->createTableReq = taosArrayInit(0, sizeof(void*)); + if (pRsp->createTableReq == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } + } + + uint32_t len = 0; + tEncodeSize(tEncodeSVCreateTbReq, pSubmitTbDataRet->pCreateTbReq, len, code); + if (TSDB_CODE_SUCCESS != code) { + goto END; + } + void* createReq = taosMemoryCalloc(1, len); + if (createReq == NULL){ + code = TSDB_CODE_OUT_OF_MEMORY; + goto END; + } + SEncoder encoder = {0}; + tEncoderInit(&encoder, createReq, len); + code = tEncodeSVCreateTbReq(&encoder, pSubmitTbDataRet->pCreateTbReq); + tEncoderClear(&encoder); + if (code < 0) { + taosMemoryFree(createReq); + goto END; + } + if (taosArrayPush(pRsp->createTableLen, &len) == NULL){ + taosMemoryFree(createReq); + goto END; + } + if (taosArrayPush(pRsp->createTableReq, &createReq) == NULL){ + taosMemoryFree(createReq); + goto END; + } + pRsp->createTableNum++; + } + if (pHandle->fetchMeta == ONLY_META && pSubmitTbDataRet->pCreateTbReq == NULL) { + goto END; + } + for (int32_t i = 0; i < taosArrayGetSize(pBlocks); i++) { + SSDataBlock* pBlock = taosArrayGet(pBlocks, i); + if (pBlock == NULL) { + continue; + } + if (tqAddBlockDataToRsp(pBlock, (SMqDataRsp*)pRsp, taosArrayGetSize(pBlock->pDataBlock), + pTq->pVnode->config.tsdbCfg.precision) != 0){ + tqError("vgId:%d, failed to add block to rsp msg", pTq->pVnode->config.vgId); + continue; + } + *totalRows += pBlock->info.rows; + blockDataFreeRes(pBlock); + SSchemaWrapper* pSW = taosArrayGetP(pSchemas, i); + if (taosArrayPush(pRsp->common.blockSchema, &pSW) == NULL){ + tqError("vgId:%d, failed to add schema to rsp msg", pTq->pVnode->config.vgId); + continue; + } + pRsp->common.blockNum++; + } + + taosArrayDestroy(pBlocks); + taosArrayDestroy(pSchemas); + return; + +END: + taosArrayDestroyEx(pBlocks, (FDelete)blockDataFreeRes); + taosArrayDestroyP(pSchemas, (FDelete)tDeleteSchemaWrapper); +} + int32_t tqTaosxScanLog(STQ* pTq, STqHandle* pHandle, SPackedData submit, STaosxRsp* pRsp, int32_t* totalRows, int8_t sourceExcluded) { STqExecHandle* pExec = &pHandle->execHandle; - SArray* pBlocks = taosArrayInit(0, sizeof(SSDataBlock)); - SArray* pSchemas = taosArrayInit(0, sizeof(void*)); + int32_t code = 0; + STqReader* pReader = pExec->pTqReader; + code = tqReaderSetSubmitMsg(pReader, submit.msgStr, submit.msgLen, submit.ver); + if (code != 0) { + return code; + } if (pExec->subType == TOPIC_SUB_TYPE__TABLE) { - STqReader* pReader = pExec->pTqReader; - tqReaderSetSubmitMsg(pReader, submit.msgStr, submit.msgLen, submit.ver); while (tqNextBlockImpl(pReader, NULL)) { - taosArrayClear(pBlocks); - taosArrayClear(pSchemas); - SSubmitTbData* pSubmitTbDataRet = NULL; - if (tqRetrieveTaosxBlock(pReader, pBlocks, pSchemas, &pSubmitTbDataRet) < 0) { - if (terrno == TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND) goto loop_table; - } - - if ((pSubmitTbDataRet->flags & sourceExcluded) != 0) { - goto loop_table; - } - if (pRsp->common.withTbName) { - int64_t uid = pExec->pTqReader->lastBlkUid; - if (tqAddTbNameToRsp(pTq, uid, pRsp, taosArrayGetSize(pBlocks)) < 0) { - goto loop_table; - } - } - if (pHandle->fetchMeta != WITH_DATA && pSubmitTbDataRet->pCreateTbReq != NULL) { - if (pRsp->createTableNum == 0) { - pRsp->createTableLen = taosArrayInit(0, sizeof(int32_t)); - pRsp->createTableReq = taosArrayInit(0, sizeof(void*)); - } - - int32_t code = TSDB_CODE_SUCCESS; - uint32_t len = 0; - tEncodeSize(tEncodeSVCreateTbReq, pSubmitTbDataRet->pCreateTbReq, len, code); - if (TSDB_CODE_SUCCESS != code) { - goto loop_table; - } - void* createReq = taosMemoryCalloc(1, len); - SEncoder encoder = {0}; - tEncoderInit(&encoder, createReq, len); - code = tEncodeSVCreateTbReq(&encoder, pSubmitTbDataRet->pCreateTbReq); - if (code < 0) { - tEncoderClear(&encoder); - taosMemoryFree(createReq); - goto loop_table; - } - - taosArrayPush(pRsp->createTableLen, &len); - taosArrayPush(pRsp->createTableReq, &createReq); - pRsp->createTableNum++; - - tEncoderClear(&encoder); - } - if (pHandle->fetchMeta == ONLY_META && pSubmitTbDataRet->pCreateTbReq == NULL) { - goto loop_table; - } - for (int32_t i = 0; i < taosArrayGetSize(pBlocks); i++) { - SSDataBlock* pBlock = taosArrayGet(pBlocks, i); - tqAddBlockDataToRsp(pBlock, (SMqDataRsp*)pRsp, taosArrayGetSize(pBlock->pDataBlock), - pTq->pVnode->config.tsdbCfg.precision); - *totalRows += pBlock->info.rows; - blockDataFreeRes(pBlock); - SSchemaWrapper* pSW = taosArrayGetP(pSchemas, i); - taosArrayPush(pRsp->common.blockSchema, &pSW); - pRsp->common.blockNum++; - } - continue; - loop_table: - taosArrayDestroyEx(pBlocks, (FDelete)blockDataFreeRes); - taosArrayDestroyP(pSchemas, (FDelete)tDeleteSchemaWrapper); - pBlocks = taosArrayInit(0, sizeof(SSDataBlock)); - pSchemas = taosArrayInit(0, sizeof(void*)); + tqProcessSubData(pTq, pHandle, pRsp, totalRows, sourceExcluded); } } else if (pExec->subType == TOPIC_SUB_TYPE__DB) { - STqReader* pReader = pExec->pTqReader; - tqReaderSetSubmitMsg(pReader, submit.msgStr, submit.msgLen, submit.ver); while (tqNextDataBlockFilterOut(pReader, pExec->execDb.pFilterOutTbUid)) { - taosArrayClear(pBlocks); - taosArrayClear(pSchemas); - SSubmitTbData* pSubmitTbDataRet = NULL; - if (tqRetrieveTaosxBlock(pReader, pBlocks, pSchemas, &pSubmitTbDataRet) < 0) { - if (terrno == TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND) goto loop_db; - } - - if ((pSubmitTbDataRet->flags & sourceExcluded) != 0) { - goto loop_db; - } - if (pRsp->common.withTbName) { - int64_t uid = pExec->pTqReader->lastBlkUid; - if (tqAddTbNameToRsp(pTq, uid, pRsp, taosArrayGetSize(pBlocks)) < 0) { - goto loop_db; - } - } - if (pHandle->fetchMeta != WITH_DATA && pSubmitTbDataRet->pCreateTbReq != NULL) { - if (pRsp->createTableNum == 0) { - pRsp->createTableLen = taosArrayInit(0, sizeof(int32_t)); - pRsp->createTableReq = taosArrayInit(0, sizeof(void*)); - } - - int32_t code = TSDB_CODE_SUCCESS; - uint32_t len = 0; - tEncodeSize(tEncodeSVCreateTbReq, pSubmitTbDataRet->pCreateTbReq, len, code); - if (TSDB_CODE_SUCCESS != code) { - goto loop_db; - } - void* createReq = taosMemoryCalloc(1, len); - SEncoder encoder = {0}; - tEncoderInit(&encoder, createReq, len); - code = tEncodeSVCreateTbReq(&encoder, pSubmitTbDataRet->pCreateTbReq); - if (code < 0) { - tEncoderClear(&encoder); - taosMemoryFree(createReq); - goto loop_db; - } - - taosArrayPush(pRsp->createTableLen, &len); - taosArrayPush(pRsp->createTableReq, &createReq); - pRsp->createTableNum++; - - tEncoderClear(&encoder); - } - if (pHandle->fetchMeta == ONLY_META && pSubmitTbDataRet->pCreateTbReq == NULL) { - goto loop_db; - } - for (int32_t i = 0; i < taosArrayGetSize(pBlocks); i++) { - SSDataBlock* pBlock = taosArrayGet(pBlocks, i); - tqAddBlockDataToRsp(pBlock, (SMqDataRsp*)pRsp, taosArrayGetSize(pBlock->pDataBlock), - pTq->pVnode->config.tsdbCfg.precision); - *totalRows += pBlock->info.rows; - blockDataFreeRes(pBlock); - SSchemaWrapper* pSW = taosArrayGetP(pSchemas, i); - taosArrayPush(pRsp->common.blockSchema, &pSW); - pRsp->common.blockNum++; - } - continue; - loop_db: - taosArrayDestroyEx(pBlocks, (FDelete)blockDataFreeRes); - taosArrayDestroyP(pSchemas, (FDelete)tDeleteSchemaWrapper); - pBlocks = taosArrayInit(0, sizeof(SSDataBlock)); - pSchemas = taosArrayInit(0, sizeof(void*)); + tqProcessSubData(pTq, pHandle, pRsp, totalRows, sourceExcluded); } } - taosArrayDestroy(pBlocks); - taosArrayDestroy(pSchemas); - return 0; + + return code; } diff --git a/source/dnode/vnode/src/tq/tqSnapshot.c b/source/dnode/vnode/src/tq/tqSnapshot.c index 1731759dae..1abc94f653 100644 --- a/source/dnode/vnode/src/tq/tqSnapshot.c +++ b/source/dnode/vnode/src/tq/tqSnapshot.c @@ -76,14 +76,10 @@ _err: return code; } -int32_t tqSnapReaderClose(STqSnapReader** ppReader) { - int32_t code = 0; - - tdbTbcClose((*ppReader)->pCur); +void tqSnapReaderClose(STqSnapReader** ppReader) { + (void)tdbTbcClose((*ppReader)->pCur); taosMemoryFree(*ppReader); *ppReader = NULL; - - return code; } int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData) { @@ -99,14 +95,14 @@ int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData) { *ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + vLen); if (*ppData == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); goto _err; } SSnapDataHdr* pHdr = (SSnapDataHdr*)(*ppData); pHdr->type = pReader->type; pHdr->size = vLen; - memcpy(pHdr->data, pVal, vLen); + (void)memcpy(pHdr->data, pVal, vLen); _exit: tdbFree(pKey); @@ -131,20 +127,20 @@ struct STqSnapWriter { int32_t tqSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, STqSnapWriter** ppWriter) { int32_t code = 0; - STqSnapWriter* pWriter; + STqSnapWriter* pWriter = NULL; // alloc pWriter = (STqSnapWriter*)taosMemoryCalloc(1, sizeof(*pWriter)); if (pWriter == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY);; goto _err; } pWriter->pTq = pTq; pWriter->sver = sver; pWriter->ever = ever; - if (tdbBegin(pTq->pMetaDB, &pWriter->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) { - code = -1; + code = tdbBegin(pTq->pMetaDB, &pWriter->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0); + if (code < 0) { taosMemoryFree(pWriter); goto _err; } @@ -164,7 +160,7 @@ int32_t tqSnapWriterClose(STqSnapWriter** ppWriter, int8_t rollback) { STQ* pTq = pWriter->pTq; if (rollback) { - tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn); + (void)tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn); } else { code = tdbCommit(pWriter->pTq->pMetaDB, pWriter->txn); if (code) goto _err; @@ -207,7 +203,8 @@ int32_t tqSnapCheckInfoWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nD int32_t code = 0; STQ* pTq = pWriter->pTq; STqCheckInfo info = {0}; - if(tqMetaDecodeCheckInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)) != 0){ + code = tqMetaDecodeCheckInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); + if(code != 0){ goto _err; } @@ -217,7 +214,7 @@ int32_t tqSnapCheckInfoWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nD return code; - _err: +_err: tqError("vgId:%d, vnode check info tq write failed since %s", TD_VID(pTq->pVnode), tstrerror(code)); return code; } @@ -227,7 +224,8 @@ int32_t tqSnapOffsetWrite(STqSnapWriter* pWriter, uint8_t* pData, uint32_t nData STQ* pTq = pWriter->pTq; STqOffset info = {0}; - if(tqMetaDecodeOffsetInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)) != 0){ + code = tqMetaDecodeOffsetInfo(&info, pData + sizeof(SSnapDataHdr), nData - sizeof(SSnapDataHdr)); + if(code != 0){ goto _err; } diff --git a/source/dnode/vnode/src/tq/tqUtil.c b/source/dnode/vnode/src/tq/tqUtil.c index edd15098e2..91074b32f6 100644 --- a/source/dnode/vnode/src/tq/tqUtil.c +++ b/source/dnode/vnode/src/tq/tqUtil.c @@ -21,16 +21,15 @@ static int32_t tqSendBatchMetaPollRsp(STqHandle* pHandle, const SRpcMsg* pMsg, c const SMqBatchMetaRsp* pRsp, int32_t vgId); int32_t tqInitDataRsp(SMqDataRspCommon* pRsp, STqOffsetVal pOffset) { - tOffsetCopy(&pRsp->reqOffset, &pOffset); - tOffsetCopy(&pRsp->rspOffset, &pOffset); - pRsp->blockData = taosArrayInit(0, sizeof(void*)); pRsp->blockDataLen = taosArrayInit(0, sizeof(int32_t)); if (pRsp->blockData == NULL || pRsp->blockDataLen == NULL) { - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } + tOffsetCopy(&pRsp->reqOffset, &pOffset); + tOffsetCopy(&pRsp->rspOffset, &pOffset); pRsp->withTbName = 0; pRsp->withSchema = false; return 0; @@ -72,7 +71,7 @@ static int32_t tqInitTaosxRsp(SMqDataRspCommon* pRsp, STqOffsetVal pOffset) { taosArrayDestroy(pRsp->blockSchema); pRsp->blockSchema = NULL; } - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } return 0; @@ -81,12 +80,13 @@ static int32_t tqInitTaosxRsp(SMqDataRspCommon* pRsp, STqOffsetVal pOffset) { static int32_t extractResetOffsetVal(STqOffsetVal* pOffsetVal, STQ* pTq, STqHandle* pHandle, const SMqPollReq* pRequest, SRpcMsg* pMsg, bool* pBlockReturned) { uint64_t consumerId = pRequest->consumerId; - STqOffset* pOffset = (STqOffset*)tqMetaGetOffset(pTq, pRequest->subKey); + STqOffset* pOffset = NULL; + int32_t code = tqMetaGetOffset(pTq, pRequest->subKey, &pOffset); int32_t vgId = TD_VID(pTq->pVnode); *pBlockReturned = false; // In this vnode, data has been polled by consumer for this topic, so let's continue from the last offset value. - if (pOffset != NULL) { + if (code == 0) { tOffsetCopy(pOffsetVal, &pOffset->val); char formatBuf[TSDB_OFFSET_LEN] = {0}; @@ -116,10 +116,13 @@ static int32_t extractResetOffsetVal(STqOffsetVal* pOffsetVal, STQ* pTq, STqHand SMqDataRsp dataRsp = {0}; tqOffsetResetToLog(pOffsetVal, pHandle->pRef->refVer + 1); - tqInitDataRsp(&dataRsp.common, *pOffsetVal); + code = tqInitDataRsp(&dataRsp.common, *pOffsetVal); + if (code != 0){ + return code; + } tqDebug("tmq poll: consumer:0x%" PRIx64 ", subkey %s, vgId:%d, (latest) offset reset to %" PRId64, consumerId, pHandle->subKey, vgId, dataRsp.common.rspOffset.version); - int32_t code = tqSendDataRsp(pHandle, pMsg, pRequest, &dataRsp, TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); + code = tqSendDataRsp(pHandle, pMsg, pRequest, &dataRsp, TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); tDeleteMqDataRsp(&dataRsp); *pBlockReturned = true; @@ -128,8 +131,7 @@ static int32_t extractResetOffsetVal(STqOffsetVal* pOffsetVal, STQ* pTq, STqHand tqError("tmq poll: subkey:%s, no offset committed for consumer:0x%" PRIx64 " in vg %d, subkey %s, reset none failed", pHandle->subKey, consumerId, vgId, pRequest->subKey); - terrno = TSDB_CODE_TQ_NO_COMMITTED_OFFSET; - return -1; + return TSDB_CODE_TQ_NO_COMMITTED_OFFSET; } } @@ -143,10 +145,13 @@ static int32_t extractDataAndRspForNormalSubscribe(STQ* pTq, STqHandle* pHandle, terrno = 0; SMqDataRsp dataRsp = {0}; - tqInitDataRsp(&dataRsp.common, *pOffset); + int code = tqInitDataRsp(&dataRsp.common, *pOffset); + if (code != 0) { + goto end; + } qSetTaskId(pHandle->execHandle.task, consumerId, pRequest->reqId); - int code = tqScanData(pTq, pHandle, &dataRsp, pOffset, pRequest); + code = tqScanData(pTq, pHandle, &dataRsp, pOffset, pRequest); if (code != 0 && terrno != TSDB_CODE_WAL_LOG_NOT_EXIST) { goto end; } @@ -201,17 +206,14 @@ static void tDeleteCommon(void* parm) {} static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, const SMqPollReq* pRequest, SRpcMsg* pMsg, STqOffsetVal* offset) { - int code = 0; - int32_t vgId = TD_VID(pTq->pVnode); - STaosxRsp taosxRsp = {0}; - SMqBatchMetaRsp btMetaRsp = {0}; - tqInitTaosxRsp(&taosxRsp.common, *offset); + int32_t vgId = TD_VID(pTq->pVnode); + STaosxRsp taosxRsp = {0}; + SMqBatchMetaRsp btMetaRsp = {0}; + int32_t code = 0; + TQ_ERR_GO_TO_END(tqInitTaosxRsp(&taosxRsp.common, *offset)); if (offset->type != TMQ_OFFSET__LOG) { - if (tqScanTaosx(pTq, pHandle, &taosxRsp, &btMetaRsp, offset) < 0) { - code = -1; - goto end; - } + TQ_ERR_GO_TO_END(tqScanTaosx(pTq, pHandle, &taosxRsp, &btMetaRsp, offset)); if (taosArrayGetSize(btMetaRsp.batchMetaReq) > 0) { code = tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); @@ -219,8 +221,7 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, ",ts:%" PRId64, pRequest->consumerId, pHandle->subKey, vgId, btMetaRsp.rspOffset.type, btMetaRsp.rspOffset.uid, btMetaRsp.rspOffset.ts); - tDeleteMqBatchMetaRsp(&btMetaRsp); - goto end; + goto END; } tqDebug("taosx poll: consumer:0x%" PRIx64 " subkey:%s vgId:%d, send data blockNum:%d, offset type:%d,uid:%" PRId64 @@ -229,7 +230,7 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, taosxRsp.common.rspOffset.uid, taosxRsp.common.rspOffset.ts); if (taosxRsp.common.blockNum > 0) { code = tqSendDataRsp(pHandle, pMsg, pRequest, &taosxRsp, TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); - goto end; + goto END; } else { tOffsetCopy(offset, &taosxRsp.common.rspOffset); } @@ -249,15 +250,15 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, if (tqFetchLog(pTq, pHandle, &fetchVer, pRequest->reqId) < 0) { if (totalMetaRows > 0) { tqOffsetResetToLog(&btMetaRsp.rspOffset, fetchVer); - tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); + code = tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); ASSERT(totalRows == 0); - goto end; + goto END; } tqOffsetResetToLog(&taosxRsp.common.rspOffset, fetchVer); code = tqSendDataRsp( pHandle, pMsg, pRequest, &taosxRsp, taosxRsp.createTableNum > 0 ? TMQ_MSG_TYPE__POLL_DATA_META_RSP : TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); - goto end; + goto END; } SWalCont* pHead = &pHandle->pWalReader->pHead->head; @@ -271,7 +272,7 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, code = tqSendDataRsp( pHandle, pMsg, pRequest, &taosxRsp, taosxRsp.createTableNum > 0 ? TMQ_MSG_TYPE__POLL_DATA_META_RSP : TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); - goto end; + goto END; } if ((pRequest->sourceExcluded & TD_REQ_FROM_TAOX) != 0) { @@ -295,12 +296,20 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, metaRsp.metaRspLen = pHead->bodyLen; metaRsp.metaRsp = pHead->body; code = tqSendMetaPollRsp(pHandle, pMsg, pRequest, &metaRsp, vgId); - goto end; + goto END; } if (!btMetaRsp.batchMetaReq) { btMetaRsp.batchMetaReq = taosArrayInit(4, POINTER_BYTES); + if (btMetaRsp.batchMetaReq == NULL) { + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } btMetaRsp.batchMetaLen = taosArrayInit(4, sizeof(int32_t)); + if (btMetaRsp.batchMetaLen == NULL) { + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } } fetchVer++; @@ -316,30 +325,40 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, } int32_t tLen = sizeof(SMqRspHead) + len; void* tBuf = taosMemoryCalloc(1, tLen); + if (tBuf == NULL){ + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } void* metaBuff = POINTER_SHIFT(tBuf, sizeof(SMqRspHead)); SEncoder encoder = {0}; tEncoderInit(&encoder, metaBuff, len); code = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); + tEncoderClear(&encoder); + if (code < 0) { - tEncoderClear(&encoder); tqError("tmq extract meta from log, tEncodeMqMetaRsp error"); continue; } - taosArrayPush(btMetaRsp.batchMetaReq, &tBuf); - taosArrayPush(btMetaRsp.batchMetaLen, &tLen); - totalMetaRows++; + if (taosArrayPush(btMetaRsp.batchMetaReq, &tBuf) == NULL){ + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } + if (taosArrayPush(btMetaRsp.batchMetaLen, &tLen) == NULL){ + code = TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); + goto END; + } if ((taosArrayGetSize(btMetaRsp.batchMetaReq) >= tmqRowSize) || (taosGetTimestampMs() - st > 1000)) { tqOffsetResetToLog(&btMetaRsp.rspOffset, fetchVer); - tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); - goto end; + code = tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); + goto END; } continue; } if (totalMetaRows > 0) { tqOffsetResetToLog(&btMetaRsp.rspOffset, fetchVer); - tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); - goto end; + code = tqSendBatchMetaPollRsp(pHandle, pMsg, pRequest, &btMetaRsp, vgId); + goto END; } // process data @@ -353,7 +372,7 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, if (code < 0) { tqError("tmq poll: tqTaosxScanLog error %" PRId64 ", in vgId:%d, subkey %s", pRequest->consumerId, vgId, pRequest->subKey); - goto end; + goto END; } if (totalRows >= tmqRowSize || (taosGetTimestampMs() - st > 1000)) { @@ -361,14 +380,14 @@ static int32_t extractDataAndRspForDbStbSubscribe(STQ* pTq, STqHandle* pHandle, code = tqSendDataRsp( pHandle, pMsg, pRequest, &taosxRsp, taosxRsp.createTableNum > 0 ? TMQ_MSG_TYPE__POLL_DATA_META_RSP : TMQ_MSG_TYPE__POLL_DATA_RSP, vgId); - goto end; + goto END; } else { fetchVer++; } } } -end: +END: tDeleteMqBatchMetaRsp(&btMetaRsp); tDeleteSTaosxRsp(&taosxRsp); return code; @@ -423,12 +442,12 @@ int32_t tqSendBatchMetaPollRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SM int32_t code = 0; tEncodeSize(tEncodeMqBatchMetaRsp, pRsp, len, code); if (code < 0) { - return -1; + return TAOS_GET_TERRNO(code); } int32_t tlen = sizeof(SMqRspHead) + len; void* buf = rpcMallocCont(tlen); if (buf == NULL) { - return -1; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } int64_t sver = 0, ever = 0; @@ -439,9 +458,12 @@ int32_t tqSendBatchMetaPollRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SM SEncoder encoder = {0}; tEncoderInit(&encoder, abuf, len); - tEncodeMqBatchMetaRsp(&encoder, pRsp); + code = tEncodeMqBatchMetaRsp(&encoder, pRsp); tEncoderClear(&encoder); - + if (code < 0) { + rpcFreeCont(buf); + return TAOS_GET_TERRNO(code); + } SRpcMsg resp = {.info = pMsg->info, .pCont = buf, .contLen = tlen, .code = 0}; tmsgSendRsp(&resp); @@ -457,12 +479,12 @@ int32_t tqSendMetaPollRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPoll int32_t code = 0; tEncodeSize(tEncodeMqMetaRsp, pRsp, len, code); if (code < 0) { - return -1; + return TAOS_GET_TERRNO(code); } int32_t tlen = sizeof(SMqRspHead) + len; void* buf = rpcMallocCont(tlen); if (buf == NULL) { - return -1; + return TAOS_GET_TERRNO(TSDB_CODE_OUT_OF_MEMORY); } int64_t sver = 0, ever = 0; @@ -473,8 +495,12 @@ int32_t tqSendMetaPollRsp(STqHandle* pHandle, const SRpcMsg* pMsg, const SMqPoll SEncoder encoder = {0}; tEncoderInit(&encoder, abuf, len); - tEncodeMqMetaRsp(&encoder, pRsp); + code = tEncodeMqMetaRsp(&encoder, pRsp); tEncoderClear(&encoder); + if (code < 0) { + rpcFreeCont(buf); + return TAOS_GET_TERRNO(code); + } SRpcMsg resp = {.info = pMsg->info, .pCont = buf, .contLen = tlen, .code = 0}; @@ -497,13 +523,13 @@ int32_t tqDoSendDataRsp(const SRpcHandleInfo* pRpcHandleInfo, const void* pRsp, } if (code < 0) { - return -1; + return TAOS_GET_TERRNO(code); } int32_t tlen = sizeof(SMqRspHead) + len; void* buf = rpcMallocCont(tlen); if (buf == NULL) { - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } SMqRspHead* pHead = (SMqRspHead*)buf; @@ -515,12 +541,15 @@ int32_t tqDoSendDataRsp(const SRpcHandleInfo* pRpcHandleInfo, const void* pRsp, tEncoderInit(&encoder, abuf, len); if (type == TMQ_MSG_TYPE__POLL_DATA_RSP || type == TMQ_MSG_TYPE__WALINFO_RSP) { - tEncodeMqDataRsp(&encoder, pRsp); + code = tEncodeMqDataRsp(&encoder, pRsp); } else if (type == TMQ_MSG_TYPE__POLL_DATA_META_RSP) { - tEncodeSTaosxRsp(&encoder, pRsp); + code = tEncodeSTaosxRsp(&encoder, pRsp); } - tEncoderClear(&encoder); + if (code < 0) { + rpcFreeCont(buf); + return TAOS_GET_TERRNO(code); + } SRpcMsg rsp = {.info = *pRpcHandleInfo, .pCont = buf, .contLen = tlen, .code = 0}; tmsgSendRsp(&rsp); @@ -528,49 +557,61 @@ int32_t tqDoSendDataRsp(const SRpcHandleInfo* pRpcHandleInfo, const void* pRsp, } int32_t tqExtractDelDataBlock(const void* pData, int32_t len, int64_t ver, void** pRefBlock, int32_t type) { - int32_t code; + int32_t code = 0; + int32_t line = 0; SDecoder* pCoder = &(SDecoder){0}; SDeleteRes* pRes = &(SDeleteRes){0}; *pRefBlock = NULL; pRes->uidList = taosArrayInit(0, sizeof(tb_uid_t)); - if (pRes->uidList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } + TSDB_CHECK_NULL(pRes->uidList, code, line, END, terrno) tDecoderInit(pCoder, (uint8_t*)pData, len); - tDecodeDeleteRes(pCoder, pRes); - tDecoderClear(pCoder); + code = tDecodeDeleteRes(pCoder, pRes); + TSDB_CHECK_CODE(code, line, END); int32_t numOfTables = taosArrayGetSize(pRes->uidList); if (numOfTables == 0 || pRes->affectedRows == 0) { - taosArrayDestroy(pRes->uidList); - return TSDB_CODE_SUCCESS; + goto END; } SSDataBlock* pDelBlock = createSpecialDataBlock(STREAM_DELETE_DATA); - blockDataEnsureCapacity(pDelBlock, numOfTables); + TSDB_CHECK_NULL(pDelBlock, code, line, END, terrno) + code = blockDataEnsureCapacity(pDelBlock, numOfTables); + TSDB_CHECK_CODE(code, line, END); + pDelBlock->info.rows = numOfTables; pDelBlock->info.version = ver; for (int32_t i = 0; i < numOfTables; i++) { // start key column SColumnInfoData* pStartCol = taosArrayGet(pDelBlock->pDataBlock, START_TS_COLUMN_INDEX); - colDataSetVal(pStartCol, i, (const char*)&pRes->skey, false); // end key column + TSDB_CHECK_NULL(pStartCol, code, line, END, terrno) + code = colDataSetVal(pStartCol, i, (const char*)&pRes->skey, false); // end key column + TSDB_CHECK_CODE(code, line, END); SColumnInfoData* pEndCol = taosArrayGet(pDelBlock->pDataBlock, END_TS_COLUMN_INDEX); - colDataSetVal(pEndCol, i, (const char*)&pRes->ekey, false); + TSDB_CHECK_NULL(pEndCol, code, line, END, terrno) + code = colDataSetVal(pEndCol, i, (const char*)&pRes->ekey, false); + TSDB_CHECK_CODE(code, line, END); // uid column SColumnInfoData* pUidCol = taosArrayGet(pDelBlock->pDataBlock, UID_COLUMN_INDEX); - int64_t* pUid = taosArrayGet(pRes->uidList, i); - colDataSetVal(pUidCol, i, (const char*)pUid, false); + TSDB_CHECK_NULL(pUidCol, code, line, END, terrno) - colDataSetNULL(taosArrayGet(pDelBlock->pDataBlock, GROUPID_COLUMN_INDEX), i); - colDataSetNULL(taosArrayGet(pDelBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX), i); - colDataSetNULL(taosArrayGet(pDelBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX), i); + int64_t* pUid = taosArrayGet(pRes->uidList, i); + code = colDataSetVal(pUidCol, i, (const char*)pUid, false); + TSDB_CHECK_CODE(code, line, END); + void* tmp = taosArrayGet(pDelBlock->pDataBlock, GROUPID_COLUMN_INDEX); + TSDB_CHECK_NULL(tmp, code, line, END, terrno) + colDataSetNULL(tmp, i); + tmp = taosArrayGet(pDelBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX); + TSDB_CHECK_NULL(tmp, code, line, END, terrno) + colDataSetNULL(tmp, i); + tmp = taosArrayGet(pDelBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX); + TSDB_CHECK_NULL(tmp, code, line, END, terrno) + colDataSetNULL(tmp, i); } - taosArrayDestroy(pRes->uidList); if (type == 0) { code = taosAllocateQitem(sizeof(SStreamRefDataBlock), DEF_QITEM, 0, pRefBlock); if (code) { @@ -587,7 +628,13 @@ int32_t tqExtractDelDataBlock(const void* pData, int32_t len, int64_t ver, void* ASSERTS(0, "unknown type:%d", type); } - return TSDB_CODE_SUCCESS; +END: + if (code != 0){ + tqError("failed to extract delete data block, line:%d code:%d", line, code); + } + tDecoderClear(pCoder); + taosArrayDestroy(pRes->uidList); + return code; } int32_t tqGetStreamExecInfo(SVnode* pVnode, int64_t streamId, int64_t* pDelay, bool* fhFinished) { @@ -612,6 +659,9 @@ int32_t tqGetStreamExecInfo(SVnode* pVnode, int64_t streamId, int64_t* pDelay, b for (int32_t i = 0; i < numOfTasks; ++i) { SStreamTaskId* pId = taosArrayGet(pMeta->pTaskList, i); + if (pId == NULL){ + continue; + } if (pId->streamId != streamId) { continue; } diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 1726d8696b..7b785e0844 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -33,7 +33,7 @@ static int32_t tsdbOpenBCache(STsdb *pTsdb) { taosLRUCacheSetStrictCapacity(pCache, false); - taosThreadMutexInit(&pTsdb->bMutex, NULL); + (void)taosThreadMutexInit(&pTsdb->bMutex, NULL); pTsdb->bCache = pCache; @@ -57,7 +57,7 @@ static void tsdbCloseBCache(STsdb *pTsdb) { taosLRUCacheCleanup(pCache); - taosThreadMutexDestroy(&pTsdb->bMutex); + (void)taosThreadMutexDestroy(&pTsdb->bMutex); } } @@ -72,7 +72,7 @@ static int32_t tsdbOpenPgCache(STsdb *pTsdb) { taosLRUCacheSetStrictCapacity(pCache, false); - taosThreadMutexInit(&pTsdb->pgMutex, NULL); + (void)taosThreadMutexInit(&pTsdb->pgMutex, NULL); pTsdb->pgCache = pCache; @@ -95,7 +95,7 @@ static void tsdbClosePgCache(STsdb *pTsdb) { taosLRUCacheCleanup(pCache); - taosThreadMutexDestroy(&pTsdb->bMutex); + (void)taosThreadMutexDestroy(&pTsdb->bMutex); } } @@ -225,7 +225,7 @@ static int32_t tsdbOpenRocksCache(STsdb *pTsdb) { pTsdb->rCache.flushoptions = flushoptions; pTsdb->rCache.db = db; - taosThreadMutexInit(&pTsdb->rCache.rMutex, NULL); + (void)taosThreadMutexInit(&pTsdb->rCache.rMutex, NULL); pTsdb->rCache.pTSchema = NULL; @@ -258,7 +258,7 @@ static void tsdbCloseRocksCache(STsdb *pTsdb) { rocksdb_block_based_options_destroy(pTsdb->rCache.tableoptions); rocksdb_cache_destroy(pTsdb->rCache.blockcache); rocksdb_comparator_destroy(pTsdb->rCache.my_comparator); - taosThreadMutexDestroy(&pTsdb->rCache.rMutex); + (void)taosThreadMutexDestroy(&pTsdb->rCache.rMutex); taosMemoryFree(pTsdb->rCache.pTSchema); } @@ -266,12 +266,12 @@ static void rocksMayWrite(STsdb *pTsdb, bool force, bool read, bool lock) { rocksdb_writebatch_t *wb = pTsdb->rCache.writebatch; if (read) { if (lock) { - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); } wb = pTsdb->rCache.rwritebatch; } else { if (lock) { - taosThreadMutexLock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexLock(&pTsdb->rCache.rMutex); } } @@ -292,9 +292,9 @@ static void rocksMayWrite(STsdb *pTsdb, bool force, bool read, bool lock) { if (lock) { if (read) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); } else { - taosThreadMutexUnlock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexUnlock(&pTsdb->rCache.rMutex); } } } @@ -486,7 +486,7 @@ static void tsdbCachePutBatch(SLastCol *pLastCol, const void *key, size_t klen, tsdbError("tsdb/cache: vgId:%d, serialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); } - taosThreadMutexLock(&rCache->rMutex); + (void)taosThreadMutexLock(&rCache->rMutex); rocksdb_writebatch_put(wb, (char *)key, klen, rocks_value, vlen); @@ -507,7 +507,7 @@ static void tsdbCachePutBatch(SLastCol *pLastCol, const void *key, size_t klen, state->flush_count = 0; } - taosThreadMutexUnlock(&rCache->rMutex); + (void)taosThreadMutexUnlock(&rCache->rMutex); } int tsdbCacheFlushDirty(const void *key, size_t klen, void *value, void *ud) { @@ -529,7 +529,7 @@ int32_t tsdbCacheCommit(STsdb *pTsdb) { SLRUCache *pCache = pTsdb->lruCache; rocksdb_writebatch_t *wb = pTsdb->rCache.writebatch; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); taosLRUCacheApply(pCache, tsdbCacheFlushDirty, &pTsdb->flushState); @@ -537,7 +537,7 @@ int32_t tsdbCacheCommit(STsdb *pTsdb) { rocksMayWrite(pTsdb, true, true, false); rocksdb_flush(pTsdb->rCache.db, pTsdb->rCache.flushoptions, &err); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); if (NULL != err) { tsdbError("vgId:%d, %s failed at line %d since %s", TD_VID(pTsdb->pVnode), __func__, __LINE__, err); @@ -778,7 +778,7 @@ static int32_t tsdbCacheDropTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrapper *pSchemaRow) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); if (suid < 0) { for (int i = 0; i < pSchemaRow->nCols; ++i) { @@ -792,7 +792,7 @@ int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrap STSchema *pTSchema = NULL; code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, uid, -1, &pTSchema); if (code != TSDB_CODE_SUCCESS) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -808,7 +808,7 @@ int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrap taosMemoryFree(pTSchema); } - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -816,7 +816,7 @@ int32_t tsdbCacheNewTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrap int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWrapper *pSchemaRow) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); (void)tsdbCacheCommitNoLock(pTsdb); @@ -836,7 +836,7 @@ 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) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -858,7 +858,7 @@ int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWra rocksMayWrite(pTsdb, true, false, false); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -866,14 +866,14 @@ int32_t tsdbCacheDropTable(STsdb *pTsdb, tb_uid_t uid, tb_uid_t suid, SSchemaWra int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); (void)tsdbCacheCommitNoLock(pTsdb); STSchema *pTSchema = NULL; code = metaGetTbTSchemaEx(pTsdb->pVnode->pMeta, suid, suid, -1, &pTSchema); if (code != TSDB_CODE_SUCCESS) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -899,7 +899,7 @@ int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { rocksMayWrite(pTsdb, true, false, false); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -907,13 +907,13 @@ int32_t tsdbCacheDropSubTables(STsdb *pTsdb, SArray *uids, tb_uid_t suid) { int32_t tsdbCacheNewNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int8_t col_type) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); (void)tsdbCacheNewTableColumn(pTsdb, uid, cid, col_type, 0); (void)tsdbCacheNewTableColumn(pTsdb, uid, cid, col_type, 1); // rocksMayWrite(pTsdb, true, false, false); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); //(void)tsdbCacheCommit(pTsdb); TAOS_RETURN(code); @@ -922,7 +922,7 @@ int32_t tsdbCacheNewNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, int8_t int32_t tsdbCacheDropNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool hasPrimayKey) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); (void)tsdbCacheCommitNoLock(pTsdb); @@ -930,7 +930,7 @@ int32_t tsdbCacheDropNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool h rocksMayWrite(pTsdb, true, false, true); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -938,7 +938,7 @@ int32_t tsdbCacheDropNTableColumn(STsdb *pTsdb, int64_t uid, int16_t cid, bool h int32_t tsdbCacheNewSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, int8_t col_type) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); for (int i = 0; i < TARRAY_SIZE(uids); ++i) { tb_uid_t uid = ((tb_uid_t *)TARRAY_DATA(uids))[i]; @@ -948,7 +948,7 @@ int32_t tsdbCacheNewSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, int8_t } // rocksMayWrite(pTsdb, true, false, false); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); //(void)tsdbCacheCommit(pTsdb); TAOS_RETURN(code); @@ -957,7 +957,7 @@ int32_t tsdbCacheNewSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, int8_t int32_t tsdbCacheDropSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, bool hasPrimayKey) { int32_t code = 0; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); (void)tsdbCacheCommitNoLock(pTsdb); @@ -969,7 +969,7 @@ int32_t tsdbCacheDropSTableColumn(STsdb *pTsdb, SArray *uids, int16_t cid, bool rocksMayWrite(pTsdb, true, false, true); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } @@ -1045,7 +1045,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray SArray *remainCols = NULL; SLRUCache *pCache = pTsdb->lruCache; - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); for (int i = 0; i < num_keys; ++i) { SLastUpdateCtx *updCtx = (SLastUpdateCtx *)taosArrayGet(updCtxArray, i); @@ -1088,7 +1088,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray keys_list_sizes = taosMemoryCalloc(num_keys, sizeof(size_t)); if (!keys_list || !keys_list_sizes) { taosMemoryFree(keys_list); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } for (int i = 0; i < num_keys; ++i) { @@ -1105,7 +1105,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray taosMemoryFree(keys_list_sizes); taosMemoryFree(values_list); taosMemoryFree(values_list_sizes); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)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, @@ -1149,11 +1149,11 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray tsdbError("tsdb/cache: vgId:%d, serialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); } - taosThreadMutexLock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexLock(&pTsdb->rCache.rMutex); rocksdb_writebatch_put(wb, (char *)&idxKey->key, ROCKS_KEY_LEN, value, vlen); - taosThreadMutexUnlock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexUnlock(&pTsdb->rCache.rMutex); pLastCol = &lastColTmp; SLastCol *pTmpLastCol = taosMemoryCalloc(1, sizeof(SLastCol)); @@ -1164,7 +1164,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray taosMemoryFree(values_list_sizes); taosArrayDestroy(remainCols); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } *pTmpLastCol = *pLastCol; @@ -1208,7 +1208,7 @@ static int32_t tsdbCacheUpdate(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, SArray } _exit: - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); if (code) { tsdbError("tsdb/cache: vgId:%d, update failed at line %d since %s.", TD_VID(pTsdb->pVnode), lino, tstrerror(code)); @@ -1699,7 +1699,7 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache } if (remainCols && TARRAY_SIZE(remainCols) > 0) { - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); for (int i = 0; i < TARRAY_SIZE(remainCols);) { SIdxKey *idxKey = &((SIdxKey *)TARRAY_DATA(remainCols))[i]; LRUHandle *h = taosLRUCacheLookup(pCache, &idxKey->key, ROCKS_KEY_LEN); @@ -1710,13 +1710,13 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache for (int8_t j = 0; j < lastCol.rowKey.numOfPKs; j++) { code = reallocVarDataVal(&lastCol.rowKey.pks[j]); if (code) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } } code = reallocVarData(&lastCol.colVal); if (code) { - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); TAOS_RETURN(code); } taosArraySet(pLastArray, idxKey->idx, &lastCol); @@ -1732,7 +1732,7 @@ int32_t tsdbCacheGetBatch(STsdb *pTsdb, tb_uid_t uid, SArray *pLastArray, SCache // tsdbTrace("tsdb/cache: vgId: %d, load %" PRId64 " from rocks", TD_VID(pTsdb->pVnode), uid); code = tsdbCacheLoadFromRocks(pTsdb, uid, pLastArray, remainCols, pr, ltype); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); if (remainCols) { taosArrayDestroy(remainCols); @@ -1792,13 +1792,13 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE (void)tsdbCacheCommit(pTsdb); - taosThreadMutexLock(&pTsdb->lruMutex); + (void)taosThreadMutexLock(&pTsdb->lruMutex); - taosThreadMutexLock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexLock(&pTsdb->rCache.rMutex); // rocksMayWrite(pTsdb, true, false, false); rocksdb_multi_get(pTsdb->rCache.db, pTsdb->rCache.readoptions, num_keys * 2, (const char *const *)keys_list, keys_list_sizes, values_list, values_list_sizes, errs); - taosThreadMutexUnlock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexUnlock(&pTsdb->rCache.rMutex); for (int i = 0; i < num_keys * 2; ++i) { if (errs[i]) { @@ -1814,7 +1814,7 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE if (code) { tsdbError("tsdb/cache: vgId:%d, deserialize failed since %s.", TD_VID(pTsdb->pVnode), tstrerror(code)); } - taosThreadMutexLock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexLock(&pTsdb->rCache.rMutex); if (NULL != pLastCol && (pLastCol->rowKey.ts <= eKey && pLastCol->rowKey.ts >= sKey)) { rocksdb_writebatch_delete(wb, keys_list[i], klen); } @@ -1828,7 +1828,7 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE if (NULL != pLastCol && (pLastCol->rowKey.ts <= eKey && pLastCol->rowKey.ts >= sKey)) { rocksdb_writebatch_delete(wb, keys_list[num_keys + i], klen); } - taosThreadMutexUnlock(&pTsdb->rCache.rMutex); + (void)taosThreadMutexUnlock(&pTsdb->rCache.rMutex); taosMemoryFreeClear(pLastCol); rocksdb_free(values_list[i]); @@ -1879,7 +1879,7 @@ int32_t tsdbCacheDel(STsdb *pTsdb, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKE rocksMayWrite(pTsdb, true, false, true); - taosThreadMutexUnlock(&pTsdb->lruMutex); + (void)taosThreadMutexUnlock(&pTsdb->lruMutex); _exit: taosMemoryFree(pTSchema); @@ -1904,7 +1904,7 @@ int32_t tsdbOpenCache(STsdb *pTsdb) { taosLRUCacheSetStrictCapacity(pCache, false); - taosThreadMutexInit(&pTsdb->lruMutex, NULL); + (void)taosThreadMutexInit(&pTsdb->lruMutex, NULL); pTsdb->flushState.pTsdb = pTsdb; pTsdb->flushState.flush_count = 0; @@ -1926,7 +1926,7 @@ void tsdbCloseCache(STsdb *pTsdb) { taosLRUCacheCleanup(pCache); - taosThreadMutexDestroy(&pTsdb->lruMutex); + (void)taosThreadMutexDestroy(&pTsdb->lruMutex); } tsdbCloseBCache(pTsdb); @@ -3365,7 +3365,7 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) LRUHandle *h = taosLRUCacheLookup(pCache, key, keyLen); if (!h) { STsdb *pTsdb = pFD->pTsdb; - taosThreadMutexLock(&pTsdb->bMutex); + (void)taosThreadMutexLock(&pTsdb->bMutex); h = taosLRUCacheLookup(pCache, key, keyLen); if (!h) { @@ -3373,7 +3373,7 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) code = tsdbCacheLoadBlockS3(pFD, &pBlock); // if table's empty or error, return code of -1 if (code != TSDB_CODE_SUCCESS || pBlock == NULL) { - taosThreadMutexUnlock(&pTsdb->bMutex); + (void)taosThreadMutexUnlock(&pTsdb->bMutex); *handle = NULL; if (code == TSDB_CODE_SUCCESS && !pBlock) { @@ -3392,7 +3392,7 @@ int32_t tsdbCacheGetBlockS3(SLRUCache *pCache, STsdbFD *pFD, LRUHandle **handle) } } - taosThreadMutexUnlock(&pTsdb->bMutex); + (void)taosThreadMutexUnlock(&pTsdb->bMutex); } *handle = h; @@ -3418,7 +3418,7 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ LRUHandle *handle = NULL; getBCacheKey(pFD->fid, pFD->cid, pgno, key, &keyLen); - taosThreadMutexLock(&pFD->pTsdb->pgMutex); + (void)taosThreadMutexLock(&pFD->pTsdb->pgMutex); handle = taosLRUCacheLookup(pFD->pTsdb->pgCache, key, keyLen); if (!handle) { size_t charge = pFD->szPage; @@ -3436,7 +3436,7 @@ int32_t tsdbCacheSetPageS3(SLRUCache *pCache, STsdbFD *pFD, int64_t pgno, uint8_ // code = TSDB_CODE_OUT_OF_MEMORY; } } - taosThreadMutexUnlock(&pFD->pTsdb->pgMutex); + (void)taosThreadMutexUnlock(&pFD->pTsdb->pgMutex); tsdbCacheRelease(pFD->pTsdb->pgCache, handle); diff --git a/source/dnode/vnode/src/vnd/vnodeOpen.c b/source/dnode/vnode/src/vnd/vnodeOpen.c index 4caaf3d35b..fb835fd0c2 100644 --- a/source/dnode/vnode/src/vnd/vnodeOpen.c +++ b/source/dnode/vnode/src/vnd/vnodeOpen.c @@ -459,8 +459,7 @@ SVnode *vnodeOpen(const char *path, int32_t diskPrimary, STfs *pTfs, SMsgCb msgC } // sma required the tq is initialized before the vnode open - pVnode->pTq = tqOpen(tdir, pVnode); - if (pVnode->pTq == NULL) { + if (tqOpen(tdir, pVnode)) { vError("vgId:%d, failed to open vnode tq since %s", TD_VID(pVnode), tstrerror(terrno)); goto _err; } diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index 046f12f9e7..f30b2f2ada 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -370,8 +370,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->tqHandleDone = 1; - code = tqSnapReaderClose(&pReader->pTqSnapReader); - TSDB_CHECK_CODE(code, lino, _exit); + tqSnapReaderClose(&pReader->pTqSnapReader); } } if (!pReader->tqCheckInfoDone) { @@ -387,8 +386,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->tqCheckInfoDone = 1; - code = tqSnapReaderClose(&pReader->pTqCheckInfoReader); - TSDB_CHECK_CODE(code, lino, _exit); + tqSnapReaderClose(&pReader->pTqCheckInfoReader); } } if (!pReader->tqOffsetDone) { @@ -404,8 +402,7 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) goto _exit; } else { pReader->tqOffsetDone = 1; - code = tqSnapReaderClose(&pReader->pTqOffsetReader); - TSDB_CHECK_CODE(code, lino, _exit); + tqSnapReaderClose(&pReader->pTqOffsetReader); } } diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 07409b1411..d258fa49e4 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -827,9 +827,7 @@ static int32_t execAlterLocal(SAlterLocalStmt* pStmt) { return terrno; } - if (taosCfgDynamicOptions(tsCfg, pStmt->config, false)) { - return terrno; - } + TAOS_CHECK_RETURN(taosCfgDynamicOptions(tsCfg, pStmt->config, false)); _return: diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index fbb61c7c90..36d81382f5 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -153,8 +153,8 @@ static FORCE_INLINE SResultRow* getResultRowByPos(SDiskbasedBuf* pBuf, SResultRo return pRow; } -void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t order); -void cleanupGroupResInfo(SGroupResInfo* pGroupResInfo); +int32_t initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t order); +void cleanupGroupResInfo(SGroupResInfo* pGroupResInfo); void initMultiResInfoFromArrayList(SGroupResInfo* pGroupResInfo, SArray* pArrayList); bool hasRemainResults(SGroupResInfo* pGroupResInfo); diff --git a/source/libs/executor/inc/executorInt.h b/source/libs/executor/inc/executorInt.h index 0d2692267b..03dd0c4581 100644 --- a/source/libs/executor/inc/executorInt.h +++ b/source/libs/executor/inc/executorInt.h @@ -861,7 +861,7 @@ int32_t doFilter(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SColMatchInfo* p int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int32_t numOfExpr, SSDataBlock* pBlock, int32_t rows, SExecTaskInfo* pTask, STableMetaCacheInfo* pCache); -void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle); +int32_t appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle); int32_t setTbNameColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, const char* name); int32_t setVgIdColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int32_t vgId); @@ -922,7 +922,6 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR void doUpdateNumOfRows(SqlFunctionCtx* pCtx, SResultRow* pRow, int32_t numOfExprs, const int32_t* rowEntryOffset); void doClearBufferedBlocks(SStreamScanInfo* pInfo); -uint64_t calcGroupId(char* pData, int32_t len); void streamOpReleaseState(struct SOperatorInfo* pOperator); void streamOpReloadState(struct SOperatorInfo* pOperator); void destroyStreamAggSupporter(SStreamAggSupporter* pSup); @@ -979,13 +978,14 @@ void* decodeSResultWindowInfo(void* buf, SResultWindowInfo* key, int32_t outLe int32_t encodeSTimeWindowAggSupp(void** buf, STimeWindowAggSupp* pTwAggSup); void* decodeSTimeWindowAggSupp(void* buf, STimeWindowAggSupp* pTwAggSup); -void destroyOperatorParamValue(void* pValues); -int32_t mergeOperatorParams(SOperatorParam* pDst, SOperatorParam* pSrc); -int32_t buildTableScanOperatorParam(SOperatorParam** ppRes, SArray* pUidList, int32_t srcOpType, bool tableSeq); -void freeExchangeGetBasicOperatorParam(void* pParam); -void freeOperatorParam(SOperatorParam* pParam, SOperatorParamType type); -void freeResetOperatorParams(struct SOperatorInfo* pOperator, SOperatorParamType type, bool allFree); -SSDataBlock* getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, bool clearParam); +void destroyOperatorParamValue(void* pValues); +int32_t mergeOperatorParams(SOperatorParam* pDst, SOperatorParam* pSrc); +int32_t buildTableScanOperatorParam(SOperatorParam** ppRes, SArray* pUidList, int32_t srcOpType, bool tableSeq); +void freeExchangeGetBasicOperatorParam(void* pParam); +void freeOperatorParam(SOperatorParam* pParam, SOperatorParamType type); +void freeResetOperatorParams(struct SOperatorInfo* pOperator, SOperatorParamType type, bool allFree); +int32_t getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, bool clearParam, + SSDataBlock** pResBlock); void getCountWinRange(SStreamAggSupporter* pAggSup, const SSessionKey* pKey, EStreamType mode, SSessionKey* pDelRange); void doDeleteSessionWindow(SStreamAggSupporter* pAggSup, SSessionKey* pKey); diff --git a/source/libs/executor/inc/operator.h b/source/libs/executor/inc/operator.h index 37cdd5d7b3..c047c496ca 100644 --- a/source/libs/executor/inc/operator.h +++ b/source/libs/executor/inc/operator.h @@ -20,6 +20,15 @@ extern "C" { #endif +#define QRY_OPTR_CHECK(_o) \ + do { \ + if ((_o) == NULL) { \ + return TSDB_CODE_INVALID_PARA; \ + } else { \ + *(_o) = NULL; \ + } \ + } while(0) + typedef struct SOperatorCostInfo { double openCost; double totalCost; @@ -27,15 +36,15 @@ typedef struct SOperatorCostInfo { struct SOperatorInfo; -typedef int32_t (*__optr_encode_fn_t)(struct SOperatorInfo* pOperator, char** result, int32_t* length); -typedef int32_t (*__optr_decode_fn_t)(struct SOperatorInfo* pOperator, char* result); +//typedef int32_t (*__optr_encode_fn_t)(struct SOperatorInfo* pOperator, char** result, int32_t* length); +//typedef int32_t (*__optr_decode_fn_t)(struct SOperatorInfo* pOperator, char* result); typedef int32_t (*__optr_open_fn_t)(struct SOperatorInfo* pOptr); typedef SSDataBlock* (*__optr_fn_t)(struct SOperatorInfo* pOptr); typedef void (*__optr_close_fn_t)(void* param); typedef int32_t (*__optr_explain_fn_t)(struct SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len); typedef int32_t (*__optr_reqBuf_fn_t)(struct SOperatorInfo* pOptr); -typedef SSDataBlock* (*__optr_get_ext_fn_t)(struct SOperatorInfo* pOptr, SOperatorParam* param); +typedef int32_t (*__optr_get_ext_fn_t)(struct SOperatorInfo* pOptr, SOperatorParam* param, SSDataBlock** pRes); typedef int32_t (*__optr_notify_fn_t)(struct SOperatorInfo* pOptr, SOperatorParam* param); typedef void (*__optr_state_fn_t)(struct SOperatorInfo* pOptr); @@ -45,8 +54,6 @@ typedef struct SOperatorFpSet { __optr_fn_t cleanupFn; // call this function to release the allocated resources ASAP __optr_close_fn_t closeFn; __optr_reqBuf_fn_t reqBufFn; // total used buffer for blocking operator - __optr_encode_fn_t encodeResultRow; - __optr_decode_fn_t decodeResultRow; __optr_explain_fn_t getExplainFn; __optr_get_ext_fn_t getNextExtFn; __optr_notify_fn_t notifyFn; @@ -86,85 +93,85 @@ typedef struct SOperatorInfo { // operator creater functions // clang-format off -SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo); +int32_t createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* pHandle, STableListInfo* pTableList, SExecTaskInfo* pTaskInfo); +int32_t createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* pHandle, STableListInfo* pTableList, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo); +int32_t createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pPhyNode, STableListInfo* pTableListInfo, SNode* pTagCond, SNode*pTagIndexCond, SExecTaskInfo* pTaskInfo); +int32_t createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pPhyNode, STableListInfo* pTableListInfo, SNode* pTagCond, SNode*pTagIndexCond, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScanPhysiNode* pScanPhyNode, const char* pUser, SExecTaskInfo* pTaskInfo); +int32_t createSysTableScanOperatorInfo(void* readHandle, SSystemTableScanPhysiNode* pScanPhyNode, const char* pUser, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* handle, STableCountScanPhysiNode* pNode, SExecTaskInfo* pTaskInfo); +int32_t createTableCountScanOperatorInfo(SReadHandle* handle, STableCountScanPhysiNode* pNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pNode, SExecTaskInfo* pTaskInfo); +int32_t createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, SExecTaskInfo* pTaskInfo); +int32_t createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhysiNode* pProjPhyNode, SExecTaskInfo* pTaskInfo); +int32_t createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhysiNode* pProjPhyNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo); +int32_t createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** dowStreams, size_t numStreams, SMergePhysiNode* pMergePhysiNode, SExecTaskInfo* pTaskInfo); +int32_t createMultiwayMergeOperatorInfo(SOperatorInfo** dowStreams, size_t numStreams, SMergePhysiNode* pMergePhysiNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pTableScanNode, SReadHandle* readHandle, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo); +int32_t createCacherowsScanOperator(SLastRowScanPhysiNode* pTableScanNode, SReadHandle* readHandle, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo); +int32_t createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, SExecTaskInfo* pTaskInfo); +int32_t createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, SExecTaskInfo* pTaskInfo); +int32_t createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, SReadHandle* pHandle); +int32_t createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, SExecTaskInfo* pTaskInfo); +int32_t createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo); +int32_t createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo); +int32_t createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo); +int32_t createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pTaskInfo); +int32_t createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo); +int32_t createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWinodwPhysiNode* pStateNode, SExecTaskInfo* pTaskInfo); +int32_t createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWinodwPhysiNode* pStateNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo); +int32_t createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo); +int32_t createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, SExecTaskInfo* pTaskInfo); +int32_t createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SSortMergeJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo); +int32_t createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SSortMergeJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SHashJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo); +int32_t createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SHashJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle); +int32_t createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, SReadHandle* pHandle); +int32_t createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle); +int32_t createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle); +int32_t createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo); +int32_t createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFillPhysiNode* pPhyFillNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle); +int32_t createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle); +int32_t createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pInfo); -SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, SExecTaskInfo* pTaskInfo); +int32_t createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo); +int32_t createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo); +int32_t createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SGroupCachePhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo); +int32_t createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SGroupCachePhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); -SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SDynQueryCtrlPhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo); +int32_t createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SDynQueryCtrlPhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pInfo); // clang-format on @@ -178,17 +185,17 @@ void setOperatorCompleted(SOperatorInfo* pOperator); void setOperatorInfo(SOperatorInfo* pOperator, const char* name, int32_t type, bool blocking, int32_t status, void* pInfo, SExecTaskInfo* pTaskInfo); int32_t optrDefaultBufFn(SOperatorInfo* pOperator); -SSDataBlock* optrDefaultGetNextExtFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam); +int32_t optrDefaultGetNextExtFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam, SSDataBlock** pRes); int32_t optrDefaultNotifyFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam); SSDataBlock* getNextBlockFromDownstream(struct SOperatorInfo* pOperator, int32_t idx); SSDataBlock* getNextBlockFromDownstreamRemain(struct SOperatorInfo* pOperator, int32_t idx); int16_t getOperatorResultBlockId(struct SOperatorInfo* pOperator, int32_t idx); -SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, - SNode* pTagIndexCond, const char* pUser, const char* dbname); +int32_t createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, + SNode* pTagIndexCond, const char* pUser, const char* dbname, SOperatorInfo** pOptrInfo); void destroyOperator(SOperatorInfo* pOperator); -SOperatorInfo* extractOperatorInTree(SOperatorInfo* pOperator, int32_t type, const char* id); +int32_t extractOperatorInTree(SOperatorInfo* pOperator, int32_t type, const char* id, SOperatorInfo** pOptrInfo); int32_t getTableScanInfo(SOperatorInfo* pOperator, int32_t* order, int32_t* scanFlag, bool inheritUsOrder); int32_t stopTableScanOperator(SOperatorInfo* pOperator, const char* pIdStr, SStorageAPI* pAPI); int32_t getOperatorExplainExecInfo(struct SOperatorInfo* operatorInfo, SArray* pExecInfoList); diff --git a/source/libs/executor/inc/tsort.h b/source/libs/executor/inc/tsort.h index cf1464ccd7..8cfd8f52ac 100644 --- a/source/libs/executor/inc/tsort.h +++ b/source/libs/executor/inc/tsort.h @@ -107,8 +107,8 @@ void tsortClose(SSortHandle* pHandle); * * @return */ -int32_t tsortSetFetchRawDataFp(SSortHandle* pHandle, _sort_fetch_block_fn_t fetchFp, void (*fp)(SSDataBlock*, void*), - void* param); +void tsortSetFetchRawDataFp(SSortHandle* pHandle, _sort_fetch_block_fn_t fetchFp, void (*fp)(SSDataBlock*, void*), + void* param); /** * diff --git a/source/libs/executor/src/aggregateoperator.c b/source/libs/executor/src/aggregateoperator.c index f23f01c80f..67c449d3ac 100644 --- a/source/libs/executor/src/aggregateoperator.c +++ b/source/libs/executor/src/aggregateoperator.c @@ -69,11 +69,15 @@ static void doSetTableGroupOutputBuf(SOperatorInfo* pOperator, int32_t numOfOutp static void functionCtxSave(SqlFunctionCtx* pCtx, SFunctionCtxStatus* pStatus); static void functionCtxRestore(SqlFunctionCtx* pCtx, SFunctionCtxStatus* pStatus); -SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, - SExecTaskInfo* pTaskInfo) { +int32_t createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; SAggOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -87,7 +91,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN int32_t num = 0; SExprInfo* pExprInfo = createExprInfo(pAggNode->pAggFuncs, pAggNode->pGroupKeys, &num); - int32_t code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, + code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -132,7 +136,8 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -145,7 +150,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroyAggOperatorInfo(void* param) { @@ -241,7 +246,8 @@ static bool nextGroupedResult(SOperatorInfo* pOperator) { T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); } - initGroupedResultInfo(&pAggInfo->groupResInfo, pAggInfo->aggSup.pResultRowHashTable, 0); + code = initGroupedResultInfo(&pAggInfo->groupResInfo, pAggInfo->aggSup.pResultRowHashTable, 0); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index 8a413f34fb..b6994e7036 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -51,10 +51,10 @@ typedef struct SCacheRowsScanInfo { } SCacheRowsScanInfo; static SSDataBlock* doScanCache(SOperatorInfo* pOperator); -static void destroyCacheScanOperator(void* param); -static int32_t extractCacheScanSlotId(const SArray* pColMatchInfo, SExecTaskInfo* pTaskInfo, int32_t** pSlotIds, - int32_t** pDstSlotIds); -static int32_t removeRedundantTsCol(SLastRowScanPhysiNode* pScanNode, SColMatchInfo* pColMatchInfo); +static void destroyCacheScanOperator(void* param); +static int32_t extractCacheScanSlotId(const SArray* pColMatchInfo, SExecTaskInfo* pTaskInfo, int32_t** pSlotIds, + int32_t** pDstSlotIds); +static int32_t removeRedundantTsCol(SLastRowScanPhysiNode* pScanNode, SColMatchInfo* pColMatchInfo); #define SCAN_ROW_TYPE(_t) ((_t) ? CACHESCAN_RETRIEVE_LAST : CACHESCAN_RETRIEVE_LAST_ROW) @@ -84,8 +84,11 @@ static void setColIdForCacheReadBlock(SSDataBlock* pBlock, SLastRowScanPhysiNode } } -SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SReadHandle* readHandle, - STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { +int32_t createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SReadHandle* readHandle, + STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; int32_t numOfCols = 0; @@ -207,7 +210,9 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe NULL, optrDefaultGetNextExtFn, NULL); pOperator->cost.openCost = 0; - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: pTaskInfo->code = code; @@ -216,7 +221,7 @@ _error: } destroyCacheScanOperator(pInfo); taosMemoryFree(pOperator); - return NULL; + return code; } int32_t doScanCacheNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { diff --git a/source/libs/executor/src/countwindowoperator.c b/source/libs/executor/src/countwindowoperator.c index 4395d00127..b7aa57e4b1 100644 --- a/source/libs/executor/src/countwindowoperator.c +++ b/source/libs/executor/src/countwindowoperator.c @@ -235,13 +235,16 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, - SExecTaskInfo* pTaskInfo) { +int32_t createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SCountWindowOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SCountWindowOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -306,7 +309,8 @@ SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -315,5 +319,5 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } diff --git a/source/libs/executor/src/dynqueryctrloperator.c b/source/libs/executor/src/dynqueryctrloperator.c old mode 100755 new mode 100644 index e4ca946f4f..3b025685dc --- a/source/libs/executor/src/dynqueryctrloperator.c +++ b/source/libs/executor/src/dynqueryctrloperator.c @@ -527,8 +527,8 @@ static void seqJoinLaunchNewRetrieveImpl(SOperatorInfo* pOperator, SSDataBlock** } qDebug("%s dynamic post task begin", GET_TASKID(pOperator->pTaskInfo)); - *ppRes = pOperator->pDownstream[1]->fpSet.getNextExtFn(pOperator->pDownstream[1], pParam); - if (*ppRes) { + code = pOperator->pDownstream[1]->fpSet.getNextExtFn(pOperator->pDownstream[1], pParam, ppRes); + if (*ppRes && (code == 0)) { pPost->isStarted = true; pStbJoin->execInfo.postBlkNum++; pStbJoin->execInfo.postBlkRows += (*ppRes)->info.rows; @@ -955,17 +955,20 @@ int32_t initSeqStbJoinTableHash(SStbJoinPrevJoinCtx* pPrev, bool batchFetch) { return TSDB_CODE_SUCCESS; } +int32_t createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, + SDynQueryCtrlPhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); -SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, - SDynQueryCtrlPhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; - __optr_fn_t nextFp = NULL; + int32_t code = TSDB_CODE_SUCCESS; + __optr_fn_t nextFp = NULL; SDynQueryCtrlOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SDynQueryCtrlOperatorInfo)); if (pInfo == NULL) { code = terrno; goto _error; } - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pOperator == NULL) { code = terrno; goto _error; @@ -994,23 +997,22 @@ SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32 code = TSDB_CODE_INVALID_PARA; goto _error; } - - setOperatorInfo(pOperator, "DynQueryCtrlOperator", QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, nextFp, NULL, destroyDynQueryCtrlOperator, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + setOperatorInfo(pOperator, "DynQueryCtrlOperator", QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL, false, OP_NOT_OPENED, + pInfo, pTaskInfo); - return pOperator; + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, nextFp, NULL, destroyDynQueryCtrlOperator, optrDefaultBufFn, + NULL, optrDefaultGetNextExtFn, NULL); + + *pOptrInfo = pOperator; + return code; _error: - if (pInfo != NULL) { destroyDynQueryCtrlOperator(pInfo); } taosMemoryFree(pOperator); pTaskInfo->code = code; - - return NULL; + return code; } - - diff --git a/source/libs/executor/src/eventwindowoperator.c b/source/libs/executor/src/eventwindowoperator.c index f5fda4c276..629afbbb8e 100644 --- a/source/libs/executor/src/eventwindowoperator.c +++ b/source/libs/executor/src/eventwindowoperator.c @@ -58,13 +58,16 @@ static void doKeepTuple(SWindowRowsSup* pRowSup, int64_t ts, uint64_t groupId) { pRowSup->groupId = groupId; } -SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, - SExecTaskInfo* pTaskInfo) { +int32_t createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SEventWindowOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SEventWindowOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -128,7 +131,8 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -137,7 +141,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroyEWindowOperatorInfo(void* param) { diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c index 22d5b6097e..7c74fa7a44 100644 --- a/source/libs/executor/src/exchangeoperator.c +++ b/source/libs/executor/src/exchangeoperator.c @@ -367,12 +367,16 @@ static int32_t initExchangeOperator(SExchangePhysiNode* pExNode, SExchangeInfo* return initDataSource(numOfSources, pInfo, id); } -SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; +int32_t createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode* pExNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; int32_t lino = 0; SExchangeInfo* pInfo = taosMemoryCalloc(1, sizeof(SExchangeInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -403,7 +407,8 @@ SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode pOperator->fpSet = createOperatorFpSet(prepareLoadRemoteData, loadRemoteData, NULL, destroyExchangeOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (code != TSDB_CODE_SUCCESS) { @@ -416,7 +421,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroyExchangeOperatorInfo(void* param) { diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 7dd1fc1f4e..a8e7d0e03f 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -128,7 +128,9 @@ int32_t resultrowComparAsc(const void* p1, const void* p2) { static int32_t resultrowComparDesc(const void* p1, const void* p2) { return resultrowComparAsc(p2, p1); } -void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t order) { +int32_t initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t order) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pGroupResInfo->pRows != NULL) { taosArrayDestroy(pGroupResInfo->pRows); } @@ -154,6 +156,7 @@ void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, in } pGroupResInfo->pBuf = taosMemoryMalloc(bufLen); + QUERY_CHECK_NULL(pGroupResInfo->pBuf, code, lino, _end, terrno); iter = 0; while ((pData = tSimpleHashIterate(pHashmap, pData, &iter)) != NULL) { @@ -164,7 +167,8 @@ void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, in p->groupId = *(uint64_t*)key; p->pos = *(SResultRowPosition*)pData; memcpy(p->key, (char*)key + sizeof(uint64_t), keyLen - sizeof(uint64_t)); - taosArrayPush(pGroupResInfo->pRows, &p); + void* tmp = taosArrayPush(pGroupResInfo->pRows, &p); + QUERY_CHECK_NULL(pGroupResInfo->pBuf, code, lino, _end, terrno); offset += keyLen + sizeof(struct SResultRowPosition); } @@ -176,6 +180,12 @@ void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, in } pGroupResInfo->index = 0; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } void initMultiResInfoFromArrayList(SGroupResInfo* pGroupResInfo, SArray* pArrayList) { diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index a801e3cc99..d864a87f75 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -292,13 +292,11 @@ qTaskInfo_t qCreateQueueExecTaskInfo(void* msg, SReadHandle* pReaderHandle, int3 int32_t code = doCreateTask(0, id, vgId, OPTR_EXEC_MODEL_QUEUE, &pReaderHandle->api, &pTaskInfo); if (NULL == pTaskInfo || code != 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; } - pTaskInfo->pRoot = createRawScanOperatorInfo(pReaderHandle, pTaskInfo); - if (NULL == pTaskInfo->pRoot) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + createRawScanOperatorInfo(pReaderHandle, pTaskInfo, &pTaskInfo->pRoot); + if (NULL == pTaskInfo->pRoot || code != 0) { taosMemoryFree(pTaskInfo); return NULL; } @@ -458,7 +456,12 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI } // traverse to the stream scanner node to add this table id - SOperatorInfo* pInfo = extractOperatorInTree(pTaskInfo->pRoot, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id); + SOperatorInfo* pInfo = NULL; + code = extractOperatorInTree(pTaskInfo->pRoot, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id, &pInfo); + if (code != 0 || pInfo == NULL) { + return code; + } + SStreamScanInfo* pScanInfo = pInfo->info; if (isAdd) { // add new table id @@ -470,11 +473,7 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI } int32_t numOfQualifiedTables = taosArrayGetSize(qa); qDebug("%d qualified child tables added into stream scanner, %s", numOfQualifiedTables, id); - code = pTaskInfo->storageAPI.tqReaderFn.tqReaderAddTables(pScanInfo->tqReader, qa); - if (code != TSDB_CODE_SUCCESS) { - taosArrayDestroy(qa); - return code; - } + pTaskInfo->storageAPI.tqReaderFn.tqReaderAddTables(pScanInfo->tqReader, qa); bool assignUid = false; size_t bufLen = (pScanInfo->pGroupTags != NULL) ? getTableTagsBufLen(pScanInfo->pGroupTags) : 0; @@ -528,7 +527,7 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI } else { // remove the table id in current list qDebug("%d remove child tables from the stream scanner, %s", (int32_t)taosArrayGetSize(tableIdList), id); taosWLockLatch(&pTaskInfo->lock); - code = pTaskInfo->storageAPI.tqReaderFn.tqReaderRemoveTables(pScanInfo->tqReader, tableIdList); + pTaskInfo->storageAPI.tqReaderFn.tqReaderRemoveTables(pScanInfo->tqReader, tableIdList); taosWUnLockLatch(&pTaskInfo->lock); } @@ -674,12 +673,11 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo int32_t current = 0; SSDataBlock* pRes = NULL; - - int64_t st = taosGetTimestampUs(); + int64_t st = taosGetTimestampUs(); if (pTaskInfo->pOpParam && !pTaskInfo->paramSet) { pTaskInfo->paramSet = true; - pRes = pTaskInfo->pRoot->fpSet.getNextExtFn(pTaskInfo->pRoot, pTaskInfo->pOpParam); + code = pTaskInfo->pRoot->fpSet.getNextExtFn(pTaskInfo->pRoot, pTaskInfo->pOpParam, &pRes); } else { pRes = pTaskInfo->pRoot->fpSet.getNextFn(pTaskInfo->pRoot); } @@ -692,6 +690,7 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo if (!pTaskInfo->pSubplan->dynamicRowThreshold || 4096 <= pTaskInfo->pSubplan->rowsThreshold) { rowsThreshold = 4096; } + int32_t blockIndex = 0; while (pRes != NULL) { SSDataBlock* p = NULL; @@ -958,7 +957,7 @@ int32_t qGetExplainExecInfo(qTaskInfo_t tinfo, SArray* pExecInfoList) { return getOperatorExplainExecInfo(pTaskInfo->pRoot, pExecInfoList); } -int32_t qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner) { +void qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner) { SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; SOperatorInfo* pOperator = pTaskInfo->pRoot; @@ -966,7 +965,7 @@ int32_t qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner) { uint16_t type = pOperator->operatorType; if (type == QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { *scanner = pOperator->info; - return 0; + break; } else { ASSERT(pOperator->numOfDownstream == 1); pOperator = pOperator->pDownstream[0]; @@ -1213,10 +1212,11 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT const char* id = GET_TASKID(pTaskInfo); if (subType == TOPIC_SUB_TYPE__COLUMN && pOffset->type == TMQ_OFFSET__LOG) { - pOperator = extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id); - if (pOperator == NULL) { - return -1; + code = extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id, &pOperator); + if (pOperator == NULL || code != 0) { + return code; } + SStreamScanInfo* pInfo = pOperator->info; SStoreTqReader* pReaderAPI = &pTaskInfo->storageAPI.tqReaderFn; SWalReader* pWalReader = pReaderAPI->tqReaderGetWalReader(pInfo->tqReader); @@ -1228,9 +1228,9 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT } if (subType == TOPIC_SUB_TYPE__COLUMN) { - pOperator = extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id); - if (pOperator == NULL) { - return -1; + extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN, id, &pOperator); + if (pOperator == NULL || code != 0) { + return code; } SStreamScanInfo* pInfo = pOperator->info; @@ -1245,9 +1245,10 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT SStoreTqReader* pReaderAPI = &pTaskInfo->storageAPI.tqReaderFn; SWalReader* pWalReader = pReaderAPI->tqReaderGetWalReader(pInfo->tqReader); walReaderVerifyOffset(pWalReader, pOffset); - if (pReaderAPI->tqReaderSeek(pInfo->tqReader, pOffset->version, id) < 0) { + code = pReaderAPI->tqReaderSeek(pInfo->tqReader, pOffset->version, id); + if (code < 0) { qError("tqReaderSeek failed ver:%" PRId64 ", %s", pOffset->version, id); - return -1; + return code; } } else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) { // iterate all tables from tableInfoList, and retrieve rows from each table one-by-one @@ -1262,15 +1263,14 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT if (uid == 0) { if (numOfTables != 0) { - STableKeyInfo* pTableInfo = tableListGetInfo(pTableListInfo, 0); - uid = pTableInfo->uid; + STableKeyInfo* tmp = tableListGetInfo(pTableListInfo, 0); + if (tmp) uid = tmp->uid; ts = INT64_MIN; pScanInfo->currentTable = 0; } else { taosRUnLockLatch(&pTaskInfo->lock); qError("no table in table list, %s", id); - terrno = TSDB_CODE_TMQ_NO_TABLE_QUALIFIED; - return -1; + return TSDB_CODE_TMQ_NO_TABLE_QUALIFIED; } } pTaskInfo->storageAPI.tqReaderFn.tqSetTablePrimaryKey(pInfo->tqReader, uid); @@ -1290,8 +1290,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT } else { qError("vgId:%d uid:%" PRIu64 " not found in table list, total:%d, index:%d %s", pTaskInfo->id.vgId, uid, numOfTables, pScanInfo->currentTable, id); - terrno = TSDB_CODE_TMQ_NO_TABLE_QUALIFIED; - return -1; + return TSDB_CODE_TMQ_NO_TABLE_QUALIFIED; } STableKeyInfo keyInfo = {.uid = uid}; @@ -1311,8 +1310,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT (void**)&pScanBaseInfo->dataReader, id, NULL); if (code != TSDB_CODE_SUCCESS) { qError("prepare read tsdb snapshot failed, uid:%" PRId64 ", code:%s %s", pOffset->uid, tstrerror(code), id); - terrno = code; - return -1; + return code; } qDebug("tsdb reader created with offset(snapshot) uid:%" PRId64 " ts:%" PRId64 " table index:%d, total:%d, %s", @@ -1337,25 +1335,32 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT pScanBaseInfo->cond.twindows.skey = oldSkey; } else { qError("invalid pOffset->type:%d, %s", pOffset->type, id); - terrno = TSDB_CODE_PAR_INTERNAL_ERROR; - return -1; + return TSDB_CODE_PAR_INTERNAL_ERROR; } } else { // subType == TOPIC_SUB_TYPE__TABLE/TOPIC_SUB_TYPE__DB if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) { SStreamRawScanInfo* pInfo = pOperator->info; SSnapContext* sContext = pInfo->sContext; + SOperatorInfo* p = NULL; + + code = extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, id, &p); + if (code != 0) { + return code; + } - SOperatorInfo* p = extractOperatorInTree(pOperator, QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, id); STableListInfo* pTableListInfo = ((SStreamRawScanInfo*)(p->info))->pTableListInfo; if (pAPI->snapshotFn.setForSnapShot(sContext, pOffset->uid) != 0) { qError("setDataForSnapShot error. uid:%" PRId64 " , %s", pOffset->uid, id); - terrno = TSDB_CODE_PAR_INTERNAL_ERROR; - return -1; + return TSDB_CODE_PAR_INTERNAL_ERROR; } - SMetaTableInfo mtInfo = pTaskInfo->storageAPI.snapshotFn.getMetaTableInfoFromSnapshot(sContext); + SMetaTableInfo mtInfo = {0}; + code = pTaskInfo->storageAPI.snapshotFn.getMetaTableInfoFromSnapshot(sContext, &mtInfo); + if (code != 0){ + return code; + } pTaskInfo->storageAPI.tsdReader.tsdReaderClose(pInfo->dataReader); pInfo->dataReader = NULL; @@ -1363,6 +1368,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT tableListClear(pTableListInfo); if (mtInfo.uid == 0) { + tDeleteSchemaWrapper(mtInfo.schema); goto end; // no data } @@ -1370,6 +1376,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT code = initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + tDeleteSchemaWrapper(mtInfo.schema); return code; } if (pAPI->snapshotFn.taosXGetTablePrimaryKey(sContext)) { @@ -1380,6 +1387,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT code = tableListAddTableInfo(pTableListInfo, mtInfo.uid, 0); if (code != TSDB_CODE_SUCCESS) { + tDeleteSchemaWrapper(mtInfo.schema); qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); return code; } @@ -1391,11 +1399,12 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT NULL, (void**)&pInfo->dataReader, NULL, NULL); if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + tDeleteSchemaWrapper(mtInfo.schema); return code; } cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); - strcpy(pTaskInfo->streamInfo.tbName, mtInfo.tbName); + tstrncpy(pTaskInfo->streamInfo.tbName, mtInfo.tbName, TSDB_TABLE_NAME_LEN); tDeleteSchemaWrapper(pTaskInfo->streamInfo.schema); pTaskInfo->streamInfo.schema = mtInfo.schema; @@ -1403,10 +1412,10 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT } else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_META) { SStreamRawScanInfo* pInfo = pOperator->info; SSnapContext* sContext = pInfo->sContext; - if (pTaskInfo->storageAPI.snapshotFn.setForSnapShot(sContext, pOffset->uid) != 0) { + code = pTaskInfo->storageAPI.snapshotFn.setForSnapShot(sContext, pOffset->uid); + if (code != 0) { qError("setForSnapShot error. uid:%" PRIu64 " ,version:%" PRId64, pOffset->uid, pOffset->version); - terrno = TSDB_CODE_PAR_INTERNAL_ERROR; - return -1; + return code; } qDebug("tmqsnap qStreamPrepareScan snapshot meta uid:%" PRId64 " ts %" PRId64 " %s", pOffset->uid, pOffset->ts, id); diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index d980244360..d56b288129 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -74,7 +74,7 @@ static UNUSED_FUNC void* u_realloc(void* p, size_t __size) { static int32_t setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExpr, SSDataBlock* pBlock); -static void initCtxOutputBuffer(SqlFunctionCtx* pCtx, int32_t size); +static int32_t initCtxOutputBuffer(SqlFunctionCtx* pCtx, int32_t size); static void doApplyScalarCalculation(SOperatorInfo* pOperator, SSDataBlock* pBlock, int32_t order, int32_t scanFlag); static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, @@ -1227,20 +1227,28 @@ void freeResetOperatorParams(struct SOperatorInfo* pOperator, SOperatorParamType } } -FORCE_INLINE SSDataBlock* getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, - bool clearParam) { +FORCE_INLINE int32_t getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, bool clearParam, + SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); + + int32_t code = 0; if (pOperator->pDownstreamGetParams && pOperator->pDownstreamGetParams[idx]) { qDebug("DynOp: op %s start to get block from downstream %s", pOperator->name, pOperator->pDownstream[idx]->name); - SSDataBlock* pBlock = pOperator->pDownstream[idx]->fpSet.getNextExtFn(pOperator->pDownstream[idx], - pOperator->pDownstreamGetParams[idx]); - if (clearParam) { + code = pOperator->pDownstream[idx]->fpSet.getNextExtFn(pOperator->pDownstream[idx], + pOperator->pDownstreamGetParams[idx], pResBlock); + if (clearParam && (code == 0)) { freeOperatorParam(pOperator->pDownstreamGetParams[idx], OP_GET_PARAM); pOperator->pDownstreamGetParams[idx] = NULL; } - return pBlock; + return code; } - return pOperator->pDownstream[idx]->fpSet.getNextFn(pOperator->pDownstream[idx]); + *pResBlock = pOperator->pDownstream[idx]->fpSet.getNextFn(pOperator->pDownstream[idx]); + if (*pResBlock == NULL && terrno != 0) { + return terrno; + } else { + return code; + } } bool compareVal(const char* v, const SStateKeys* pKey) { diff --git a/source/libs/executor/src/filloperator.c b/source/libs/executor/src/filloperator.c index 341b1a01ea..1a433ba025 100644 --- a/source/libs/executor/src/filloperator.c +++ b/source/libs/executor/src/filloperator.c @@ -450,11 +450,15 @@ static int32_t createPrimaryTsExprIfNeeded(SFillOperatorInfo* pInfo, SFillPhysiN return TSDB_CODE_SUCCESS; } -SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, - SExecTaskInfo* pTaskInfo) { +int32_t createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* pPhyFillNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = 0; + SFillOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SFillOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -464,7 +468,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* SExprSupp* pNoFillSupp = &pInfo->noFillExprSupp; pNoFillSupp->pExprInfo = createExprInfo(pPhyFillNode->pNotFillExprs, NULL, &pNoFillSupp->numOfExprs); - int32_t code = createPrimaryTsExprIfNeeded(pInfo, pPhyFillNode, pNoFillSupp, pTaskInfo->id.str); + code = createPrimaryTsExprIfNeeded(pInfo, pPhyFillNode, pNoFillSupp, pTaskInfo->id.str); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -526,7 +530,9 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -535,5 +541,5 @@ _error: pTaskInfo->code = code; taosMemoryFreeClear(pOperator); - return NULL; + return code; } diff --git a/source/libs/executor/src/groupcacheoperator.c b/source/libs/executor/src/groupcacheoperator.c old mode 100755 new mode 100644 index e9a6c14141..c753f0fd9b --- a/source/libs/executor/src/groupcacheoperator.c +++ b/source/libs/executor/src/groupcacheoperator.c @@ -699,7 +699,7 @@ static FORCE_INLINE int32_t getBlkFromDownstreamOperator(struct SOperatorInfo* p } if (pDownstreamParam) { - pBlock = pOperator->pDownstream[downstreamIdx]->fpSet.getNextExtFn(pOperator->pDownstream[downstreamIdx], pDownstreamParam); + code = pOperator->pDownstream[downstreamIdx]->fpSet.getNextExtFn(pOperator->pDownstream[downstreamIdx], pDownstreamParam, &pBlock); } else { pBlock = pOperator->pDownstream[downstreamIdx]->fpSet.getNextFn(pOperator->pDownstream[downstreamIdx]); } @@ -1388,15 +1388,18 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) { return TSDB_CODE_SUCCESS; } -static SSDataBlock* groupCacheGetNext(struct SOperatorInfo* pOperator, SOperatorParam* pParam) { +static int32_t groupCacheGetNext(struct SOperatorInfo* pOperator, SOperatorParam* pParam, SSDataBlock** pRes) { + *pRes = NULL; + SSDataBlock* pBlock = NULL; - int64_t st = 0; + int64_t st = 0; + int32_t code = 0; if (pOperator->cost.openCost == 0) { st = taosGetTimestampUs(); } - int32_t code = getBlkFromGroupCache(pOperator, &pBlock, pParam); + code = getBlkFromGroupCache(pOperator, &pBlock, pParam); if (TSDB_CODE_SUCCESS != code) { pOperator->pTaskInfo->code = code; T_LONG_JMP(pOperator->pTaskInfo->env, pOperator->pTaskInfo->code); @@ -1406,7 +1409,8 @@ static SSDataBlock* groupCacheGetNext(struct SOperatorInfo* pOperator, SOperator pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } - return pBlock; + *pRes = pBlock; + return code; } static int32_t groupCacheTableCacheEnd(SOperatorInfo* pOperator, SOperatorParam* pParam) { @@ -1424,12 +1428,14 @@ static int32_t groupCacheTableCacheEnd(SOperatorInfo* pOperator, SOperatorParam* return TSDB_CODE_SUCCESS; } -SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, - SGroupCachePhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo) { - SGroupCacheOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupCacheOperatorInfo)); - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); - +int32_t createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, + SGroupCachePhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); int32_t code = TSDB_CODE_SUCCESS; + + SGroupCacheOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupCacheOperatorInfo)); + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pOperator == NULL || pInfo == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto _error; @@ -1490,7 +1496,8 @@ SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t qTrace("new group cache operator, maxCacheSize:%" PRId64 ", globalGrp:%d, batchFetch:%d", pInfo->maxCacheSize, pInfo->globalGrp, pInfo->batchFetch); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -1499,7 +1506,5 @@ _error: taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } - - diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index bd503d4638..173e67cc16 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -535,7 +535,10 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo) { +int32_t createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SGroupbyOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupbyOperatorInfo)); @@ -591,7 +594,8 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: pTaskInfo->code = code; @@ -599,7 +603,7 @@ _error: destroyGroupOperatorInfo(pInfo); } taosMemoryFreeClear(pOperator); - return NULL; + return code; } SSDataBlock* createBlockDataNotLoaded(const SOperatorInfo* pOperator, SSDataBlock* pDataBlock) { @@ -1104,15 +1108,16 @@ static void destroyPartitionOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, - SExecTaskInfo* pTaskInfo) { +int32_t createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SPartitionOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SPartitionOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - pTaskInfo->code = terrno; + pTaskInfo->code = code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -1135,7 +1140,7 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition if (pPartNode->pExprs != NULL) { int32_t num = 0; SExprInfo* pExprInfo1 = createExprInfo(pPartNode->pExprs, NULL, &num); - int32_t code = initExprSupp(&pInfo->scalarSup, pExprInfo1, num, &pTaskInfo->storageAPI.functionStore); + code = initExprSupp(&pInfo->scalarSup, pExprInfo1, num, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { terrno = code; pTaskInfo->code = terrno; @@ -1202,7 +1207,8 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -1210,7 +1216,7 @@ _error: } pTaskInfo->code = code; taosMemoryFreeClear(pOperator); - return NULL; + return code; } int32_t setGroupResultOutputBuf(SOperatorInfo* pOperator, SOptrBasicInfo* binfo, int32_t numOfCols, char* pData, @@ -1629,8 +1635,10 @@ void freePartItem(void* ptr) { taosArrayDestroy(pPart->rowIds); } -SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, - SExecTaskInfo* pTaskInfo) { +int32_t createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamPartitionOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamPartitionOperatorInfo)); @@ -1721,14 +1729,15 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: pTaskInfo->code = code; destroyStreamPartitionOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); - return NULL; + return code; } int32_t extractColumnInfo(SNodeList* pNodeList, SArray** pArrayRes) { diff --git a/source/libs/executor/src/hashjoinoperator.c b/source/libs/executor/src/hashjoinoperator.c old mode 100755 new mode 100644 index 4945faeb09..9f6318b58d --- a/source/libs/executor/src/hashjoinoperator.c +++ b/source/libs/executor/src/hashjoinoperator.c @@ -1177,12 +1177,13 @@ int32_t hJoinInitResBlocks(SHJoinOperatorInfo* pJoin, SHashJoinPhysiNode* pJoinN } -SOperatorInfo* createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, - SHashJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo) { - SHJoinOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SHJoinOperatorInfo)); - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); +int32_t createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, + SHashJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); - int32_t code = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; + SHJoinOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SHJoinOperatorInfo)); + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pOperator == NULL || pInfo == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto _return; @@ -1223,7 +1224,8 @@ SOperatorInfo* createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t n qDebug("create hash Join operator done"); - return pOperator; + *pOptrInfo = pOperator; + return code; _return: @@ -1233,7 +1235,7 @@ _return: taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index 395b04f45b..d425c87019 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -1862,8 +1862,10 @@ int32_t mJoinSetImplFp(SMJoinOperatorInfo* pJoin) { return TSDB_CODE_SUCCESS; } -SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, - SSortMergeJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo) { +int32_t createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, + SSortMergeJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + bool newDownstreams = false; int32_t code = TSDB_CODE_SUCCESS; SMJoinOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SMJoinOperatorInfo)); @@ -1872,7 +1874,7 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t goto _return; } - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pOperator == NULL) { code = terrno; goto _return; @@ -1903,8 +1905,9 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t } else { pOperator->numOfRealDownstream = 2; } - - return pOperator; + + *pOptrInfo = pOperator; + return code; _return: @@ -1918,6 +1921,6 @@ _return: taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } diff --git a/source/libs/executor/src/mergeoperator.c b/source/libs/executor/src/mergeoperator.c index 384b14ce41..31757ef70c 100644 --- a/source/libs/executor/src/mergeoperator.c +++ b/source/libs/executor/src/mergeoperator.c @@ -57,6 +57,14 @@ typedef struct SMultiwayMergeOperatorInfo { bool inputWithGroupId; } SMultiwayMergeOperatorInfo; +static SSDataBlock* doSortMerge1(SOperatorInfo* pOperator); +static int32_t doSortMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock); +static SSDataBlock* doMultiwayMerge(SOperatorInfo* pOperator); +static int32_t doNonSortMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock); +static SSDataBlock* doNonSortMerge1(SOperatorInfo* pOperator); +static SSDataBlock* doColsMerge1(SOperatorInfo* pOperator); +static int32_t doColsMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock); + SSDataBlock* sortMergeloadNextDataBlock(void* param) { SOperatorInfo* pOperator = (SOperatorInfo*)param; SSDataBlock* pBlock = pOperator->fpSet.getNextFn(pOperator); @@ -83,20 +91,30 @@ int32_t openSortMergeOperator(SOperatorInfo* pOperator) { for (int32_t i = 0; i < pOperator->numOfDownstream; ++i) { SOperatorInfo* pDownstream = pOperator->pDownstream[i]; if (pDownstream->operatorType == QUERY_NODE_PHYSICAL_PLAN_EXCHANGE) { - pDownstream->fpSet._openFn(pDownstream); + code = pDownstream->fpSet._openFn(pDownstream); + if (code) { + return code; + } } SSortSource* ps = taosMemoryCalloc(1, sizeof(SSortSource)); + if (ps == NULL) { + return terrno; + } + ps->param = pDownstream; ps->onlyRef = true; - tsortAddSource(pSortMergeInfo->pSortHandle, ps); + code = tsortAddSource(pSortMergeInfo->pSortHandle, ps); + if (code) { + return code; + } } return tsortOpen(pSortMergeInfo->pSortHandle); } -static void doGetSortedBlockData(SMultiwayMergeOperatorInfo* pInfo, SSortHandle* pHandle, int32_t capacity, +static int32_t doGetSortedBlockData(SMultiwayMergeOperatorInfo* pInfo, SSortHandle* pHandle, int32_t capacity, SSDataBlock* p, bool* newgroup) { SSortMergeInfo* pSortMergeInfo = &pInfo->sortMergeInfo; *newgroup = false; @@ -132,12 +150,20 @@ static void doGetSortedBlockData(SMultiwayMergeOperatorInfo* pInfo, SSortHandle* if (pInfo->groupMerge || pInfo->inputWithGroupId) { uint64_t tupleGroupId = tsortGetGroupId(pTupleHandle); if (pInfo->groupId == 0 || pInfo->groupId == tupleGroupId) { - appendOneRowToDataBlock(p, pTupleHandle); + code = appendOneRowToDataBlock(p, pTupleHandle); + if (code) { + return code; + } + p->info.id.groupId = tupleGroupId; pInfo->groupId = tupleGroupId; } else { if (p->info.rows == 0) { - appendOneRowToDataBlock(p, pTupleHandle); + code = appendOneRowToDataBlock(p, pTupleHandle); + if (code) { + return code; + } + p->info.id.groupId = pInfo->groupId = tupleGroupId; } else { pSortMergeInfo->prefetchedTuple = pTupleHandle; @@ -145,16 +171,27 @@ static void doGetSortedBlockData(SMultiwayMergeOperatorInfo* pInfo, SSortHandle* } } } else { - appendOneRowToDataBlock(p, pTupleHandle); + code = appendOneRowToDataBlock(p, pTupleHandle); + if (code) { + return code; + } } if (p->info.rows >= capacity) { break; } } + + return code; } -SSDataBlock* doSortMerge(SOperatorInfo* pOperator) { +SSDataBlock* doSortMerge1(SOperatorInfo* pOperator) { + SSDataBlock* pBlock = NULL; + pOperator->pTaskInfo->code = doSortMerge(pOperator, &pBlock); + return pBlock; +} + +int32_t doSortMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SMultiwayMergeOperatorInfo* pInfo = pOperator->info; SSortMergeInfo* pSortMergeInfo = &pInfo->sortMergeInfo; @@ -162,29 +199,36 @@ SSDataBlock* doSortMerge(SOperatorInfo* pOperator) { SSDataBlock* pDataBlock = pInfo->binfo.pRes; SArray* pColMatchInfo = pSortMergeInfo->matchInfo.pList; int32_t capacity = pOperator->resultInfo.capacity; + int32_t code = 0; + bool newgroup = false; qDebug("start to merge final sorted rows, %s", GET_TASKID(pTaskInfo)); - blockDataCleanup(pDataBlock); if (pSortMergeInfo->pIntermediateBlock == NULL) { pSortMergeInfo->pIntermediateBlock = NULL; - int32_t code = tsortGetSortedDataBlock(pHandle, &pSortMergeInfo->pIntermediateBlock); + code = tsortGetSortedDataBlock(pHandle, &pSortMergeInfo->pIntermediateBlock); if (pSortMergeInfo->pIntermediateBlock == NULL || code != 0) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return code; } - blockDataEnsureCapacity(pSortMergeInfo->pIntermediateBlock, capacity); + + code = blockDataEnsureCapacity(pSortMergeInfo->pIntermediateBlock, capacity); + if (code) { + return code; + } + } else { blockDataCleanup(pSortMergeInfo->pIntermediateBlock); } SSDataBlock* p = pSortMergeInfo->pIntermediateBlock; - bool newgroup = false; - while (1) { - doGetSortedBlockData(pInfo, pHandle, capacity, p, &newgroup); + code = doGetSortedBlockData(pInfo, pHandle, capacity, p, &newgroup); + if (code) { + return code; + } + if (p->info.rows == 0) { break; } @@ -204,10 +248,27 @@ SSDataBlock* doSortMerge(SOperatorInfo* pOperator) { int32_t numOfCols = taosArrayGetSize(pColMatchInfo); for (int32_t i = 0; i < numOfCols; ++i) { SColMatchItem* pmInfo = taosArrayGet(pColMatchInfo, i); + if (pmInfo == NULL) { + code = terrno; + return code; + } SColumnInfoData* pSrc = taosArrayGet(p->pDataBlock, pmInfo->srcSlotId); + if (pSrc == NULL) { + code = terrno; + return code; + } + SColumnInfoData* pDst = taosArrayGet(pDataBlock->pDataBlock, pmInfo->dstSlotId); - colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (pDst == NULL) { + code = terrno; + return code; + } + + code = colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (code) { + return code; + } } pDataBlock->info.rows = p->info.rows; @@ -223,12 +284,16 @@ SSDataBlock* doSortMerge(SOperatorInfo* pOperator) { qDebug("%s get sorted block, groupId:0x%" PRIx64 " rows:%" PRId64 , GET_TASKID(pTaskInfo), pDataBlock->info.id.groupId, pDataBlock->info.rows); - return (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + *pResBlock = (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + return code; } - int32_t getSortMergeExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { SSortExecInfo* pSortExecInfo = taosMemoryCalloc(1, sizeof(SSortExecInfo)); + if (pSortExecInfo == NULL) { + pOptr->pTaskInfo->code = terrno; + return terrno; + } SMultiwayMergeOperatorInfo* pInfo = (SMultiwayMergeOperatorInfo*)pOptr->info; SSortMergeInfo* pSortMergeInfo = &pInfo->sortMergeInfo; @@ -265,25 +330,35 @@ int32_t openNonSortMergeOperator(SOperatorInfo* pOperator) { pNonSortMergeInfo->sourceWorkIdx = 0; pNonSortMergeInfo->sourceNum = pOperator->numOfDownstream; pNonSortMergeInfo->lastSourceIdx = -1; - pNonSortMergeInfo->pSourceStatus = taosMemoryCalloc(pOperator->numOfDownstream, sizeof(*pNonSortMergeInfo->pSourceStatus)); + pNonSortMergeInfo->pSourceStatus = + taosMemoryCalloc(pOperator->numOfDownstream, sizeof(*pNonSortMergeInfo->pSourceStatus)); if (NULL == pNonSortMergeInfo->pSourceStatus) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; + return pTaskInfo->code; } - + for (int32_t i = 0; i < pOperator->numOfDownstream; ++i) { pNonSortMergeInfo->pSourceStatus[i] = i; } - return TSDB_CODE_SUCCESS; + return 0; } -SSDataBlock* doNonSortMerge(SOperatorInfo* pOperator) { +SSDataBlock* doNonSortMerge1(SOperatorInfo* pOperator) { + SSDataBlock* pBlock = NULL; + pOperator->pTaskInfo->code = doNonSortMerge(pOperator, &pBlock); + return pBlock; +} + +int32_t doNonSortMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SMultiwayMergeOperatorInfo* pInfo = pOperator->info; SNonSortMergeInfo* pNonSortMerge = &pInfo->nsortMergeInfo; SSDataBlock* pBlock = NULL; SSDataBlock* pRes = pInfo->binfo.pRes; + int32_t code = 0; qDebug("start to merge no sorted rows, %s", GET_TASKID(pTaskInfo)); @@ -296,16 +371,18 @@ SSDataBlock* doNonSortMerge(SOperatorInfo* pOperator) { idx = NON_SORT_NEXT_SRC(pNonSortMerge, pNonSortMerge->lastSourceIdx); continue; } + pNonSortMerge->lastSourceIdx = idx - 1; break; } - if (!pBlock) { - return NULL; + if (!pBlock) { // null data + return code; } - copyDataBlock(pRes, pBlock); - return pRes; + code = copyDataBlock(pRes, pBlock); + *pResBlock = pRes; + return code; } void destroyNonSortMergeOperatorInfo(void* param) { @@ -323,30 +400,54 @@ int32_t openColsMergeOperator(SOperatorInfo* pOperator) { } int32_t copyColumnsValue(SNodeList* pNodeList, uint64_t targetBlkId, SSDataBlock* pDst, SSDataBlock* pSrc) { - bool isNull = (NULL == pSrc || pSrc->info.rows <= 0); + bool isNull = (NULL == pSrc || pSrc->info.rows <= 0); size_t numOfCols = LIST_LENGTH(pNodeList); + int32_t code = 0; + for (int32_t i = 0; i < numOfCols; ++i) { STargetNode* pNode = (STargetNode*)nodesListGetNode(pNodeList, i); if (nodeType(pNode->pExpr) == QUERY_NODE_COLUMN && ((SColumnNode*)pNode->pExpr)->dataBlockId == targetBlkId) { SColumnInfoData* pDstCol = taosArrayGet(pDst->pDataBlock, pNode->slotId); + if (pDstCol == NULL) { + return terrno; + } + if (isNull) { - colDataSetVal(pDstCol, 0, NULL, true); + code = colDataSetVal(pDstCol, 0, NULL, true); } else { SColumnInfoData* pSrcCol = taosArrayGet(pSrc->pDataBlock, ((SColumnNode*)pNode->pExpr)->slotId); - colDataAssign(pDstCol, pSrcCol, 1, &pDst->info); + if (pSrcCol == NULL) { + code = terrno; + return code; + } + + code = colDataAssign(pDstCol, pSrcCol, 1, &pDst->info); + } + + if (code) { + break; } } } - return TSDB_CODE_SUCCESS; + return code; } -SSDataBlock* doColsMerge(SOperatorInfo* pOperator) { +SSDataBlock* doColsMerge1(SOperatorInfo* pOperator) { + SSDataBlock* pBlock = NULL; + pOperator->pTaskInfo->code = doColsMerge(pOperator, &pBlock); + return pBlock; +} + +int32_t doColsMerge(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SMultiwayMergeOperatorInfo* pInfo = pOperator->info; SSDataBlock* pBlock = NULL; SColsMergeInfo* pColsMerge = &pInfo->colsMergeInfo; int32_t nullBlkNum = 0; + int32_t code = 0; qDebug("start to merge columns, %s", GET_TASKID(pTaskInfo)); @@ -359,18 +460,21 @@ SSDataBlock* doColsMerge(SOperatorInfo* pOperator) { nullBlkNum++; } - copyColumnsValue(pColsMerge->pTargets, pColsMerge->srcBlkIds[i], pInfo->binfo.pRes, pBlock); + code = copyColumnsValue(pColsMerge->pTargets, pColsMerge->srcBlkIds[i], pInfo->binfo.pRes, pBlock); + if (code) { + return code; + } } setOperatorCompleted(pOperator); - if (2 == nullBlkNum) { - return NULL; + return code; } pInfo->binfo.pRes->info.rows = 1; + *pResBlock = pInfo->binfo.pRes; - return pInfo->binfo.pRes; + return code; } void destroyColsMergeOperatorInfo(void* param) { @@ -383,9 +487,9 @@ int32_t getColsMergeExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, u SOperatorFpSet gMultiwayMergeFps[MERGE_TYPE_MAX_VALUE] = { {0}, - {._openFn = openSortMergeOperator, .getNextFn = doSortMerge, .closeFn = destroySortMergeOperatorInfo, .getExplainFn = getSortMergeExplainExecInfo}, - {._openFn = openNonSortMergeOperator, .getNextFn = doNonSortMerge, .closeFn = destroyNonSortMergeOperatorInfo, .getExplainFn = getNonSortMergeExplainExecInfo}, - {._openFn = openColsMergeOperator, .getNextFn = doColsMerge, .closeFn = destroyColsMergeOperatorInfo, .getExplainFn = getColsMergeExplainExecInfo}, + {._openFn = openSortMergeOperator, .getNextFn = doSortMerge1, .closeFn = destroySortMergeOperatorInfo, .getExplainFn = getSortMergeExplainExecInfo}, + {._openFn = openNonSortMergeOperator, .getNextFn = doNonSortMerge1, .closeFn = destroyNonSortMergeOperatorInfo, .getExplainFn = getNonSortMergeExplainExecInfo}, + {._openFn = openColsMergeOperator, .getNextFn = doColsMerge1, .closeFn = destroyColsMergeOperatorInfo, .getExplainFn = getColsMergeExplainExecInfo}, }; @@ -464,15 +568,16 @@ int32_t getMultiwayMergeExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplai return code; } -SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size_t numStreams, - SMergePhysiNode* pMergePhyNode, SExecTaskInfo* pTaskInfo) { - SPhysiNode* pPhyNode = (SPhysiNode*)pMergePhyNode; +int32_t createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size_t numStreams, SMergePhysiNode* pMergePhyNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + SPhysiNode* pPhyNode = (SPhysiNode*)pMergePhyNode; + int32_t lino = 0; + int32_t code = TSDB_CODE_SUCCESS; SMultiwayMergeOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SMultiwayMergeOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); SDataBlockDescNode* pDescNode = pPhyNode->pOutputDataBlockDesc; - - int32_t code = TSDB_CODE_SUCCESS; if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; goto _error; @@ -490,19 +595,21 @@ SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size SSortMergeInfo* pSortMergeInfo = &pInfo->sortMergeInfo; initLimitInfo(pMergePhyNode->node.pLimit, pMergePhyNode->node.pSlimit, &pInfo->limitInfo); pInfo->binfo.pRes = createDataBlockFromDescNode(pDescNode); - + SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, 0); SSDataBlock* pInputBlock = createDataBlockFromDescNode(pChildNode->pOutputDataBlockDesc); - - initResultSizeInfo(&pOperator->resultInfo, 1024); - blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - size_t numOfCols = taosArrayGetSize(pInfo->binfo.pRes->pDataBlock); + initResultSizeInfo(&pOperator->resultInfo, 1024); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + TSDB_CHECK_CODE(code, lino, _error); + + size_t numOfCols = taosArrayGetSize(pInfo->binfo.pRes->pDataBlock); int32_t rowSize = pInfo->binfo.pRes->info.rowSize; int32_t numOfOutputCols = 0; pSortMergeInfo->pSortInfo = createSortInfo(pMergePhyNode->pMergeKeys); pSortMergeInfo->bufPageSize = getProperSortPageSize(rowSize, numOfCols); - pSortMergeInfo->sortBufSize = pSortMergeInfo->bufPageSize * (numStreams + 1); // one additional is reserved for merged result. + pSortMergeInfo->sortBufSize = + pSortMergeInfo->bufPageSize * (numStreams + 1); // one additional is reserved for merged result. pSortMergeInfo->pInputBlock = pInputBlock; code = extractColMatchInfo(pMergePhyNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID, &pSortMergeInfo->matchInfo); @@ -515,14 +622,17 @@ SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size SNonSortMergeInfo* pNonSortMerge = &pInfo->nsortMergeInfo; pInfo->binfo.pRes = createDataBlockFromDescNode(pDescNode); initResultSizeInfo(&pOperator->resultInfo, 1024); - blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + TSDB_CHECK_CODE(code, lino, _error); + break; } case MERGE_TYPE_COLUMNS: { SColsMergeInfo* pColsMerge = &pInfo->colsMergeInfo; pInfo->binfo.pRes = createDataBlockFromDescNode(pDescNode); initResultSizeInfo(&pOperator->resultInfo, 1); - blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + TSDB_CHECK_CODE(code, lino, _error); pColsMerge->pTargets = pMergePhyNode->pTargets; pColsMerge->srcBlkIds[0] = getOperatorResultBlockId(downStreams[0], 0); @@ -535,15 +645,19 @@ SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size goto _error; } - setOperatorInfo(pOperator, "MultiwayMergeOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(openMultiwayMergeOperator, doMultiwayMerge, NULL, - destroyMultiwayMergeOperatorInfo, optrDefaultBufFn, getMultiwayMergeExplainExecInfo, optrDefaultGetNextExtFn, NULL); + setOperatorInfo(pOperator, "MultiwayMergeOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE, false, OP_NOT_OPENED, pInfo, + pTaskInfo); + pOperator->fpSet = + createOperatorFpSet(openMultiwayMergeOperator, doMultiwayMerge, NULL, destroyMultiwayMergeOperatorInfo, + optrDefaultBufFn, getMultiwayMergeExplainExecInfo, optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, downStreams, numStreams); if (code != TSDB_CODE_SUCCESS) { goto _error; } - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -552,5 +666,5 @@ _error: pTaskInfo->code = code; taosMemoryFree(pOperator); - return NULL; + return code; } diff --git a/source/libs/executor/src/operator.c b/source/libs/executor/src/operator.c index 494794f8c2..9b85f53494 100644 --- a/source/libs/executor/src/operator.c +++ b/source/libs/executor/src/operator.c @@ -131,7 +131,7 @@ void releaseQueryBuf(size_t numOfTables) { int64_t t = getQuerySupportBufSize(numOfTables); // restore value is not enough buffer available - atomic_add_fetch_64(&tsQueryBufferSizeBytes, t); + (void) atomic_add_fetch_64(&tsQueryBufferSizeBytes, t); } typedef enum { @@ -177,21 +177,20 @@ ERetType extractOperatorInfo(SOperatorInfo* pOperator, STraverParam* pParam, con } // QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN -SOperatorInfo* extractOperatorInTree(SOperatorInfo* pOperator, int32_t type, const char* id) { +int32_t extractOperatorInTree(SOperatorInfo* pOperator, int32_t type, const char* id, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + if (pOperator == NULL) { qError("invalid operator, failed to find tableScanOperator %s", id); - terrno = TSDB_CODE_PAR_INTERNAL_ERROR; - return NULL; + return TSDB_CODE_PAR_INTERNAL_ERROR; } STraverParam p = {.pParam = &type, .pRet = NULL}; traverseOperatorTree(pOperator, extractOperatorInfo, &p, id); - if (p.code != 0) { - terrno = p.code; - return NULL; - } else { - return p.pRet; + if (p.code == 0) { + *pOptrInfo = p.pRet; } + return p.code; } typedef struct SExtScanInfo { @@ -274,10 +273,15 @@ int32_t stopTableScanOperator(SOperatorInfo* pOperator, const char* pIdStr, SSto return p.code; } -SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, - SNode* pTagIndexCond, const char* pUser, const char* dbname) { +int32_t createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, + SNode* pTagIndexCond, const char* pUser, const char* dbname, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; int32_t type = nodeType(pPhyNode); const char* idstr = GET_TASKID(pTaskInfo); + + if (pPhyNode->pChildren == NULL || LIST_LENGTH(pPhyNode->pChildren) == 0) { SOperatorInfo* pOperator = NULL; if (QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN == type) { @@ -290,11 +294,11 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR STableListInfo* pTableListInfo = tableListCreate(); - int32_t code = initQueriedTableSchemaInfo(pHandle, &pTableScanNode->scan, dbname, pTaskInfo); + code = initQueriedTableSchemaInfo(pHandle, &pTableScanNode->scan, dbname, pTaskInfo); if (code) { pTaskInfo->code = code; tableListDestroy(pTableListInfo); - return NULL; + return code; } if (pTableScanNode->scan.node.dynamicOp) { @@ -308,15 +312,15 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR pTaskInfo->code = code; tableListDestroy(pTableListInfo); qError("failed to createScanTableListInfo, code:%s, %s", tstrerror(code), idstr); - return NULL; + return code; } } - pOperator = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo); - if (NULL == pOperator) { - pTaskInfo->code = terrno; + code = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo, &pOperator); + if (NULL == pOperator || code != 0) { + pTaskInfo->code = code; tableListDestroy(pTableListInfo); - return NULL; + return code; } STableScanInfo* pScanInfo = pOperator->info; @@ -325,232 +329,245 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode; STableListInfo* pTableListInfo = tableListCreate(); - int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, true, pHandle, + code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, true, pHandle, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); if (code) { pTaskInfo->code = code; tableListDestroy(pTableListInfo); qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); - return NULL; + return code; } code = initQueriedTableSchemaInfo(pHandle, &pTableScanNode->scan, dbname, pTaskInfo); if (code) { - pTaskInfo->code = terrno; + pTaskInfo->code = code; tableListDestroy(pTableListInfo); - return NULL; + return code; } - pOperator = createTableMergeScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo); - if (NULL == pOperator) { - pTaskInfo->code = terrno; + code = createTableMergeScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo, &pOperator); + if (NULL == pOperator || code != 0) { + pTaskInfo->code = code; tableListDestroy(pTableListInfo); - return NULL; + return code; } STableScanInfo* pScanInfo = pOperator->info; pTaskInfo->cost.pRecoder = &pScanInfo->base.readRecorder; } else if (QUERY_NODE_PHYSICAL_PLAN_EXCHANGE == type) { - pOperator = createExchangeOperatorInfo(pHandle ? pHandle->pMsgCb->clientRpc : NULL, (SExchangePhysiNode*)pPhyNode, - pTaskInfo); + code = createExchangeOperatorInfo(pHandle ? pHandle->pMsgCb->clientRpc : NULL, (SExchangePhysiNode*)pPhyNode, + pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN == type) { STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode; STableListInfo* pTableListInfo = tableListCreate(); if (pHandle->vnode) { - int32_t code = - createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, - pHandle, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); + code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, + pHandle, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); if (code) { pTaskInfo->code = code; tableListDestroy(pTableListInfo); qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); - return NULL; + return code; } } //pTaskInfo->schemaInfo.qsw = extractQueriedColumnSchema(&pTableScanNode->scan); - pOperator = createStreamScanOperatorInfo(pHandle, pTableScanNode, pTagCond, pTableListInfo, pTaskInfo); + code = createStreamScanOperatorInfo(pHandle, pTableScanNode, pTagCond, pTableListInfo, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN == type) { SSystemTableScanPhysiNode* pSysScanPhyNode = (SSystemTableScanPhysiNode*)pPhyNode; - pOperator = createSysTableScanOperatorInfo(pHandle, pSysScanPhyNode, pUser, pTaskInfo); + code = createSysTableScanOperatorInfo(pHandle, pSysScanPhyNode, pUser, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN == type) { STableCountScanPhysiNode* pTblCountScanNode = (STableCountScanPhysiNode*)pPhyNode; - pOperator = createTableCountScanOperatorInfo(pHandle, pTblCountScanNode, pTaskInfo); + code = createTableCountScanOperatorInfo(pHandle, pTblCountScanNode, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN == type) { STagScanPhysiNode* pTagScanPhyNode = (STagScanPhysiNode*)pPhyNode; STableListInfo* pTableListInfo = tableListCreate(); if (!pTagScanPhyNode->onlyMetaCtbIdx) { - int32_t code = createScanTableListInfo((SScanPhysiNode*)pTagScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond, + code = createScanTableListInfo((SScanPhysiNode*)pTagScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; qError("failed to getTableList, code: %s", tstrerror(code)); - return NULL; + return code; } } - pOperator = createTagScanOperatorInfo(pHandle, pTagScanPhyNode, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); + code = createTagScanOperatorInfo(pHandle, pTagScanPhyNode, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN == type) { SBlockDistScanPhysiNode* pBlockNode = (SBlockDistScanPhysiNode*)pPhyNode; STableListInfo* pTableListInfo = tableListCreate(); if (pBlockNode->tableType == TSDB_SUPER_TABLE) { SArray* pList = taosArrayInit(4, sizeof(uint64_t)); - int32_t code = pTaskInfo->storageAPI.metaFn.getChildTableList(pHandle->vnode, pBlockNode->uid, pList); + code = pTaskInfo->storageAPI.metaFn.getChildTableList(pHandle->vnode, pBlockNode->uid, pList); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; taosArrayDestroy(pList); - return NULL; + return code; } size_t num = taosArrayGetSize(pList); for (int32_t i = 0; i < num; ++i) { uint64_t* id = taosArrayGet(pList, i); - tableListAddTableInfo(pTableListInfo, *id, 0); + if (id == NULL) { + pTaskInfo->code = terrno; + return terrno; + } + + code = tableListAddTableInfo(pTableListInfo, *id, 0); + if (code) { + pTaskInfo->code = code; + return code; + } } taosArrayDestroy(pList); } else { // Create group with only one table - tableListAddTableInfo(pTableListInfo, pBlockNode->uid, 0); + code = tableListAddTableInfo(pTableListInfo, pBlockNode->uid, 0); + if (code) { + pTaskInfo->code = code; + return code; + } } - pOperator = createDataBlockInfoScanOperator(pHandle, pBlockNode, pTableListInfo, pTaskInfo); + code = createDataBlockInfoScanOperator(pHandle, pBlockNode, pTableListInfo, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN == type) { SLastRowScanPhysiNode* pScanNode = (SLastRowScanPhysiNode*)pPhyNode; STableListInfo* pTableListInfo = tableListCreate(); - int32_t code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo, + code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo, pTagCond, pTagIndexCond, pTaskInfo); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - return NULL; + return code; } code = initQueriedTableSchemaInfo(pHandle, &pScanNode->scan, dbname, pTaskInfo); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; - return NULL; + return code; } - pOperator = createCacherowsScanOperator(pScanNode, pHandle, pTableListInfo, pTaskInfo); + code = createCacherowsScanOperator(pScanNode, pHandle, pTableListInfo, pTaskInfo, &pOperator); } else if (QUERY_NODE_PHYSICAL_PLAN_PROJECT == type) { - pOperator = createProjectOperatorInfo(NULL, (SProjectPhysiNode*)pPhyNode, pTaskInfo); + code = createProjectOperatorInfo(NULL, (SProjectPhysiNode*)pPhyNode, pTaskInfo, &pOperator); } else { - terrno = TSDB_CODE_INVALID_PARA; - pTaskInfo->code = terrno; - return NULL; + code = TSDB_CODE_INVALID_PARA; + pTaskInfo->code = code; + return code; } if (pOperator != NULL) { // todo moved away pOperator->resultDataBlockId = pPhyNode->pOutputDataBlockDesc->dataBlockId; } - return pOperator; + *pOptrInfo = pOperator; + return code; } size_t size = LIST_LENGTH(pPhyNode->pChildren); SOperatorInfo** ops = taosMemoryCalloc(size, POINTER_BYTES); if (ops == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - pTaskInfo->code = terrno; - return NULL; + code = terrno; + pTaskInfo->code = code; + return code; } for (int32_t i = 0; i < size; ++i) { SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, i); - ops[i] = createOperator(pChildNode, pTaskInfo, pHandle, pTagCond, pTagIndexCond, pUser, dbname); - if (ops[i] == NULL) { + code = createOperator(pChildNode, pTaskInfo, pHandle, pTagCond, pTagIndexCond, pUser, dbname, &ops[i]); + if (ops[i] == NULL || code != 0) { taosMemoryFree(ops); - return NULL; + return code; } } SOperatorInfo* pOptr = NULL; if (QUERY_NODE_PHYSICAL_PLAN_PROJECT == type) { - pOptr = createProjectOperatorInfo(ops[0], (SProjectPhysiNode*)pPhyNode, pTaskInfo); + code = createProjectOperatorInfo(ops[0], (SProjectPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_HASH_AGG == type) { SAggPhysiNode* pAggNode = (SAggPhysiNode*)pPhyNode; if (pAggNode->pGroupKeys != NULL) { - pOptr = createGroupOperatorInfo(ops[0], pAggNode, pTaskInfo); + code = createGroupOperatorInfo(ops[0], pAggNode, pTaskInfo, &pOptr); } else { - pOptr = createAggregateOperatorInfo(ops[0], pAggNode, pTaskInfo); + code = createAggregateOperatorInfo(ops[0], pAggNode, pTaskInfo, &pOptr); } } else if (QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL == type) { SIntervalPhysiNode* pIntervalPhyNode = (SIntervalPhysiNode*)pPhyNode; - pOptr = createIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo); + code = createIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL == type) { - pOptr = createStreamIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle); + code = createStreamIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL == type) { SMergeAlignedIntervalPhysiNode* pIntervalPhyNode = (SMergeAlignedIntervalPhysiNode*)pPhyNode; - pOptr = createMergeAlignedIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo); + code = createMergeAlignedIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL == type) { SMergeIntervalPhysiNode* pIntervalPhyNode = (SMergeIntervalPhysiNode*)pPhyNode; - pOptr = createMergeIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo); + code = createMergeIntervalOperatorInfo(ops[0], pIntervalPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL == type) { int32_t children = 0; - pOptr = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle); + code = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL == type) { int32_t children = pHandle->numOfVgroups; - pOptr = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle); + code = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL == type) { int32_t children = pHandle->numOfVgroups; - pOptr = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle); + code = createStreamFinalIntervalOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_SORT == type) { - pOptr = createSortOperatorInfo(ops[0], (SSortPhysiNode*)pPhyNode, pTaskInfo); + code = createSortOperatorInfo(ops[0], (SSortPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT == type) { - pOptr = createGroupSortOperatorInfo(ops[0], (SGroupSortPhysiNode*)pPhyNode, pTaskInfo); + code = createGroupSortOperatorInfo(ops[0], (SGroupSortPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE == type) { SMergePhysiNode* pMergePhyNode = (SMergePhysiNode*)pPhyNode; - pOptr = createMultiwayMergeOperatorInfo(ops, size, pMergePhyNode, pTaskInfo); + code = createMultiwayMergeOperatorInfo(ops, size, pMergePhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION == type) { SSessionWinodwPhysiNode* pSessionNode = (SSessionWinodwPhysiNode*)pPhyNode; - pOptr = createSessionAggOperatorInfo(ops[0], pSessionNode, pTaskInfo); + code = createSessionAggOperatorInfo(ops[0], pSessionNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION == type) { - pOptr = createStreamSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle); + code = createStreamSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION == type) { int32_t children = 0; - pOptr = createStreamFinalSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle); + code = createStreamFinalSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION == type) { int32_t children = pHandle->numOfVgroups; - pOptr = createStreamFinalSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle); + code = createStreamFinalSessionAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, children, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_PARTITION == type) { - pOptr = createPartitionOperatorInfo(ops[0], (SPartitionPhysiNode*)pPhyNode, pTaskInfo); + code = createPartitionOperatorInfo(ops[0], (SPartitionPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION == type) { - pOptr = createStreamPartitionOperatorInfo(ops[0], (SStreamPartitionPhysiNode*)pPhyNode, pTaskInfo); + code = createStreamPartitionOperatorInfo(ops[0], (SStreamPartitionPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE == type) { SStateWinodwPhysiNode* pStateNode = (SStateWinodwPhysiNode*)pPhyNode; - pOptr = createStatewindowOperatorInfo(ops[0], pStateNode, pTaskInfo); + code = createStatewindowOperatorInfo(ops[0], pStateNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE == type) { - pOptr = createStreamStateAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle); + code = createStreamStateAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT == type) { - pOptr = createStreamEventAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle); + code = createStreamEventAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN == type) { - pOptr = createMergeJoinOperatorInfo(ops, size, (SSortMergeJoinPhysiNode*)pPhyNode, pTaskInfo); + code = createMergeJoinOperatorInfo(ops, size, (SSortMergeJoinPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN == type) { - pOptr = createHashJoinOperatorInfo(ops, size, (SHashJoinPhysiNode*)pPhyNode, pTaskInfo); + code = createHashJoinOperatorInfo(ops, size, (SHashJoinPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_FILL == type) { - pOptr = createFillOperatorInfo(ops[0], (SFillPhysiNode*)pPhyNode, pTaskInfo); + code = createFillOperatorInfo(ops[0], (SFillPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL == type) { - pOptr = createStreamFillOperatorInfo(ops[0], (SStreamFillPhysiNode*)pPhyNode, pTaskInfo); + code = createStreamFillOperatorInfo(ops[0], (SStreamFillPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC == type) { - pOptr = createIndefinitOutputOperatorInfo(ops[0], pPhyNode, pTaskInfo); + code = createIndefinitOutputOperatorInfo(ops[0], pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC == type) { - pOptr = createTimeSliceOperatorInfo(ops[0], pPhyNode, pTaskInfo); + code = createTimeSliceOperatorInfo(ops[0], pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT == type) { - pOptr = createEventwindowOperatorInfo(ops[0], pPhyNode, pTaskInfo); + code = createEventwindowOperatorInfo(ops[0], pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE == type) { - pOptr = createGroupCacheOperatorInfo(ops, size, (SGroupCachePhysiNode*)pPhyNode, pTaskInfo); + code = createGroupCacheOperatorInfo(ops, size, (SGroupCachePhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL == type) { - pOptr = createDynQueryCtrlOperatorInfo(ops, size, (SDynQueryCtrlPhysiNode*)pPhyNode, pTaskInfo); + code = createDynQueryCtrlOperatorInfo(ops, size, (SDynQueryCtrlPhysiNode*)pPhyNode, pTaskInfo, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT == type) { - pOptr = createStreamCountAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle); + code = createStreamCountAggOperatorInfo(ops[0], pPhyNode, pTaskInfo, pHandle, &pOptr); } else if (QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT == type) { - pOptr = createCountwindowOperatorInfo(ops[0], pPhyNode, pTaskInfo); + code = createCountwindowOperatorInfo(ops[0], pPhyNode, pTaskInfo, &pOptr); } else { - terrno = TSDB_CODE_INVALID_PARA; - pTaskInfo->code = terrno; + code = TSDB_CODE_INVALID_PARA; + pTaskInfo->code = code; taosMemoryFree(ops); - return NULL; + return code; } taosMemoryFree(ops); @@ -558,7 +575,8 @@ SOperatorInfo* createOperator(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SR pOptr->resultDataBlockId = pPhyNode->pOutputDataBlockDesc->dataBlockId; } - return pOptr; + *pOptrInfo = pOptr; + return code; } @@ -590,6 +608,9 @@ void destroyOperator(SOperatorInfo* pOperator) { int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SArray* pExecInfoList) { SExplainExecInfo execInfo = {0}; SExplainExecInfo* pExplainInfo = taosArrayPush(pExecInfoList, &execInfo); + if (pExplainInfo == NULL) { + return terrno; + } pExplainInfo->numOfRows = operatorInfo->resultInfo.totalRows; pExplainInfo->startupCost = operatorInfo->cost.openCost; @@ -632,31 +653,49 @@ int32_t mergeOperatorParams(SOperatorParam* pDst, SOperatorParam* pSrc) { if (pSExc->basic.vgId != pDExc->basic.vgId) { SExchangeOperatorBatchParam* pBatch = taosMemoryMalloc(sizeof(SExchangeOperatorBatchParam)); if (NULL == pBatch) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } + pBatch->multiParams = true; pBatch->pBatchs = tSimpleHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT)); if (NULL == pBatch->pBatchs) { taosMemoryFree(pBatch); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } + tSimpleHashSetFreeFp(pBatch->pBatchs, freeExchangeGetBasicOperatorParam); - tSimpleHashPut(pBatch->pBatchs, &pDExc->basic.vgId, sizeof(pDExc->basic.vgId), &pDExc->basic, sizeof(pDExc->basic)); - tSimpleHashPut(pBatch->pBatchs, &pSExc->basic.vgId, sizeof(pSExc->basic.vgId), &pSExc->basic, sizeof(pSExc->basic)); + int32_t code = tSimpleHashPut(pBatch->pBatchs, &pDExc->basic.vgId, sizeof(pDExc->basic.vgId), &pDExc->basic, sizeof(pDExc->basic)); + if (code) { + return code; + } + + code = tSimpleHashPut(pBatch->pBatchs, &pSExc->basic.vgId, sizeof(pSExc->basic.vgId), &pSExc->basic, sizeof(pSExc->basic)); + if (code) { + return code; + } taosMemoryFree(pDst->value); pDst->value = pBatch; } else { - taosArrayAddAll(pDExc->basic.uidList, pSExc->basic.uidList); + void* p = taosArrayAddAll(pDExc->basic.uidList, pSExc->basic.uidList); + if (p == NULL) { + return terrno; + } } } else { SExchangeOperatorBatchParam* pBatch = pDst->value; SExchangeOperatorBasicParam* pBasic = tSimpleHashGet(pBatch->pBatchs, &pSExc->basic.vgId, sizeof(pSExc->basic.vgId)); if (pBasic) { - taosArrayAddAll(pBasic->uidList, pSExc->basic.uidList); + void* p = taosArrayAddAll(pBasic->uidList, pSExc->basic.uidList); + if (p == NULL) { + return terrno; + } } else { - tSimpleHashPut(pBatch->pBatchs, &pSExc->basic.vgId, sizeof(pSExc->basic.vgId), &pSExc->basic, sizeof(pSExc->basic)); + int32_t code = tSimpleHashPut(pBatch->pBatchs, &pSExc->basic.vgId, sizeof(pSExc->basic.vgId), &pSExc->basic, sizeof(pSExc->basic)); + if (code) { + return code; + } } } break; @@ -717,6 +756,10 @@ int32_t setOperatorParams(struct SOperatorInfo* pOperator, SOperatorParam* pInpu for (int32_t i = 0; i < childrenNum; ++i) { SOperatorParam* pChild = *(SOperatorParam**)taosArrayGet((*ppParam)->pChildren, i); + if (pChild == NULL) { + return terrno; + } + if ((*pppDownstramParam)[pChild->downstreamIdx]) { int32_t code = mergeOperatorParams((*pppDownstramParam)[pChild->downstreamIdx], pChild); if (code) { @@ -735,21 +778,28 @@ int32_t setOperatorParams(struct SOperatorInfo* pOperator, SOperatorParam* pInpu SSDataBlock* getNextBlockFromDownstream(struct SOperatorInfo* pOperator, int32_t idx) { - return getNextBlockFromDownstreamImpl(pOperator, idx, true); + SSDataBlock* p = NULL; + int32_t code = getNextBlockFromDownstreamImpl(pOperator, idx, true, &p); + return (code == 0)? p:NULL; } SSDataBlock* getNextBlockFromDownstreamRemain(struct SOperatorInfo* pOperator, int32_t idx) { - return getNextBlockFromDownstreamImpl(pOperator, idx, false); + SSDataBlock* p = NULL; + int32_t code = getNextBlockFromDownstreamImpl(pOperator, idx, false, &p); + return (code == 0)? p:NULL; } +int32_t optrDefaultGetNextExtFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam, SSDataBlock** pRes) { + QRY_OPTR_CHECK(pRes); -SSDataBlock* optrDefaultGetNextExtFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam) { int32_t code = setOperatorParams(pOperator, pParam, OP_GET_PARAM); if (TSDB_CODE_SUCCESS != code) { pOperator->pTaskInfo->code = code; T_LONG_JMP(pOperator->pTaskInfo->env, pOperator->pTaskInfo->code); } - return pOperator->fpSet.getNextFn(pOperator); + + *pRes = pOperator->fpSet.getNextFn(pOperator); + return code; } int32_t optrDefaultNotifyFn(struct SOperatorInfo* pOperator, SOperatorParam* pParam) { diff --git a/source/libs/executor/src/projectoperator.c b/source/libs/executor/src/projectoperator.c index 93901b6b33..cbc3d77faf 100644 --- a/source/libs/executor/src/projectoperator.c +++ b/source/libs/executor/src/projectoperator.c @@ -41,9 +41,11 @@ typedef struct SIndefOperatorInfo { } SIndefOperatorInfo; static int32_t doGenerateSourceData(SOperatorInfo* pOperator); -static SSDataBlock* doProjectOperation(SOperatorInfo* pOperator); -static SSDataBlock* doApplyIndefinitFunction(SOperatorInfo* pOperator); -static SArray* setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols); +static SSDataBlock* doProjectOperation1(SOperatorInfo* pOperator); +static int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock); +static SSDataBlock* doApplyIndefinitFunction1(SOperatorInfo* pOperator); +static int32_t doApplyIndefinitFunction(SOperatorInfo* pOperator, SSDataBlock** pResBlock); +static int32_t setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols, SArray** pResList); static int32_t setFunctionResultOutput(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo, SAggSupporter* pSup, int32_t stage, int32_t numOfExprs); @@ -89,9 +91,11 @@ void streamOperatorReloadState(SOperatorInfo* pOperator) { } } -SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhysiNode* pProjPhyNode, - SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; +int32_t createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhysiNode* pProjPhyNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = TSDB_CODE_SUCCESS; SProjectOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SProjectOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -102,6 +106,7 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys pOperator->exprSupp.hasWindowOrGroup = false; pOperator->pTaskInfo = pTaskInfo; + int32_t lino = 0; int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pProjPhyNode->pProjections, NULL, &numOfCols); @@ -114,7 +119,7 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys pInfo->binfo.outputTsOrder = pProjPhyNode->node.outputTsOrder; pInfo->inputIgnoreGroup = pProjPhyNode->inputIgnoreGroup; pInfo->outputIgnoreGroup = pProjPhyNode->ignoreGroupId; - + if (pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM || pTaskInfo->execModel == OPTR_EXEC_MODEL_QUEUE) { pInfo->mergeDataBlocks = false; } else { @@ -137,28 +142,23 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys initResultSizeInfo(&pOperator->resultInfo, numOfRows); code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str, pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); initBasicInfo(&pInfo->binfo, pResBlock); code = setFunctionResultOutput(pOperator, &pInfo->binfo, &pInfo->aggSup, MAIN_SCAN, numOfCols); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pProjPhyNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); - pInfo->pPseudoColInfo = setRowTsColumnOutputInfo(pOperator->exprSupp.pCtx, numOfCols); + code = setRowTsColumnOutputInfo(pOperator->exprSupp.pCtx, numOfCols, &pInfo->pPseudoColInfo); + TSDB_CHECK_CODE(code, lino, _error); setOperatorInfo(pOperator, "ProjectOperator", QUERY_NODE_PHYSICAL_PLAN_PROJECT, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doProjectOperation, NULL, destroyProjectOperatorInfo, + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doProjectOperation1, NULL, destroyProjectOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - setOperatorStreamStateFn(pOperator, streamOperatorReleaseState, streamOperatorReloadState); + setOperatorStreamStateFn(pOperator, streamOperatorReleaseState, streamOperatorReloadState); if (NULL != downstream) { code = appendDownstream(pOperator, &downstream, 1); @@ -167,13 +167,14 @@ SOperatorInfo* createProjectOperatorInfo(SOperatorInfo* downstream, SProjectPhys } } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyProjectOperatorInfo(pInfo); taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } static int32_t discardGroupDataBlock(SSDataBlock* pBlock, SLimitInfo* pLimitInfo) { @@ -248,27 +249,27 @@ static int32_t doIngroupLimitOffset(SLimitInfo* pLimitInfo, uint64_t groupId, SS return PROJECT_RETRIEVE_DONE; } -SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { +int32_t doProjectOperation(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); + SProjectOperatorInfo* pProjectInfo = pOperator->info; SOptrBasicInfo* pInfo = &pProjectInfo->binfo; SExprSupp* pSup = &pOperator->exprSupp; SSDataBlock* pRes = pInfo->pRes; SSDataBlock* pFinalRes = pProjectInfo->pFinalRes; + int32_t code = 0; + int64_t st = 0; + int32_t order = pInfo->inputTsOrder; + int32_t scanFlag = 0; blockDataCleanup(pFinalRes); - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + return code; } - int64_t st = 0; - int32_t order = pInfo->inputTsOrder; - int32_t scanFlag = 0; - int32_t code = TSDB_CODE_SUCCESS; - if (pOperator->cost.openCost == 0) { st = taosGetTimestampUs(); } @@ -286,7 +287,8 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { pRes->info.id.groupId = 0; } - return (pRes->info.rows > 0) ? pRes : NULL; + *pResBlock = (pRes->info.rows > 0)? pRes:NULL; + return code; } while (1) { @@ -309,7 +311,9 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { if (pBlock->info.type == STREAM_RETRIEVE || pBlock->info.type == STREAM_DELETE_RESULT || pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_CREATE_CHILD_TABLE || pBlock->info.type == STREAM_CHECKPOINT) { - return pBlock; + + *pResBlock = pBlock; + return code; } if (pProjectInfo->inputIgnoreGroup) { @@ -321,7 +325,7 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { continue; } - setInfoForNewGroup(pBlock, pLimitInfo, pOperator); + (void) setInfoForNewGroup(pBlock, pLimitInfo, pOperator); if (pOperator->status == OP_EXEC_DONE) { break; } @@ -332,8 +336,15 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { pRes->info.scanFlag = scanFlag = pBlock->info.scanFlag; } - setInputDataBlock(pSup, pBlock, order, scanFlag, false); - blockDataEnsureCapacity(pInfo->pRes, pInfo->pRes->info.rows + pBlock->info.rows); + code = setInputDataBlock(pSup, pBlock, order, scanFlag, false); + if (code) { + T_LONG_JMP(pTaskInfo->env, code); + } + + code = blockDataEnsureCapacity(pInfo->pRes, pInfo->pRes->info.rows + pBlock->info.rows); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } code = projectApplyFunctions(pSup->pExprInfo, pInfo->pRes, pBlock, pSup->pCtx, pSup->numOfExprs, pProjectInfo->pPseudoColInfo); @@ -355,14 +366,23 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { pFinalRes->info.version = pRes->info.version; // continue merge data, ignore the group id - blockDataMerge(pFinalRes, pRes); + code = blockDataMerge(pFinalRes, pRes); + if (code) { + pTaskInfo->code = code; + return code; + } + if (pFinalRes->info.rows + pRes->info.rows <= pOperator->resultInfo.threshold && (pOperator->status != OP_EXEC_DONE)) { continue; } } // do apply filter - doFilter(pFinalRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pFinalRes, pOperator->exprSupp.pFilterInfo, NULL); + if (code) { + pTaskInfo->code = code; + return code; + } // when apply the limit/offset for each group, pRes->info.rows may be 0, due to limit constraint. if (pFinalRes->info.rows > 0 || (pOperator->status == OP_EXEC_DONE)) { @@ -372,7 +392,12 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { } else { // do apply filter if (pRes->info.rows > 0) { - doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + if (code) { + pTaskInfo->code = code; + return code; + } + if (pRes->info.rows == 0) { continue; } @@ -399,14 +424,32 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) { printDataBlock(p, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); } - return (p->info.rows > 0) ? p : NULL; + *pResBlock = (p->info.rows > 0)? p:NULL; + return code; } -SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, - SExecTaskInfo* pTaskInfo) { +SSDataBlock* doProjectOperation1(SOperatorInfo* pOperator) { + SSDataBlock* pRes = NULL; + int32_t code = doProjectOperation(pOperator, &pRes); + if (code && pOperator->pTaskInfo->code == 0) { + pOperator->pTaskInfo->code = code; + } + + return pRes; +} + +int32_t createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = 0; + int32_t lino = 0; + int32_t numOfRows = 4096; + size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES; + SIndefOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SIndefOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -423,7 +466,7 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy if (pPhyNode->pExprs != NULL) { int32_t num = 0; SExprInfo* pSExpr = createExprInfo(pPhyNode->pExprs, NULL, &num); - int32_t code = initExprSupp(&pInfo->scalarSup, pSExpr, num, &pTaskInfo->storageAPI.functionStore); + code = initExprSupp(&pInfo->scalarSup, pSExpr, num, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -431,9 +474,6 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy SSDataBlock* pResBlock = createDataBlockFromDescNode(pPhyNode->node.pOutputDataBlockDesc); - int32_t numOfRows = 4096; - size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES; - // Make sure the size of SSDataBlock will never exceed the size of 2MB. int32_t TWOMB = 2 * 1024 * 1024; if (numOfRows * pResBlock->info.rowSize > TWOMB) { @@ -442,32 +482,28 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy initBasicInfo(&pInfo->binfo, pResBlock); initResultSizeInfo(&pOperator->resultInfo, numOfRows); - blockDataEnsureCapacity(pResBlock, numOfRows); + code = blockDataEnsureCapacity(pResBlock, numOfRows); + TSDB_CHECK_CODE(code, lino, _error); - int32_t code = initAggSup(pSup, &pInfo->aggSup, pExprInfo, numOfExpr, keyBufSize, pTaskInfo->id.str, + code = initAggSup(pSup, &pInfo->aggSup, pExprInfo, numOfExpr, keyBufSize, pTaskInfo->id.str, pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); code = setFunctionResultOutput(pOperator, &pInfo->binfo, &pInfo->aggSup, MAIN_SCAN, numOfExpr); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pPhyNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + TSDB_CHECK_CODE(code, lino, _error); pInfo->binfo.pRes = pResBlock; pInfo->binfo.inputTsOrder = pNode->inputTsOrder; pInfo->binfo.outputTsOrder = pNode->outputTsOrder; - pInfo->pPseudoColInfo = setRowTsColumnOutputInfo(pSup->pCtx, numOfExpr); + code = setRowTsColumnOutputInfo(pSup->pCtx, numOfExpr, &pInfo->pPseudoColInfo); + TSDB_CHECK_CODE(code, lino, _error); setOperatorInfo(pOperator, "IndefinitOperator", QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doApplyIndefinitFunction, NULL, destroyIndefinitOperatorInfo, + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doApplyIndefinitFunction1, NULL, destroyIndefinitOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); @@ -475,13 +511,14 @@ SOperatorInfo* createIndefinitOutputOperatorInfo(SOperatorInfo* downstream, SPhy goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyIndefinitOperatorInfo(pInfo); taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } static void doHandleDataBlock(SOperatorInfo* pOperator, SSDataBlock* pBlock, SOperatorInfo* downstream, @@ -504,8 +541,15 @@ static void doHandleDataBlock(SOperatorInfo* pOperator, SSDataBlock* pBlock, SOp } } - setInputDataBlock(pSup, pBlock, order, scanFlag, false); - blockDataEnsureCapacity(pInfo->pRes, pInfo->pRes->info.rows + pBlock->info.rows); + code = setInputDataBlock(pSup, pBlock, order, scanFlag, false); + if (code) { + T_LONG_JMP(pTaskInfo->env, code); + } + + code = blockDataEnsureCapacity(pInfo->pRes, pInfo->pRes->info.rows + pBlock->info.rows); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } code = projectApplyFunctions(pSup->pExprInfo, pInfo->pRes, pBlock, pSup->pCtx, pSup->numOfExprs, pIndefInfo->pPseudoColInfo); @@ -514,21 +558,29 @@ static void doHandleDataBlock(SOperatorInfo* pOperator, SSDataBlock* pBlock, SOp } } -SSDataBlock* doApplyIndefinitFunction(SOperatorInfo* pOperator) { +SSDataBlock* doApplyIndefinitFunction1(SOperatorInfo* pOperator) { + SSDataBlock* pResBlock = NULL; + pOperator->pTaskInfo->code = doApplyIndefinitFunction(pOperator, &pResBlock); + return pResBlock; +} + +int32_t doApplyIndefinitFunction(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); + SIndefOperatorInfo* pIndefInfo = pOperator->info; SOptrBasicInfo* pInfo = &pIndefInfo->binfo; SExprSupp* pSup = &pOperator->exprSupp; + int64_t st = 0; + int32_t code = 0; + SSDataBlock* pRes = pInfo->pRes; - SSDataBlock* pRes = pInfo->pRes; blockDataCleanup(pRes); SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pOperator->status == OP_EXEC_DONE) { - return NULL; + return 0; } - int64_t st = 0; - if (pOperator->cost.openCost == 0) { st = taosGetTimestampUs(); } @@ -577,7 +629,12 @@ SSDataBlock* doApplyIndefinitFunction(SOperatorInfo* pOperator) { } } - doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + if (code) { + pTaskInfo->code = code; + return code; + } + size_t rows = pInfo->pRes->info.rows; if (rows > 0 || pOperator->status == OP_EXEC_DONE) { break; @@ -593,11 +650,11 @@ SSDataBlock* doApplyIndefinitFunction(SOperatorInfo* pOperator) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } - return (rows > 0) ? pInfo->pRes : NULL; + *pResBlock = (rows > 0) ? pInfo->pRes : NULL; + return code; } int32_t initCtxOutputBuffer(SqlFunctionCtx* pCtx, int32_t size) { - int32_t code = TSDB_CODE_SUCCESS; for (int32_t j = 0; j < size; ++j) { struct SResultRowEntryInfo* pResInfo = GET_RES_INFO(&pCtx[j]); if (isRowEntryInitialized(pResInfo) || fmIsPseudoColumnFunc(pCtx[j].functionId) || pCtx[j].functionId == -1 || @@ -605,12 +662,10 @@ int32_t initCtxOutputBuffer(SqlFunctionCtx* pCtx, int32_t size) { continue; } - code = pCtx[j].fpSet.init(&pCtx[j], pCtx[j].resultInfo); - if (TSDB_CODE_SUCCESS != code) { - return code; - } + (void)pCtx[j].fpSet.init(&pCtx[j], pCtx[j].resultInfo); } - return code; + + return 0; } /* @@ -647,15 +702,24 @@ int32_t setFunctionResultOutput(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo, return initCtxOutputBuffer(pCtx, numOfExprs); } -SArray* setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols) { +int32_t setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols, SArray** pResList) { + QRY_OPTR_CHECK(pResList); SArray* pList = taosArrayInit(4, sizeof(int32_t)); + if (pList == NULL) { + return terrno; + } + for (int32_t i = 0; i < numOfCols; ++i) { if (fmIsPseudoColumnFunc(pCtx[i].functionId)) { - taosArrayPush(pList, &i); + void* px = taosArrayPush(pList, &i); + if (px == NULL) { + return terrno; + } } } - return pList; + *pResList = pList; + return 0; } int32_t doGenerateSourceData(SOperatorInfo* pOperator) { @@ -663,23 +727,32 @@ int32_t doGenerateSourceData(SOperatorInfo* pOperator) { SExprSupp* pSup = &pOperator->exprSupp; SSDataBlock* pRes = pProjectInfo->binfo.pRes; + SExprInfo* pExpr = pSup->pExprInfo; + int64_t st = taosGetTimestampUs(); + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - blockDataEnsureCapacity(pRes, pOperator->resultInfo.capacity); - SExprInfo* pExpr = pSup->pExprInfo; - - int64_t st = taosGetTimestampUs(); + int32_t code = blockDataEnsureCapacity(pRes, pOperator->resultInfo.capacity); + if (code) { + return code; + } for (int32_t k = 0; k < pSup->numOfExprs; ++k) { int32_t outputSlotId = pExpr[k].base.resSchema.slotId; if (pExpr[k].pExpr->nodeType == QUERY_NODE_VALUE) { SColumnInfoData* pColInfoData = taosArrayGet(pRes->pDataBlock, outputSlotId); + if (pColInfoData == NULL) { + return terrno; + } int32_t type = pExpr[k].base.pParam[0].param.nType; if (TSDB_DATA_TYPE_NULL == type) { colDataSetNNULL(pColInfoData, 0, 1); } else { - colDataSetVal(pColInfoData, 0, taosVariantGet(&pExpr[k].base.pParam[0].param, type), false); + code = colDataSetVal(pColInfoData, 0, taosVariantGet(&pExpr[k].base.pParam[0].param, type), false); + if (code) { + return code; + } } } else if (pExpr[k].pExpr->nodeType == QUERY_NODE_FUNCTION) { SqlFunctionCtx* pfCtx = &pSup->pCtx[k]; @@ -688,13 +761,24 @@ int32_t doGenerateSourceData(SOperatorInfo* pOperator) { // UDF aggregate functions will be handled in agg operator. if (fmIsScalarFunc(pfCtx->functionId)) { SArray* pBlockList = taosArrayInit(4, POINTER_BYTES); - taosArrayPush(pBlockList, &pRes); + if (pBlockList == NULL) { + return terrno; + } + + void* px = taosArrayPush(pBlockList, &pRes); + if (px == NULL) { + return terrno; + } SColumnInfoData* pResColData = taosArrayGet(pRes->pDataBlock, outputSlotId); + if (pResColData == NULL) { + return terrno; + } + SColumnInfoData idata = {.info = pResColData->info, .hasNull = true}; SScalarParam dest = {.columnData = &idata}; - int32_t code = scalarCalculate((SNode*)pExpr[k].pExpr->_function.pFunctNode, pBlockList, &dest); + code = scalarCalculate((SNode*)pExpr[k].pExpr->_function.pFunctNode, pBlockList, &dest); if (code != TSDB_CODE_SUCCESS) { taosArrayDestroy(pBlockList); return code; @@ -702,9 +786,12 @@ int32_t doGenerateSourceData(SOperatorInfo* pOperator) { int32_t startOffset = pRes->info.rows; ASSERT(pRes->info.capacity > 0); - colDataAssign(pResColData, &idata, dest.numOfRows, &pRes->info); - colDataDestroy(&idata); + code = colDataAssign(pResColData, &idata, dest.numOfRows, &pRes->info); + if (code) { + return code; + } + colDataDestroy(&idata); taosArrayDestroy(pBlockList); } else { return TSDB_CODE_OPS_NOT_SUPPORT; @@ -715,9 +802,13 @@ int32_t doGenerateSourceData(SOperatorInfo* pOperator) { } pRes->info.rows = 1; - doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + if (code) { + pTaskInfo->code = code; + return code; + } - /*int32_t status = */ doIngroupLimitOffset(&pProjectInfo->limitInfo, 0, pRes, pOperator); + (void) doIngroupLimitOffset(&pProjectInfo->limitInfo, 0, pRes, pOperator); pOperator->resultInfo.totalRows += pRes->info.rows; @@ -726,36 +817,44 @@ int32_t doGenerateSourceData(SOperatorInfo* pOperator) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } - return TSDB_CODE_SUCCESS; + return code; } static void setPseudoOutputColInfo(SSDataBlock* pResult, SqlFunctionCtx* pCtx, SArray* pPseudoList) { size_t num = (pPseudoList != NULL) ? taosArrayGetSize(pPseudoList) : 0; for (int32_t i = 0; i < num; ++i) { pCtx[i].pOutput = taosArrayGet(pResult->pDataBlock, i); + if (pCtx[i].pOutput == NULL) { + qError("failed to get the output buf, ptr is null"); + } } } int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBlock* pSrcBlock, SqlFunctionCtx* pCtx, int32_t numOfOutput, SArray* pPseudoList) { + int32_t lino = 0; int32_t code = TSDB_CODE_SUCCESS; setPseudoOutputColInfo(pResult, pCtx, pPseudoList); pResult->info.dataLoad = 1; SArray* processByRowFunctionCtx = NULL; - if (pSrcBlock == NULL) { for (int32_t k = 0; k < numOfOutput; ++k) { int32_t outputSlotId = pExpr[k].base.resSchema.slotId; ASSERT(pExpr[k].pExpr->nodeType == QUERY_NODE_VALUE); SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pColInfoData == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } int32_t type = pExpr[k].base.pParam[0].param.nType; if (TSDB_DATA_TYPE_NULL == type) { colDataSetNNULL(pColInfoData, 0, 1); } else { - colDataSetVal(pColInfoData, 0, taosVariantGet(&pExpr[k].base.pParam[0].param, type), false); + code = colDataSetVal(pColInfoData, 0, taosVariantGet(&pExpr[k].base.pParam[0].param, type), false); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -772,7 +871,10 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc // function or some operators. bool createNewColModel = (pResult == pSrcBlock); if (createNewColModel) { - blockDataEnsureCapacity(pResult, pResult->info.rows); + code = blockDataEnsureCapacity(pResult, pResult->info.rows); + if (code) { + goto _exit; + } } int32_t numOfRows = 0; @@ -784,33 +886,60 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc if (pExpr[k].pExpr->nodeType == QUERY_NODE_COLUMN) { // it is a project query SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pColInfoData == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } + if (pResult->info.rows > 0 && !createNewColModel) { + int32_t ret = 0; + if (pInputData->pData[0] == NULL) { int32_t slotId = pfCtx->param[0].pCol->slotId; SColumnInfoData* pInput = taosArrayGet(pSrcBlock->pDataBlock, slotId); + if (pInput == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } - colDataMergeCol(pColInfoData, pResult->info.rows, (int32_t*)&pResult->info.capacity, pInput, - pSrcBlock->info.rows); + ret = colDataMergeCol(pColInfoData, pResult->info.rows, (int32_t*)&pResult->info.capacity, pInput, + pSrcBlock->info.rows); } else { - colDataMergeCol(pColInfoData, pResult->info.rows, (int32_t*)&pResult->info.capacity, pInputData->pData[0], - pInputData->numOfRows); + ret = colDataMergeCol(pColInfoData, pResult->info.rows, (int32_t*)&pResult->info.capacity, + pInputData->pData[0], pInputData->numOfRows); } + + if (ret < 0) { + code = ret; + } + + TSDB_CHECK_CODE(code, lino, _exit); } else { if (pInputData->pData[0] == NULL) { int32_t slotId = pfCtx->param[0].pCol->slotId; SColumnInfoData* pInput = taosArrayGet(pSrcBlock->pDataBlock, slotId); - colDataAssign(pColInfoData, pInput, pSrcBlock->info.rows, &pResult->info); + if (pInput == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } + code = colDataAssign(pColInfoData, pInput, pSrcBlock->info.rows, &pResult->info); numOfRows = pSrcBlock->info.rows; } else { - colDataAssign(pColInfoData, pInputData->pData[0], pInputData->numOfRows, &pResult->info); + code = colDataAssign(pColInfoData, pInputData->pData[0], pInputData->numOfRows, &pResult->info); numOfRows = pInputData->numOfRows; } + + TSDB_CHECK_CODE(code, lino, _exit); } } else if (pExpr[k].pExpr->nodeType == QUERY_NODE_VALUE) { SColumnInfoData* pColInfoData = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pColInfoData == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } int32_t offset = createNewColModel ? 0 : pResult->info.rows; @@ -820,16 +949,33 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc } else { char* p = taosVariantGet(&pExpr[k].base.pParam[0].param, type); for (int32_t i = 0; i < pSrcBlock->info.rows; ++i) { - colDataSetVal(pColInfoData, i + offset, p, false); + code = colDataSetVal(pColInfoData, i + offset, p, false); + TSDB_CHECK_CODE(code, lino, _exit); } } numOfRows = pSrcBlock->info.rows; } else if (pExpr[k].pExpr->nodeType == QUERY_NODE_OPERATOR) { SArray* pBlockList = taosArrayInit(4, POINTER_BYTES); - taosArrayPush(pBlockList, &pSrcBlock); + if (pBlockList == NULL) { + code = terrno; + goto _exit; + } + + void* px = taosArrayPush(pBlockList, &pSrcBlock); + if (px == NULL) { + code = terrno; + taosArrayDestroy(pBlockList); + goto _exit; + } SColumnInfoData* pResColData = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pResColData == NULL) { + code = terrno; + taosArrayDestroy(pBlockList); + goto _exit; + } + SColumnInfoData idata = {.info = pResColData->info, .hasNull = true}; SScalarParam dest = {.columnData = &idata}; @@ -842,8 +988,13 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc int32_t startOffset = createNewColModel ? 0 : pResult->info.rows; ASSERT(pResult->info.capacity > 0); - colDataMergeCol(pResColData, startOffset, (int32_t*)&pResult->info.capacity, &idata, dest.numOfRows); + int32_t ret = colDataMergeCol(pResColData, startOffset, (int32_t*)&pResult->info.capacity, &idata, dest.numOfRows); + if (ret < 0) { + code = ret; + } + colDataDestroy(&idata); + TSDB_CHECK_CODE(code, lino, _exit); numOfRows = dest.numOfRows; taosArrayDestroy(pBlockList); @@ -853,17 +1004,24 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc // do nothing } else if (fmIsIndefiniteRowsFunc(pfCtx->functionId)) { SResultRowEntryInfo* pResInfo = GET_RES_INFO(pfCtx); - code = pfCtx->fpSet.init(pfCtx, pResInfo); - if (TSDB_CODE_SUCCESS != code) { - goto _exit; - } + (void) pfCtx->fpSet.init(pfCtx, pResInfo); pfCtx->pOutput = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pfCtx->pOutput == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } + pfCtx->offset = createNewColModel ? 0 : pResult->info.rows; // set the start offset // set the timestamp(_rowts) output buffer if (taosArrayGetSize(pPseudoList) > 0) { int32_t* outputColIndex = taosArrayGet(pPseudoList, 0); + if (outputColIndex == NULL) { + code = terrno; + goto _exit; + } + pfCtx->pTsOutput = (SColumnInfoData*)pCtx[*outputColIndex].pOutput; } @@ -876,6 +1034,7 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc if (code != TSDB_CODE_SUCCESS) { goto _exit; } + numOfRows = pResInfo->numOfRes; if (fmIsProcessByRowFunc(pfCtx->functionId)) { if (NULL == processByRowFunctionCtx) { @@ -885,7 +1044,12 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc goto _exit; } } - taosArrayPush(processByRowFunctionCtx, &pfCtx); + + void* px = taosArrayPush(processByRowFunctionCtx, &pfCtx); + if (px == NULL) { + code = terrno; + goto _exit; + } } } else if (fmIsAggFunc(pfCtx->functionId)) { // selective value output should be set during corresponding function execution @@ -894,25 +1058,51 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc } // _group_key function for "partition by tbname" + csum(col_name) query SColumnInfoData* pOutput = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pOutput == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } + int32_t slotId = pfCtx->param[0].pCol->slotId; // todo handle the json tag SColumnInfoData* pInput = taosArrayGet(pSrcBlock->pDataBlock, slotId); + if (pInput == NULL) { + code = terrno; + TSDB_CHECK_CODE(code, lino, _exit); + } + for (int32_t f = 0; f < pSrcBlock->info.rows; ++f) { bool isNull = colDataIsNull_s(pInput, f); if (isNull) { colDataSetNULL(pOutput, pResult->info.rows + f); } else { char* data = colDataGetData(pInput, f); - colDataSetVal(pOutput, pResult->info.rows + f, data, isNull); + code = colDataSetVal(pOutput, pResult->info.rows + f, data, isNull); + TSDB_CHECK_CODE(code, lino, _exit); } } } else { SArray* pBlockList = taosArrayInit(4, POINTER_BYTES); - taosArrayPush(pBlockList, &pSrcBlock); + if (pBlockList == NULL) { + code = terrno; + goto _exit; + } + + void* px = taosArrayPush(pBlockList, &pSrcBlock); + if (px == NULL) { + code = terrno; + goto _exit; + } SColumnInfoData* pResColData = taosArrayGet(pResult->pDataBlock, outputSlotId); + if (pResColData == NULL) { + taosArrayDestroy(pBlockList); + code = terrno; + goto _exit; + } + SColumnInfoData idata = {.info = pResColData->info, .hasNull = true}; SScalarParam dest = {.columnData = &idata}; @@ -924,11 +1114,16 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc int32_t startOffset = createNewColModel ? 0 : pResult->info.rows; ASSERT(pResult->info.capacity > 0); - colDataMergeCol(pResColData, startOffset, (int32_t*)&pResult->info.capacity, &idata, dest.numOfRows); + int32_t ret = colDataMergeCol(pResColData, startOffset, (int32_t*)&pResult->info.capacity, &idata, dest.numOfRows); + if (ret < 0) { + code = ret; + } + colDataDestroy(&idata); numOfRows = dest.numOfRows; taosArrayDestroy(pBlockList); + TSDB_CHECK_CODE(code, lino, _exit); } } else { return TSDB_CODE_OPS_NOT_SUPPORT; @@ -937,19 +1132,23 @@ int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBloc if (processByRowFunctionCtx && taosArrayGetSize(processByRowFunctionCtx) > 0){ SqlFunctionCtx** pfCtx = taosArrayGet(processByRowFunctionCtx, 0); - code = (*pfCtx)->fpSet.processFuncByRow(processByRowFunctionCtx); - if (code != TSDB_CODE_SUCCESS) { + if (pfCtx == NULL) { + code = terrno; goto _exit; } + + code = (*pfCtx)->fpSet.processFuncByRow(processByRowFunctionCtx); + TSDB_CHECK_CODE(code, lino, _exit); numOfRows = (*pfCtx)->resultInfo->numOfRes; } + if (!createNewColModel) { pResult->info.rows += numOfRows; } + _exit: if(processByRowFunctionCtx) { taosArrayDestroy(processByRowFunctionCtx); - processByRowFunctionCtx = NULL; } return code; } diff --git a/source/libs/executor/src/querytask.c b/source/libs/executor/src/querytask.c index ddba556c7a..9f4d9c4405 100644 --- a/source/libs/executor/src/querytask.c +++ b/source/libs/executor/src/querytask.c @@ -110,17 +110,14 @@ int32_t createExecTaskInfo(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SReadHand (*pTaskInfo)->pSubplan = pPlan; (*pTaskInfo)->pWorkerCb = pHandle->pWorkerCb; - (*pTaskInfo)->pRoot = createOperator(pPlan->pNode, *pTaskInfo, pHandle, pPlan->pTagCond, pPlan->pTagIndexCond, - pPlan->user, pPlan->dbFName); + code = createOperator(pPlan->pNode, *pTaskInfo, pHandle, pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user, + pPlan->dbFName, &((*pTaskInfo)->pRoot)); - if (NULL == (*pTaskInfo)->pRoot) { - int32_t code = (*pTaskInfo)->code; + if (NULL == (*pTaskInfo)->pRoot || code != 0) { doDestroyTask(*pTaskInfo); (*pTaskInfo) = NULL; - return code; - } else { - return TSDB_CODE_SUCCESS; } + return code; } void cleanupQueriedTableScanInfo(void* p) { diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index e1db1efb59..600700ab37 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1310,8 +1310,10 @@ static void destroyTableScanOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, - STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { +int32_t createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, + STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo)); @@ -1386,7 +1388,8 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, // for non-blocking operator, the open cost is always 0 pOperator->cost.openCost = 0; - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -1395,12 +1398,19 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } -SOperatorInfo* createTableSeqScanOperatorInfo(void* pReadHandle, SExecTaskInfo* pTaskInfo) { +int32_t createTableSeqScanOperatorInfo(void* pReadHandle, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _end; + } pInfo->base.dataReader = pReadHandle; // pInfo->prevGroupId = -1; @@ -1409,7 +1419,20 @@ SOperatorInfo* createTableSeqScanOperatorInfo(void* pReadHandle, SExecTaskInfo* pInfo, pTaskInfo); pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTableScanImpl, NULL, NULL, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; + + _end: + if (pInfo != NULL) { + taosMemoryFree(pInfo); + } + + if (pOperator != NULL) { + taosMemoryFree(pOperator); + } + + pTaskInfo->code = code; + return code; } FORCE_INLINE void doClearBufferedBlocks(SStreamScanInfo* pInfo) { @@ -3457,7 +3480,13 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { } } - SMetaTableInfo mtInfo = pAPI->snapshotFn.getMetaTableInfoFromSnapshot(pInfo->sContext); + SMetaTableInfo mtInfo = {0}; + code = pAPI->snapshotFn.getMetaTableInfoFromSnapshot(pInfo->sContext, &mtInfo); + QUERY_CHECK_CODE(code, lino, _end); + if (code != 0) { + tDeleteSchemaWrapper(mtInfo.schema); + goto _end; + } STqOffsetVal offset = {0}; if (mtInfo.uid == 0 || pInfo->sContext->withMeta == ONLY_META) { // read snapshot done, change to get data from wal qDebug("tmqsnap read snapshot done, change to get data from wal"); @@ -3467,9 +3496,9 @@ static int32_t doRawScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) { tqOffsetResetToData(&offset, mtInfo.uid, INT64_MIN, val); qDebug("tmqsnap change get data uid:%" PRId64 "", mtInfo.uid); } + tDeleteSchemaWrapper(mtInfo.schema); code = qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); QUERY_CHECK_CODE(code, lino, _end); - tDeleteSchemaWrapper(mtInfo.schema); (*ppRes) = NULL; return code; } else if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_META) { @@ -3560,7 +3589,7 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { static void destroyRawScanOperatorInfo(void* param) { SStreamRawScanInfo* pRawScan = (SStreamRawScanInfo*)param; pRawScan->pAPI->tsdReader.tsdReaderClose(pRawScan->dataReader); - (void)pRawScan->pAPI->snapshotFn.destroySnapshot(pRawScan->sContext); + pRawScan->pAPI->snapshotFn.destroySnapshot(pRawScan->sContext); tableListDestroy(pRawScan->pTableListInfo); taosMemoryFree(pRawScan); } @@ -3568,12 +3597,13 @@ static void destroyRawScanOperatorInfo(void* param) { // for subscribing db or stb (not including column), // if this scan is used, meta data can be return // and schemas are decided when scanning -SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pTaskInfo) { +int32_t createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { // create operator // create tb reader // create meta reader // create tq reader + QRY_OPTR_CHECK(pOptrInfo); int32_t code = TSDB_CODE_SUCCESS; SStreamRawScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamRawScanInfo)); @@ -3593,13 +3623,14 @@ SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pT pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, destroyRawScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; _end: taosMemoryFree(pInfo); taosMemoryFree(pOperator); pTaskInfo->code = code; - return NULL; + return code; } static void destroyStreamScanOperatorInfo(void* param) { @@ -3750,8 +3781,10 @@ _end: return code; } -SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, - STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { +int32_t createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, + STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SArray* pColIds = NULL; @@ -3761,7 +3794,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys const char* idstr = pTaskInfo->id.str; if (pInfo == NULL || pOperator == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; tableListDestroy(pTableListInfo); goto _error; } @@ -3841,11 +3874,13 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys } if (pHandle->vnode) { - SOperatorInfo* pTableScanOp = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo); - if (pTableScanOp == NULL) { + SOperatorInfo* pTableScanOp = NULL; + code = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo, &pTableScanOp); + if (pTableScanOp == NULL || code != 0) { qError("createTableScanOperatorInfo error, errorcode: %d", pTaskInfo->code); goto _error; } + STableScanInfo* pTSInfo = (STableScanInfo*)pTableScanOp->info; if (pHandle->version > 0) { pTSInfo->base.cond.endVersion = pHandle->version; @@ -3890,13 +3925,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys SArray* tableIdList = NULL; code = extractTableIdList(((STableScanInfo*)(pInfo->pTableScanOp->info))->base.pTableListInfo, &tableIdList); QUERY_CHECK_CODE(code, lino, _error); - - code = pAPI->tqReaderFn.tqReaderSetQueryTableList(pInfo->tqReader, tableIdList, idstr); - if (code != 0) { - taosArrayDestroy(tableIdList); - goto _error; - } - + pAPI->tqReaderFn.tqReaderSetQueryTableList(pInfo->tqReader, tableIdList, idstr); taosArrayDestroy(tableIdList); memcpy(&pTaskInfo->streamInfo.tableCond, &pTSInfo->base.cond, sizeof(SQueryTableDataCond)); } else { @@ -3963,7 +3992,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys NULL, optrDefaultGetNextExtFn, NULL); setOperatorStreamStateFn(pOperator, streamScanReleaseState, streamScanReloadState); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pColIds != NULL) { @@ -3975,7 +4005,8 @@ _error: } taosMemoryFreeClear(pOperator); - return NULL; + pTaskInfo->code = code; + return code; } static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, int32_t count, SMetaReader* mr, @@ -4428,21 +4459,26 @@ static void destroyTagScanOperatorInfo(void* param) { taosArrayDestroyEx(pInfo->aUidTags, tagScanFreeUidTag); blockDataDestroy(pInfo->pRes); - pInfo->pRes = NULL; taosArrayDestroy(pInfo->matchInfo.pList); tableListDestroy(pInfo->pTableListInfo); + + pInfo->pRes = NULL; + pInfo->pTableListInfo = NULL; taosMemoryFreeClear(param); } -SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pTagScanNode, +int32_t createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pTagScanNode, STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - SExecTaskInfo* pTaskInfo) { + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SScanPhysiNode* pPhyNode = (SScanPhysiNode*)pTagScanNode; STagScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STagScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -4498,14 +4534,13 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi __optr_fn_t tagScanNextFn = (pTagScanNode->onlyMetaCtbIdx) ? doTagScanFromCtbIdx : doTagScanFromMetaEntry; pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, tagScanNextFn, NULL, destroyTagScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - - return pOperator; + *pOptrInfo = pOperator; + return code; _error: taosMemoryFree(pInfo); taosMemoryFree(pOperator); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + return code; } // table merge scan operator @@ -5270,7 +5305,7 @@ int32_t startDurationForGroupTableMergeScan(SOperatorInfo* pOperator) { tsortSetMergeLimitReachedFp(pInfo->pSortHandle, tableMergeScanDoSkipTable, pOperator); tsortSetAbortCheckFn(pInfo->pSortHandle, isTaskKilled, pOperator->pTaskInfo); - code = tsortSetFetchRawDataFp(pInfo->pSortHandle, getBlockForTableMergeScan, NULL, NULL); + tsortSetFetchRawDataFp(pInfo->pSortHandle, getBlockForTableMergeScan, NULL, NULL); QUERY_CHECK_CODE(code, lino, _end); STableMergeScanSortSourceParam* param = taosMemoryCalloc(1, sizeof(STableMergeScanSortSourceParam)); @@ -5399,7 +5434,12 @@ SSDataBlock* getSortedTableMergeScanBlockData(SSortHandle* pHandle, SSDataBlock* break; } - tsortAppendTupleToBlock(pInfo->pSortHandle, pResBlock, pTupleHandle); + code = tsortAppendTupleToBlock(pInfo->pSortHandle, pResBlock, pTupleHandle); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + T_LONG_JMP(pOperator->pTaskInfo->env, terrno); + } + if (pResBlock->info.rows >= capacity) { break; } @@ -5558,18 +5598,22 @@ int32_t getTableMergeScanExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExpla return TSDB_CODE_SUCCESS; } -SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, - STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { +int32_t createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, + STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; STableMergeScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableMergeScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } SDataBlockDescNode* pDescNode = pTableScanNode->scan.node.pOutputDataBlockDesc; int32_t numOfCols = 0; - int32_t code = extractColMatchInfo(pTableScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, + code = extractColMatchInfo(pTableScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->base.matchInfo); int32_t lino = 0; if (code != TSDB_CODE_SUCCESS) { @@ -5669,13 +5713,15 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN destroyTableMergeScanOperatorInfo, optrDefaultBufFn, getTableMergeScanExplainExecInfo, optrDefaultGetNextExtFn, NULL); pOperator->cost.openCost = 0; - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; taosMemoryFree(pInfo); taosMemoryFree(pOperator); - return NULL; + return code; } // ==================================================================================================================== @@ -5791,16 +5837,17 @@ int32_t getTableCountScanSupp(SNodeList* groupTags, SName* tableName, SNodeList* return code; } -SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* readHandle, STableCountScanPhysiNode* pTblCountScanNode, - SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; +int32_t createTableCountScanOperatorInfo(SReadHandle* readHandle, STableCountScanPhysiNode* pTblCountScanNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SScanPhysiNode* pScanNode = &pTblCountScanNode->scan; STableCountScanOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(STableCountScanOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); - if (!pInfo || !pOperator) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -5823,7 +5870,8 @@ SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* readHandle, STableC pInfo, pTaskInfo); pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTableCountScan, NULL, destoryTableCountScanOperator, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -5831,7 +5879,7 @@ _error: } taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } int32_t fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* stbName, int64_t count, diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c index 9892114735..7dfe88fe85 100644 --- a/source/libs/executor/src/sortoperator.c +++ b/source/libs/executor/src/sortoperator.c @@ -43,20 +43,27 @@ typedef struct SSortOperatorInfo { SSortOpGroupIdCalc* pGroupIdCalc; } SSortOperatorInfo; -static SSDataBlock* doSort(SOperatorInfo* pOperator); +static int32_t doSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock); +static SSDataBlock* doSort1(SOperatorInfo* pOperator); static int32_t doOpenSortOperator(SOperatorInfo* pOperator); static int32_t getExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len); +static SSDataBlock* doGroupSort1(SOperatorInfo* pOperator); +static int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock); static void destroySortOperatorInfo(void* param); -static int32_t calcSortOperMaxTupleLength(SSortOperatorInfo* pSortOperInfo, SNodeList* pSortKeys); +static void calcSortOperMaxTupleLength(SSortOperatorInfo* pSortOperInfo, SNodeList* pSortKeys); static void destroySortOpGroupIdCalc(SSortOpGroupIdCalc* pCalc); // todo add limit/offset impl -SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo) { +int32_t createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pSortNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; SSortOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SSortOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -67,7 +74,7 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* pOperator->exprSupp.pExprInfo = createExprInfo(pSortNode->pExprs, NULL, &numOfCols); pOperator->exprSupp.numOfExprs = numOfCols; int32_t numOfOutputCols = 0; - int32_t code = + code = extractColMatchInfo(pSortNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID, &pInfo->matchInfo); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -113,7 +120,9 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* if (TSDB_CODE_SUCCESS == code) { pGroupIdCalc->lastKeysLen = 0; pGroupIdCalc->keyBuf = taosMemoryCalloc(1, keyLen); - if (!pGroupIdCalc->keyBuf) code = TSDB_CODE_OUT_OF_MEMORY; + if (!pGroupIdCalc->keyBuf) { + code = TSDB_CODE_OUT_OF_MEMORY; + } } } if (code != TSDB_CODE_SUCCESS) goto _error; @@ -131,36 +140,46 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode* // TODO dynamic set the available sort buffer pOperator->fpSet = - createOperatorFpSet(doOpenSortOperator, doSort, NULL, destroySortOperatorInfo, optrDefaultBufFn, getExplainExecInfo, optrDefaultGetNextExtFn, NULL); + createOperatorFpSet(doOpenSortOperator, doSort1, NULL, destroySortOperatorInfo, optrDefaultBufFn, getExplainExecInfo, optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); if (code != TSDB_CODE_SUCCESS) { goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: - pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; if (pInfo != NULL) { destroySortOperatorInfo(pInfo); } taosMemoryFree(pOperator); - return NULL; + pTaskInfo->code = code; + return code; } -void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle) { +int32_t appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle) { + int32_t code = 0; for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, i); - bool isNull = tsortIsNullVal(pTupleHandle, i); + if (pColInfo == NULL) { + return terrno; + } + + bool isNull = tsortIsNullVal(pTupleHandle, i); if (isNull) { colDataSetNULL(pColInfo, pBlock->info.rows); } else { char* pData = NULL; tsortGetValue(pTupleHandle, i, (void**) &pData); + if (pData != NULL) { - colDataSetVal(pColInfo, pBlock->info.rows, pData, false); + code = colDataSetVal(pColInfo, pBlock->info.rows, pData, false); + if (code) { + return code; + } } } } @@ -172,6 +191,7 @@ void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle) { pBlock->info.scanFlag = info.scanFlag; pBlock->info.rows += 1; + return code; } /** @@ -224,17 +244,21 @@ static STupleHandle* nextTupleWithGroupId(SSortHandle* pHandle, SSortOperatorInf return retTuple; } -SSDataBlock* getSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, int32_t capacity, SArray* pColMatchInfo, - SSortOperatorInfo* pInfo) { +static int32_t getSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, int32_t capacity, SArray* pColMatchInfo, + SSortOperatorInfo* pInfo, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); blockDataCleanup(pDataBlock); SSDataBlock* p = NULL; int32_t code = tsortGetSortedDataBlock(pHandle, &p); if (p == NULL || (code != 0)) { - return NULL; + return code; } - blockDataEnsureCapacity(p, capacity); + code = blockDataEnsureCapacity(p, capacity); + if (code) { + return code; + } STupleHandle* pTupleHandle; while (1) { @@ -247,23 +271,44 @@ SSDataBlock* getSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, i break; } - appendOneRowToDataBlock(p, pTupleHandle); + code = appendOneRowToDataBlock(p, pTupleHandle); + if (code) { + return code; + } + if (p->info.rows >= capacity) { break; } } if (p->info.rows > 0) { - blockDataEnsureCapacity(pDataBlock, capacity); + code = blockDataEnsureCapacity(pDataBlock, capacity); + if (code) { + return code; + } // todo extract function to handle this int32_t numOfCols = taosArrayGetSize(pColMatchInfo); for (int32_t i = 0; i < numOfCols; ++i) { SColMatchItem* pmInfo = taosArrayGet(pColMatchInfo, i); + if (pmInfo == NULL) { + return terrno; + } SColumnInfoData* pSrc = taosArrayGet(p->pDataBlock, pmInfo->srcSlotId); + if (pSrc == NULL) { + return terrno; + } + SColumnInfoData* pDst = taosArrayGet(pDataBlock->pDataBlock, pmInfo->dstSlotId); - colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (pDst == NULL) { + return terrno; + } + + code = colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (code) { + return code; + } } pDataBlock->info.dataLoad = 1; @@ -273,7 +318,8 @@ SSDataBlock* getSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, i } blockDataDestroy(p); - return (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + *pResBlock = (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + return code; } SSDataBlock* loadNextDataBlock(void* param) { @@ -317,23 +363,33 @@ int32_t doOpenSortOperator(SOperatorInfo* pOperator) { SSortSource* ps = taosMemoryCalloc(1, sizeof(SSortSource)); ps->param = pOperator->pDownstream[0]; ps->onlyRef = true; - tsortAddSource(pInfo->pSortHandle, ps); + code = tsortAddSource(pInfo->pSortHandle, ps); + if (code) { + return code; + } code = tsortOpen(pInfo->pSortHandle); if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, terrno); + T_LONG_JMP(pTaskInfo->env, code); } pOperator->cost.openCost = (taosGetTimestampUs() - pInfo->startTs) / 1000.0; pOperator->status = OP_RES_TO_RETURN; OPTR_SET_OPENED(pOperator); - return TSDB_CODE_SUCCESS; + return code; } -SSDataBlock* doSort(SOperatorInfo* pOperator) { +SSDataBlock* doSort1(SOperatorInfo* pOperator) { + SSDataBlock* pBlock = NULL; + pOperator->pTaskInfo->code = doSort(pOperator, &pBlock); + return pBlock; +} + +int32_t doSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); if (pOperator->status == OP_EXEC_DONE) { - return NULL; + return 0; } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -348,18 +404,22 @@ SSDataBlock* doSort(SOperatorInfo* pOperator) { SSDataBlock* pBlock = NULL; while (1) { if (tsortIsClosed(pInfo->pSortHandle)) { - terrno = TSDB_CODE_TSC_QUERY_CANCELLED; - T_LONG_JMP(pOperator->pTaskInfo->env, terrno); + code = TSDB_CODE_TSC_QUERY_CANCELLED; + T_LONG_JMP(pOperator->pTaskInfo->env, code); } - pBlock = getSortedBlockData(pInfo->pSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, - pInfo->matchInfo.pList, pInfo); - if (pBlock == NULL) { + code = getSortedBlockData(pInfo->pSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, + pInfo->matchInfo.pList, pInfo, &pBlock); + if (pBlock == NULL || code != 0) { setOperatorCompleted(pOperator); - return NULL; + return code; + } + + code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); + if (code) { + break; } - doFilter(pBlock, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); if (blockDataGetNumOfRows(pBlock) == 0) { continue; } @@ -376,7 +436,8 @@ SSDataBlock* doSort(SOperatorInfo* pOperator) { } } - return blockDataGetNumOfRows(pBlock) > 0 ? pBlock : NULL; + *pResBlock = blockDataGetNumOfRows(pBlock) > 0 ? pBlock : NULL; + return code; } void destroySortOperatorInfo(void* param) { @@ -402,18 +463,23 @@ int32_t getExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* return TSDB_CODE_SUCCESS; } -static int32_t calcSortOperMaxTupleLength(SSortOperatorInfo* pSortOperInfo, SNodeList* pSortKeys) { +static void calcSortOperMaxTupleLength(SSortOperatorInfo* pSortOperInfo, SNodeList* pSortKeys) { SColMatchInfo* pColItem = &pSortOperInfo->matchInfo; size_t size = taosArrayGetSize(pColItem->pList); for (size_t i = 0; i < size; ++i) { - pSortOperInfo->maxTupleLength += ((SColMatchItem*)taosArrayGet(pColItem->pList, i))->dataType.bytes; + SColMatchItem* pInfo = taosArrayGet(pColItem->pList, i); + if (pInfo == NULL) { + continue; + } + + pSortOperInfo->maxTupleLength += pInfo->dataType.bytes; } + size = LIST_LENGTH(pSortKeys); for (size_t i = 0; i < size; ++i) { SOrderByExprNode* pOrderExprNode = (SOrderByExprNode*)nodesListGetNode(pSortKeys, i); pSortOperInfo->maxTupleLength += ((SColumnNode*)pOrderExprNode->pExpr)->node.resType.bytes; } - return TSDB_CODE_SUCCESS; } static void destroySortOpGroupIdCalc(SSortOpGroupIdCalc* pCalc) { @@ -442,18 +508,26 @@ typedef struct SGroupSortOperatorInfo { SSortExecInfo sortExecInfo; } SGroupSortOperatorInfo; -SSDataBlock* getGroupSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, int32_t capacity, - SArray* pColMatchInfo, SGroupSortOperatorInfo* pInfo) { - blockDataCleanup(pDataBlock); - blockDataEnsureCapacity(pDataBlock, capacity); +int32_t getGroupSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlock, int32_t capacity, SArray* pColMatchInfo, + SGroupSortOperatorInfo* pInfo, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); - SSDataBlock* p = NULL; - int32_t code = tsortGetSortedDataBlock(pHandle, &p); - if (p == NULL || (code != 0)) { - return NULL; + blockDataCleanup(pDataBlock); + int32_t code = blockDataEnsureCapacity(pDataBlock, capacity); + if (code) { + return code; } - blockDataEnsureCapacity(p, capacity); + SSDataBlock* p = NULL; + code = tsortGetSortedDataBlock(pHandle, &p); + if (p == NULL || (code != 0)) { + return code; + } + + code = blockDataEnsureCapacity(p, capacity); + if (code) { + return code; + } while (1) { STupleHandle* pTupleHandle = NULL; @@ -462,7 +536,11 @@ SSDataBlock* getGroupSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlo break; } - appendOneRowToDataBlock(p, pTupleHandle); + code = appendOneRowToDataBlock(p, pTupleHandle); + if (code) { + break; + } + if (p->info.rows >= capacity) { break; } @@ -472,10 +550,24 @@ SSDataBlock* getGroupSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlo int32_t numOfCols = taosArrayGetSize(pColMatchInfo); for (int32_t i = 0; i < numOfCols; ++i) { SColMatchItem* pmInfo = taosArrayGet(pColMatchInfo, i); + if (pmInfo == NULL) { + return terrno; + } SColumnInfoData* pSrc = taosArrayGet(p->pDataBlock, pmInfo->srcSlotId); + if (pSrc == NULL) { + return terrno; + } + SColumnInfoData* pDst = taosArrayGet(pDataBlock->pDataBlock, pmInfo->dstSlotId); - colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (pDst == NULL) { + return terrno; + } + + code = colDataAssign(pDst, pSrc, p->info.rows, &pDataBlock->info); + if (code) { + return code; + } } pDataBlock->info.rows = p->info.rows; @@ -484,7 +576,8 @@ SSDataBlock* getGroupSortedBlockData(SSortHandle* pHandle, SSDataBlock* pDataBlo } blockDataDestroy(p); - return (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + *pResBlock = (pDataBlock->info.rows > 0) ? pDataBlock : NULL; + return code; } typedef struct SGroupSortSourceParam { @@ -539,11 +632,14 @@ int32_t beginSortGroup(SOperatorInfo* pOperator) { param->grpSortOpInfo = pInfo; ps->param = param; ps->onlyRef = false; - tsortAddSource(pInfo->pCurrSortHandle, ps); + code = tsortAddSource(pInfo->pCurrSortHandle, ps); + if (code) { + T_LONG_JMP(pTaskInfo->env, code); + } code = tsortOpen(pInfo->pCurrSortHandle); if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, terrno); + T_LONG_JMP(pTaskInfo->env, code); } return code; @@ -566,14 +662,21 @@ int32_t finishSortGroup(SOperatorInfo* pOperator) { return TSDB_CODE_SUCCESS; } -SSDataBlock* doGroupSort(SOperatorInfo* pOperator) { - if (pOperator->status == OP_EXEC_DONE) { - return NULL; - } +SSDataBlock* doGroupSort1(SOperatorInfo* pOperator) { + SSDataBlock* pBlock = NULL; + pOperator->pTaskInfo->code = doGroupSort(pOperator, &pBlock); + return pBlock; +} +int32_t doGroupSort(SOperatorInfo* pOperator, SSDataBlock** pResBlock) { + QRY_OPTR_CHECK(pResBlock); SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SGroupSortOperatorInfo* pInfo = pOperator->info; + if (pOperator->status == OP_EXEC_DONE) { + return 0; + } + int32_t code = pOperator->fpSet._openFn(pOperator); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pTaskInfo->env, code); @@ -585,41 +688,47 @@ SSDataBlock* doGroupSort(SOperatorInfo* pOperator) { pInfo->prefetchedSortInput = getNextBlockFromDownstream(pOperator, 0); if (pInfo->prefetchedSortInput == NULL) { setOperatorCompleted(pOperator); - return NULL; + return code; } + pInfo->currGroupId = pInfo->prefetchedSortInput->info.id.groupId; pInfo->childOpStatus = CHILD_OP_NEW_GROUP; - beginSortGroup(pOperator); + code = beginSortGroup(pOperator); + if (code) { + return code; + } } SSDataBlock* pBlock = NULL; while (pInfo->pCurrSortHandle != NULL) { if (tsortIsClosed(pInfo->pCurrSortHandle)) { - terrno = TSDB_CODE_TSC_QUERY_CANCELLED; - T_LONG_JMP(pOperator->pTaskInfo->env, terrno); + code = TSDB_CODE_TSC_QUERY_CANCELLED; + T_LONG_JMP(pOperator->pTaskInfo->env, code); } // beginSortGroup would fetch all child blocks of pInfo->currGroupId; ASSERT(pInfo->childOpStatus != CHILD_OP_SAME_GROUP); - pBlock = getGroupSortedBlockData(pInfo->pCurrSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, - pInfo->matchInfo.pList, pInfo); - if (pBlock != NULL) { + code = getGroupSortedBlockData(pInfo->pCurrSortHandle, pInfo->binfo.pRes, pOperator->resultInfo.capacity, + pInfo->matchInfo.pList, pInfo, &pBlock); + if (pBlock != NULL && (code == 0)) { pBlock->info.id.groupId = pInfo->currGroupId; pOperator->resultInfo.totalRows += pBlock->info.rows; - return pBlock; + *pResBlock = pBlock; + return code; } else { if (pInfo->childOpStatus == CHILD_OP_NEW_GROUP) { - finishSortGroup(pOperator); + (void) finishSortGroup(pOperator); pInfo->currGroupId = pInfo->prefetchedSortInput->info.id.groupId; - beginSortGroup(pOperator); + code = beginSortGroup(pOperator); } else if (pInfo->childOpStatus == CHILD_OP_FINISHED) { - finishSortGroup(pOperator); + (void) finishSortGroup(pOperator); setOperatorCompleted(pOperator); - return NULL; + return code; } } } - return NULL; + + return code; } int32_t getGroupSortExplainExecInfo(SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -643,41 +752,48 @@ void destroyGroupSortOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, - SExecTaskInfo* pTaskInfo) { +int32_t createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = 0; + int32_t lino = 0; + SGroupSortOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupSortOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } - SExprSupp* pSup = &pOperator->exprSupp; + SExprSupp* pSup = &pOperator->exprSupp; SDataBlockDescNode* pDescNode = pSortPhyNode->node.pOutputDataBlockDesc; - int32_t numOfCols = 0; - SExprInfo* pExprInfo = createExprInfo(pSortPhyNode->pExprs, NULL, &numOfCols); + int32_t numOfCols = 0; + SExprInfo* pExprInfo = createExprInfo(pSortPhyNode->pExprs, NULL, &numOfCols); pSup->pExprInfo = pExprInfo; pSup->numOfExprs = numOfCols; initResultSizeInfo(&pOperator->resultInfo, 1024); - pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset, &pTaskInfo->storageAPI.functionStore); + pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset, + &pTaskInfo->storageAPI.functionStore); pInfo->binfo.pRes = createDataBlockFromDescNode(pDescNode); - blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + TSDB_CHECK_CODE(code, lino, _error); + pInfo->binfo.inputTsOrder = pSortPhyNode->node.inputTsOrder; pInfo->binfo.outputTsOrder = pSortPhyNode->node.outputTsOrder; int32_t numOfOutputCols = 0; - int32_t code = extractColMatchInfo(pSortPhyNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID, - &pInfo->matchInfo); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + code = extractColMatchInfo(pSortPhyNode->pTargets, pDescNode, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID, + &pInfo->matchInfo); + TSDB_CHECK_CODE(code, lino, _error); pInfo->pSortInfo = createSortInfo(pSortPhyNode->pSortKeys); - setOperatorInfo(pOperator, "GroupSortOperator", QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doGroupSort, NULL, destroyGroupSortOperatorInfo, + setOperatorInfo(pOperator, "GroupSortOperator", QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT, false, OP_NOT_OPENED, pInfo, + pTaskInfo); + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doGroupSort1, NULL, destroyGroupSortOperatorInfo, optrDefaultBufFn, getGroupSortExplainExecInfo, optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); @@ -685,7 +801,8 @@ SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSort goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: pTaskInfo->code = code; @@ -693,8 +810,5 @@ _error: destroyGroupSortOperatorInfo(pInfo); } taosMemoryFree(pOperator); - return NULL; + return code; } - - - diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index 90f4b02877..de731299ab 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -803,8 +803,10 @@ _end: } } -SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo, SReadHandle* pHandle) { +int32_t createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, + SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + SCountWinodwPhysiNode* pCountNode = (SCountWinodwPhysiNode*)pPhyNode; int32_t numOfCols = 0; int32_t code = TSDB_CODE_SUCCESS; @@ -899,7 +901,9 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); } - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -908,6 +912,6 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); - return NULL; + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return code; } diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 805d3568d1..aca71d10fc 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -848,8 +848,10 @@ _end: } } -SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo, SReadHandle* pHandle) { +int32_t createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, + SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + SStreamEventWinodwPhysiNode* pEventNode = (SStreamEventWinodwPhysiNode*)pPhyNode; int32_t tsSlotId = ((SColumnNode*)pEventNode->window.pTspk)->slotId; int32_t code = TSDB_CODE_SUCCESS; @@ -959,12 +961,13 @@ SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhys code = filterInitFromNode((SNode*)pEventNode->pEndCond, &pInfo->pEndCondInfo, 0); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyStreamEventOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); - return NULL; + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return code; } diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index 335bfd286c..1cecbc4a31 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -1327,8 +1327,10 @@ _end: return NULL; } -SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFillPhysiNode* pPhyFillNode, - SExecTaskInfo* pTaskInfo) { +int32_t createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFillPhysiNode* pPhyFillNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStreamFillOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamFillOperatorInfo)); @@ -1424,7 +1426,9 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: if (code != TSDB_CODE_SUCCESS) { @@ -1433,5 +1437,5 @@ _error: destroyStreamFillOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 95cad97a06..f6edf050b1 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -1840,9 +1840,11 @@ _end: } } -SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, +int32_t createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, - SReadHandle* pHandle) { + SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SIntervalPhysiNode* pIntervalPhyNode = (SIntervalPhysiNode*)pPhyNode; @@ -1979,13 +1981,14 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, taosMemoryFree(buff); } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyStreamFinalIntervalOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroyStreamAggSupporter(SStreamAggSupporter* pSup) { @@ -3399,19 +3402,21 @@ static int32_t doStreamSessionAggNext(SOperatorInfo* pOperator, SSDataBlock** pp int32_t size = taosArrayGetSize(pInfo->pChildren); // if chIndex + 1 - size > 0, add new child for (int32_t i = 0; i < chIndex + 1 - size; i++) { - SOperatorInfo* pChildOp = - createStreamFinalSessionAggOperatorInfo(NULL, pInfo->pPhyNode, pOperator->pTaskInfo, 0, NULL); - if (!pChildOp) { + SOperatorInfo* pChildOp = NULL; + code = createStreamFinalSessionAggOperatorInfo(NULL, pInfo->pPhyNode, pOperator->pTaskInfo, 0, NULL, &pChildOp); + if (pChildOp == NULL || code != 0) { qError("%s create stream child of final session error", GET_TASKID(pTaskInfo)); code = TSDB_CODE_FAILED; QUERY_CHECK_CODE(code, lino, _end); } + void* tmp = taosArrayPush(pInfo->pChildren, &pChildOp); if (!tmp) { - code = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; QUERY_CHECK_CODE(code, lino, _end); } } + SOperatorInfo* pChildOp = taosArrayGetP(pInfo->pChildren, chIndex); code = setInputDataBlock(&pChildOp->exprSupp, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); QUERY_CHECK_CODE(code, lino, _end); @@ -3651,8 +3656,10 @@ _end: } } -SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo, SReadHandle* pHandle) { +int32_t createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, + SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + SSessionWinodwPhysiNode* pSessionNode = (SSessionWinodwPhysiNode*)pPhyNode; int32_t numOfCols = 0; int32_t code = TSDB_CODE_OUT_OF_MEMORY; @@ -3660,6 +3667,7 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh SStreamSessionAggOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamSessionAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -3760,8 +3768,9 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { destroyStreamSessionAggOperatorInfo(pInfo); @@ -3769,8 +3778,8 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); - return NULL; + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return code; } static void clearStreamSessionOperator(SStreamSessionAggOperatorInfo* pInfo) { @@ -3952,14 +3961,16 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, +int32_t createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, int32_t numOfChild, - SReadHandle* pHandle) { + SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; - SOperatorInfo* pOperator = createStreamSessionAggOperatorInfo(downstream, pPhyNode, pTaskInfo, pHandle); - if (pOperator == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + SOperatorInfo* pOperator = NULL; + code = createStreamSessionAggOperatorInfo(downstream, pPhyNode, pTaskInfo, pHandle, &pOperator); + if (pOperator == NULL || code != 0) { QUERY_CHECK_CODE(code, lino, _error); } @@ -3979,11 +3990,12 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream if (numOfChild > 0) { pInfo->pChildren = taosArrayInit(numOfChild, sizeof(void*)); for (int32_t i = 0; i < numOfChild; i++) { - SOperatorInfo* pChildOp = createStreamFinalSessionAggOperatorInfo(NULL, pPhyNode, pTaskInfo, 0, pHandle); - if (pChildOp == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + SOperatorInfo* pChildOp = NULL; + code = createStreamFinalSessionAggOperatorInfo(NULL, pPhyNode, pTaskInfo, 0, pHandle, &pChildOp); + if (pChildOp == NULL || code != 0) { QUERY_CHECK_CODE(code, lino, _error); } + SStreamSessionAggOperatorInfo* pChInfo = pChildOp->info; pChInfo->twAggSup.calTrigger = STREAM_TRIGGER_AT_ONCE; pAPI->stateStore.streamStateSetNumber(pChInfo->streamAggSup.pState, i, pInfo->primaryTsIndex); @@ -4010,7 +4022,8 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream pInfo->twAggSup.calTrigger = STREAM_TRIGGER_AT_ONCE; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -4021,7 +4034,7 @@ _error: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); } - return NULL; + return code; } void destroyStreamStateOperatorInfo(void* param) { @@ -4779,14 +4792,15 @@ _end: } } -SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo, SReadHandle* pHandle) { +int32_t createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, + SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = 0; + int32_t lino = 0; + SStreamStateWinodwPhysiNode* pStateNode = (SStreamStateWinodwPhysiNode*)pPhyNode; int32_t tsSlotId = ((SColumnNode*)pStateNode->window.pTspk)->slotId; SColumnNode* pColNode = (SColumnNode*)(pStateNode->pStateKey); - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; - SStreamStateAggOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamStateAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -4878,14 +4892,15 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyStreamStateOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - qError("%s failed at line %d since %s. task:%s", __func__, lino, tstrerror(code), GET_TASKID(pTaskInfo)); - return NULL; + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return code; } #ifdef BUILD_NO_CALL @@ -5070,18 +5085,22 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo, SReadHandle* pHandle) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; +int32_t createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, + SReadHandle* pHandle, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + int32_t numOfCols = 0; + SStreamIntervalOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamIntervalOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; QUERY_CHECK_CODE(code, lino, _error); } + SStreamIntervalPhysiNode* pIntervalPhyNode = (SStreamIntervalPhysiNode*)pPhyNode; - int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pIntervalPhyNode->window.pFuncs, NULL, &numOfCols); SSDataBlock* pResBlock = createDataBlockFromDescNode(pPhyNode->pOutputDataBlockDesc); @@ -5190,13 +5209,14 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyStreamFinalIntervalOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } static void doStreamMidIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBlock, SSHashObj* pUpdatedMap) { diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index f00a0e175c..dc3c8f8070 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -1874,7 +1874,6 @@ static void getDBNameFromCondition(SNode* pCondition, const char* dbName) { 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}; @@ -1883,7 +1882,7 @@ static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) if (isTaskKilled(pOperator->pTaskInfo)) { setOperatorCompleted(pOperator); (*ppRes) = NULL; - return code; + return pTaskInfo->code; } blockDataCleanup(pInfo->pRes); @@ -1926,10 +1925,10 @@ static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) continue; } (*ppRes) = pBlock; - return code; + return pTaskInfo->code; } else { (*ppRes) = NULL; - return code; + return pTaskInfo->code; } } } @@ -1937,6 +1936,9 @@ static int32_t doSysTableScanNext(SOperatorInfo* pOperator, SSDataBlock** ppRes) static SSDataBlock* doSysTableScan(SOperatorInfo* pOperator) { SSDataBlock* pRes = NULL; int32_t code = doSysTableScanNext(pOperator, &pRes); + if (code) { + terrno = code; + } return pRes; } @@ -2065,13 +2067,16 @@ static SSDataBlock* sysTableScanFromMNode(SOperatorInfo* pOperator, SSysTableSca } } -SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScanPhysiNode* pScanPhyNode, - const char* pUser, SExecTaskInfo* pTaskInfo) { +int32_t createSysTableScanOperatorInfo(void* readHandle, SSystemTableScanPhysiNode* pScanPhyNode, + const char* pUser, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SSysTableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SSysTableScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -2122,7 +2127,8 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock); pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doSysTableScan, NULL, destroySysScanOperator, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -2133,7 +2139,7 @@ _error: } taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void extractTbnameSlotId(SSysTableScanInfo* pInfo, const SScanPhysiNode* pScanNode) { @@ -2667,14 +2673,16 @@ static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pC return TSDB_CODE_SUCCESS; } -SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, - STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; +int32_t createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, + STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; + int32_t lino = 0; SBlockDistInfo* pInfo = taosMemoryCalloc(1, sizeof(SBlockDistInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { - pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; + pTaskInfo->code = code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -2709,10 +2717,11 @@ SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDi OP_NOT_OPENED, pInfo, pTaskInfo); pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doBlockInfoScan, NULL, destroyBlockDistScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: taosMemoryFreeClear(pInfo); taosMemoryFreeClear(pOperator); - return NULL; + return code; } diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c index 5fbc8007e3..6eaef50491 100644 --- a/source/libs/executor/src/timesliceoperator.c +++ b/source/libs/executor/src/timesliceoperator.c @@ -334,7 +334,8 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp 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); + code = colDataSetVal(pDst, rows, pkey->pData, false); + QUERY_CHECK_CODE(code, lino, _end); } else { colDataSetNULL(pDst, rows); } @@ -1108,12 +1109,16 @@ static int32_t extractPkColumnFromFuncs(SNodeList* pFuncs, bool* pHasPk, SColumn return TSDB_CODE_SUCCESS; } -SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; +int32_t createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + + int32_t code = 0; + int32_t lino = 0; STimeSliceOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(STimeSliceOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + if (pOperator == NULL || pInfo == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -1183,8 +1188,9 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode // int32_t code = initKeeperInfo(pSliceInfo, pBlock, &pOperator->exprSupp); code = appendDownstream(pOperator, &downstream, 1); - QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + + *pOptrInfo = pOperator; + return code; _error: if (code != TSDB_CODE_SUCCESS) { @@ -1192,8 +1198,8 @@ _error: } taosMemoryFree(pInfo); taosMemoryFree(pOperator); - pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + pTaskInfo->code = code; + return code; } void destroyTimeSliceOperatorInfo(void* param) { diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 8265d270b2..a1ec923352 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -903,7 +903,9 @@ static int32_t doOpenIntervalAgg(SOperatorInfo* pOperator) { if (hashIntervalAgg(pOperator, &pInfo->binfo.resultRowInfo, pBlock, scanFlag)) break; } - initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, pInfo->binfo.outputTsOrder); + code = initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, pInfo->binfo.outputTsOrder); + QUERY_CHECK_CODE(code, lino, _end); + OPTR_SET_OPENED(pOperator); pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; @@ -1042,7 +1044,9 @@ static int32_t openStateWindowAggOptr(SOperatorInfo* pOperator) { } pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; - initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, TSDB_ORDER_ASC); + code = initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, TSDB_ORDER_ASC); + QUERY_CHECK_CODE(code, lino, _end); + pOperator->status = OP_RES_TO_RETURN; _end: @@ -1267,13 +1271,16 @@ _end: return needed; } -SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPhysiNode* pPhyNode, - SExecTaskInfo* pTaskInfo) { +int32_t createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, + SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SIntervalAggOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SIntervalAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -1363,7 +1370,8 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPh goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -1371,7 +1379,7 @@ _error: } taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } // todo handle multiple timeline cases. assume no timeline interweaving @@ -1512,7 +1520,9 @@ static int32_t doSessionWindowAggNext(SOperatorInfo* pOperator, SSDataBlock** pp // restore the value pOperator->status = OP_RES_TO_RETURN; - initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, TSDB_ORDER_ASC); + code = initGroupedResultInfo(&pInfo->groupResInfo, pInfo->aggSup.pResultRowHashTable, TSDB_ORDER_ASC); + QUERY_CHECK_CODE(code, lino, _end); + code = blockDataEnsureCapacity(pBInfo->pRes, pOperator->resultInfo.capacity); QUERY_CHECK_CODE(code, lino, _end); while (1) { @@ -1549,13 +1559,16 @@ static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { } // todo make this as an non-blocking operator -SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWinodwPhysiNode* pStateNode, - SExecTaskInfo* pTaskInfo) { +int32_t createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWinodwPhysiNode* pStateNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SStateWindowOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SStateWindowOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -1566,8 +1579,7 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWi if (pStateNode->window.pExprs != NULL) { int32_t numOfScalarExpr = 0; SExprInfo* pScalarExprInfo = createExprInfo(pStateNode->window.pExprs, NULL, &numOfScalarExpr); - int32_t code = - initExprSupp(&pInfo->scalarSup, pScalarExprInfo, numOfScalarExpr, &pTaskInfo->storageAPI.functionStore); + code = initExprSupp(&pInfo->scalarSup, pScalarExprInfo, numOfScalarExpr, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -1622,7 +1634,8 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWi goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: if (pInfo != NULL) { @@ -1631,7 +1644,7 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroySWindowOperatorInfo(void* param) { @@ -1650,13 +1663,16 @@ void destroySWindowOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, - SExecTaskInfo* pTaskInfo) { +int32_t createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SSessionAggOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SSessionAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -1715,13 +1731,14 @@ SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionW goto _error; } - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroySWindowOperatorInfo(pInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } void destroyMAIOperatorInfo(void* param) { @@ -1950,18 +1967,22 @@ static SSDataBlock* mergeAlignedIntervalAgg(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, - SExecTaskInfo* pTaskInfo) { +int32_t createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SMergeAlignedIntervalAggOperatorInfo* miaInfo = taosMemoryCalloc(1, sizeof(SMergeAlignedIntervalAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (miaInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } miaInfo->intervalAggOperatorInfo = taosMemoryCalloc(1, sizeof(SIntervalAggOperatorInfo)); if (miaInfo->intervalAggOperatorInfo == NULL) { + code = terrno; goto _error; } @@ -2019,13 +2040,14 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, code = appendDownstream(pOperator, &downstream, 1); QUERY_CHECK_CODE(code, lino, _error); - return pOperator; + *pOptrInfo = pOperator; + return code; _error: destroyMAIOperatorInfo(miaInfo); taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } //===================================================================================================================== @@ -2276,13 +2298,16 @@ static SSDataBlock* doMergeIntervalAgg(SOperatorInfo* pOperator) { return pRes; } -SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, - SExecTaskInfo* pTaskInfo) { +int32_t createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, + SExecTaskInfo* pTaskInfo, SOperatorInfo** pOptrInfo) { + QRY_OPTR_CHECK(pOptrInfo); + int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; SMergeIntervalAggOperatorInfo* pMergeIntervalInfo = taosMemoryCalloc(1, sizeof(SMergeIntervalAggOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pMergeIntervalInfo == NULL || pOperator == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; goto _error; } @@ -2342,8 +2367,8 @@ SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMerge goto _error; } - return pOperator; - + *pOptrInfo = pOperator; + return code; _error: if (pMergeIntervalInfo != NULL) { destroyMergeIntervalOperatorInfo(pMergeIntervalInfo); @@ -2351,5 +2376,5 @@ _error: taosMemoryFreeClear(pOperator); pTaskInfo->code = code; - return NULL; + return code; } diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c index b4e5a9a01a..36c3d49810 100644 --- a/source/libs/executor/src/tsort.c +++ b/source/libs/executor/src/tsort.c @@ -169,7 +169,13 @@ static void* tupleGetField(char* t, uint32_t colIdx, uint32_t colNum) { int32_t tsortGetSortedDataBlock(const SSortHandle* pSortHandle, SSDataBlock** pBlock) { if (pBlock == NULL) { - return TSDB_CODE_INVALID_PARA; + *pBlock = NULL; + return TSDB_CODE_SUCCESS; + } + + if (pSortHandle->pDataBlock == NULL) { + *pBlock = NULL; + return TSDB_CODE_SUCCESS; } *pBlock = createOneDataBlock(pSortHandle->pDataBlock, false); @@ -2293,12 +2299,11 @@ void tsortSetMergeLimit(SSortHandle* pHandle, int64_t mergeLimit) { pHandle->mergeLimit = mergeLimit; } -int32_t tsortSetFetchRawDataFp(SSortHandle* pHandle, _sort_fetch_block_fn_t fetchFp, void (*fp)(SSDataBlock*, void*), +void tsortSetFetchRawDataFp(SSortHandle* pHandle, _sort_fetch_block_fn_t fetchFp, void (*fp)(SSDataBlock*, void*), void* param) { pHandle->fetchfp = fetchFp; pHandle->beforeFp = fp; pHandle->param = param; - return TSDB_CODE_SUCCESS; } void tsortSetComparFp(SSortHandle* pHandle, _sort_merge_compar_fn_t fp) { diff --git a/source/libs/executor/test/joinTests.cpp b/source/libs/executor/test/joinTests.cpp index 95a4a5e841..11bb9ad2b1 100755 --- a/source/libs/executor/test/joinTests.cpp +++ b/source/libs/executor/test/joinTests.cpp @@ -2853,7 +2853,7 @@ void resetForJoinRerun(int32_t dsNum, SSortMergeJoinPhysiNode* pNode, SExecTaskI SOperatorInfo* pDownstreams[2]; createDummyDownstreamOperators(2, pDownstreams); SOperatorInfo* ppDownstreams[] = {pDownstreams[0], pDownstreams[1]}; - jtCtx.pJoinOp = createMergeJoinOperatorInfo(ppDownstreams, 2, pNode, pTask); + int32_t code = createMergeJoinOperatorInfo(ppDownstreams, 2, pNode, pTask, &jtCtx.pJoinOp); ASSERT_TRUE(NULL != jtCtx.pJoinOp); } diff --git a/source/libs/geometry/src/geosWrapper.c b/source/libs/geometry/src/geosWrapper.c index 2142b3d62d..6ca8a39bb5 100644 --- a/source/libs/geometry/src/geosWrapper.c +++ b/source/libs/geometry/src/geosWrapper.c @@ -29,7 +29,7 @@ void geosFreeBuffer(void *buffer) { void geosErrMsgeHandler(const char *errMsg, void *userData) { char *targetErrMsg = userData; - snprintf(targetErrMsg, 512, "%s", errMsg); + (void)snprintf(targetErrMsg, 512, "%s", errMsg); } int32_t initCtxMakePoint() { @@ -94,7 +94,7 @@ static int32_t initWktRegex(pcre2_code **ppRegex, pcre2_match_data **ppMatchData return TSDB_CODE_OUT_OF_MEMORY; } - sprintf( + (void)sprintf( wktPatternWithSpace, "^( *)point( *)z?m?( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *)\\)))|linestring( *)z?m?( " @@ -264,7 +264,7 @@ int32_t doAsText(const unsigned char *inputGeom, size_t size, char **outputWKT) SGeosContext *geosCtx = getThreadLocalGeosCtx(); GEOSGeometry *geom = NULL; - unsigned char *wkt = NULL; + char *wkt = NULL; geom = GEOSWKBReader_read_r(geosCtx->handle, geosCtx->WKBReader, inputGeom, size); if (geom == NULL) { diff --git a/source/libs/index/inc/indexFstFile.h b/source/libs/index/inc/indexFstFile.h index d15141f79a..b1ff4fee34 100644 --- a/source/libs/index/inc/indexFstFile.h +++ b/source/libs/index/inc/indexFstFile.h @@ -78,11 +78,11 @@ typedef struct IdxFstFile { CheckSummer summer; } IdxFstFile; -int idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len); +int32_t idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len); -int idxFileRead(IdxFstFile* write, uint8_t* buf, uint32_t len); +int32_t idxFileRead(IdxFstFile* write, uint8_t* buf, uint32_t len); -int idxFileFlush(IdxFstFile* write); +int32_t idxFileFlush(IdxFstFile* write); uint32_t idxFileMaskedCheckSum(IdxFstFile* write); diff --git a/source/libs/index/inc/indexTfile.h b/source/libs/index/inc/indexTfile.h index 7425b13ce9..51d3cc0e7b 100644 --- a/source/libs/index/inc/indexTfile.h +++ b/source/libs/index/inc/indexTfile.h @@ -99,23 +99,24 @@ typedef struct TFileReaderOpt { TFileCache* tfileCacheCreate(SIndex* idx, const char* path); void tfileCacheDestroy(TFileCache* tcache); TFileReader* tfileCacheGet(TFileCache* tcache, ICacheKey* key); -void tfileCachePut(TFileCache* tcache, ICacheKey* key, TFileReader* reader); +int32_t tfileCachePut(TFileCache* tcache, ICacheKey* key, TFileReader* reader); TFileReader* tfileGetReaderByCol(IndexTFile* tf, uint64_t suid, char* colName); -TFileReader* tfileReaderOpen(SIndex* idx, uint64_t suid, int64_t version, const char* colName); -TFileReader* tfileReaderCreate(IFileCtx* ctx); -void tfileReaderDestroy(TFileReader* reader); -int tfileReaderSearch(TFileReader* reader, SIndexTermQuery* query, SIdxTRslt* tr); -void tfileReaderRef(TFileReader* reader); -void tfileReaderUnRef(TFileReader* reader); +int32_t tfileReaderOpen(SIndex* idx, uint64_t suid, int64_t version, const char* colName, TFileReader** pReader); +int32_t tfileReaderCreate(IFileCtx* ctx, TFileReader** pReader); +void tfileReaderDestroy(TFileReader* reader); +int tfileReaderSearch(TFileReader* reader, SIndexTermQuery* query, SIdxTRslt* tr); +void tfileReaderRef(TFileReader* reader); +void tfileReaderUnRef(TFileReader* reader); -TFileWriter* tfileWriterOpen(char* path, uint64_t suid, int64_t version, const char* colName, uint8_t type); -void tfileWriterClose(TFileWriter* tw); -TFileWriter* tfileWriterCreate(IFileCtx* ctx, TFileHeader* header); -void tfileWriterDestroy(TFileWriter* tw); -int tfileWriterPut(TFileWriter* tw, void* data, bool order); -int tfileWriterFinish(TFileWriter* tw); +int32_t tfileWriterOpen(char* path, uint64_t suid, int64_t version, const char* colName, uint8_t type, + TFileWriter** pWriter); +void tfileWriterClose(TFileWriter* tw); +int32_t tfileWriterCreate(IFileCtx* ctx, TFileHeader* header, TFileWriter** pWriter); +void tfileWriterDestroy(TFileWriter* tw); +int tfileWriterPut(TFileWriter* tw, void* data, bool order); +int tfileWriterFinish(TFileWriter* tw); // IndexTFile* idxTFileCreate(SIndex* idx, const char* path); diff --git a/source/libs/index/src/index.c b/source/libs/index/src/index.c index d7e5d87e80..fad04798a8 100644 --- a/source/libs/index/src/index.c +++ b/source/libs/index/src/index.c @@ -86,10 +86,10 @@ static TdThreadOnce isInit = PTHREAD_ONCE_INIT; // static void indexInit(); static int idxTermSearch(SIndex* sIdx, SIndexTermQuery* term, SArray** result); -static void idxInterRsltDestroy(SArray* results); -static int idxMergeFinalResults(SArray* in, EIndexOperatorType oType, SArray* out); +static void idxInterRsltDestroy(SArray* results); +static int32_t idxMergeFinalResults(SArray* in, EIndexOperatorType oType, SArray* out); -static int idxGenTFile(SIndex* index, IndexCache* cache, SArray* batch); +static int32_t idxGenTFile(SIndex* index, IndexCache* cache, SArray* batch); // merge cache and tfile by opera type static void idxMergeCacheAndTFile(SArray* result, IterateValue* icache, IterateValue* iTfv, SIdxTRslt* helper); @@ -106,30 +106,37 @@ static void indexWait(void* idx) { tsem_wait(&pIdx->sem); } -int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) { - int ret = TSDB_CODE_SUCCESS; +int32_t indexOpen(SIndexOpts* opts, const char* path, SIndex** index) { taosThreadOnce(&isInit, indexEnvInit); + + int code = TSDB_CODE_SUCCESS; SIndex* idx = taosMemoryCalloc(1, sizeof(SIndex)); if (idx == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, END); } idx->lru = taosLRUCacheInit(opts->cacheSize, -1, .5); if (idx->lru == NULL) { - ret = TSDB_CODE_OUT_OF_MEMORY; - goto END; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, END); } taosLRUCacheSetStrictCapacity(idx->lru, false); idx->tindex = idxTFileCreate(idx, path); if (idx->tindex == NULL) { - ret = TSDB_CODE_OUT_OF_MEMORY; - goto END; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, END); } idx->colObj = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK); + if (idx->colObj == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, END); + } + idx->version = 1; idx->path = taosStrdup(path); + if (idx->path == NULL) { + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, END); + } + taosThreadMutexInit(&idx->mtx, NULL); tsem_init(&idx->sem, 0, 0); @@ -138,17 +145,18 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) { idxAcquireRef(idx->refId); *index = idx; - return ret; + return code; END: if (idx != NULL) { indexDestroy(idx); } *index = NULL; - return ret; + return code; } void indexDestroy(void* handle) { + if (handle == NULL) return; SIndex* idx = handle; taosThreadMutexDestroy(&idx->mtx); tsem_destroy(&idx->sem); @@ -202,7 +210,7 @@ void idxReleaseRef(int64_t ref) { taosReleaseRef(indexRefMgt, ref); } -int indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) { +int32_t indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) { // TODO(yihao): reduce the lock range taosThreadMutexLock(&index->mtx); for (int i = 0; i < taosArrayGetSize(fVals); i++) { @@ -239,7 +247,7 @@ int indexPut(SIndex* index, SIndexMultiTerm* fVals, uint64_t uid) { } return 0; } -int indexSearch(SIndex* index, SIndexMultiTermQuery* multiQuerys, SArray* result) { +int32_t indexSearch(SIndex* index, SIndexMultiTermQuery* multiQuerys, SArray* result) { EIndexOperatorType opera = multiQuerys->opera; // relation of querys SArray* iRslts = taosArrayInit(4, POINTER_BYTES); @@ -285,7 +293,7 @@ void indexMultiTermQueryDestroy(SIndexMultiTermQuery* pQuery) { taosArrayDestroy(pQuery->query); taosMemoryFree(pQuery); }; -int indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EIndexQueryType qType) { +int32_t indexMultiTermQueryAdd(SIndexMultiTermQuery* pQuery, SIndexTerm* term, EIndexQueryType qType) { SIndexTermQuery q = {.qType = qType, .term = term}; taosArrayPush(pQuery->query, &q); return 0; @@ -332,7 +340,7 @@ void indexTermDestroy(SIndexTerm* p) { SIndexMultiTerm* indexMultiTermCreate() { return taosArrayInit(4, sizeof(SIndexTerm*)); } -int indexMultiTermAdd(SIndexMultiTerm* terms, SIndexTerm* term) { +int32_t indexMultiTermAdd(SIndexMultiTerm* terms, SIndexTerm* term) { taosArrayPush(terms, &term); return 0; } @@ -392,7 +400,7 @@ bool indexJsonIsRebuild(SIndexJson* idx) { return ((SIdxStatus)atomic_load_8(&idx->status)) == kRebuild ? true : false; } -static int idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result) { +static int32_t idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result) { SIndexTerm* term = query->term; const char* colName = term->colName; int32_t nColName = term->nColName; @@ -404,6 +412,7 @@ static int idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result) ICacheKey key = { .suid = term->suid, .colName = term->colName, .nColName = strlen(term->colName), .colType = term->colType}; indexDebug("r suid:%" PRIu64 ", colName:%s, colType:%d", key.suid, key.colName, key.colType); + int32_t sz = idxSerialCacheKey(&key, buf); taosThreadMutexLock(&sIdx->mtx); @@ -412,7 +421,11 @@ static int idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result) taosThreadMutexUnlock(&sIdx->mtx); *result = taosArrayInit(4, sizeof(uint64_t)); + if (*result == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } // TODO: iterator mem and tidex + STermValueType s = kTypeValue; int64_t st = taosGetTimestampUs(); @@ -445,7 +458,7 @@ static int idxTermSearch(SIndex* sIdx, SIndexTermQuery* query, SArray** result) return 0; END: idxTRsltDestroy(tr); - return -1; + return 0; } static void idxInterRsltDestroy(SArray* results) { if (results == NULL) { @@ -460,7 +473,7 @@ static void idxInterRsltDestroy(SArray* results) { taosArrayDestroy(results); } -static int idxMergeFinalResults(SArray* in, EIndexOperatorType oType, SArray* out) { +static int32_t idxMergeFinalResults(SArray* in, EIndexOperatorType oType, SArray* out) { // refactor, merge interResults into fResults by oType for (int i = 0; i < taosArrayGetSize(in); i++) { SArray* t = taosArrayGetP(in, i); @@ -527,9 +540,9 @@ static void idxDestroyFinalRslt(SArray* result) { taosArrayDestroy(result); } -int idxFlushCacheToTFile(SIndex* sIdx, void* cache, bool quit) { +int32_t idxFlushCacheToTFile(SIndex* sIdx, void* cache, bool quit) { if (sIdx == NULL) { - return -1; + return TSDB_CODE_INVALID_PTR; } indexInfo("suid %" PRIu64 " merge cache into tindex", sIdx->suid); @@ -537,8 +550,9 @@ int idxFlushCacheToTFile(SIndex* sIdx, void* cache, bool quit) { IndexCache* pCache = (IndexCache*)cache; - while (quit && atomic_load_32(&pCache->merging) == 1) - ; + do { + } while (quit && atomic_load_32(&pCache->merging) == 1); + TFileReader* pReader = tfileGetReaderByCol(sIdx->tindex, pCache->suid, pCache->colName); if (pReader == NULL) { indexWarn("empty tfile reader found"); @@ -568,6 +582,8 @@ int idxFlushCacheToTFile(SIndex* sIdx, void* cache, bool quit) { bool tn = tfileIter ? tfileIter->next(tfileIter) : false; SIdxTRslt* tr = idxTRsltCreate(); + if (tr == NULL) { + } while (cn == true || tn == true) { IterateValue* cv = (cn == true) ? cacheIter->getValue(cacheIter) : NULL; IterateValue* tv = (tn == true) ? tfileIter->getValue(tfileIter) : NULL; @@ -650,27 +666,30 @@ static int64_t idxGetAvailableVer(SIndex* sIdx, IndexCache* cache) { tfileReaderUnRef(rd); return ver; } -static int idxGenTFile(SIndex* sIdx, IndexCache* cache, SArray* batch) { +static int32_t idxGenTFile(SIndex* sIdx, IndexCache* cache, SArray* batch) { + int32_t code = 0; + int64_t version = idxGetAvailableVer(sIdx, cache); indexInfo("file name version: %" PRId64 "", version); - uint8_t colType = cache->type; - TFileWriter* tw = tfileWriterOpen(sIdx->path, cache->suid, version, cache->colName, colType); - if (tw == NULL) { - indexError("failed to open file to write"); - return -1; + TFileWriter* tw = NULL; + + code = tfileWriterOpen(sIdx->path, cache->suid, version, cache->colName, cache->type, &tw); + if (code != 0) { + indexError("failed to open file to write since %s", tstrerror(code)); } - int ret = tfileWriterPut(tw, batch, true); - if (ret != 0) { - indexError("failed to write into tindex "); + code = tfileWriterPut(tw, batch, true); + if (code != 0) { + indexError("failed to write into tindex since %s", tstrerror(code)); goto END; } tfileWriterClose(tw); - TFileReader* reader = tfileReaderOpen(sIdx, cache->suid, version, cache->colName); - if (reader == NULL) { - return -1; + TFileReader* reader = NULL; + code = tfileReaderOpen(sIdx, cache->suid, version, cache->colName, &reader); + if (code != 0) { + goto END; } indexInfo("success to create tfile, reopen it, %s", reader->ctx->file.buf); @@ -680,16 +699,17 @@ static int idxGenTFile(SIndex* sIdx, IndexCache* cache, SArray* batch) { ICacheKey key = {.suid = cache->suid, .colName = header->colName, .nColName = strlen(header->colName)}; taosThreadMutexLock(&tf->mtx); - tfileCachePut(tf->cache, &key, reader); + code = tfileCachePut(tf->cache, &key, reader); taosThreadMutexUnlock(&tf->mtx); - return ret; + return code; + END: if (tw != NULL) { idxFileCtxDestroy(tw->ctx, true); taosMemoryFree(tw); } - return -1; + return code; } int32_t idxSerialCacheKey(ICacheKey* key, char* buf) { diff --git a/source/libs/index/src/indexCache.c b/source/libs/index/src/indexCache.c index a6fbc73332..f2aefcfc41 100644 --- a/source/libs/index/src/indexCache.c +++ b/source/libs/index/src/indexCache.c @@ -129,6 +129,10 @@ static int32_t cacheSearchCompareFunc(void* cache, SIndexTerm* term, SIdxTRslt* _cache_range_compare cmpFn = idxGetCompare(type); CacheTerm* pCt = taosMemoryCalloc(1, sizeof(CacheTerm)); + if (pCt == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + pCt->colVal = term->colVal; pCt->colType = term->colType; pCt->version = atomic_load_64(&pCache->version); @@ -182,6 +186,10 @@ static int32_t cacheSearchTerm_JSON(void* cache, SIndexTerm* term, SIdxTRslt* tr IndexCache* pCache = mem->pCache; CacheTerm* pCt = taosMemoryCalloc(1, sizeof(CacheTerm)); + if (pCt == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + pCt->colVal = term->colVal; pCt->version = atomic_load_64(&pCache->version); @@ -340,7 +348,8 @@ IndexCache* idxCacheCreate(SIndex* idx, uint64_t suid, const char* colName, int8 cache->mem = idxInternalCacheCreate(type); cache->mem->pCache = cache; - cache->colName = IDX_TYPE_CONTAIN_EXTERN_TYPE(type, TSDB_DATA_TYPE_JSON) ? taosStrdup(JSON_COLUMN) : taosStrdup(colName); + cache->colName = + IDX_TYPE_CONTAIN_EXTERN_TYPE(type, TSDB_DATA_TYPE_JSON) ? taosStrdup(JSON_COLUMN) : taosStrdup(colName); cache->type = type; cache->index = idx; cache->version = 0; diff --git a/source/libs/index/src/indexFilter.c b/source/libs/index/src/indexFilter.c index 323f855601..a7e539efc6 100644 --- a/source/libs/index/src/indexFilter.c +++ b/source/libs/index/src/indexFilter.c @@ -135,7 +135,7 @@ static FORCE_INLINE int32_t sifGetOperParamNum(EOperatorType ty) { static FORCE_INLINE int32_t sifValidOp(EOperatorType ty) { if ((ty >= OP_TYPE_ADD && ty <= OP_TYPE_BIT_OR) || (ty == OP_TYPE_IN || ty == OP_TYPE_NOT_IN) || (ty == OP_TYPE_LIKE || ty == OP_TYPE_NOT_LIKE || ty == OP_TYPE_MATCH || ty == OP_TYPE_NMATCH)) { - return -1; + return TSDB_CODE_INVALID_PARA; } return 0; } @@ -209,7 +209,7 @@ static FORCE_INLINE int32_t sifGetValueFromNode(SNode *node, char **value) { static FORCE_INLINE int32_t sifInitJsonParam(SNode *node, SIFParam *param, SIFCtx *ctx) { SOperatorNode *nd = (SOperatorNode *)node; if (nodeType(node) != QUERY_NODE_OPERATOR) { - return -1; + return TSDB_CODE_INVALID_PARA; } SColumnNode *l = (SColumnNode *)nd->pLeft; SValueNode *r = (SValueNode *)nd->pRight; @@ -390,15 +390,7 @@ static int32_t sifInitOperParams(SIFParam **params, SOperatorNode *node, SIFCtx SIF_ERR_JRET(sifInitParam(node->pLeft, ¶mList[0], ctx)); if (nParam > 1) { - // if (sifNeedConvertCond(node->pLeft, node->pRight)) { - // SIF_ERR_JRET(sifInitParamValByCol(node->pLeft, node->pRight, ¶mList[1], ctx)); - // } else { SIF_ERR_JRET(sifInitParam(node->pRight, ¶mList[1], ctx)); - // } - // if (paramList[0].colValType == TSDB_DATA_TYPE_JSON && - // ((SOperatorNode *)(node))->opType == OP_TYPE_JSON_CONTAINS) { - // return TSDB_CODE_OUT_OF_MEMORY; - //} } *params = paramList; return TSDB_CODE_SUCCESS; @@ -485,7 +477,7 @@ int32_t sifStr2Num(char *buf, int32_t len, int8_t type, void *val) { if (IS_SIGNED_NUMERIC_TYPE(type)) { int64_t v = 0; if (0 != toInteger(buf, len, 10, &v)) { - return -1; + return TSDB_CODE_INVALID_PARA; } if (type == TSDB_DATA_TYPE_BIGINT) { *(int64_t *)val = v; @@ -505,7 +497,7 @@ int32_t sifStr2Num(char *buf, int32_t len, int8_t type, void *val) { } else if (IS_UNSIGNED_NUMERIC_TYPE(type)) { uint64_t v = 0; if (0 != toUInteger(buf, len, 10, &v)) { - return -1; + return TSDB_CODE_INVALID_PARA; } if (type == TSDB_DATA_TYPE_UBIGINT) { *(uint64_t *)val = v; @@ -517,7 +509,7 @@ int32_t sifStr2Num(char *buf, int32_t len, int8_t type, void *val) { *(uint16_t *)val = v; } } else { - return -1; + return TSDB_CODE_INVALID_PARA; } return 0; } @@ -526,7 +518,7 @@ static int32_t sifSetFltParam(SIFParam *left, SIFParam *right, SDataTypeBuf *typ int32_t code = 0; int8_t ltype = left->colValType, rtype = right->colValType; if (!IS_NUMERIC_TYPE(ltype) || !((IS_NUMERIC_TYPE(rtype)) || rtype == TSDB_DATA_TYPE_VARCHAR)) { - return -1; + return TSDB_CODE_INVALID_PARA; } if (ltype == TSDB_DATA_TYPE_FLOAT) { float f = 0; @@ -661,7 +653,7 @@ static int32_t sifDoIndex(SIFParam *left, SIFParam *right, int8_t operType, SIFP int8_t useIndex = sifShouldUseIndexBasedOnType(left, right); if (!useIndex) { output->status = SFLT_NOT_INDEX; - return -1; + return TSDB_CODE_INVALID_PARA; } bool reverse = false, equal = false; @@ -682,7 +674,7 @@ static int32_t sifDoIndex(SIFParam *left, SIFParam *right, int8_t operType, SIFP if (sifSetFltParam(left, right, &typedata, ¶m) != 0) { output->status = SFLT_NOT_INDEX; - return -1; + return TSDB_CODE_INVALID_PARA; } ret = left->api.metaFilterTableIds(arg->metaEx, ¶m, output->result); @@ -823,7 +815,7 @@ static FORCE_INLINE int32_t sifGetOperFn(int32_t funcId, sif_func_t *func, SIdxF } static int32_t sifExecOper(SOperatorNode *node, SIFCtx *ctx, SIFParam *output) { - int32_t code = -1; + int32_t code = TSDB_CODE_INVALID_PARA; if (sifValidOp(node->opType) < 0) { code = TSDB_CODE_QRY_INVALID_INPUT; ctx->code = code; diff --git a/source/libs/index/src/indexFstFile.c b/source/libs/index/src/indexFstFile.c index 43f15f5196..d86b3d476f 100644 --- a/source/libs/index/src/indexFstFile.c +++ b/source/libs/index/src/indexFstFile.c @@ -279,7 +279,9 @@ void idxFileDestroy(IdxFstFile* cw) { taosMemoryFree(cw); } -int idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len) { +int32_t idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len) { + int32_t code = 0; + if (write == NULL) { return 0; } @@ -288,7 +290,8 @@ int idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len) { int nWrite = ctx->write(ctx, buf, len); ASSERTS(nWrite == len, "index write incomplete data"); if (nWrite != len) { - return -1; + code = TAOS_SYSTEM_ERROR(errno); + return code; } write->count += len; @@ -296,7 +299,7 @@ int idxFileWrite(IdxFstFile* write, uint8_t* buf, uint32_t len) { return len; } -int idxFileRead(IdxFstFile* write, uint8_t* buf, uint32_t len) { +int32_t idxFileRead(IdxFstFile* write, uint8_t* buf, uint32_t len) { if (write == NULL) { return 0; } diff --git a/source/libs/index/src/indexJson.c b/source/libs/index/src/indexJson.c index 09c1320667..c6761233b9 100644 --- a/source/libs/index/src/indexJson.c +++ b/source/libs/index/src/indexJson.c @@ -15,11 +15,11 @@ #include "index.h" #include "indexInt.h" -int indexJsonOpen(SIndexJsonOpts *opts, const char *path, SIndexJson **index) { +int32_t indexJsonOpen(SIndexJsonOpts *opts, const char *path, SIndexJson **index) { // handle return indexOpen(opts, path, index); } -int indexJsonPut(SIndexJson *index, SIndexJsonMultiTerm *terms, uint64_t uid) { +int32_t indexJsonPut(SIndexJson *index, SIndexJsonMultiTerm *terms, uint64_t uid) { for (int i = 0; i < taosArrayGetSize(terms); i++) { SIndexJsonTerm *p = taosArrayGetP(terms, i); if (p->colType == TSDB_DATA_TYPE_BOOL) { @@ -36,7 +36,7 @@ int indexJsonPut(SIndexJson *index, SIndexJsonMultiTerm *terms, uint64_t uid) { return indexPut(index, terms, uid); } -int indexJsonSearch(SIndexJson *index, SIndexJsonMultiTermQuery *tq, SArray *result) { +int32_t indexJsonSearch(SIndexJson *index, SIndexJsonMultiTermQuery *tq, SArray *result) { SArray *terms = tq->query; for (int i = 0; i < taosArrayGetSize(terms); i++) { SIndexJsonTerm *p = taosArrayGetP(terms, i); diff --git a/source/libs/index/src/indexTfile.c b/source/libs/index/src/indexTfile.c index 84d17681b4..d0166ae2e5 100644 --- a/source/libs/index/src/indexTfile.c +++ b/source/libs/index/src/indexTfile.c @@ -110,11 +110,14 @@ TFileCache* tfileCacheCreate(SIndex* idx, const char* path) { } ctx->lru = idx->lru; - TFileReader* reader = tfileReaderCreate(ctx); - if (reader == NULL) { - indexInfo("skip invalid file: %s", file); + TFileReader* reader = NULL; + + int32_t code = tfileReaderCreate(ctx, &reader); + if (code != 0) { + indexInfo("skip invalid file: %s since %s", file, tstrerror(code)); continue; } + reader->lru = idx->lru; TFileHeader* header = &reader->header; @@ -160,9 +163,12 @@ TFileReader* tfileCacheGet(TFileCache* tcache, ICacheKey* key) { return *reader; } -void tfileCachePut(TFileCache* tcache, ICacheKey* key, TFileReader* reader) { - char buf[128] = {0}; - int32_t sz = idxSerialCacheKey(key, buf); +int32_t tfileCachePut(TFileCache* tcache, ICacheKey* key, TFileReader* reader) { + int32_t code = 0; + + char buf[128] = {0}; + int32_t sz = idxSerialCacheKey(key, buf); + TFileReader** p = taosHashGet(tcache->tableCache, buf, sz); if (p != NULL && *p != NULL) { TFileReader* oldRdr = *p; @@ -171,39 +177,44 @@ void tfileCachePut(TFileCache* tcache, ICacheKey* key, TFileReader* reader) { oldRdr->remove = true; tfileReaderUnRef(oldRdr); } - taosHashPut(tcache->tableCache, buf, sz, &reader, sizeof(void*)); - tfileReaderRef(reader); - return; + + code = taosHashPut(tcache->tableCache, buf, sz, &reader, sizeof(void*)); + if (code == 0) { + tfileReaderRef(reader); + } + return code; } -TFileReader* tfileReaderCreate(IFileCtx* ctx) { +int32_t tfileReaderCreate(IFileCtx* ctx, TFileReader** pReader) { + int32_t code = 0; TFileReader* reader = taosMemoryCalloc(1, sizeof(TFileReader)); if (reader == NULL) { - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } reader->ctx = ctx; reader->remove = false; - if (0 != tfileReaderVerify(reader)) { + if ((code = tfileReaderVerify(reader)) != 0) { indexError("invalid tfile, suid:%" PRIu64 ", colName:%s", reader->header.suid, reader->header.colName); - tfileReaderDestroy(reader); - return NULL; + TAOS_CHECK_GOTO(code, NULL, _End); } - if (0 != tfileReaderLoadHeader(reader)) { + if ((code = tfileReaderLoadHeader(reader)) != 0) { indexError("failed to load index header, suid:%" PRIu64 ", colName:%s", reader->header.suid, reader->header.colName); - tfileReaderDestroy(reader); - return NULL; + TAOS_CHECK_GOTO(code, NULL, _End); } - if (0 != tfileReaderLoadFst(reader)) { + if ((code = tfileReaderLoadFst(reader)) != 0) { indexError("failed to load index fst, suid:%" PRIu64 ", colName:%s, code:0x%x", reader->header.suid, reader->header.colName, errno); - tfileReaderDestroy(reader); - return NULL; + TAOS_CHECK_GOTO(code, NULL, _End); } - return reader; + *pReader = reader; + return code; +_End: + tfileReaderDestroy(reader); + return code; } void tfileReaderDestroy(TFileReader* reader) { if (reader == NULL) { @@ -479,9 +490,10 @@ static int32_t tfSearchCompareFunc_JSON(void* reader, SIndexTerm* tem, SIdxTRslt return TSDB_CODE_SUCCESS; } int tfileReaderSearch(TFileReader* reader, SIndexTermQuery* query, SIdxTRslt* tr) { + int ret = 0; SIndexTerm* term = query->term; EIndexQueryType qtype = query->qType; - int ret = 0; + if (IDX_TYPE_CONTAIN_EXTERN_TYPE(term->colType, TSDB_DATA_TYPE_JSON)) { ret = tfSearch[1][qtype](reader, term, tr); } else { @@ -492,12 +504,15 @@ int tfileReaderSearch(TFileReader* reader, SIndexTermQuery* query, SIdxTRslt* tr return ret; } -TFileWriter* tfileWriterOpen(char* path, uint64_t suid, int64_t version, const char* colName, uint8_t colType) { - char fullname[256] = {0}; +int32_t tfileWriterOpen(char* path, uint64_t suid, int64_t version, const char* colName, uint8_t colType, + TFileWriter** pWriter) { + int32_t code = 0; + char fullname[256] = {0}; tfileGenFileFullName(fullname, path, suid, colName, version); + IFileCtx* wcx = idxFileCtxCreate(TFILE, fullname, false, 1024 * 1024 * 64); if (wcx == NULL) { - return NULL; + return TSDB_CODE_OUT_OF_MEMORY; } TFileHeader tfh = {0}; @@ -508,34 +523,39 @@ TFileWriter* tfileWriterOpen(char* path, uint64_t suid, int64_t version, const c memcpy(tfh.colName, colName, strlen(colName)); } - return tfileWriterCreate(wcx, &tfh); + return tfileWriterCreate(wcx, &tfh, pWriter); } -TFileReader* tfileReaderOpen(SIndex* idx, uint64_t suid, int64_t version, const char* colName) { - char fullname[256] = {0}; +int32_t tfileReaderOpen(SIndex* idx, uint64_t suid, int64_t version, const char* colName, TFileReader** pReader) { + int32_t code = 0; + char fullname[256] = {0}; tfileGenFileFullName(fullname, idx->path, suid, colName, version); IFileCtx* wc = idxFileCtxCreate(TFILE, fullname, true, 1024 * 1024 * 1024); if (wc == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - indexError("failed to open readonly file: %s, reason: %s", fullname, terrstr()); - return NULL; + code = TAOS_SYSTEM_ERROR(errno); + indexError("failed to open readonly file: %s, reason: %s", fullname, tstrerror(code)); + return code; } wc->lru = idx->lru; indexTrace("open read file name:%s, file size: %" PRId64 "", wc->file.buf, wc->file.size); - TFileReader* reader = tfileReaderCreate(wc); - return reader; + return tfileReaderCreate(wc, pReader); } -TFileWriter* tfileWriterCreate(IFileCtx* ctx, TFileHeader* header) { + +int32_t tfileWriterCreate(IFileCtx* ctx, TFileHeader* header, TFileWriter** pWriter) { + int32_t code = 0; TFileWriter* tw = taosMemoryCalloc(1, sizeof(TFileWriter)); if (tw == NULL) { - indexError("index: %" PRIu64 " failed to alloc TFilerWriter", header->suid); - return NULL; + code = TSDB_CODE_OUT_OF_MEMORY; + indexError("index: %" PRIu64 " failed to alloc TFilerWriter since %s", header->suid, tstrerror(code)); + return code; } tw->ctx = ctx; tw->header = *header; tfileWriteHeader(tw); - return tw; + + *pWriter = tw; + return code; } int tfileWriterPut(TFileWriter* tw, void* data, bool order) { @@ -545,8 +565,8 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) { int8_t colType = tw->header.colType; colType = IDX_TYPE_GET_TYPE(colType); - if (colType == TSDB_DATA_TYPE_BINARY || colType == TSDB_DATA_TYPE_VARBINARY || - colType == TSDB_DATA_TYPE_NCHAR || colType == TSDB_DATA_TYPE_GEOMETRY) { + if (colType == TSDB_DATA_TYPE_BINARY || colType == TSDB_DATA_TYPE_VARBINARY || colType == TSDB_DATA_TYPE_NCHAR || + colType == TSDB_DATA_TYPE_GEOMETRY) { fn = tfileStrCompare; } else { fn = getComparFunc(colType, 0); @@ -570,6 +590,9 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) { int32_t cap = 4 * 1024; char* buf = taosMemoryCalloc(1, cap); + if (buf == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } for (size_t i = 0; i < sz; i++) { TFileValue* v = taosArrayGetP((SArray*)data, i); @@ -584,7 +607,7 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) { char* t = (char*)taosMemoryRealloc(buf, cap); if (t == NULL) { taosMemoryFree(buf); - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } buf = t; } @@ -664,7 +687,7 @@ void idxTFileDestroy(IndexTFile* tfile) { int idxTFileSearch(void* tfile, SIndexTermQuery* query, SIdxTRslt* result) { int ret = -1; if (tfile == NULL) { - return ret; + return TSDB_CODE_INVALID_DATA_FMT; } int64_t st = taosGetTimestampUs(); diff --git a/source/libs/index/src/indexUtil.c b/source/libs/index/src/indexUtil.c index cdfb79016f..f89944204d 100644 --- a/source/libs/index/src/indexUtil.c +++ b/source/libs/index/src/indexUtil.c @@ -160,10 +160,18 @@ int verdataCompare(const void *a, const void *b) { SIdxTRslt *idxTRsltCreate() { SIdxTRslt *tr = taosMemoryCalloc(1, sizeof(SIdxTRslt)); + if (tr == NULL) { + return NULL; + } tr->total = taosArrayInit(4, sizeof(uint64_t)); tr->add = taosArrayInit(4, sizeof(uint64_t)); tr->del = taosArrayInit(4, sizeof(uint64_t)); + + if (tr->total == NULL || tr->add == NULL || tr->del == NULL) { + idxTRsltClear(tr); + tr = NULL; + } return tr; } void idxTRsltClear(SIdxTRslt *tr) { diff --git a/source/libs/index/test/fstTest.cc b/source/libs/index/test/fstTest.cc index adf783d2eb..dc0b07d9af 100644 --- a/source/libs/index/test/fstTest.cc +++ b/source/libs/index/test/fstTest.cc @@ -607,7 +607,8 @@ void validateTFile(char* arg) { // std::vector threads; SIndex* index = (SIndex*)taosMemoryCalloc(1, sizeof(SIndex)); index->path = taosStrdup(arg); - TFileReader* reader = tfileReaderOpen(index, 0, 20000000, "tag1"); + TFileReader* reader = NULL; + int32_t code = tfileReaderOpen(index, 0, 20000000, "tag1", &reader); for (int i = 0; i < NUM_OF_THREAD; i++) { threads[i] = std::thread(fst_get, reader->fst); @@ -626,7 +627,8 @@ void iterTFileReader(char* path, char* uid, char* colName, char* ver) { uint64_t suid = atoi(uid); int version = atoi(ver); - TFileReader* reader = tfileReaderOpen(NULL, suid, version, colName); + TFileReader* reader = NULL; + int32_t code = tfileReaderOpen(NULL, suid, version, colName, &reader); Iterate* iter = tfileIteratorCreate(reader); bool tn = iter ? iter->next(iter) : false; diff --git a/source/libs/index/test/indexTests.cc b/source/libs/index/test/indexTests.cc index 612ce107c7..1c5a04d22d 100644 --- a/source/libs/index/test/indexTests.cc +++ b/source/libs/index/test/indexTests.cc @@ -294,7 +294,7 @@ class IndexEnv : public ::testing::Test { taosRemoveDir(path); SIndexOpts opts; opts.cacheSize = 1024 * 1024 * 4; - int ret = indexOpen(&opts, path, &index); + int32_t ret = indexOpen(&opts, path, &index); assert(ret == 0); } virtual void TearDown() { indexClose(index); } @@ -392,13 +392,13 @@ class TFileObj { IFileCtx* ctx = idxFileCtxCreate(TFILE, path.c_str(), false, 64 * 1024 * 1024); ctx->lru = taosLRUCacheInit(1024 * 1024 * 4, -1, .5); - writer_ = tfileWriterCreate(ctx, &header); + int32_t code = tfileWriterCreate(ctx, &header, &writer_); return writer_ != NULL ? true : false; } bool InitReader() { IFileCtx* ctx = idxFileCtxCreate(TFILE, fileName_.c_str(), true, 64 * 1024 * 1024); ctx->lru = taosLRUCacheInit(1024 * 1024 * 4, -1, .5); - reader_ = tfileReaderCreate(ctx); + int32_t code = tfileReaderCreate(ctx, &reader_); return reader_ != NULL ? true : false; } int Get(SIndexTermQuery* query, SArray* result) { @@ -701,7 +701,7 @@ class IndexObj { SIndexOpts opts; opts.cacheSize = 1024 * 1024 * 4; - int ret = indexOpen(&opts, dir.c_str(), &idx); + int32_t ret = indexOpen(&opts, dir.c_str(), &idx); if (ret != 0) { // opt std::cout << "failed to open index: %s" << dir << std::endl; diff --git a/source/libs/stream/src/streamTask.c b/source/libs/stream/src/streamTask.c index 0110a9825c..141bd8fc3e 100644 --- a/source/libs/stream/src/streamTask.c +++ b/source/libs/stream/src/streamTask.c @@ -602,9 +602,11 @@ int32_t streamTaskStop(SStreamTask* pTask) { stError("failed to handle STOP event, s-task:%s", id); } - code = qKillTask(pTask->exec.pExecutor, TSDB_CODE_SUCCESS); - if (code) { - stError("s-task:%s failed to kill task related query handle", id); + if (pTask->info.taskLevel != TASK_LEVEL__SINK) { + code = qKillTask(pTask->exec.pExecutor, TSDB_CODE_SUCCESS); + if (code) { + stError("s-task:%s failed to kill task related query handle", id); + } } while (!streamTaskIsIdle(pTask)) { diff --git a/source/libs/sync/src/syncAppendEntriesReply.c b/source/libs/sync/src/syncAppendEntriesReply.c index 4b7ed59039..6ea5402c28 100644 --- a/source/libs/sync/src/syncAppendEntriesReply.c +++ b/source/libs/sync/src/syncAppendEntriesReply.c @@ -40,6 +40,7 @@ // int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { + int32_t code = 0; SyncAppendEntriesReply* pMsg = (SyncAppendEntriesReply*)pRpcMsg->pCont; int32_t ret = 0; @@ -59,7 +60,7 @@ int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { if (pMsg->term > raftStoreGetTerm(ths)) { syncLogRecvAppendEntriesReply(ths, pMsg, "error term"); syncNodeStepDown(ths, pMsg->term); - return -1; + return TSDB_CODE_SYN_WRONG_TERM; } ASSERT(pMsg->term == raftStoreGetTerm(ths)); @@ -81,17 +82,19 @@ int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { syncNodeStepDown(ths, pMsg->term); } } else { - (void)syncLogBufferCommit(ths->pLogBuf, ths, commitIndex); + TAOS_CHECK_RETURN(syncLogBufferCommit(ths->pLogBuf, ths, commitIndex)); } } // replicate log SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(ths, &pMsg->srcId); if (pMgr == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("vgId:%d, failed to get log repl mgr for src addr: 0x%016" PRIx64, ths->vgId, pMsg->srcId.addr); - return -1; + TAOS_RETURN(code); } - (void)syncLogReplProcessReply(pMgr, ths, pMsg); + TAOS_CHECK_RETURN(syncLogReplProcessReply(pMgr, ths, pMsg)); } - return 0; + TAOS_RETURN(code); } diff --git a/source/libs/sync/src/syncCommit.c b/source/libs/sync/src/syncCommit.c index 3c401a978b..b55267a0e7 100644 --- a/source/libs/sync/src/syncCommit.c +++ b/source/libs/sync/src/syncCommit.c @@ -72,17 +72,25 @@ bool syncNodeAgreedUpon(SSyncNode* pNode, SyncIndex index) { } int64_t syncNodeUpdateCommitIndex(SSyncNode* ths, SyncIndex commitIndex) { + int32_t code = 0; SyncIndex lastVer = ths->pLogStore->syncLogLastIndex(ths->pLogStore); commitIndex = TMAX(commitIndex, ths->commitIndex); ths->commitIndex = TMIN(commitIndex, lastVer); - ths->pLogStore->syncLogUpdateCommitIndex(ths->pLogStore, ths->commitIndex); + if ((code = ths->pLogStore->syncLogUpdateCommitIndex(ths->pLogStore, ths->commitIndex)) != 0) { + // TODO add return when error + sError("failed to update commit index since %s", tstrerror(code)); + } return ths->commitIndex; } int64_t syncNodeCheckCommitIndex(SSyncNode* ths, SyncIndex indexLikely) { + int32_t code = 0; if (indexLikely > ths->commitIndex && syncNodeAgreedUpon(ths, indexLikely)) { SyncIndex commitIndex = indexLikely; - syncNodeUpdateCommitIndex(ths, commitIndex); + if ((code = syncNodeUpdateCommitIndex(ths, commitIndex)) != 0) { + // TODO add return when error + sError("failed to update commit index since %s", tstrerror(code)); + } sTrace("vgId:%d, agreed upon. role:%d, term:%" PRId64 ", index:%" PRId64 "", ths->vgId, ths->state, raftStoreGetTerm(ths), commitIndex); } @@ -90,9 +98,13 @@ int64_t syncNodeCheckCommitIndex(SSyncNode* ths, SyncIndex indexLikely) { } int64_t syncNodeUpdateAssignedCommitIndex(SSyncNode* ths, SyncIndex assignedCommitIndex) { + int32_t code = 0; SyncIndex lastVer = ths->pLogStore->syncLogLastIndex(ths->pLogStore); assignedCommitIndex = TMAX(assignedCommitIndex, ths->assignedCommitIndex); ths->assignedCommitIndex = TMIN(assignedCommitIndex, lastVer); - ths->pLogStore->syncLogUpdateCommitIndex(ths->pLogStore, ths->assignedCommitIndex); + if ((code = ths->pLogStore->syncLogUpdateCommitIndex(ths->pLogStore, ths->assignedCommitIndex)) != 0) { + // TODO add return when error + sError("failed to update commit index since %s", tstrerror(code)); + } return ths->commitIndex; } diff --git a/source/libs/sync/src/syncElection.c b/source/libs/sync/src/syncElection.c index c57e7e273f..3b595f464d 100644 --- a/source/libs/sync/src/syncElection.c +++ b/source/libs/sync/src/syncElection.c @@ -73,7 +73,7 @@ static int32_t syncNodeRequestVotePeers(SSyncNode* pNode) { int32_t syncNodeElect(SSyncNode* pSyncNode) { if (pSyncNode->fsmState == SYNC_FSM_STATE_INCOMPLETE) { sNError(pSyncNode, "skip leader election due to incomplete fsm state"); - return -1; + return TSDB_CODE_SYN_WRONG_FSM_STATE; } sNInfo(pSyncNode, "begin election"); @@ -86,7 +86,7 @@ int32_t syncNodeElect(SSyncNode* pSyncNode) { if (pSyncNode->state != TAOS_SYNC_STATE_CANDIDATE) { sNError(pSyncNode, "not candidate, can not elect"); - return -1; + return TSDB_CODE_SYN_WRONG_SYNC_STATE; } // start election diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c index 1fa67cfa4d..cce8149037 100644 --- a/source/libs/sync/src/syncEnv.c +++ b/source/libs/sync/src/syncEnv.c @@ -48,14 +48,14 @@ int32_t syncInit() { if (gNodeRefId < 0) { sError("failed to init node ref"); syncCleanUp(); - return -1; + return TSDB_CODE_SYN_WRONG_REF; } gHbDataRefId = taosOpenRef(200, (RefFp)syncHbTimerDataFree); if (gHbDataRefId < 0) { sError("failed to init hb-data ref"); syncCleanUp(); - return -1; + return TSDB_CODE_SYN_WRONG_REF; } sDebug("sync rsetId:%d is open", gNodeRefId); @@ -106,7 +106,7 @@ void syncNodeRelease(SSyncNode *pNode) { int64_t syncHbTimerDataAdd(SSyncHbTimerData *pData) { pData->rid = taosAddRef(gHbDataRefId, pData); - if (pData->rid < 0) return -1; + if (pData->rid < 0) return TSDB_CODE_SYN_WRONG_REF; return pData->rid; } diff --git a/source/libs/sync/src/syncIndexMgr.c b/source/libs/sync/src/syncIndexMgr.c index add2f1a5dd..4946912941 100644 --- a/source/libs/sync/src/syncIndexMgr.c +++ b/source/libs/sync/src/syncIndexMgr.c @@ -98,6 +98,7 @@ SSyncLogReplMgr *syncNodeGetLogReplMgr(SSyncNode *pNode, SRaftId *pRaftId) { } } + terrno = TSDB_CODE_SYN_INVALID_ID; sError("vgId:%d, indexmgr get replmgr from dnode:%d cluster:%d failed", pNode->vgId, DID(pRaftId), CID(pRaftId)); return NULL; } @@ -110,6 +111,7 @@ SyncIndex syncIndexMgrGetIndex(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftId) } } + terrno = TSDB_CODE_SYN_INVALID_ID; sError("vgId:%d, indexmgr get index from dnode:%d cluster:%d failed", pIndexMgr->pNode->vgId, DID(pRaftId), CID(pRaftId)); return SYNC_INDEX_INVALID; @@ -137,7 +139,8 @@ int64_t syncIndexMgrGetStartTime(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftI sError("vgId:%d, indexmgr get start-time from dnode:%d cluster:%d failed", pIndexMgr->pNode->vgId, DID(pRaftId), CID(pRaftId)); - return -1; + return TSDB_CODE_SYN_INVALID_ID; + ; } void syncIndexMgrSetRecvTime(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftId, int64_t recvTime) { @@ -162,7 +165,7 @@ int64_t syncIndexMgrGetRecvTime(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftId sError("vgId:%d, indexmgr get recv-time from dnode:%d cluster:%d failed", pIndexMgr->pNode->vgId, DID(pRaftId), CID(pRaftId)); - return -1; + return TSDB_CODE_SYN_INVALID_ID; } void syncIndexMgrSetTerm(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftId, SyncTerm term) { @@ -187,5 +190,5 @@ SyncTerm syncIndexMgrGetTerm(SSyncIndexMgr *pIndexMgr, const SRaftId *pRaftId) { sError("vgId:%d, indexmgr get term from dnode:%d cluster:%d failed", pIndexMgr->pNode->vgId, DID(pRaftId), CID(pRaftId)); - return -1; + return TSDB_CODE_SYN_INVALID_ID; } diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index d6a1efc05f..f93b52dd2a 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -83,36 +83,42 @@ int64_t syncOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { } int32_t syncStart(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("failed to acquire rid:%" PRId64 " of tsNodeReftId for pSyncNode", rid); - return -1; + TAOS_RETURN(code); } - if (syncNodeRestore(pSyncNode) < 0) { - sError("vgId:%d, failed to restore sync log buffer since %s", pSyncNode->vgId, terrstr()); + if ((code = syncNodeRestore(pSyncNode)) < 0) { + sError("vgId:%d, failed to restore sync log buffer since %s", pSyncNode->vgId, tstrerror(code)); goto _err; } - if (syncNodeStart(pSyncNode) < 0) { - sError("vgId:%d, failed to start sync node since %s", pSyncNode->vgId, terrstr()); + if ((code = syncNodeStart(pSyncNode)) < 0) { + sError("vgId:%d, failed to start sync node since %s", pSyncNode->vgId, tstrerror(code)); goto _err; } syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); _err: syncNodeRelease(pSyncNode); - return -1; + TAOS_RETURN(code); } int32_t syncNodeGetConfig(int64_t rid, SSyncCfg* cfg) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("failed to acquire rid:%" PRId64 " of tsNodeReftId for pSyncNode", rid); - return terrno; + TAOS_RETURN(code); } *cfg = pSyncNode->raftCfg.cfg; @@ -153,8 +159,13 @@ static bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pCfg) { } int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); - if (pSyncNode == NULL) return -1; + if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } if (pSyncNode->raftCfg.lastConfigIndex >= pNewCfg->lastIndex) { syncNodeRelease(pSyncNode); @@ -165,9 +176,9 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { if (!syncNodeCheckNewConfig(pSyncNode, pNewCfg)) { syncNodeRelease(pSyncNode); - terrno = TSDB_CODE_SYN_NEW_CONFIG_ERROR; + code = TSDB_CODE_SYN_NEW_CONFIG_ERROR; sError("vgId:%d, failed to reconfig since invalid new config", pSyncNode->vgId); - return -1; + TAOS_RETURN(code); } syncNodeUpdateNewConfigIndex(pSyncNode, pNewCfg); @@ -185,15 +196,23 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { } syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); } int32_t syncProcessMsg(int64_t rid, SRpcMsg* pMsg) { int32_t code = -1; - if (!syncIsInit()) return code; + if (!syncIsInit()) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } SSyncNode* pSyncNode = syncNodeAcquire(rid); - if (pSyncNode == NULL) return code; + if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } switch (pMsg->msgType) { case TDMT_SYNC_HEARTBEAT: @@ -239,21 +258,25 @@ int32_t syncProcessMsg(int64_t rid, SRpcMsg* pMsg) { code = syncBecomeAssignedLeader(pSyncNode, pMsg); break; default: - terrno = TSDB_CODE_MSG_NOT_PROCESSED; - code = -1; + code = TSDB_CODE_MSG_NOT_PROCESSED; } syncNodeRelease(pSyncNode); if (code != 0) { sDebug("vgId:%d, failed to process sync msg:%p type:%s since 0x%x", pSyncNode->vgId, pMsg, TMSG_INFO(pMsg->msgType), - terrno); + code); } - return code; + TAOS_RETURN(code); } int32_t syncLeaderTransfer(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); - if (pSyncNode == NULL) return -1; + if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } int32_t ret = syncNodeLeaderTransfer(pSyncNode); syncNodeRelease(pSyncNode); @@ -275,16 +298,14 @@ int32_t syncForceBecomeFollower(SSyncNode* ths, const SRpcMsg* pRpcMsg) { } int32_t syncBecomeAssignedLeader(SSyncNode* ths, SRpcMsg* pRpcMsg) { - int32_t ret = -1; - int32_t errcode = TSDB_CODE_MND_ARB_TOKEN_MISMATCH; + int32_t code = TSDB_CODE_MND_ARB_TOKEN_MISMATCH; void* pHead = NULL; int32_t contLen = 0; SVArbSetAssignedLeaderReq req = {0}; if (tDeserializeSVArbSetAssignedLeaderReq((char*)pRpcMsg->pCont + sizeof(SMsgHead), pRpcMsg->contLen, &req) != 0) { sError("vgId:%d, failed to deserialize SVArbSetAssignedLeaderReq", ths->vgId); - terrno = TSDB_CODE_INVALID_MSG; - errcode = terrno; + code = TSDB_CODE_INVALID_MSG; goto _OVER; } @@ -303,17 +324,17 @@ int32_t syncBecomeAssignedLeader(SSyncNode* ths, SRpcMsg* pRpcMsg) { } if (ths->state != TAOS_SYNC_STATE_ASSIGNED_LEADER) { - terrno = TSDB_CODE_SUCCESS; + code = TSDB_CODE_SUCCESS; raftStoreNextTerm(ths); if (terrno != TSDB_CODE_SUCCESS) { - sError("vgId:%d, failed to set next term since:%s", ths->vgId, terrstr()); - errcode = terrno; + code = terrno; + sError("vgId:%d, failed to set next term since:%s", ths->vgId, tstrerror(code)); goto _OVER; } syncNodeBecomeAssignedLeader(ths); - if (syncNodeAppendNoop(ths) < 0) { - sError("vgId:%d, assigned leader failed to append noop entry since %s", ths->vgId, terrstr()); + if ((code = syncNodeAppendNoop(ths)) < 0) { + sError("vgId:%d, assigned leader failed to append noop entry since %s", ths->vgId, tstrerror(code)); } } @@ -324,32 +345,28 @@ int32_t syncBecomeAssignedLeader(SSyncNode* ths, SRpcMsg* pRpcMsg) { contLen = tSerializeSVArbSetAssignedLeaderRsp(NULL, 0, &rsp); if (contLen <= 0) { + code = TSDB_CODE_OUT_OF_MEMORY; sError("vgId:%d, failed to serialize SVArbSetAssignedLeaderRsp", ths->vgId); - terrno = TSDB_CODE_OUT_OF_MEMORY; - errcode = terrno; goto _OVER; } pHead = rpcMallocCont(contLen); if (!pHead) { + code = TSDB_CODE_OUT_OF_MEMORY; sError("vgId:%d, failed to malloc memory for SVArbSetAssignedLeaderRsp", ths->vgId); - terrno = TSDB_CODE_OUT_OF_MEMORY; - errcode = terrno; goto _OVER; } if (tSerializeSVArbSetAssignedLeaderRsp(pHead, contLen, &rsp) <= 0) { + code = TSDB_CODE_OUT_OF_MEMORY; sError("vgId:%d, failed to serialize SVArbSetAssignedLeaderRsp", ths->vgId); - terrno = TSDB_CODE_OUT_OF_MEMORY; - errcode = terrno; rpcFreeCont(pHead); goto _OVER; } - errcode = TSDB_CODE_SUCCESS; - ret = 0; + code = TSDB_CODE_SUCCESS; _OVER:; SRpcMsg rspMsg = { - .code = errcode, + .code = code, .pCont = pHead, .contLen = contLen, .info = pRpcMsg->info, @@ -358,12 +375,17 @@ _OVER:; tmsgSendRsp(&rspMsg); tFreeSVArbSetAssignedLeaderReq(&req); - return ret; + TAOS_RETURN(code); } int32_t syncSendTimeoutRsp(int64_t rid, int64_t seq) { + int32_t code = 0; SSyncNode* pNode = syncNodeAcquire(rid); - if (pNode == NULL) return -1; + if (pNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } SRpcMsg rpcMsg = {0}; int32_t ret = syncRespMgrGetAndDel(pNode->pSyncRespMgr, seq, &rpcMsg.info); @@ -376,7 +398,7 @@ int32_t syncSendTimeoutRsp(int64_t rid, int64_t seq) { return 0; } else { sError("no message handle to send timeout response, seq:%" PRId64, seq); - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } } @@ -402,9 +424,12 @@ static SyncIndex syncLogRetentionIndex(SSyncNode* pSyncNode, int64_t bytes) { int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { SSyncNode* pSyncNode = syncNodeAcquire(rid); + int32_t code = 0; if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync begin snapshot error"); - return -1; + TAOS_RETURN(code); } SyncIndex beginIndex = pSyncNode->pLogStore->syncLogBeginIndex(pSyncNode->pLogStore); @@ -417,7 +442,6 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { return 0; } - int32_t code = 0; int64_t logRetention = 0; if (syncNodeIsMnode(pSyncNode)) { @@ -475,24 +499,26 @@ _DEL_WAL: } while (0); syncNodeRelease(pSyncNode); - return code; + TAOS_RETURN(code); } int32_t syncEndSnapshot(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync end snapshot error"); - return -1; + TAOS_RETURN(code); } - int32_t code = 0; if (atomic_load_64(&pSyncNode->snapshottingIndex) != SYNC_INDEX_INVALID) { SSyncLogStoreData* pData = pSyncNode->pLogStore->data; code = walEndSnapshot(pData->pWal); if (code != 0) { - sNError(pSyncNode, "wal snapshot end error since:%s", terrstr()); + sNError(pSyncNode, "wal snapshot end error since:%s", tstrerror(code)); syncNodeRelease(pSyncNode); - return -1; + TAOS_RETURN(code); } else { sNTrace(pSyncNode, "wal snapshot end, index:%" PRId64, atomic_load_64(&pSyncNode->snapshottingIndex)); atomic_store_64(&pSyncNode->snapshottingIndex, SYNC_INDEX_INVALID); @@ -500,7 +526,7 @@ int32_t syncEndSnapshot(int64_t rid) { } syncNodeRelease(pSyncNode); - return code; + TAOS_RETURN(code); } bool syncNodeIsReadyForRead(SSyncNode* pSyncNode) { @@ -585,13 +611,13 @@ int32_t syncNodeLeaderTransfer(SSyncNode* pSyncNode) { int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) { if (pSyncNode->replicaNum == 1) { sDebug("vgId:%d, only one replica, cannot leader transfer", pSyncNode->vgId); - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } sNTrace(pSyncNode, "begin leader transfer to %s:%u", newLeader.nodeFqdn, newLeader.nodePort); SRpcMsg rpcMsg = {0}; - (void)syncBuildLeaderTransfer(&rpcMsg, pSyncNode->vgId); + TAOS_CHECK_RETURN(syncBuildLeaderTransfer(&rpcMsg, pSyncNode->vgId)); SyncLeaderTransfer* pMsg = rpcMsg.pCont; pMsg->newLeaderId.addr = SYNC_ADDR(&newLeader); @@ -639,10 +665,12 @@ SSyncState syncGetState(int64_t rid) { } int32_t syncGetArbToken(int64_t rid, char* outToken) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { - terrno = TSDB_CODE_NOT_FOUND; - return -1; + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } memset(outToken, 0, TSDB_ARB_TOKEN_SIZE); @@ -650,41 +678,44 @@ int32_t syncGetArbToken(int64_t rid, char* outToken) { strncpy(outToken, pSyncNode->arbToken, TSDB_ARB_TOKEN_SIZE); taosThreadMutexUnlock(&pSyncNode->arbTokenMutex); - terrno = TSDB_CODE_SUCCESS; syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); } int32_t syncGetAssignedLogSynced(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { - terrno = TSDB_CODE_NOT_FOUND; - return -1; + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } if (pSyncNode->state != TAOS_SYNC_STATE_LEADER) { - terrno = TSDB_CODE_VND_ARB_NOT_SYNCED; + code = TSDB_CODE_VND_ARB_NOT_SYNCED; syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); } bool isSync = pSyncNode->commitIndex >= pSyncNode->assignedCommitIndex; - terrno = (isSync ? TSDB_CODE_SUCCESS : TSDB_CODE_VND_ARB_NOT_SYNCED); + code = (isSync ? TSDB_CODE_SUCCESS : TSDB_CODE_VND_ARB_NOT_SYNCED); syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); } int32_t syncUpdateArbTerm(int64_t rid, SyncTerm arbTerm) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { - terrno = TSDB_CODE_NOT_FOUND; - return -1; + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } pSyncNode->arbTerm = TMAX(arbTerm, pSyncNode->arbTerm); syncNodeRelease(pSyncNode); - return 0; + TAOS_RETURN(code); } SyncIndex syncNodeGetSnapshotConfigIndex(SSyncNode* pSyncNode, SyncIndex snapshotLastApplyIndex) { @@ -730,10 +761,13 @@ void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { } int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak, int64_t* seq) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync propose error"); - return -1; + TAOS_RETURN(code); } int32_t ret = syncNodePropose(pSyncNode, pMsg, isWeak, seq); @@ -742,24 +776,30 @@ int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak, int64_t* seq) { } int32_t syncCheckMember(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync propose error"); - return -1; + TAOS_RETURN(code); } if (pSyncNode->myNodeInfo.nodeRole == TAOS_SYNC_ROLE_LEARNER) { - return -1; + return TSDB_CODE_SYN_WRONG_ROLE; } return 0; } int32_t syncIsCatchUp(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync Node Acquire error since %d", errno); - return -1; + TAOS_RETURN(code); } int32_t isCatchUp = 0; @@ -781,10 +821,13 @@ int32_t syncIsCatchUp(int64_t rid) { } ESyncRole syncGetRole(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync Node Acquire error since %d", errno); - return -1; + TAOS_RETURN(code); } ESyncRole role = pSyncNode->raftCfg.cfg.nodeInfo[pSyncNode->raftCfg.cfg.myIndex].nodeRole; @@ -794,10 +837,13 @@ ESyncRole syncGetRole(int64_t rid) { } int64_t syncGetTerm(int64_t rid) { + int32_t code = 0; SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("sync Node Acquire error since %d", errno); - return -1; + TAOS_RETURN(code); } int64_t term = raftStoreGetTerm(pSyncNode); @@ -807,25 +853,26 @@ int64_t syncGetTerm(int64_t rid) { } int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_t* seq) { + int32_t code = 0; if (pSyncNode->state != TAOS_SYNC_STATE_LEADER && pSyncNode->state != TAOS_SYNC_STATE_ASSIGNED_LEADER) { - terrno = TSDB_CODE_SYN_NOT_LEADER; + code = TSDB_CODE_SYN_NOT_LEADER; sNWarn(pSyncNode, "sync propose not leader, type:%s", TMSG_INFO(pMsg->msgType)); - return -1; + TAOS_RETURN(code); } if (!pSyncNode->restoreFinish) { - terrno = TSDB_CODE_SYN_PROPOSE_NOT_READY; + code = TSDB_CODE_SYN_PROPOSE_NOT_READY; sNWarn(pSyncNode, "failed to sync propose since not ready, type:%s, last:%" PRId64 ", cmt:%" PRId64, TMSG_INFO(pMsg->msgType), syncNodeGetLastIndex(pSyncNode), pSyncNode->commitIndex); - return -1; + TAOS_RETURN(code); } // heartbeat timeout if (pSyncNode->state != TAOS_SYNC_STATE_ASSIGNED_LEADER && syncNodeHeartbeatReplyTimeout(pSyncNode)) { - terrno = TSDB_CODE_SYN_PROPOSE_NOT_READY; + code = TSDB_CODE_SYN_PROPOSE_NOT_READY; sNError(pSyncNode, "failed to sync propose since heartbeat timeout, type:%s, last:%" PRId64 ", cmt:%" PRId64, TMSG_INFO(pMsg->msgType), syncNodeGetLastIndex(pSyncNode), pSyncNode->commitIndex); - return -1; + TAOS_RETURN(code); } // optimized one replica @@ -850,10 +897,10 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_ return 0; } } else { - terrno = TSDB_CODE_SYN_INTERNAL_ERROR; + code = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, failed to propose optimized msg, index:%" PRId64 " type:%s", pSyncNode->vgId, retIndex, TMSG_INFO(pMsg->msgType)); - return -1; + TAOS_RETURN(code); } } else { SRespStub stub = {.createTime = taosGetTimestampMs(), .rpcMsg = *pMsg}; @@ -863,7 +910,7 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_ if (code != 0) { sError("vgId:%d, failed to propose msg while serialize since %s", pSyncNode->vgId, terrstr()); (void)syncRespMgrDel(pSyncNode->pSyncRespMgr, seqNum); - return -1; + TAOS_RETURN(code); } sNTrace(pSyncNode, "propose msg, type:%s", TMSG_INFO(pMsg->msgType)); @@ -874,7 +921,7 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_ } if (seq != NULL) *seq = seqNum; - return code; + TAOS_RETURN(code); } } @@ -912,6 +959,7 @@ static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS / HEARTBEAT_TICK_NUM, (void*)(pData->rid), syncEnv()->pTimerManager, &pSyncTimer->pTimer); } else { + ret = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, start ctrl hb timer error, sync env is stop", pSyncNode->vgId); } return ret; @@ -920,7 +968,9 @@ static int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { static int32_t syncHbTimerStop(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { int32_t ret = 0; atomic_add_fetch_64(&pSyncTimer->logicClock, 1); - taosTmrStop(pSyncTimer->pTimer); + if (!taosTmrStop(pSyncTimer->pTimer)) { + return TSDB_CODE_SYN_INTERNAL_ERROR; + } pSyncTimer->pTimer = NULL; syncHbTimerDataRemove(pSyncTimer->hbDataRid); pSyncTimer->hbDataRid = -1; @@ -928,6 +978,7 @@ static int32_t syncHbTimerStop(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { } int32_t syncNodeLogStoreRestoreOnNeed(SSyncNode* pNode) { + int32_t code = 0; ASSERTS(pNode->pLogStore != NULL, "log store not created"); ASSERTS(pNode->pFsm != NULL, "pFsm not registered"); ASSERTS(pNode->pFsm->FpGetSnapshotInfo != NULL, "FpGetSnapshotInfo not registered"); @@ -938,13 +989,13 @@ int32_t syncNodeLogStoreRestoreOnNeed(SSyncNode* pNode) { SyncIndex firstVer = pNode->pLogStore->syncLogBeginIndex(pNode->pLogStore); SyncIndex lastVer = pNode->pLogStore->syncLogLastIndex(pNode->pLogStore); if ((lastVer < commitIndex || firstVer > commitIndex + 1) || pNode->fsmState == SYNC_FSM_STATE_INCOMPLETE) { - if (pNode->pLogStore->syncLogRestoreFromSnapshot(pNode->pLogStore, commitIndex)) { + if ((code = pNode->pLogStore->syncLogRestoreFromSnapshot(pNode->pLogStore, commitIndex)) != 0) { sError("vgId:%d, failed to restore log store from snapshot since %s. lastVer:%" PRId64 ", snapshotVer:%" PRId64, pNode->vgId, terrstr(), lastVer, commitIndex); - return -1; + TAOS_RETURN(code); } } - return 0; + TAOS_RETURN(code); } // open/close -------------- @@ -981,13 +1032,15 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { pSyncNode->raftCfg.configIndexCount = 1; pSyncNode->raftCfg.configIndexArr[0] = -1; - if (syncWriteCfgFile(pSyncNode) != 0) { + if ((code = syncWriteCfgFile(pSyncNode)) != 0) { + terrno = code; sError("vgId:%d, failed to create sync cfg file", pSyncNode->vgId); goto _error; } } else { // update syncCfg by raft_config.json - if (syncReadCfgFile(pSyncNode) != 0) { + if ((code = syncReadCfgFile(pSyncNode)) != 0) { + terrno = code; sError("vgId:%d, failed to read sync cfg file", pSyncNode->vgId); goto _error; } @@ -996,7 +1049,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { if (pSyncInfo->syncCfg.totalReplicaNum > 0 && syncIsConfigChanged(&pSyncNode->raftCfg.cfg, &pSyncInfo->syncCfg)) { sInfo("vgId:%d, use sync config from input options and write to cfg file", pSyncNode->vgId); pSyncNode->raftCfg.cfg = pSyncInfo->syncCfg; - if (syncWriteCfgFile(pSyncNode) != 0) { + if ((code = syncWriteCfgFile(pSyncNode)) != 0) { + terrno = code; sError("vgId:%d, failed to write sync cfg file", pSyncNode->vgId); goto _error; } @@ -1028,7 +1082,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { if (vnodeVersion > pSyncInfo->syncCfg.changeVersion) { if (updated) { sInfo("vgId:%d, save config info since dnode info changed", pSyncNode->vgId); - if (syncWriteCfgFile(pSyncNode) != 0) { + if ((code = syncWriteCfgFile(pSyncNode)) != 0) { + terrno = code; sError("vgId:%d, failed to write sync cfg file on dnode info updated", pSyncNode->vgId); goto _error; } @@ -1042,15 +1097,16 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { pSyncNode->syncEqCtrlMsg = pSyncInfo->syncEqCtrlMsg; // create raft log ring buffer - (void)syncLogBufferCreate(&pSyncNode->pLogBuf); // TODO: check return value + code = syncLogBufferCreate(&pSyncNode->pLogBuf); if (pSyncNode->pLogBuf == NULL) { - sError("failed to init sync log buffer since %s. vgId:%d", terrstr(), pSyncNode->vgId); + sError("failed to init sync log buffer since %s. vgId:%d", tstrerror(code), pSyncNode->vgId); goto _error; } // init internal pSyncNode->myNodeInfo = pSyncNode->raftCfg.cfg.nodeInfo[pSyncNode->raftCfg.cfg.myIndex]; if (!syncUtilNodeInfo2RaftId(&pSyncNode->myNodeInfo, pSyncNode->vgId, &pSyncNode->myRaftId)) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, failed to determine my raft member id", pSyncNode->vgId); goto _error; } @@ -1072,6 +1128,7 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { } for (int32_t i = 0; i < pSyncNode->peersNum; ++i) { if (!syncUtilNodeInfo2RaftId(&pSyncNode->peersNodeInfo[i], pSyncNode->vgId, &pSyncNode->peersId[i])) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, failed to determine raft member id, peer:%d", pSyncNode->vgId, i); goto _error; } @@ -1082,6 +1139,7 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { pSyncNode->totalReplicaNum = pSyncNode->raftCfg.cfg.totalReplicaNum; for (int32_t i = 0; i < pSyncNode->raftCfg.cfg.totalReplicaNum; ++i) { if (!syncUtilNodeInfo2RaftId(&pSyncNode->raftCfg.cfg.nodeInfo[i], pSyncNode->vgId, &pSyncNode->replicasId[i])) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, failed to determine raft member id, replica:%d", pSyncNode->vgId, i); goto _error; } @@ -1122,7 +1180,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { // init TLA+ server vars pSyncNode->state = TAOS_SYNC_STATE_FOLLOWER; pSyncNode->roleTimeMs = taosGetTimestampMs(); - if (raftStoreOpen(pSyncNode) != 0) { + if ((code = raftStoreOpen(pSyncNode)) != 0) { + terrno = code; sError("vgId:%d, failed to open raft store at path %s", pSyncNode->vgId, pSyncNode->raftStorePath); goto _error; } @@ -1170,6 +1229,7 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { if (pSyncNode->fsmState == SYNC_FSM_STATE_INCOMPLETE) { sError("vgId:%d, fsm state is incomplete.", pSyncNode->vgId); if (pSyncNode->replicaNum == 1) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; goto _error; } } @@ -1178,7 +1238,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { sInfo("vgId:%d, sync node commitIndex initialized as %" PRId64, pSyncNode->vgId, pSyncNode->commitIndex); // restore log store on need - if (syncNodeLogStoreRestoreOnNeed(pSyncNode) < 0) { + if ((code = syncNodeLogStoreRestoreOnNeed(pSyncNode)) < 0) { + terrno = code; sError("vgId:%d, failed to restore log store since %s.", pSyncNode->vgId, terrstr()); goto _error; } @@ -1215,7 +1276,10 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { // init peer heartbeat timer for (int32_t i = 0; i < TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA; ++i) { - syncHbTimerInit(pSyncNode, &(pSyncNode->peerHeartbeatTimerArr[i]), (pSyncNode->replicasId)[i]); + if ((code = syncHbTimerInit(pSyncNode, &(pSyncNode->peerHeartbeatTimerArr[i]), (pSyncNode->replicasId)[i])) != 0) { + errno = code; + goto _error; + } } // tools @@ -1248,13 +1312,15 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { pSyncNode->changing = false; // replication mgr - if (syncNodeLogReplInit(pSyncNode) < 0) { + if ((code = syncNodeLogReplInit(pSyncNode)) < 0) { + terrno = code; sError("vgId:%d, failed to init repl mgr since %s.", pSyncNode->vgId, terrstr()); goto _error; } // peer state - if (syncNodePeerStateInit(pSyncNode) < 0) { + if ((code = syncNodePeerStateInit(pSyncNode)) < 0) { + terrno = code; sError("vgId:%d, failed to init peer stat since %s.", pSyncNode->vgId, terrstr()); goto _error; } @@ -1274,7 +1340,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo, int32_t vnodeVersion) { atomic_store_64(&pSyncNode->snapshottingIndex, SYNC_INDEX_INVALID); // init log buffer - if (syncLogBufferInit(pSyncNode->pLogBuf, pSyncNode) < 0) { + if ((code = syncLogBufferInit(pSyncNode->pLogBuf, pSyncNode)) < 0) { + terrno = code; sError("vgId:%d, failed to init sync log buffer since %s", pSyncNode->vgId, terrstr()); goto _error; } @@ -1315,6 +1382,7 @@ void syncNodeMaybeUpdateCommitBySnapshot(SSyncNode* pSyncNode) { #endif int32_t syncNodeRestore(SSyncNode* pSyncNode) { + int32_t code = 0; ASSERTS(pSyncNode->pLogStore != NULL, "log store not created"); ASSERTS(pSyncNode->pLogBuf != NULL, "ring log buffer not created"); @@ -1325,22 +1393,21 @@ int32_t syncNodeRestore(SSyncNode* pSyncNode) { taosThreadMutexUnlock(&pSyncNode->pLogBuf->mutex); if (lastVer != -1 && endIndex != lastVer + 1) { - terrno = TSDB_CODE_WAL_LOG_INCOMPLETE; + code = TSDB_CODE_WAL_LOG_INCOMPLETE; sError("vgId:%d, failed to restore sync node since %s. expected lastLogIndex:%" PRId64 ", lastVer:%" PRId64 "", pSyncNode->vgId, terrstr(), endIndex - 1, lastVer); - return -1; + TAOS_RETURN(code); } ASSERT(endIndex == lastVer + 1); pSyncNode->commitIndex = TMAX(pSyncNode->commitIndex, commitIndex); sInfo("vgId:%d, restore sync until commitIndex:%" PRId64, pSyncNode->vgId, pSyncNode->commitIndex); - if (pSyncNode->fsmState != SYNC_FSM_STATE_INCOMPLETE && - syncLogBufferCommit(pSyncNode->pLogBuf, pSyncNode, pSyncNode->commitIndex) < 0) { - return -1; + if (pSyncNode->fsmState != SYNC_FSM_STATE_INCOMPLETE && (code = syncLogBufferCommit(pSyncNode->pLogBuf, pSyncNode, pSyncNode->commitIndex)) < 0) { + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } int32_t syncNodeStart(SSyncNode* pSyncNode) { @@ -1353,7 +1420,7 @@ int32_t syncNodeStart(SSyncNode* pSyncNode) { syncNodeBecomeLeader(pSyncNode, "one replica start"); // Raft 3.6.2 Committing entries from previous terms - syncNodeAppendNoop(pSyncNode); + TAOS_CHECK_RETURN(syncNodeAppendNoop(pSyncNode)); } else { syncNodeBecomeFollower(pSyncNode, "first start"); } @@ -1362,7 +1429,7 @@ int32_t syncNodeStart(SSyncNode* pSyncNode) { int32_t ret = 0; ret = syncNodeStartPingTimer(pSyncNode); if (ret != 0) { - sError("vgId:%d, failed to start ping timer since %s", pSyncNode->vgId, terrstr()); + sError("vgId:%d, failed to start ping timer since %s", pSyncNode->vgId, tstrerror(ret)); } return ret; } @@ -1518,8 +1585,10 @@ int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) { pSyncNode->electTimerParam.pSyncNode = pSyncNode; pSyncNode->electTimerParam.pData = NULL; - taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, (void*)(pSyncNode->rid), syncEnv()->pTimerManager, - &pSyncNode->pElectTimer); + if (!taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, (void*)(pSyncNode->rid), + syncEnv()->pTimerManager, &pSyncNode->pElectTimer)) { + ret = TSDB_CODE_SYN_INTERNAL_ERROR; + } } else { sError("vgId:%d, start elect timer error, sync env is stop", pSyncNode->vgId); @@ -1538,12 +1607,13 @@ int32_t syncNodeStopElectTimer(SSyncNode* pSyncNode) { int32_t syncNodeRestartElectTimer(SSyncNode* pSyncNode, int32_t ms) { int32_t ret = 0; - syncNodeStopElectTimer(pSyncNode); - syncNodeStartElectTimer(pSyncNode, ms); + TAOS_CHECK_RETURN(syncNodeStopElectTimer(pSyncNode)); + TAOS_CHECK_RETURN(syncNodeStartElectTimer(pSyncNode, ms)); return ret; } void syncNodeResetElectTimer(SSyncNode* pSyncNode) { + int32_t code = 0; int32_t electMS; if (pSyncNode->raftCfg.isStandBy) { @@ -1552,7 +1622,9 @@ void syncNodeResetElectTimer(SSyncNode* pSyncNode) { electMS = syncUtilElectRandomMS(pSyncNode->electBaseLine, 2 * pSyncNode->electBaseLine); } - (void)syncNodeRestartElectTimer(pSyncNode, electMS); + if ((code = syncNodeRestartElectTimer(pSyncNode, electMS)) != 0) { + sError("failed to restart elect timer since %s", tstrerror(code)); + } sNTrace(pSyncNode, "reset elect timer, min:%d, max:%d, ms:%d", pSyncNode->electBaseLine, 2 * pSyncNode->electBaseLine, electMS); @@ -1585,7 +1657,7 @@ int32_t syncNodeStartHeartbeatTimer(SSyncNode* pSyncNode) { for (int32_t i = 0; i < pSyncNode->peersNum; ++i) { SSyncTimer* pSyncTimer = syncNodeGetHbTimer(pSyncNode, &(pSyncNode->peersId[i])); if (pSyncTimer != NULL) { - syncHbTimerStart(pSyncNode, pSyncTimer); + TAOS_CHECK_RETURN(syncHbTimerStart(pSyncNode, pSyncTimer)); } } @@ -1604,7 +1676,7 @@ int32_t syncNodeStopHeartbeatTimer(SSyncNode* pSyncNode) { for (int32_t i = 0; i < pSyncNode->peersNum; ++i) { SSyncTimer* pSyncTimer = syncNodeGetHbTimer(pSyncNode, &(pSyncNode->peersId[i])); if (pSyncTimer != NULL) { - syncHbTimerStop(pSyncNode, pSyncTimer); + TAOS_CHECK_RETURN(syncHbTimerStop(pSyncNode, pSyncTimer)); } } @@ -1636,12 +1708,12 @@ int32_t syncNodeSendMsgById(const SRaftId* destRaftId, SSyncNode* pNode, SRpcMsg } if (code < 0) { - sError("vgId:%d, failed to send sync msg since %s. epset:%p dnode:%d addr:%" PRId64, pNode->vgId, terrstr(), epSet, - DID(destRaftId), destRaftId->addr); + sError("vgId:%d, failed to send sync msg since %s. epset:%p dnode:%d addr:%" PRId64, pNode->vgId, tstrerror(code), + epSet, DID(destRaftId), destRaftId->addr); rpcFreeCont(pMsg->pCont); } - return code; + TAOS_RETURN(code); } inline bool syncNodeInConfig(SSyncNode* pNode, const SSyncCfg* pCfg) { @@ -2145,7 +2217,7 @@ int32_t syncNodeAssignedLeader2Leader(SSyncNode* pSyncNode) { int32_t ret = syncNodeAppendNoop(pSyncNode); if (ret < 0) { - sError("vgId:%d, failed to append noop entry since %s", pSyncNode->vgId, terrstr()); + sError("vgId:%d, failed to append noop entry since %s", pSyncNode->vgId, tstrerror(ret)); } SyncIndex lastIndex = pSyncNode->pLogStore->syncLogLastIndex(pSyncNode->pLogStore); @@ -2594,8 +2666,9 @@ void syncBuildConfigFromReq(SAlterVnodeReplicaReq* pReq, SSyncCfg* cfg) { // TO } int32_t syncNodeCheckChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry) { + int32_t code = 0; if (pEntry->originalRpcType != TDMT_SYNC_CONFIG_CHANGE) { - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } SMsgHead* head = (SMsgHead*)pEntry->data; @@ -2603,8 +2676,8 @@ int32_t syncNodeCheckChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry) { SAlterVnodeTypeReq req = {0}; if (tDeserializeSAlterVnodeReplicaReq(pReq, head->contLen, &req) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + TAOS_RETURN(code); } SSyncCfg cfg = {0}; @@ -2755,6 +2828,7 @@ void syncNodeChangePeerAndCfgToVoter(SSyncNode* ths, SSyncCfg* cfg) { } int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum) { + int32_t code = 0; // 1.rebuild replicasId, remove deleted one SRaftId oldReplicasId[TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA]; memcpy(oldReplicasId, ths->replicasId, sizeof(oldReplicasId)); @@ -2762,13 +2836,19 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum ths->replicaNum = ths->raftCfg.cfg.replicaNum; ths->totalReplicaNum = ths->raftCfg.cfg.totalReplicaNum; for (int32_t i = 0; i < ths->raftCfg.cfg.totalReplicaNum; ++i) { - syncUtilNodeInfo2RaftId(&ths->raftCfg.cfg.nodeInfo[i], ths->vgId, &ths->replicasId[i]); + if (!syncUtilNodeInfo2RaftId(&ths->raftCfg.cfg.nodeInfo[i], ths->vgId, &ths->replicasId[i])) + return TSDB_CODE_SYN_INTERNAL_ERROR; } // 2.rebuild MatchIndex, remove deleted one SSyncIndexMgr* oldIndex = ths->pMatchIndex; ths->pMatchIndex = syncIndexMgrCreate(ths); + if (ths->pMatchIndex == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } syncIndexMgrCopyIfExist(ths->pMatchIndex, oldIndex, oldReplicasId); @@ -2778,6 +2858,11 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum SSyncIndexMgr* oldNextIndex = ths->pNextIndex; ths->pNextIndex = syncIndexMgrCreate(ths); + if (ths->pNextIndex == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } syncIndexMgrCopyIfExist(ths->pNextIndex, oldNextIndex, oldReplicasId); @@ -2797,7 +2882,7 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum SSyncLogReplMgr* oldLogReplMgrs = NULL; int64_t length = sizeof(SSyncLogReplMgr) * (TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA); oldLogReplMgrs = taosMemoryMalloc(length); - if (NULL == oldLogReplMgrs) return -1; + if (NULL == oldLogReplMgrs) return TSDB_CODE_OUT_OF_MEMORY; memset(oldLogReplMgrs, 0, length); for (int i = 0; i < oldtotalReplicaNum; i++) { @@ -2805,7 +2890,10 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum } syncNodeLogReplDestroy(ths); - syncNodeLogReplInit(ths); + if ((code = syncNodeLogReplInit(ths)) != 0) { + taosMemoryFree(oldLogReplMgrs); + TAOS_RETURN(code); + } for (int i = 0; i < ths->totalReplicaNum; ++i) { for (int j = 0; j < oldtotalReplicaNum; j++) { @@ -2856,13 +2944,22 @@ int32_t syncNodeRebuildAndCopyIfExist(SSyncNode* ths, int32_t oldtotalReplicaNum } // 7.rebuild synctimer - syncNodeStopHeartbeatTimer(ths); - - for (int32_t i = 0; i < TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA; ++i) { - syncHbTimerInit(ths, &ths->peerHeartbeatTimerArr[i], ths->replicasId[i]); + if ((code = syncNodeStopHeartbeatTimer(ths)) != 0) { + taosMemoryFree(oldLogReplMgrs); + TAOS_RETURN(code); } - syncNodeStartHeartbeatTimer(ths); + for (int32_t i = 0; i < TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA; ++i) { + if ((code = syncHbTimerInit(ths, &ths->peerHeartbeatTimerArr[i], ths->replicasId[i])) != 0) { + taosMemoryFree(oldLogReplMgrs); + TAOS_RETURN(code); + } + } + + if ((code = syncNodeStartHeartbeatTimer(ths)) != 0) { + taosMemoryFree(oldLogReplMgrs); + TAOS_RETURN(code); + } // 8.rebuild peerStates SPeerState oldState[TSDB_MAX_REPLICA + TSDB_MAX_LEARNER_REPLICA] = {0}; @@ -2920,8 +3017,9 @@ void syncNodeResetPeerAndCfg(SSyncNode* ths) { } int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) { + int32_t code = 0; if (pEntry->originalRpcType != TDMT_SYNC_CONFIG_CHANGE) { - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } SMsgHead* head = (SMsgHead*)pEntry->data; @@ -2929,8 +3027,8 @@ int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) SAlterVnodeTypeReq req = {0}; if (tDeserializeSAlterVnodeReplicaReq(pReq, head->contLen, &req) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + TAOS_RETURN(code); } SSyncCfg cfg = {0}; @@ -2994,12 +3092,12 @@ int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) // no need to change myNodeInfo - if (syncNodeRebuildPeerAndCfg(ths, &cfg) != 0) { - return -1; + if ((code = syncNodeRebuildPeerAndCfg(ths, &cfg)) != 0) { + TAOS_RETURN(code); }; - if (syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum) != 0) { - return -1; + if ((code = syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum)) != 0) { + TAOS_RETURN(code); }; } else { // remove myself // no need to do anything actually, to change the following to reduce distruptive server chance @@ -3016,8 +3114,8 @@ int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) ths->raftCfg.cfg.totalReplicaNum = 1; // change other - if (syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum) != 0) { - return -1; + if ((code = syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum)) != 0) { + TAOS_RETURN(code); } // change state @@ -3059,13 +3157,13 @@ int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) // no need to change myNodeInfo // change peer and cfg - if (syncNodeRebuildPeerAndCfg(ths, &cfg) != 0) { - return -1; + if ((code = syncNodeRebuildPeerAndCfg(ths, &cfg)) != 0) { + TAOS_RETURN(code); }; // change other - if (syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum) != 0) { - return -1; + if ((code = syncNodeRebuildAndCopyIfExist(ths, oldTotalReplicaNum)) != 0) { + TAOS_RETURN(code); }; // no need to change state @@ -3084,17 +3182,18 @@ int32_t syncNodeChangeConfig(SSyncNode* ths, SSyncRaftEntry* pEntry, char* str) syncNodeLogConfigInfo(ths, &cfg, "after config change"); - if (syncWriteCfgFile(ths) != 0) { + if ((code = syncWriteCfgFile(ths)) != 0) { sError("vgId:%d, failed to create sync cfg file", ths->vgId); - return -1; + TAOS_RETURN(code); }; - return 0; + TAOS_RETURN(code); } int32_t syncNodeAppend(SSyncNode* ths, SSyncRaftEntry* pEntry) { int32_t code = -1; if (pEntry->dataLen < sizeof(SMsgHead)) { + code = TSDB_CODE_SYN_INTERNAL_ERROR; sError("vgId:%d, cannot append an invalid client request with no msg head. type:%s, dataLen:%d", ths->vgId, TMSG_INFO(pEntry->originalRpcType), pEntry->dataLen); syncEntryDestroy(pEntry); @@ -3102,7 +3201,7 @@ int32_t syncNodeAppend(SSyncNode* ths, SSyncRaftEntry* pEntry) { } // append to log buffer - if (syncLogBufferAppend(ths->pLogBuf, ths, pEntry) < 0) { + if ((code = syncLogBufferAppend(ths->pLogBuf, ths, pEntry)) < 0) { sError("vgId:%d, failed to enqueue sync log buffer, index:%" PRId64, ths->vgId, pEntry->index); ASSERT(terrno != 0); (void)syncFsmExecute(ths, ths->pFsm, ths->state, raftStoreGetTerm(ths), pEntry, terrno, false); @@ -3126,24 +3225,24 @@ _out:; if (ths->fsmState != SYNC_FSM_STATE_INCOMPLETE && syncLogBufferCommit(ths->pLogBuf, ths, ths->assignedCommitIndex) < 0) { sError("vgId:%d, failed to commit until commitIndex:%" PRId64 "", ths->vgId, ths->commitIndex); - code = -1; + code = TSDB_CODE_SYN_INTERNAL_ERROR; } } // multi replica if (ths->replicaNum > 1) { - return code; + TAOS_RETURN(code); } // single replica (void)syncNodeUpdateCommitIndex(ths, matchIndex); - if (ths->fsmState != SYNC_FSM_STATE_INCOMPLETE && syncLogBufferCommit(ths->pLogBuf, ths, ths->commitIndex) < 0) { + if (ths->fsmState != SYNC_FSM_STATE_INCOMPLETE && + (code = syncLogBufferCommit(ths->pLogBuf, ths, ths->commitIndex)) < 0) { sError("vgId:%d, failed to commit until commitIndex:%" PRId64 "", ths->vgId, ths->commitIndex); - code = -1; } - return code; + TAOS_RETURN(code); } bool syncNodeHeartbeatReplyTimeout(SSyncNode* pSyncNode) { @@ -3192,17 +3291,18 @@ bool syncNodeSnapshotRecving(SSyncNode* pSyncNode) { } static int32_t syncNodeAppendNoop(SSyncNode* ths) { + int32_t code = 0; SyncIndex index = syncLogBufferGetEndIndex(ths->pLogBuf); SyncTerm term = raftStoreGetTerm(ths); SSyncRaftEntry* pEntry = syncEntryBuildNoop(term, index, ths->vgId); if (pEntry == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } - int32_t ret = syncNodeAppend(ths, pEntry); - return 0; + code = syncNodeAppend(ths, pEntry); + TAOS_RETURN(code); } #ifdef BUILD_NO_CALL @@ -3328,13 +3428,14 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, const SRpcMsg* pRpcMsg) { } // reply - syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg); + TAOS_CHECK_RETURN(syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg)); if (resetElect) syncNodeResetElectTimer(ths); return 0; } int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { + int32_t code = 0; const STraceId* trace = &pRpcMsg->info.traceId; char tbuf[40] = {0}; TRACE_TO_STR(trace, tbuf); @@ -3342,8 +3443,10 @@ int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) { SyncHeartbeatReply* pMsg = pRpcMsg->pCont; SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(ths, &pMsg->srcId); if (pMgr == NULL) { + code = TSDB_CODE_SYN_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; sError("vgId:%d, failed to get log repl mgr for the peer at addr 0x016%" PRIx64 "", ths->vgId, pMsg->srcId.addr); - return -1; + TAOS_RETURN(code); } int64_t tsMs = taosGetTimestampMs(); @@ -3424,6 +3527,11 @@ int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIn pEntry = syncEntryBuildFromRpcMsg(pMsg, term, index); } + if (pEntry == NULL) { + sError("vgId:%d, failed to process client request since %s.", ths->vgId, terrstr()); + return TSDB_CODE_SYN_INTERNAL_ERROR; + } + // 1->2, config change is add in write thread, and will continue in sync thread // need save message for it if (pMsg->msgType == TDMT_SYNC_CONFIG_CHANGE) { @@ -3432,11 +3540,6 @@ int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIn pEntry->seqNum = seqNum; } - if (pEntry == NULL) { - sError("vgId:%d, failed to process client request since %s.", ths->vgId, terrstr()); - return -1; - } - if (ths->state == TAOS_SYNC_STATE_LEADER || ths->state == TAOS_SYNC_STATE_ASSIGNED_LEADER) { if (pRetIndex) { (*pRetIndex) = index; @@ -3448,7 +3551,7 @@ int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIn sError("vgId:%d, failed to check change config since %s.", ths->vgId, terrstr()); syncEntryDestroy(pEntry); pEntry = NULL; - return -1; + TAOS_RETURN(code); } if (code > 0) { @@ -3459,7 +3562,7 @@ int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIn } syncEntryDestroy(pEntry); pEntry = NULL; - return -1; + TAOS_RETURN(code); } } @@ -3468,7 +3571,7 @@ int32_t syncNodeOnClientRequest(SSyncNode* ths, SRpcMsg* pMsg, SyncIndex* pRetIn } else { syncEntryDestroy(pEntry); pEntry = NULL; - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } } @@ -3506,7 +3609,7 @@ int32_t syncNodeUpdateNewConfigIndex(SSyncNode* ths, SSyncCfg* pNewCfg) { } } - return -1; + return TSDB_CODE_SYN_INTERNAL_ERROR; } bool syncNodeIsOptimizedOneReplica(SSyncNode* ths, SRpcMsg* pMsg) { diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index 9e035f60c2..1c67c12a98 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -25,8 +25,7 @@ int32_t syncBuildTimeout(SRpcMsg* pMsg, ESyncTimeoutType timeoutType, uint64_t l pMsg->msgType = (timeoutType == SYNC_TIMEOUT_ELECTION) ? TDMT_SYNC_TIMEOUT_ELECTION : TDMT_SYNC_TIMEOUT; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncTimeout* pTimeout = pMsg->pCont; @@ -43,13 +42,13 @@ int32_t syncBuildTimeout(SRpcMsg* pMsg, ESyncTimeoutType timeoutType, uint64_t l int32_t syncBuildClientRequest(SRpcMsg* pMsg, const SRpcMsg* pOriginal, uint64_t seqNum, bool isWeak, int32_t vgId) { int32_t bytes = sizeof(SyncClientRequest) + pOriginal->contLen; + pMsg->pCont = rpcMallocCont(bytes); + if (pMsg->pCont == NULL) { + return terrno = TSDB_CODE_OUT_OF_MEMORY; + } pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST; pMsg->contLen = bytes; - if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } SyncClientRequest* pClientRequest = pMsg->pCont; pClientRequest->bytes = bytes; @@ -70,8 +69,7 @@ int32_t syncBuildClientRequestFromNoopEntry(SRpcMsg* pMsg, const SSyncRaftEntry* pMsg->msgType = TDMT_SYNC_CLIENT_REQUEST; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncClientRequest* pClientRequest = pMsg->pCont; @@ -91,8 +89,7 @@ int32_t syncBuildRequestVote(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_REQUEST_VOTE; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncRequestVote* pRequestVote = pMsg->pCont; @@ -108,8 +105,7 @@ int32_t syncBuildRequestVoteReply(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_REQUEST_VOTE_REPLY; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncRequestVoteReply* pRequestVoteReply = pMsg->pCont; @@ -125,8 +121,7 @@ int32_t syncBuildAppendEntries(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId) { pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncAppendEntries* pAppendEntries = pMsg->pCont; @@ -143,8 +138,7 @@ int32_t syncBuildAppendEntriesReply(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_APPEND_ENTRIES_REPLY; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncAppendEntriesReply* pAppendEntriesReply = pMsg->pCont; @@ -161,8 +155,7 @@ int32_t syncBuildAppendEntriesFromRaftEntry(SSyncNode* pNode, SSyncRaftEntry* pE pRpcMsg->contLen = bytes; pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen); if (pRpcMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncAppendEntries* pMsg = pRpcMsg->pCont; @@ -188,8 +181,7 @@ int32_t syncBuildHeartbeat(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_HEARTBEAT; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncHeartbeat* pHeartbeat = pMsg->pCont; @@ -205,8 +197,7 @@ int32_t syncBuildHeartbeatReply(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_HEARTBEAT_REPLY; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncHeartbeatReply* pHeartbeatReply = pMsg->pCont; @@ -222,8 +213,7 @@ int32_t syncBuildSnapshotSend(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId) { pMsg->msgType = TDMT_SYNC_SNAPSHOT_SEND; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncSnapshotSend* pSnapshotSend = pMsg->pCont; @@ -240,8 +230,7 @@ int32_t syncBuildSnapshotSendRsp(SRpcMsg* pMsg, int32_t dataLen, int32_t vgId) { pMsg->msgType = TDMT_SYNC_SNAPSHOT_RSP; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncSnapshotRsp* pPreSnapshotRsp = pMsg->pCont; @@ -257,8 +246,7 @@ int32_t syncBuildLeaderTransfer(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_LEADER_TRANSFER; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncLeaderTransfer* pLeaderTransfer = pMsg->pCont; @@ -274,8 +262,7 @@ int32_t syncBuildLocalCmd(SRpcMsg* pMsg, int32_t vgId) { pMsg->msgType = TDMT_SYNC_LOCAL_CMD; pMsg->contLen = bytes; if (pMsg->pCont == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return terrno = TSDB_CODE_OUT_OF_MEMORY; } SyncLocalCmd* pLocalCmd = pMsg->pCont; diff --git a/source/libs/sync/src/syncRaftLog.c b/source/libs/sync/src/syncRaftLog.c index 57c70d8df1..ecca777806 100644 --- a/source/libs/sync/src/syncRaftLog.c +++ b/source/libs/sync/src/syncRaftLog.c @@ -63,12 +63,12 @@ SSyncLogStore* logStoreCreate(SSyncNode* pSyncNode) { pData->pWal = pSyncNode->pWal; ASSERT(pData->pWal != NULL); - taosThreadMutexInit(&(pData->mutex), NULL); + (void)taosThreadMutexInit(&(pData->mutex), NULL); pData->pWalHandle = walOpenReader(pData->pWal, NULL, 0); if (!pData->pWalHandle) { taosMemoryFree(pLogStore); taosLRUCacheCleanup(pLogStore->pCache); - taosThreadMutexDestroy(&(pData->mutex)); + (void)taosThreadMutexDestroy(&(pData->mutex)); terrno = TSDB_CODE_OUT_OF_MEMORY; return NULL; } @@ -96,13 +96,13 @@ void logStoreDestory(SSyncLogStore* pLogStore) { if (pLogStore != NULL) { SSyncLogStoreData* pData = pLogStore->data; - taosThreadMutexLock(&(pData->mutex)); + (void)taosThreadMutexLock(&(pData->mutex)); if (pData->pWalHandle != NULL) { walCloseReader(pData->pWalHandle); pData->pWalHandle = NULL; } - taosThreadMutexUnlock(&(pData->mutex)); - taosThreadMutexDestroy(&(pData->mutex)); + (void)taosThreadMutexUnlock(&(pData->mutex)); + (void)taosThreadMutexDestroy(&(pData->mutex)); taosMemoryFree(pLogStore->data); @@ -261,12 +261,12 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR *ppEntry = NULL; int64_t ts1 = taosGetTimestampNs(); - taosThreadMutexLock(&(pData->mutex)); + (void)taosThreadMutexLock(&(pData->mutex)); SWalReader* pWalHandle = pData->pWalHandle; if (pWalHandle == NULL) { sError("vgId:%d, wal handle is NULL", pData->pSyncNode->vgId); - taosThreadMutexUnlock(&(pData->mutex)); + (void)taosThreadMutexUnlock(&(pData->mutex)); TAOS_RETURN(TSDB_CODE_SYN_INTERNAL_ERROR); } @@ -297,7 +297,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR terrno = saveErr; */ - taosThreadMutexUnlock(&(pData->mutex)); + (void)taosThreadMutexUnlock(&(pData->mutex)); TAOS_RETURN(code); } @@ -311,7 +311,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR (*ppEntry)->term = pWalHandle->pHead->head.syncMeta.term; (*ppEntry)->index = index; ASSERT((*ppEntry)->dataLen == pWalHandle->pHead->head.bodyLen); - memcpy((*ppEntry)->data, pWalHandle->pHead->head.body, pWalHandle->pHead->head.bodyLen); + (void)memcpy((*ppEntry)->data, pWalHandle->pHead->head.body, pWalHandle->pHead->head.bodyLen); /* int32_t saveErr = terrno; @@ -319,7 +319,7 @@ int32_t raftLogGetEntry(struct SSyncLogStore* pLogStore, SyncIndex index, SSyncR terrno = saveErr; */ - taosThreadMutexUnlock(&(pData->mutex)); + (void)taosThreadMutexUnlock(&(pData->mutex)); int64_t ts4 = taosGetTimestampNs(); int64_t tsElapsed = ts4 - ts1; diff --git a/source/libs/sync/src/syncRaftStore.c b/source/libs/sync/src/syncRaftStore.c index 7f702c3766..cb07a63eed 100644 --- a/source/libs/sync/src/syncRaftStore.c +++ b/source/libs/sync/src/syncRaftStore.c @@ -152,52 +152,52 @@ _OVER: } int32_t raftStoreOpen(SSyncNode *pNode) { - taosThreadMutexInit(&pNode->raftStore.mutex, NULL); + (void)taosThreadMutexInit(&pNode->raftStore.mutex, NULL); return raftStoreReadFile(pNode); } -void raftStoreClose(SSyncNode *pNode) { taosThreadMutexDestroy(&pNode->raftStore.mutex); } +void raftStoreClose(SSyncNode *pNode) { (void)taosThreadMutexDestroy(&pNode->raftStore.mutex); } bool raftStoreHasVoted(SSyncNode *pNode) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); bool b = syncUtilEmptyId(&pNode->raftStore.voteFor); - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); return (!b); } void raftStoreVote(SSyncNode *pNode, SRaftId *pRaftId) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); pNode->raftStore.voteFor = *pRaftId; (void)raftStoreWriteFile(pNode); - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); } void raftStoreClearVote(SSyncNode *pNode) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); pNode->raftStore.voteFor = EMPTY_RAFT_ID; (void)raftStoreWriteFile(pNode); - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); } void raftStoreNextTerm(SSyncNode *pNode) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); pNode->raftStore.currentTerm++; (void)raftStoreWriteFile(pNode); - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); } void raftStoreSetTerm(SSyncNode *pNode, SyncTerm term) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); if (pNode->raftStore.currentTerm < term) { pNode->raftStore.currentTerm = term; (void)raftStoreWriteFile(pNode); } - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); } SyncTerm raftStoreGetTerm(SSyncNode *pNode) { - taosThreadMutexLock(&pNode->raftStore.mutex); + (void)taosThreadMutexLock(&pNode->raftStore.mutex); SyncTerm term = pNode->raftStore.currentTerm; - taosThreadMutexUnlock(&pNode->raftStore.mutex); + (void)taosThreadMutexUnlock(&pNode->raftStore.mutex); return term; } diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index dfe9f51af2..40a359379a 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -48,19 +48,19 @@ int32_t syncNodeReplicateReset(SSyncNode* pNode, SRaftId* pDestId) { SSyncLogBuffer* pBuf = pNode->pLogBuf; - taosThreadMutexLock(&pBuf->mutex); + (void)taosThreadMutexLock(&pBuf->mutex); SSyncLogReplMgr* pMgr = syncNodeGetLogReplMgr(pNode, pDestId); syncLogReplReset(pMgr); - taosThreadMutexUnlock(&pBuf->mutex); + (void)taosThreadMutexUnlock(&pBuf->mutex); TAOS_RETURN(TSDB_CODE_SUCCESS); } int32_t syncNodeReplicate(SSyncNode* pNode) { SSyncLogBuffer* pBuf = pNode->pLogBuf; - taosThreadMutexLock(&pBuf->mutex); + (void)taosThreadMutexLock(&pBuf->mutex); int32_t ret = syncNodeReplicateWithoutLock(pNode); - taosThreadMutexUnlock(&pBuf->mutex); + (void)taosThreadMutexUnlock(&pBuf->mutex); TAOS_RETURN(ret); } diff --git a/source/libs/wal/inc/walInt.h b/source/libs/wal/inc/walInt.h index d493061bdc..1886541d62 100644 --- a/source/libs/wal/inc/walInt.h +++ b/source/libs/wal/inc/walInt.h @@ -114,11 +114,11 @@ static inline SWalFileInfo* walGetCurFileInfo(SWal* pWal) { } static inline void walBuildLogName(SWal* pWal, int64_t fileFirstVer, char* buf) { - sprintf(buf, "%s/%020" PRId64 "." WAL_LOG_SUFFIX, pWal->path, fileFirstVer); + TAOS_UNUSED(sprintf(buf, "%s/%020" PRId64 "." WAL_LOG_SUFFIX, pWal->path, fileFirstVer)); } static inline void walBuildIdxName(SWal* pWal, int64_t fileFirstVer, char* buf) { - sprintf(buf, "%s/%020" PRId64 "." WAL_INDEX_SUFFIX, pWal->path, fileFirstVer); + TAOS_UNUSED(sprintf(buf, "%s/%020" PRId64 "." WAL_INDEX_SUFFIX, pWal->path, fileFirstVer)); } static inline int walValidHeadCksum(SWalCkHead* pHead) { diff --git a/source/libs/wal/src/walMeta.c b/source/libs/wal/src/walMeta.c index df9ef041c6..f953f50aa7 100644 --- a/source/libs/wal/src/walMeta.c +++ b/source/libs/wal/src/walMeta.c @@ -57,7 +57,7 @@ static FORCE_INLINE int32_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx, in walBuildLogName(pWal, pFileInfo->firstVer, fnameStr); int64_t fileSize = 0; - taosStatFile(fnameStr, &fileSize, NULL, NULL); + (void)taosStatFile(fnameStr, &fileSize, NULL, NULL); TdFilePtr pFile = taosOpenFile(fnameStr, TD_FILE_READ | TD_FILE_WRITE); if (pFile == NULL) { @@ -362,7 +362,7 @@ static int32_t walTrimIdxFile(SWal* pWal, int32_t fileIdx) { walBuildIdxName(pWal, pFileInfo->firstVer, fnameStr); int64_t fileSize = 0; - taosStatFile(fnameStr, &fileSize, NULL, NULL); + (void)taosStatFile(fnameStr, &fileSize, NULL, NULL); int64_t records = TMAX(0, pFileInfo->lastVer - pFileInfo->firstVer + 1); int64_t lastEndOffset = records * sizeof(SWalIdxEntry); @@ -378,8 +378,8 @@ static int32_t walTrimIdxFile(SWal* pWal, int32_t fileIdx) { wInfo("vgId:%d, trim idx file. file: %s, size: %" PRId64 ", offset: %" PRId64, pWal->cfg.vgId, fnameStr, fileSize, lastEndOffset); - taosFtruncateFile(pFile, lastEndOffset); - taosCloseFile(&pFile); + (void)taosFtruncateFile(pFile, lastEndOffset); + (void)taosCloseFile(&pFile); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -392,8 +392,8 @@ int32_t walCheckAndRepairMeta(SWal* pWal) { regex_t logRegPattern; regex_t idxRegPattern; - regcomp(&logRegPattern, logPattern, REG_EXTENDED); - regcomp(&idxRegPattern, idxPattern, REG_EXTENDED); + (void)regcomp(&logRegPattern, logPattern, REG_EXTENDED); + (void)regcomp(&idxRegPattern, idxPattern, REG_EXTENDED); TdDirPtr pDir = taosOpenDir(pWal->path); if (pDir == NULL) { @@ -412,13 +412,13 @@ int32_t walCheckAndRepairMeta(SWal* pWal) { int code = regexec(&logRegPattern, name, 0, NULL, 0); if (code == 0) { SWalFileInfo fileInfo; - memset(&fileInfo, -1, sizeof(SWalFileInfo)); - sscanf(name, "%" PRId64 ".log", &fileInfo.firstVer); - taosArrayPush(actualLog, &fileInfo); + (void)memset(&fileInfo, -1, sizeof(SWalFileInfo)); + (void)sscanf(name, "%" PRId64 ".log", &fileInfo.firstVer); + (void)taosArrayPush(actualLog, &fileInfo); } } - taosCloseDir(&pDir); + (void)taosCloseDir(&pDir); regfree(&logRegPattern); regfree(&idxRegPattern); @@ -549,7 +549,7 @@ static int32_t walCheckAndRepairIdxFile(SWal* pWal, int32_t fileIdx) { TdFilePtr pIdxFile = NULL; SWalIdxEntry idxEntry = {.ver = pFileInfo->firstVer - 1, .offset = -sizeof(SWalCkHead)}; SWalCkHead ckHead; - memset(&ckHead, 0, sizeof(ckHead)); + (void)memset(&ckHead, 0, sizeof(ckHead)); ckHead.head.version = idxEntry.ver; pIdxFile = taosOpenFile(fnameStr, TD_FILE_READ | TD_FILE_WRITE | TD_FILE_CREATE); @@ -675,7 +675,7 @@ _err: int64_t walGetVerRetention(SWal* pWal, int64_t bytes) { int64_t ver = -1; int64_t totSize = 0; - taosThreadMutexLock(&pWal->mutex); + (void)taosThreadMutexLock(&pWal->mutex); int32_t fileIdx = taosArrayGetSize(pWal->fileInfoSet); while (--fileIdx) { SWalFileInfo* pInfo = taosArrayGet(pWal->fileInfoSet, fileIdx); @@ -685,7 +685,7 @@ int64_t walGetVerRetention(SWal* pWal, int64_t bytes) { } totSize += pInfo->fileSize; } - taosThreadMutexUnlock(&pWal->mutex); + (void)taosThreadMutexUnlock(&pWal->mutex); return ver + 1; } @@ -727,7 +727,7 @@ int32_t walRollFileInfo(SWal* pWal) { pNewInfo->closeTs = -1; pNewInfo->fileSize = 0; pNewInfo->syncedOffset = 0; - taosArrayPush(pArray, pNewInfo); + (void)taosArrayPush(pArray, pNewInfo); taosMemoryFree(pNewInfo); TAOS_RETURN(TSDB_CODE_SUCCESS); @@ -753,21 +753,21 @@ int32_t walMetaSerialize(SWal* pWal, char** serialized) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - cJSON_AddItemToObject(pRoot, "meta", pMeta); - sprintf(buf, "%" PRId64, pWal->vers.firstVer); - cJSON_AddStringToObject(pMeta, "firstVer", buf); - sprintf(buf, "%" PRId64, pWal->vers.snapshotVer); - cJSON_AddStringToObject(pMeta, "snapshotVer", buf); - sprintf(buf, "%" PRId64, pWal->vers.commitVer); - cJSON_AddStringToObject(pMeta, "commitVer", buf); - sprintf(buf, "%" PRId64, pWal->vers.lastVer); - cJSON_AddStringToObject(pMeta, "lastVer", buf); + (void)cJSON_AddItemToObject(pRoot, "meta", pMeta); + (void)sprintf(buf, "%" PRId64, pWal->vers.firstVer); + (void)cJSON_AddStringToObject(pMeta, "firstVer", buf); + (void)sprintf(buf, "%" PRId64, pWal->vers.snapshotVer); + (void)cJSON_AddStringToObject(pMeta, "snapshotVer", buf); + (void)sprintf(buf, "%" PRId64, pWal->vers.commitVer); + (void)cJSON_AddStringToObject(pMeta, "commitVer", buf); + (void)sprintf(buf, "%" PRId64, pWal->vers.lastVer); + (void)cJSON_AddStringToObject(pMeta, "lastVer", buf); - cJSON_AddItemToObject(pRoot, "files", pFiles); + (void)cJSON_AddItemToObject(pRoot, "files", pFiles); SWalFileInfo* pData = pWal->fileInfoSet->pData; for (int i = 0; i < sz; i++) { SWalFileInfo* pInfo = &pData[i]; - cJSON_AddItemToArray(pFiles, pField = cJSON_CreateObject()); + (void)cJSON_AddItemToArray(pFiles, pField = cJSON_CreateObject()); if (pField == NULL) { cJSON_Delete(pRoot); @@ -775,16 +775,16 @@ int32_t walMetaSerialize(SWal* pWal, char** serialized) { } // cjson only support int32_t or double // string are used to prohibit the loss of precision - sprintf(buf, "%" PRId64, pInfo->firstVer); - cJSON_AddStringToObject(pField, "firstVer", buf); - sprintf(buf, "%" PRId64, pInfo->lastVer); - cJSON_AddStringToObject(pField, "lastVer", buf); - sprintf(buf, "%" PRId64, pInfo->createTs); - cJSON_AddStringToObject(pField, "createTs", buf); - sprintf(buf, "%" PRId64, pInfo->closeTs); - cJSON_AddStringToObject(pField, "closeTs", buf); - sprintf(buf, "%" PRId64, pInfo->fileSize); - cJSON_AddStringToObject(pField, "fileSize", buf); + (void)sprintf(buf, "%" PRId64, pInfo->firstVer); + (void)cJSON_AddStringToObject(pField, "firstVer", buf); + (void)sprintf(buf, "%" PRId64, pInfo->lastVer); + (void)cJSON_AddStringToObject(pField, "lastVer", buf); + (void)sprintf(buf, "%" PRId64, pInfo->createTs); + (void)cJSON_AddStringToObject(pField, "createTs", buf); + (void)sprintf(buf, "%" PRId64, pInfo->closeTs); + (void)cJSON_AddStringToObject(pField, "closeTs", buf); + (void)sprintf(buf, "%" PRId64, pInfo->fileSize); + (void)cJSON_AddStringToObject(pField, "fileSize", buf); } char* pSerialized = cJSON_Print(pRoot); cJSON_Delete(pRoot); @@ -818,7 +818,7 @@ int32_t walMetaDeserialize(SWal* pWal, const char* bytes) { int sz = cJSON_GetArraySize(pFiles); // deserialize SArray* pArray = pWal->fileInfoSet; - taosArrayEnsureCap(pArray, sz); + (void)taosArrayEnsureCap(pArray, sz); for (int i = 0; i < sz; i++) { pInfoJson = cJSON_GetArrayItem(pFiles, i); @@ -841,7 +841,7 @@ int32_t walMetaDeserialize(SWal* pWal, const char* bytes) { pField = cJSON_GetObjectItem(pInfoJson, "fileSize"); if (!pField) goto _err; info.fileSize = atoll(cJSON_GetStringValue(pField)); - taosArrayPush(pArray, &info); + (void)taosArrayPush(pArray, &info); } pWal->fileInfoSet = pArray; pWal->writeCur = sz - 1; @@ -856,7 +856,7 @@ _err: static int walFindCurMetaVer(SWal* pWal) { const char* pattern = "^meta-ver[0-9]+$"; regex_t walMetaRegexPattern; - regcomp(&walMetaRegexPattern, pattern, REG_EXTENDED); + (void)regcomp(&walMetaRegexPattern, pattern, REG_EXTENDED); TdDirPtr pDir = taosOpenDir(pWal->path); if (pDir == NULL) { @@ -872,13 +872,13 @@ static int walFindCurMetaVer(SWal* pWal) { char* name = taosDirEntryBaseName(taosGetDirEntryName(pDirEntry)); int code = regexec(&walMetaRegexPattern, name, 0, NULL, 0); if (code == 0) { - sscanf(name, "meta-ver%d", &metaVer); + (void)sscanf(name, "meta-ver%d", &metaVer); wDebug("vgId:%d, wal find current meta: %s is the meta file, ver %d", pWal->cfg.vgId, name, metaVer); break; } wDebug("vgId:%d, wal find current meta: %s is not meta file", pWal->cfg.vgId, name); } - taosCloseDir(&pDir); + (void)taosCloseDir(&pDir); regfree(&walMetaRegexPattern); return metaVer; } @@ -961,8 +961,8 @@ int32_t walSaveMeta(SWal* pWal) { // delete old file if (metaVer > -1) { - walBuildMetaName(pWal, metaVer, fnameStr); - taosRemoveFile(fnameStr); + (void)walBuildMetaName(pWal, metaVer, fnameStr); + (void)taosRemoveFile(fnameStr); } taosMemoryFree(serialized); @@ -984,10 +984,10 @@ int32_t walLoadMeta(SWal* pWal) { TAOS_RETURN(TSDB_CODE_FAILED); } char fnameStr[WAL_FILE_LEN]; - walBuildMetaName(pWal, metaVer, fnameStr); + (void)walBuildMetaName(pWal, metaVer, fnameStr); // read metafile int64_t fileSize = 0; - taosStatFile(fnameStr, &fileSize, NULL, NULL); + (void)taosStatFile(fnameStr, &fileSize, NULL, NULL); if (fileSize == 0) { (void)taosRemoveFile(fnameStr); wDebug("vgId:%d, wal find empty meta ver %d", pWal->cfg.vgId, metaVer); @@ -999,7 +999,7 @@ int32_t walLoadMeta(SWal* pWal) { if (buf == NULL) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - memset(buf, 0, size + 5); + (void)memset(buf, 0, size + 5); TdFilePtr pFile = taosOpenFile(fnameStr, TD_FILE_READ); if (pFile == NULL) { taosMemoryFree(buf); @@ -1007,7 +1007,7 @@ int32_t walLoadMeta(SWal* pWal) { TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } if (taosReadFile(pFile, buf, size) != size) { - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); taosMemoryFree(buf); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); @@ -1018,7 +1018,7 @@ int32_t walLoadMeta(SWal* pWal) { wError("failed to deserialize wal meta. file:%s", fnameStr); code = TSDB_CODE_WAL_FILE_CORRUPTED; } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); taosMemoryFree(buf); TAOS_RETURN(code); @@ -1028,6 +1028,6 @@ int32_t walRemoveMeta(SWal* pWal) { int metaVer = walFindCurMetaVer(pWal); if (metaVer == -1) return 0; char fnameStr[WAL_FILE_LEN]; - walBuildMetaName(pWal, metaVer, fnameStr); + (void)walBuildMetaName(pWal, metaVer, fnameStr); return taosRemoveFile(fnameStr); } diff --git a/source/libs/wal/src/walMgmt.c b/source/libs/wal/src/walMgmt.c index bf875b4e09..9da3207471 100644 --- a/source/libs/wal/src/walMgmt.c +++ b/source/libs/wal/src/walMgmt.c @@ -33,7 +33,7 @@ static int32_t walCreateThread(); static void walStopThread(); static void walFreeObj(void *pWal); -int64_t walGetSeq() { return (int64_t)atomic_load_32(&tsWal.seq); } +int64_t walGetSeq() { return (int64_t)atomic_load_32((volatile int32_t *)&tsWal.seq); } int32_t walInit() { int8_t old; @@ -69,7 +69,7 @@ void walCleanUp() { if (old == 1) { walStopThread(); - taosCloseRef(tsWal.refSetId); + TAOS_UNUSED(taosCloseRef(tsWal.refSetId)); wInfo("wal module is cleaned up"); atomic_store_8(&tsWal.inited, 0); } @@ -89,7 +89,7 @@ SWal *walOpen(const char *path, SWalCfg *pCfg) { } // set config - memcpy(&pWal->cfg, pCfg, sizeof(SWalCfg)); + TAOS_UNUSED(memcpy(&pWal->cfg, pCfg, sizeof(SWalCfg))); pWal->fsyncSeq = pCfg->fsyncPeriod / 1000; if (pWal->cfg.retentionSize > 0) { @@ -140,7 +140,7 @@ SWal *walOpen(const char *path, SWalCfg *pCfg) { pWal->lastRollSeq = -1; // init write buffer - memset(&pWal->writeHead, 0, sizeof(SWalCkHead)); + TAOS_UNUSED(memset(&pWal->writeHead, 0, sizeof(SWalCkHead))); pWal->writeHead.head.protoVer = WAL_PROTO_VER; pWal->writeHead.magic = WAL_MAGIC; @@ -171,7 +171,7 @@ SWal *walOpen(const char *path, SWalCfg *pCfg) { _err: taosArrayDestroy(pWal->fileInfoSet); taosHashCleanup(pWal->pRefHash); - taosThreadMutexDestroy(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexDestroy(&pWal->mutex)); taosMemoryFreeClear(pWal); return NULL; @@ -207,19 +207,19 @@ int32_t walAlter(SWal *pWal, SWalCfg *pCfg) { int32_t walPersist(SWal *pWal) { int32_t code = 0; - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); code = walSaveMeta(pWal); - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(code); } void walClose(SWal *pWal) { - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); (void)walSaveMeta(pWal); - taosCloseFile(&pWal->pLogFile); + TAOS_UNUSED(taosCloseFile(&pWal->pLogFile)); pWal->pLogFile = NULL; - taosCloseFile(&pWal->pIdxFile); + (void)taosCloseFile(&pWal->pIdxFile); pWal->pIdxFile = NULL; taosArrayDestroy(pWal->fileInfoSet); pWal->fileInfoSet = NULL; @@ -235,22 +235,22 @@ void walClose(SWal *pWal) { } taosHashCleanup(pWal->pRefHash); pWal->pRefHash = NULL; - taosThreadMutexUnlock(&pWal->mutex); + (void)taosThreadMutexUnlock(&pWal->mutex); if (pWal->cfg.level == TAOS_WAL_SKIP) { wInfo("vgId:%d, remove all wals, path:%s", pWal->cfg.vgId, pWal->path); taosRemoveDir(pWal->path); - taosMkDir(pWal->path); + (void)taosMkDir(pWal->path); } - taosRemoveRef(tsWal.refSetId, pWal->refId); + (void)taosRemoveRef(tsWal.refSetId, pWal->refId); } static void walFreeObj(void *wal) { SWal *pWal = wal; wDebug("vgId:%d, wal:%p is freed", pWal->cfg.vgId, pWal); - taosThreadMutexDestroy(&pWal->mutex); + (void)taosThreadMutexDestroy(&pWal->mutex); taosMemoryFreeClear(pWal); } @@ -259,7 +259,7 @@ static bool walNeedFsync(SWal *pWal) { return false; } - if (atomic_load_32(&tsWal.seq) % pWal->fsyncSeq == 0) { + if (atomic_load_32((volatile int32_t *)&tsWal.seq) % pWal->fsyncSeq == 0) { return true; } @@ -268,7 +268,7 @@ static bool walNeedFsync(SWal *pWal) { static void walUpdateSeq() { taosMsleep(WAL_REFRESH_MS); - atomic_add_fetch_32(&tsWal.seq, 1); + (void)atomic_add_fetch_32((volatile int32_t *)&tsWal.seq, 1); } static void walFsyncAll() { @@ -276,7 +276,7 @@ static void walFsyncAll() { while (pWal) { if (walNeedFsync(pWal)) { wTrace("vgId:%d, do fsync, level:%d seq:%d rseq:%d", pWal->cfg.vgId, pWal->cfg.level, pWal->fsyncSeq, - atomic_load_32(&tsWal.seq)); + atomic_load_32((volatile int32_t *)&tsWal.seq)); int32_t code = taosFsyncFile(pWal->pLogFile); if (code != 0) { wError("vgId:%d, file:%" PRId64 ".log, failed to fsync since %s", pWal->cfg.vgId, walGetLastFileFirstVer(pWal), @@ -301,8 +301,8 @@ static void *walThreadFunc(void *param) { static int32_t walCreateThread() { TdThreadAttr thAttr; - taosThreadAttrInit(&thAttr); - taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); + (void)taosThreadAttrInit(&thAttr); + (void)taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&tsWal.thread, &thAttr, walThreadFunc, NULL) != 0) { wError("failed to create wal thread since %s", strerror(errno)); @@ -310,7 +310,7 @@ static int32_t walCreateThread() { TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } - taosThreadAttrDestroy(&thAttr); + (void)taosThreadAttrDestroy(&thAttr); wDebug("wal thread is launched, thread:0x%08" PRIx64, taosGetPthreadId(tsWal.thread)); TAOS_RETURN(TSDB_CODE_SUCCESS); @@ -320,7 +320,7 @@ static void walStopThread() { atomic_store_8(&tsWal.stop, 1); if (taosCheckPthreadValid(tsWal.thread)) { - taosThreadJoin(tsWal.thread, NULL); + (void)taosThreadJoin(tsWal.thread, NULL); taosThreadClear(&tsWal.thread); } diff --git a/source/libs/wal/src/walRead.c b/source/libs/wal/src/walRead.c index 23e3991d8f..deb5a07672 100644 --- a/source/libs/wal/src/walRead.c +++ b/source/libs/wal/src/walRead.c @@ -41,7 +41,7 @@ SWalReader *walOpenReader(SWal *pWal, SWalFilterCond *cond, int64_t id) { pReader->cond.enableRef = 0; } - taosThreadMutexInit(&pReader->mutex, NULL); + TAOS_UNUSED(taosThreadMutexInit(&pReader->mutex, NULL)); pReader->pHead = taosMemoryMalloc(sizeof(SWalCkHead)); if (pReader->pHead == NULL) { @@ -60,8 +60,8 @@ SWalReader *walOpenReader(SWal *pWal, SWalFilterCond *cond, int64_t id) { void walCloseReader(SWalReader *pReader) { if (pReader == NULL) return; - taosCloseFile(&pReader->pIdxFile); - taosCloseFile(&pReader->pLogFile); + TAOS_UNUSED(taosCloseFile(&pReader->pIdxFile)); + TAOS_UNUSED(taosCloseFile(&pReader->pLogFile)); taosMemoryFreeClear(pReader->pHead); taosMemoryFree(pReader); } @@ -115,9 +115,9 @@ void walReaderValidVersionRange(SWalReader *pReader, int64_t *sver, int64_t *eve void walReaderVerifyOffset(SWalReader *pWalReader, STqOffsetVal *pOffset) { // if offset version is small than first version , let's seek to first version - taosThreadMutexLock(&pWalReader->pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWalReader->pWal->mutex)); int64_t firstVer = walGetFirstVer((pWalReader)->pWal); - taosThreadMutexUnlock(&pWalReader->pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWalReader->pWal->mutex)); if (pOffset->version < firstVer) { pOffset->version = firstVer; @@ -167,8 +167,8 @@ static int32_t walReadSeekFilePos(SWalReader *pReader, int64_t fileFirstVer, int static int32_t walReadChangeFile(SWalReader *pReader, int64_t fileFirstVer) { char fnameStr[WAL_FILE_LEN] = {0}; - taosCloseFile(&pReader->pIdxFile); - taosCloseFile(&pReader->pLogFile); + TAOS_UNUSED(taosCloseFile(&pReader->pIdxFile)); + TAOS_UNUSED(taosCloseFile(&pReader->pLogFile)); walBuildLogName(pReader->pWal, fileFirstVer, fnameStr); TdFilePtr pLogFile = taosOpenFile(fnameStr, TD_FILE_READ); @@ -393,13 +393,13 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { TAOS_RETURN(TSDB_CODE_WAL_LOG_NOT_EXIST); } - taosThreadMutexLock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pReader->mutex)); if (pReader->curVersion != ver) { code = walReaderSeekVer(pReader, ver); if (code) { wError("vgId:%d, unexpected wal log, index:%" PRId64 ", since %s", pReader->pWal->cfg.vgId, ver, terrstr()); - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(code); } @@ -414,7 +414,7 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { } else if (contLen == 0 && !seeked) { code = walReadSeekVerImpl(pReader, ver); if (code) { - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(code); } @@ -423,7 +423,7 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { } else { wError("vgId:%d, failed to read WAL record head, index:%" PRId64 ", from log file since %s", pReader->pWal->cfg.vgId, ver, terrstr()); - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); if (contLen < 0) { TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); @@ -437,7 +437,7 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { if (code != 0) { wError("vgId:%d, unexpected wal log, index:%" PRId64 ", since head checksum not passed", pReader->pWal->cfg.vgId, ver); - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } @@ -453,7 +453,7 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { if (pReader->capacity < cryptedBodyLen) { SWalCkHead *ptr = (SWalCkHead *)taosMemoryRealloc(pReader->pHead, sizeof(SWalCkHead) + cryptedBodyLen); if (ptr == NULL) { - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } @@ -464,7 +464,7 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { if ((contLen = taosReadFile(pReader->pLogFile, pReader->pHead->head.body, cryptedBodyLen)) != cryptedBodyLen) { wError("vgId:%d, failed to read WAL record body, index:%" PRId64 ", from log file since %s", pReader->pWal->cfg.vgId, ver, terrstr()); - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); if (contLen < 0) { TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); @@ -477,14 +477,14 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { wError("vgId:%d, unexpected wal log, index:%" PRId64 ", read request index:%" PRId64, pReader->pWal->cfg.vgId, pReader->pHead->head.version, ver); // pReader->curInvalid = 1; - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } code = decryptBody(&pReader->pWal->cfg, pReader->pHead, plainBodyLen, __FUNCTION__); if (code) { - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(code); } @@ -498,13 +498,13 @@ int32_t walReadVer(SWalReader *pReader, int64_t ver) { wError("checksum written into log:%u, checksum calculated:%u", logCkSum, readCkSum); // pReader->curInvalid = 1; - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } pReader->curVersion++; - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -523,13 +523,13 @@ int32_t decryptBody(SWalCfg *cfg, SWalCkHead *pHead, int32_t plainBodyLen, const opts.source = pHead->head.body; opts.result = newBody; opts.unitLen = 16; - strncpy(opts.key, cfg->encryptKey, 16); + TAOS_UNUSED(strncpy((char *)opts.key, cfg->encryptKey, 16)); int32_t count = CBC_Decrypt(&opts); // wDebug("CBC_Decrypt cryptedBodyLen:%d, plainBodyLen:%d, %s", count, plainBodyLen, func); - memcpy(pHead->head.body, newBody, plainBodyLen); + TAOS_UNUSED(memcpy(pHead->head.body, newBody, plainBodyLen)); taosMemoryFree(newBody); } @@ -538,10 +538,10 @@ int32_t decryptBody(SWalCfg *cfg, SWalCkHead *pHead, int32_t plainBodyLen, const } void walReadReset(SWalReader *pReader) { - taosThreadMutexLock(&pReader->mutex); - taosCloseFile(&pReader->pIdxFile); - taosCloseFile(&pReader->pLogFile); + TAOS_UNUSED(taosThreadMutexLock(&pReader->mutex)); + TAOS_UNUSED(taosCloseFile(&pReader->pIdxFile)); + TAOS_UNUSED(taosCloseFile(&pReader->pLogFile)); pReader->curFileFirstVer = -1; pReader->curVersion = -1; - taosThreadMutexUnlock(&pReader->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pReader->mutex)); } diff --git a/source/libs/wal/src/walRef.c b/source/libs/wal/src/walRef.c index ecca876c0d..579921a7e0 100644 --- a/source/libs/wal/src/walRef.c +++ b/source/libs/wal/src/walRef.c @@ -61,34 +61,34 @@ int32_t walSetRefVer(SWalRef *pRef, int64_t ver) { SWal *pWal = pRef->pWal; wDebug("vgId:%d, wal ref version %" PRId64 ", refId %" PRId64, pWal->cfg.vgId, ver, pRef->refId); if (pRef->refVer != ver) { - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); if (ver < pWal->vers.firstVer || ver > pWal->vers.lastVer) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_WAL_INVALID_VER); } pRef->refVer = ver; - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); } TAOS_RETURN(TSDB_CODE_SUCCESS); } void walRefFirstVer(SWal *pWal, SWalRef *pRef) { - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); pRef->refVer = pWal->vers.firstVer; - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); wDebug("vgId:%d, wal ref version %" PRId64 " for first", pWal->cfg.vgId, pRef->refVer); } void walRefLastVer(SWal *pWal, SWalRef *pRef) { - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); pRef->refVer = pWal->vers.lastVer; - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); wDebug("vgId:%d, wal ref version %" PRId64 " for last", pWal->cfg.vgId, pRef->refVer); } diff --git a/source/libs/wal/src/walWrite.c b/source/libs/wal/src/walWrite.c index 1053b7a273..dc3b2df52c 100644 --- a/source/libs/wal/src/walWrite.c +++ b/source/libs/wal/src/walWrite.c @@ -23,7 +23,7 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) { int32_t code = 0; - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); wInfo("vgId:%d, restore from snapshot, version %" PRId64, pWal->cfg.vgId, ver); @@ -34,14 +34,14 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) { SWalRef *pRef = *(SWalRef **)pIter; if (pRef->refVer != -1 && pRef->refVer <= ver) { taosHashCancelIterate(pWal->pRefHash, pIter); - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_FAILED); } } - taosCloseFile(&pWal->pLogFile); - taosCloseFile(&pWal->pIdxFile); + TAOS_UNUSED(taosCloseFile(&pWal->pLogFile)); + TAOS_UNUSED(taosCloseFile(&pWal->pIdxFile)); if (pWal->vers.firstVer != -1) { int32_t fileSetSize = taosArrayGetSize(pWal->fileInfoSet); @@ -51,7 +51,7 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) { walBuildLogName(pWal, pFileInfo->firstVer, fnameStr); if (taosRemoveFile(fnameStr) < 0) { wError("vgId:%d, restore from snapshot, cannot remove file %s since %s", pWal->cfg.vgId, fnameStr, terrstr()); - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -60,7 +60,7 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) { walBuildIdxName(pWal, pFileInfo->firstVer, fnameStr); if (taosRemoveFile(fnameStr) < 0) { wError("vgId:%d, cannot remove file %s since %s", pWal->cfg.vgId, fnameStr, terrstr()); - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -81,7 +81,7 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) { pWal->vers.snapshotVer = ver; pWal->vers.verInSnapshotting = -1; - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -146,7 +146,7 @@ static int64_t walChangeWrite(SWal *pWal, int64_t ver) { walBuildLogName(pWal, fileFirstVer, fnameStr); pLogTFile = taosOpenFile(fnameStr, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_APPEND); if (pLogTFile == NULL) { - taosCloseFile(&pIdxTFile); + TAOS_UNUSED(taosCloseFile(&pIdxTFile)); pWal->pLogFile = NULL; TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); @@ -160,12 +160,12 @@ static int64_t walChangeWrite(SWal *pWal, int64_t ver) { } int32_t walRollback(SWal *pWal, int64_t ver) { - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); wInfo("vgId:%d, wal rollback for version %" PRId64, pWal->cfg.vgId, ver); int64_t code; char fnameStr[WAL_FILE_LEN]; if (ver > pWal->vers.lastVer || ver <= pWal->vers.commitVer || ver <= pWal->vers.snapshotVer) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_WAL_INVALID_VER); } @@ -175,7 +175,7 @@ int32_t walRollback(SWal *pWal, int64_t ver) { // change current files code = walChangeWrite(pWal, ver); if (code < 0) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(code); } @@ -187,50 +187,50 @@ int32_t walRollback(SWal *pWal, int64_t ver) { walBuildLogName(pWal, pInfo->firstVer, fnameStr); wDebug("vgId:%d, wal remove file %s for rollback", pWal->cfg.vgId, fnameStr); - taosRemoveFile(fnameStr); + TAOS_UNUSED(taosRemoveFile(fnameStr)); walBuildIdxName(pWal, pInfo->firstVer, fnameStr); wDebug("vgId:%d, wal remove file %s for rollback", pWal->cfg.vgId, fnameStr); - taosRemoveFile(fnameStr); + TAOS_UNUSED(taosRemoveFile(fnameStr)); } } walBuildIdxName(pWal, walGetCurFileFirstVer(pWal), fnameStr); - taosCloseFile(&pWal->pIdxFile); + TAOS_UNUSED(taosCloseFile(&pWal->pIdxFile)); TdFilePtr pIdxFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ | TD_FILE_APPEND); if (pIdxFile == NULL) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } int64_t idxOff = walGetVerIdxOffset(pWal, ver); code = taosLSeekFile(pIdxFile, idxOff, SEEK_SET); if (code < 0) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } // read idx file and get log file pos SWalIdxEntry entry; if (taosReadFile(pIdxFile, &entry, sizeof(SWalIdxEntry)) != sizeof(SWalIdxEntry)) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } walBuildLogName(pWal, walGetCurFileFirstVer(pWal), fnameStr); - taosCloseFile(&pWal->pLogFile); + TAOS_UNUSED(taosCloseFile(&pWal->pLogFile)); TdFilePtr pLogFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ | TD_FILE_APPEND); wDebug("vgId:%d, wal truncate file %s", pWal->cfg.vgId, fnameStr); if (pLogFile == NULL) { // TODO - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } code = taosLSeekFile(pLogFile, entry.offset, SEEK_SET); if (code < 0) { // TODO - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -238,19 +238,19 @@ int32_t walRollback(SWal *pWal, int64_t ver) { SWalCkHead head; int64_t size = taosReadFile(pLogFile, &head, sizeof(SWalCkHead)); if (size != sizeof(SWalCkHead)) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } code = walValidHeadCksum(&head); if (code != 0) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } if (head.head.version != ver) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_WAL_FILE_CORRUPTED); } @@ -258,13 +258,13 @@ int32_t walRollback(SWal *pWal, int64_t ver) { // truncate old files code = taosFtruncateFile(pLogFile, entry.offset); if (code < 0) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } code = taosFtruncateFile(pIdxFile, idxOff); if (code < 0) { - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TAOS_SYSTEM_ERROR(errno)); } @@ -272,19 +272,19 @@ int32_t walRollback(SWal *pWal, int64_t ver) { ((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->lastVer = ver - 1; ((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->fileSize = entry.offset; - taosCloseFile(&pIdxFile); - taosCloseFile(&pLogFile); + TAOS_UNUSED(taosCloseFile(&pIdxFile)); + TAOS_UNUSED(taosCloseFile(&pLogFile)); code = walSaveMeta(pWal); if (code < 0) { wError("vgId:%d, failed to save meta since %s", pWal->cfg.vgId, terrstr()); - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(code); } // unlock - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -371,7 +371,7 @@ static FORCE_INLINE int32_t walCheckAndRoll(SWal *pWal) { int32_t walBeginSnapshot(SWal *pWal, int64_t ver, int64_t logRetention) { int32_t code = 0; - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); ASSERT(logRetention >= 0); pWal->vers.verInSnapshotting = ver; pWal->vers.logRetention = logRetention; @@ -388,7 +388,7 @@ int32_t walBeginSnapshot(SWal *pWal, int64_t ver, int64_t logRetention) { } _exit: - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); TAOS_RETURN(code); } @@ -396,7 +396,7 @@ _exit: int32_t walEndSnapshot(SWal *pWal) { int32_t code = 0, lino = 0; - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); int64_t ver = pWal->vers.verInSnapshotting; wDebug("vgId:%d, wal end snapshot for version %" PRId64 ", log retention %" PRId64 " first ver %" PRId64 @@ -456,7 +456,7 @@ int32_t walEndSnapshot(SWal *pWal) { } for (SWalFileInfo *iter = pWal->fileInfoSet->pData; iter <= pUntil; iter++) { deleteCnt++; - taosArrayPush(pWal->toDeleteFiles, iter); + TAOS_UNUSED(taosArrayPush(pWal->toDeleteFiles, iter)); } // make new array, remove files @@ -589,8 +589,8 @@ static FORCE_INLINE int32_t walWriteImpl(SWal *pWal, int64_t index, tmsg_t msgTy TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, &lino, _exit); } - memset(newBody, 0, cyptedBodyLen); - memcpy(newBody, body, plainBodyLen); + TAOS_UNUSED(memset(newBody, 0, cyptedBodyLen)); + TAOS_UNUSED(memcpy(newBody, body, plainBodyLen)); newBodyEncrypted = taosMemoryMalloc(cyptedBodyLen); if (newBodyEncrypted == NULL) { @@ -607,7 +607,7 @@ static FORCE_INLINE int32_t walWriteImpl(SWal *pWal, int64_t index, tmsg_t msgTy opts.source = newBody; opts.result = newBodyEncrypted; opts.unitLen = 16; - strncpy(opts.key, pWal->cfg.encryptKey, ENCRYPT_KEY_LEN); + TAOS_UNUSED(strncpy((char *)opts.key, pWal->cfg.encryptKey, ENCRYPT_KEY_LEN)); int32_t count = CBC_Encrypt(&opts); @@ -698,7 +698,7 @@ int32_t walAppendLog(SWal *pWal, int64_t index, tmsg_t msgType, SWalSyncInfo syn int32_t bodyLen) { int32_t code = 0, lino = 0; - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); if (index != pWal->vers.lastVer + 1) { TAOS_CHECK_GOTO(TSDB_CODE_WAL_INVALID_VER, &lino, _exit); @@ -717,7 +717,7 @@ _exit: wError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); return code; } @@ -728,7 +728,7 @@ int32_t walFsync(SWal *pWal, bool forceFsync) { return code; } - taosThreadMutexLock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexLock(&pWal->mutex)); if (forceFsync || (pWal->cfg.level == TAOS_WAL_FSYNC && pWal->cfg.fsyncPeriod == 0)) { wTrace("vgId:%d, fileId:%" PRId64 ".log, do fsync", pWal->cfg.vgId, walGetCurFileFirstVer(pWal)); if (taosFsyncFile(pWal->pLogFile) < 0) { @@ -737,7 +737,7 @@ int32_t walFsync(SWal *pWal, bool forceFsync) { code = TAOS_SYSTEM_ERROR(errno); } } - taosThreadMutexUnlock(&pWal->mutex); + TAOS_UNUSED(taosThreadMutexUnlock(&pWal->mutex)); return code; } diff --git a/source/os/src/osThread.c b/source/os/src/osThread.c index 133623ca3c..cf1fef71c2 100644 --- a/source/os/src/osThread.c +++ b/source/os/src/osThread.c @@ -767,7 +767,7 @@ int32_t taosThreadSetSpecific(TdThreadKey key, const void *value) { terrno = TAOS_SYSTEM_ERROR(code); return terrno; } - return code; + return code; } int32_t taosThreadSpinDestroy(TdThreadSpinlock *lock) { @@ -779,7 +779,7 @@ int32_t taosThreadSpinDestroy(TdThreadSpinlock *lock) { terrno = TAOS_SYSTEM_ERROR(code); return terrno; } - return code; + return code; #endif } @@ -794,7 +794,7 @@ int32_t taosThreadSpinInit(TdThreadSpinlock *lock, int32_t pshared) { terrno = TAOS_SYSTEM_ERROR(code); return terrno; } - return code; + return code; #endif } @@ -807,7 +807,7 @@ int32_t taosThreadSpinLock(TdThreadSpinlock *lock) { terrno = TAOS_SYSTEM_ERROR(code); return terrno; } - return code; + return code; #endif } @@ -818,9 +818,9 @@ int32_t taosThreadSpinTrylock(TdThreadSpinlock *lock) { int32_t code = pthread_spin_trylock((pthread_spinlock_t *)lock); if (code) { terrno = TAOS_SYSTEM_ERROR(code); - return terrno; + return code; } - return code; + return code; #endif } @@ -833,7 +833,7 @@ int32_t taosThreadSpinUnlock(TdThreadSpinlock *lock) { terrno = TAOS_SYSTEM_ERROR(code); return terrno; } - return code; + return code; #endif } diff --git a/source/util/src/tcompression.c b/source/util/src/tcompression.c index 884d7ea1b6..1f7a244a53 100644 --- a/source/util/src/tcompression.c +++ b/source/util/src/tcompression.c @@ -130,7 +130,7 @@ int32_t l2DecompressImpl_lz4(const char *const input, const int32_t compressedSi const int32_t decompressed_size = LZ4_decompress_safe(input + 1, output, compressedSize - 1, outputSize); if (decompressed_size < 0) { uError("Failed to decompress string with LZ4 algorithm, decompressed size:%d", decompressed_size); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } return decompressed_size; @@ -140,9 +140,9 @@ int32_t l2DecompressImpl_lz4(const char *const input, const int32_t compressedSi return compressedSize - 1; } else if (input[1] == 2) { uError("Invalid decompress string indicator:%d", input[0]); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } int32_t l2ComressInitImpl_tsz(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, uint32_t intervals, int32_t ifAdtFse, const char *compressor) { @@ -195,7 +195,7 @@ int32_t l2CompressImpl_zlib(const char *const input, const int32_t inputSize, ch memcpy(output + 1, input, inputSize); return inputSize + 1; } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } int32_t l2DecompressImpl_zlib(const char *const input, const int32_t compressedSize, char *const output, int32_t outputSize, const char type) { @@ -205,7 +205,7 @@ int32_t l2DecompressImpl_zlib(const char *const input, const int32_t compressedS if (ret == Z_OK) { return len; } else { - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } } else if (input[0] == 0) { @@ -214,7 +214,7 @@ int32_t l2DecompressImpl_zlib(const char *const input, const int32_t compressedS return compressedSize - 1; } else if (input[1] == 2) { uError("Invalid decompress string indicator:%d", input[0]); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } return 0; } @@ -243,7 +243,7 @@ int32_t l2DecompressImpl_zstd(const char *const input, const int32_t compressedS memcpy(output, input + 1, compressedSize - 1); return compressedSize - 1; } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } int32_t l2ComressInitImpl_xz(char *lossyColumns, float fPrecision, double dPrecision, uint32_t maxIntervals, @@ -269,7 +269,7 @@ int32_t l2DecompressImpl_xz(const char *const input, const int32_t compressedSiz memcpy(output, input + 1, compressedSize - 1); return compressedSize - 1; } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } #endif @@ -333,7 +333,7 @@ int32_t tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, tdszInit(fPrecision, dPrecision, maxIntervals, intervals, ifAdtFse, compressor); if (lossyFloat) uTrace("lossy compression float is opened. "); if (lossyDouble) uTrace("lossy compression double is opened. "); - return 1; + return 0; } // exit call void tsCompressExit() { tdszExit(); } @@ -559,7 +559,7 @@ int32_t tsCompressBoolImp(const char *const input, const int32_t nelements, char output[pos] |= t; } else { uError("Invalid compress bool value:%d", output[pos]); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -600,7 +600,7 @@ int32_t tsCompressDoubleImp2(const char *const input, const int32_t nelements, c } else if (type == TSDB_DATA_TYPE_DOUBLE) { return tsCompressDoubleImp(input, nelements, output); } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } int32_t tsDecompressDoubleImp2(const char *const input, const int32_t nelements, char *const output, char const type) { if (type == TSDB_DATA_TYPE_FLOAT) { @@ -608,7 +608,7 @@ int32_t tsDecompressDoubleImp2(const char *const input, const int32_t nelements, } else if (type == TSDB_DATA_TYPE_DOUBLE) { return tsDecompressDoubleImp(input, nelements, output); } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } int32_t tsCompressINTImp2(const char *const input, const int32_t nelements, char *const output, const char type) { return tsCompressINTImp(input, nelements, output, type); @@ -696,7 +696,7 @@ int32_t tsDecompressStringImp(const char *const input, int32_t compressedSize, c const int32_t decompressed_size = LZ4_decompress_safe(input + 1, output, compressedSize - 1, outputSize); if (decompressed_size < 0) { uError("Failed to decompress string with LZ4 algorithm, decompressed size:%d", decompressed_size); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } return decompressed_size; @@ -706,9 +706,9 @@ int32_t tsDecompressStringImp(const char *const input, int32_t compressedSize, c return compressedSize - 1; } else if (input[1] == 2) { uError("Invalid decompress string indicator:%d", input[0]); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } /* --------------------------------------------Timestamp Compression ---------------------------------------------- */ @@ -2468,7 +2468,7 @@ int32_t tsCompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_ return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } } @@ -2487,7 +2487,7 @@ int32_t tsDecompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int3 return tsDecompressFloatImp(pBuf, nEle, pOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } } @@ -2507,7 +2507,7 @@ int32_t tsCompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32 return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } } @@ -2526,7 +2526,7 @@ int32_t tsDecompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int return tsDecompressDoubleImp(pBuf, nEle, pOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } } @@ -2550,25 +2550,26 @@ int32_t tsCompressBool(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t } else if (cmprAlg == TWO_STAGE_COMP) { int32_t len = tsCompressBoolImp(pIn, nEle, pBuf); if (len < 0) { - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_THIRDPARTY_ERROR; } } int32_t tsDecompressBool(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { + int32_t code = 0; if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressBoolImp(pIn, nEle, pOut); } else if (cmprAlg == TWO_STAGE_COMP) { - if (tsDecompressStringImp(pIn, nIn, pBuf, nBuf) < 0) return -1; + if ((code = tsDecompressStringImp(pIn, nIn, pBuf, nBuf)) < 0) return code; return tsDecompressBoolImp(pBuf, nEle, pOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -2579,23 +2580,27 @@ int32_t tsCompressTinyint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int3 return tsCompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_TINYINT); } else if (cmprAlg == TWO_STAGE_COMP) { int32_t len = tsCompressINTImp(pIn, nEle, pBuf, TSDB_DATA_TYPE_TINYINT); + if (len < 0) { + return TSDB_CODE_THIRDPARTY_ERROR; + } return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } int32_t tsDecompressTinyint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { + int32_t code = 0; if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_TINYINT); } else if (cmprAlg == TWO_STAGE_COMP) { - if (tsDecompressStringImp(pIn, nIn, pBuf, nBuf) < 0) return -1; + if ((code = tsDecompressStringImp(pIn, nIn, pBuf, nBuf)) < 0) return code; return tsDecompressINTImp(pBuf, nEle, pOut, TSDB_DATA_TYPE_TINYINT); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -2606,23 +2611,27 @@ int32_t tsCompressSmallint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int return tsCompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_SMALLINT); } else if (cmprAlg == TWO_STAGE_COMP) { int32_t len = tsCompressINTImp(pIn, nEle, pBuf, TSDB_DATA_TYPE_SMALLINT); + if (len < 0) { + return TSDB_CODE_THIRDPARTY_ERROR; + } return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } int32_t tsDecompressSmallint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { + int32_t code = 0; if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_SMALLINT); } else if (cmprAlg == TWO_STAGE_COMP) { - if (tsDecompressStringImp(pIn, nIn, pBuf, nBuf) < 0) return -1; + if ((code = tsDecompressStringImp(pIn, nIn, pBuf, nBuf)) < 0) return code; return tsDecompressINTImp(pBuf, nEle, pOut, TSDB_DATA_TYPE_SMALLINT); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -2633,23 +2642,27 @@ int32_t tsCompressInt(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t return tsCompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_INT); } else if (cmprAlg == TWO_STAGE_COMP) { int32_t len = tsCompressINTImp(pIn, nEle, pBuf, TSDB_DATA_TYPE_INT); + if (len < 0) { + return TSDB_CODE_THIRDPARTY_ERROR; + } return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } int32_t tsDecompressInt(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { + int32_t code = 0; if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_INT); } else if (cmprAlg == TWO_STAGE_COMP) { - if (tsDecompressStringImp(pIn, nIn, pBuf, nBuf) < 0) return -1; + if ((code = tsDecompressStringImp(pIn, nIn, pBuf, nBuf)) < 0) return code; return tsDecompressINTImp(pBuf, nEle, pOut, TSDB_DATA_TYPE_INT); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -2660,23 +2673,27 @@ int32_t tsCompressBigint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32 return tsCompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_BIGINT); } else if (cmprAlg == TWO_STAGE_COMP) { int32_t len = tsCompressINTImp(pIn, nEle, pBuf, TSDB_DATA_TYPE_BIGINT); + if (len < 0) { + return TSDB_CODE_THIRDPARTY_ERROR; + } return tsCompressStringImp(pBuf, len, pOut, nOut); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } int32_t tsDecompressBigint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { + int32_t code = 0; if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressINTImp(pIn, nEle, pOut, TSDB_DATA_TYPE_BIGINT); } else if (cmprAlg == TWO_STAGE_COMP) { - if (tsDecompressStringImp(pIn, nIn, pBuf, nBuf) < 0) return -1; + if ((code = tsDecompressStringImp(pIn, nIn, pBuf, nBuf)) < 0) return code; return tsDecompressINTImp(pBuf, nEle, pOut, TSDB_DATA_TYPE_BIGINT); } else { ASSERTS(0, "compress algo invalid"); - return -1; + return TSDB_CODE_INVALID_PARA; } } @@ -2713,14 +2730,14 @@ int32_t tsDecompressBigint(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int int8_t alvl = tsGetCompressL2Level(l2, lvl); \ return compressL2Dict[l2].comprFn(pIn, nIn, pOut, nOut, type, alvl); \ } else { \ - uTrace("dencode:%s, decompress:%s, level:%d, type:%s", "disabled", compressL2Dict[l1].name, lvl, \ + uTrace("dencode:%s, decompress:%s, level:%d, type:%s", "disabled", compressL2Dict[l1].name, lvl, \ tDataTypes[type].name); \ return compressL2Dict[l2].decomprFn(pIn, nIn, pOut, nOut, type); \ } \ } else { \ ASSERT(0); \ } \ - return -1; \ + return TSDB_CODE_INVALID_PARA; \ } while (1) /************************************************************************* diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 55bf9a5df2..e2e4d90849 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -42,7 +42,7 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url); extern char **environ; -int32_t cfgInit(SConfig ** ppCfg) { +int32_t cfgInit(SConfig **ppCfg) { SConfig *pCfg = taosMemoryCalloc(1, sizeof(SConfig)); if (pCfg == NULL) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); @@ -54,7 +54,7 @@ int32_t cfgInit(SConfig ** ppCfg) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - taosThreadMutexInit(&pCfg->lock, NULL); + TAOS_CHECK_RETURN(taosThreadMutexInit(&pCfg->lock, NULL)); *ppCfg = pCfg; TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -113,7 +113,7 @@ void cfgCleanup(SConfig *pCfg) { } taosArrayDestroy(pCfg->array); - taosThreadMutexDestroy(&pCfg->lock); + (void)taosThreadMutexDestroy(&pCfg->lock); taosMemoryFree(pCfg); } @@ -244,17 +244,17 @@ static int32_t doSetConf(SConfigItem *pItem, const char *value, ECfgSrcType styp static int32_t cfgSetTimezone(SConfigItem *pItem, const char *value, ECfgSrcType stype) { TAOS_CHECK_RETURN(doSetConf(pItem, value, stype)); - osSetTimezone(value); + TAOS_CHECK_RETURN(osSetTimezone(value)); TAOS_RETURN(TSDB_CODE_SUCCESS); } static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, const char *level, const char *primary, const char *disable, ECfgSrcType stype) { - taosThreadMutexLock(&pCfg->lock); + (void)taosThreadMutexLock(&pCfg->lock); SConfigItem *pItem = cfgGetItem(pCfg, name); if (pItem == NULL) { - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); } @@ -262,7 +262,7 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, if (pItem->array == NULL) { pItem->array = taosArrayInit(16, sizeof(SDiskCfg)); if (pItem->array == NULL) { - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } @@ -275,13 +275,13 @@ static int32_t cfgSetTfsItem(SConfig *pCfg, const char *name, const char *value, cfg.disable = disable ? atoi(disable) : 0; void *ret = taosArrayPush(pItem->array, &cfg); if (ret == NULL) { - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } pItem->stype = stype; - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -307,7 +307,7 @@ static int32_t cfgUpdateDebugFlagItem(SConfig *pCfg, const char *name, bool rese if (pDebugFlagItem == NULL) return -1; if (pDebugFlagItem->array != NULL) { SLogVar logVar = {0}; - strncpy(logVar.name, name, TSDB_LOG_VAR_LEN - 1); + (void)strncpy(logVar.name, name, TSDB_LOG_VAR_LEN - 1); if (NULL == taosArrayPush(pDebugFlagItem->array, &logVar)) { TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } @@ -317,15 +317,15 @@ static int32_t cfgUpdateDebugFlagItem(SConfig *pCfg, const char *name, bool rese int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcType stype, bool lock) { // GRANT_CFG_SET; - int32_t code = 0; + int32_t code = TSDB_CODE_SUCCESS; if (lock) { - taosThreadMutexLock(&pCfg->lock); + (void)taosThreadMutexLock(&pCfg->lock); } SConfigItem *pItem = cfgGetItem(pCfg, name); if (pItem == NULL) { - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); TAOS_RETURN(TSDB_CODE_CFG_NOT_FOUND); } @@ -374,7 +374,7 @@ int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcTy } if (lock) { - taosThreadMutexUnlock(&pCfg->lock); + (void)taosThreadMutexUnlock(&pCfg->lock); } TAOS_RETURN(code); @@ -398,12 +398,10 @@ void cfgLock(SConfig *pCfg) { return; } - taosThreadMutexLock(&pCfg->lock); + (void)taosThreadMutexLock(&pCfg->lock); } -void cfgUnLock(SConfig *pCfg) { - taosThreadMutexUnlock(&pCfg->lock); -} +void cfgUnLock(SConfig *pCfg) { (void)taosThreadMutexUnlock(&pCfg->lock); } int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *pVal, bool isServer) { ECfgDynType dynType = isServer ? CFG_DYN_SERVER : CFG_DYN_CLIENT; @@ -420,11 +418,13 @@ int32_t cfgCheckRangeForDynUpdate(SConfig *pCfg, const char *name, const char *p switch (pItem->dtype) { case CFG_DTYPE_STRING: { if (strcasecmp(name, "slowLogScope") == 0) { - char *tmp = taosStrdup(pVal); - if (taosSetSlowLogScope(tmp) < 0) { + char *tmp = taosStrdup(pVal); + int32_t scope = 0; + int32_t code = taosSetSlowLogScope(tmp, &scope); + if (TSDB_CODE_SUCCESS != code) { cfgUnLock(pCfg); taosMemoryFree(tmp); - TAOS_RETURN(TSDB_CODE_INVALID_CFG); + TAOS_RETURN(code); } taosMemoryFree(tmp); } @@ -506,7 +506,7 @@ static int32_t cfgAddItem(SConfig *pCfg, SConfigItem *pItem, const char *name) { int32_t len = strlen(name); char lowcaseName[CFG_NAME_MAX_LEN + 1] = {0}; - strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len)); + (void)strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len)); if (taosArrayPush(pCfg->array, pItem) == NULL) { if (pItem->dtype == CFG_DTYPE_STRING) { @@ -721,10 +721,10 @@ int32_t cfgDumpItemScope(SConfigItem *pItem, char *buf, int32_t bufSize, int32_t void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { if (dump) { - printf(" s3 config"); - printf("\n"); - printf("================================================================="); - printf("\n"); + (void)printf(" s3 config"); + (void)printf("\n"); + (void)printf("================================================================="); + (void)printf("\n"); } else { uInfo(" s3 config"); uInfo("================================================================="); @@ -752,7 +752,7 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { switch (pItem->dtype) { case CFG_DTYPE_BOOL: if (dump) { - printf("%s %s %u\n", src, name, pItem->bval); + (void)printf("%s %s %u\n", src, name, pItem->bval); } else { uInfo("%s %s %u", src, name, pItem->bval); } @@ -760,14 +760,14 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { break; case CFG_DTYPE_INT32: if (dump) { - printf("%s %s %d\n", src, name, pItem->i32); + (void)printf("%s %s %d\n", src, name, pItem->i32); } else { uInfo("%s %s %d", src, name, pItem->i32); } break; case CFG_DTYPE_INT64: if (dump) { - printf("%s %s %" PRId64 "\n", src, name, pItem->i64); + (void)printf("%s %s %" PRId64 "\n", src, name, pItem->i64); } else { uInfo("%s %s %" PRId64, src, name, pItem->i64); } @@ -775,7 +775,7 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { case CFG_DTYPE_DOUBLE: case CFG_DTYPE_FLOAT: if (dump) { - printf("%s %s %.2f\n", src, name, pItem->fval); + (void)printf("%s %s %.2f\n", src, name, pItem->fval); } else { uInfo("%s %s %.2f", src, name, pItem->fval); } @@ -787,7 +787,7 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { case CFG_DTYPE_TIMEZONE: case CFG_DTYPE_NONE: if (dump) { - printf("%s %s %s\n", src, name, pItem->str); + (void)printf("%s %s %s\n", src, name, pItem->str); } else { uInfo("%s %s %s", src, name, pItem->str); } @@ -796,7 +796,7 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { } if (dump) { - printf("=================================================================\n"); + (void)printf("=================================================================\n"); } else { uInfo("================================================================="); } @@ -804,10 +804,10 @@ void cfgDumpCfgS3(SConfig *pCfg, bool tsc, bool dump) { void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { if (dump) { - printf(" global config"); - printf("\n"); - printf("================================================================="); - printf("\n"); + (void)printf(" global config"); + (void)printf("\n"); + (void)printf("================================================================="); + (void)printf("\n"); } else { uInfo(" global config"); uInfo("================================================================="); @@ -834,7 +834,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { switch (pItem->dtype) { case CFG_DTYPE_BOOL: if (dump) { - printf("%s %s %u\n", src, name, pItem->bval); + (void)printf("%s %s %u\n", src, name, pItem->bval); } else { uInfo("%s %s %u", src, name, pItem->bval); } @@ -842,14 +842,14 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { break; case CFG_DTYPE_INT32: if (dump) { - printf("%s %s %d\n", src, name, pItem->i32); + (void)printf("%s %s %d\n", src, name, pItem->i32); } else { uInfo("%s %s %d", src, name, pItem->i32); } break; case CFG_DTYPE_INT64: if (dump) { - printf("%s %s %" PRId64 "\n", src, name, pItem->i64); + (void)printf("%s %s %" PRId64 "\n", src, name, pItem->i64); } else { uInfo("%s %s %" PRId64, src, name, pItem->i64); } @@ -857,7 +857,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { case CFG_DTYPE_DOUBLE: case CFG_DTYPE_FLOAT: if (dump) { - printf("%s %s %.2f\n", src, name, pItem->fval); + (void)printf("%s %s %.2f\n", src, name, pItem->fval); } else { uInfo("%s %s %.2f", src, name, pItem->fval); } @@ -869,7 +869,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { case CFG_DTYPE_TIMEZONE: case CFG_DTYPE_NONE: if (dump) { - printf("%s %s %s\n", src, name, pItem->str); + (void)printf("%s %s %s\n", src, name, pItem->str); } else { uInfo("%s %s %s", src, name, pItem->str); } @@ -878,7 +878,7 @@ void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { } if (dump) { - printf("=================================================================\n"); + (void)printf("=================================================================\n"); } else { uInfo("================================================================="); } @@ -900,21 +900,21 @@ int32_t cfgLoadFromEnvVar(SConfig *pConfig) { pEnv++; (void)taosEnvToCfg(line, line); - paGetToken(line, &name, &olen); + (void)paGetToken(line, &name, &olen); if (olen == 0) continue; name[olen] = 0; - paGetToken(name + olen + 1, &value, &vlen); + (void)paGetToken(name + olen + 1, &value, &vlen); if (vlen == 0) continue; value[vlen] = 0; - paGetToken(value + vlen + 1, &value2, &vlen2); + (void)paGetToken(value + vlen + 1, &value2, &vlen2); if (vlen2 != 0) { value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) { value3[vlen3] = 0; - paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + (void)paGetToken(value3 + vlen3 + 1, &value4, &vlen4); if (vlen4 != 0) value4[vlen4] = 0; } } @@ -947,21 +947,21 @@ int32_t cfgLoadFromEnvCmd(SConfig *pConfig, const char **envCmd) { name = value = value2 = value3 = value4 = NULL; olen = vlen = vlen2 = vlen3 = vlen4 = 0; - paGetToken(buf, &name, &olen); + (void)paGetToken(buf, &name, &olen); if (olen == 0) continue; name[olen] = 0; - paGetToken(name + olen + 1, &value, &vlen); + (void)paGetToken(name + olen + 1, &value, &vlen); if (vlen == 0) continue; value[vlen] = 0; - paGetToken(value + vlen + 1, &value2, &vlen2); + (void)paGetToken(value + vlen + 1, &value2, &vlen2); if (vlen2 != 0) { value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) { value3[vlen3] = 0; - paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + (void)paGetToken(value3 + vlen3 + 1, &value4, &vlen4); if (vlen4 != 0) value4[vlen4] = 0; } } @@ -1015,21 +1015,21 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { if (line[_bytes - 1] == '\n') line[_bytes - 1] = 0; (void)taosEnvToCfg(line, line); - paGetToken(line, &name, &olen); + (void)paGetToken(line, &name, &olen); if (olen == 0) continue; name[olen] = 0; - paGetToken(name + olen + 1, &value, &vlen); + (void)paGetToken(name + olen + 1, &value, &vlen); if (vlen == 0) continue; value[vlen] = 0; - paGetToken(value + vlen + 1, &value2, &vlen2); + (void)paGetToken(value + vlen + 1, &value2, &vlen2); if (vlen2 != 0) { value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) { value3[vlen3] = 0; - paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + (void)paGetToken(value3 + vlen3 + 1, &value4, &vlen4); if (vlen4 != 0) value4[vlen4] = 0; } } @@ -1043,7 +1043,7 @@ int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *envFile) { } } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); uInfo("load from env cfg file %s success", filepath); TAOS_RETURN(TSDB_CODE_SUCCESS); @@ -1079,11 +1079,11 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { if (line[_bytes - 1] == '\n') line[_bytes - 1] = 0; - paGetToken(line, &name, &olen); + (void)paGetToken(line, &name, &olen); if (olen == 0) continue; name[olen] = 0; - paGetToken(name + olen + 1, &value, &vlen); + (void)paGetToken(name + olen + 1, &value, &vlen); if (vlen == 0) continue; value[vlen] = 0; @@ -1096,7 +1096,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { int32_t count = 1; while (vlen < 1024) { - paGetToken(value + vlen + 1 * count, &tmp, &len); + (void)paGetToken(value + vlen + 1 * count, &tmp, &len); if (len == 0) break; tmp[len] = 0; strcpy(newValue + vlen, tmp); @@ -1107,13 +1107,13 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { code = cfgSetItem(pConfig, name, newValue, CFG_STYPE_CFG_FILE, true); if (TSDB_CODE_SUCCESS != code && TSDB_CODE_CFG_NOT_FOUND != code) break; } else { - paGetToken(value + vlen + 1, &value2, &vlen2); + (void)paGetToken(value + vlen + 1, &value2, &vlen2); if (vlen2 != 0) { value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) { value3[vlen3] = 0; - paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + (void)paGetToken(value3 + vlen3 + 1, &value4, &vlen4); if (vlen4 != 0) value4[vlen4] = 0; } } @@ -1136,7 +1136,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { } } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); if (TSDB_CODE_SUCCESS == code || TSDB_CODE_CFG_NOT_FOUND == code) { uInfo("load from cfg file %s success", filepath); @@ -1177,18 +1177,18 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { // if(line[_bytes - 1] == '\n') line[_bytes - 1] = 0; -// paGetToken(line, &name, &olen); +// (void)paGetToken(line, &name, &olen); // if (olen == 0) continue; // name[olen] = 0; -// paGetToken(name + olen + 1, &value, &vlen); +// (void)paGetToken(name + olen + 1, &value, &vlen); // if (vlen == 0) continue; // value[vlen] = 0; -// paGetToken(value + vlen + 1, &value2, &vlen2); +// (void)paGetToken(value + vlen + 1, &value2, &vlen2); // if (vlen2 != 0) { // value2[vlen2] = 0; -// paGetToken(value2 + vlen2 + 1, &value3, &vlen3); +// (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); // if (vlen3 != 0) value3[vlen3] = 0; // } @@ -1200,7 +1200,7 @@ int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { // } // } -// taosCloseFile(&pFile); +// (void)taosCloseFile(&pFile); // if (line != NULL) taosMemoryFreeClear(line); // if (code == 0 || (code != 0 && terrno == TSDB_CODE_CFG_NOT_FOUND)) { @@ -1243,20 +1243,20 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { size_t fileSize = taosLSeekFile(pFile, 0, SEEK_END); char *buf = taosMemoryMalloc(fileSize + 1); if (!buf) { - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); uError("load json file error: %s, failed to alloc memory", filepath); TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } buf[fileSize] = 0; - taosLSeekFile(pFile, 0, SEEK_SET); + (void)taosLSeekFile(pFile, 0, SEEK_SET); if (taosReadFile(pFile, buf, fileSize) <= 0) { - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); uError("load json file error: %s", filepath); taosMemoryFreeClear(buf); TAOS_RETURN(TSDB_CODE_INVALID_DATA_FMT); } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); pJson = tjsonParse(buf); if (NULL == pJson) { const char *jsonParseError = tjsonGetError(); @@ -1284,25 +1284,24 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { goto _err_json; } - memcpy(cfgLineBuf, itemName, itemNameLen); + (void)memcpy(cfgLineBuf, itemName, itemNameLen); cfgLineBuf[itemNameLen] = ' '; - memcpy(&cfgLineBuf[itemNameLen + 1], itemValueString, itemValueStringLen); - - paGetToken(cfgLineBuf, &name, &olen); + (void)memcpy(&cfgLineBuf[itemNameLen + 1], itemValueString, itemValueStringLen); + (void)paGetToken(cfgLineBuf, &name, &olen); if (olen == 0) continue; name[olen] = 0; - paGetToken(name + olen + 1, &value, &vlen); + (void)paGetToken(name + olen + 1, &value, &vlen); if (vlen == 0) continue; value[vlen] = 0; - paGetToken(value + vlen + 1, &value2, &vlen2); + (void)paGetToken(value + vlen + 1, &value2, &vlen2); if (vlen2 != 0) { value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + (void)paGetToken(value2 + vlen2 + 1, &value3, &vlen3); if (vlen3 != 0) { value3[vlen3] = 0; - paGetToken(value3 + vlen3 + 1, &value4, &vlen4); + (void)paGetToken(value3 + vlen3 + 1, &value4, &vlen4); if (vlen4 != 0) value4[vlen4] = 0; } } @@ -1346,7 +1345,7 @@ int32_t cfgGetApollUrl(const char **envCmd, const char *envFile, char *apolloUrl p++; p[strlen(p) - 1] = '\0'; } - memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); + (void)memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); uInfo("get apollo url from env cmd success"); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -1368,7 +1367,7 @@ int32_t cfgGetApollUrl(const char **envCmd, const char *envFile, char *apolloUrl p++; p[strlen(p) - 1] = '\0'; } - memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); + (void)memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); uInfo("get apollo url from env variables success, apolloUrl=%s", apolloUrl); TAOS_RETURN(TSDB_CODE_SUCCESS); } @@ -1405,14 +1404,14 @@ int32_t cfgGetApollUrl(const char **envCmd, const char *envFile, char *apolloUrl p++; p[strlen(p) - 1] = '\0'; } - memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); - taosCloseFile(&pFile); + (void)memcpy(apolloUrl, p, TMIN(strlen(p) + 1, PATH_MAX)); + (void)taosCloseFile(&pFile); uInfo("get apollo url from env file success"); TAOS_RETURN(TSDB_CODE_SUCCESS); } } } - taosCloseFile(&pFile); + (void)taosCloseFile(&pFile); } uInfo("fail get apollo url from cmd env file"); @@ -1436,7 +1435,7 @@ int32_t cfgCreateIter(SConfig *pConf, SConfigIter **ppIter) { TAOS_RETURN(TSDB_CODE_SUCCESS); } -SConfigItem *cfgNextIter(SConfigIter* pIter) { +SConfigItem *cfgNextIter(SConfigIter *pIter) { if (pIter->index < cfgGetSize(pIter->pConf)) { return taosArrayGet(pIter->pConf->array, pIter->index++); } diff --git a/source/util/src/tdecompress.c b/source/util/src/tdecompress.c index aa1a8e3148..a27d2efbcc 100644 --- a/source/util/src/tdecompress.c +++ b/source/util/src/tdecompress.c @@ -34,7 +34,7 @@ int32_t getWordLength(char type) { break; default: uError("Invalid decompress integer type:%d", type); - return -1; + return TSDB_CODE_INVALID_PARA; } return wordLength; @@ -156,7 +156,7 @@ int32_t tsDecompressIntImpl_Hw(const char *const input, const int32_t nelements, // 13 6 9 4 5 2 1 // 0 D7,D6 D6 D5,D4 D4 D3,D2 D2 // D1,D0 D0 +D5,D4 D5,D4, 0 0 D1,D0 D1,D0 - //0 0 D7~D4 D6~D4 D5~D4 D4 D3~D0 D2~D0 + // 0 0 D7~D4 D6~D4 D5~D4 D4 D3~D0 D2~D0 // D1~D0 D0 22 15 9 4 6 3 // 1 0 // diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 61672478c9..e8a12fadfc 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -528,6 +528,13 @@ TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INVALID_SNAPSHOT_MSG, "Sync invalid snapshot TAOS_DEFINE_ERROR(TSDB_CODE_SYN_BUFFER_FULL, "Sync buffer is full") TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRITE_STALL, "Sync write stall") TAOS_DEFINE_ERROR(TSDB_CODE_SYN_NEGOTIATION_WIN_FULL, "Sync negotiation win is full") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRONG_TERM, "Sync got a wrong term") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRONG_FSM_STATE, "Sync got a wrong fsm state") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRONG_SYNC_STATE, "Sync got a wrong state") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRONG_REF, "Sync got a wrong ref") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INVALID_ID, "Sync invalid id") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_RETURN_VALUE_NULL, "Sync got a null return") +TAOS_DEFINE_ERROR(TSDB_CODE_SYN_WRONG_ROLE, "Sync got a wrong role") TAOS_DEFINE_ERROR(TSDB_CODE_SYN_INTERNAL_ERROR, "Sync internal error") //tq diff --git a/source/util/src/tlrucache.c b/source/util/src/tlrucache.c index 4f8e96c4c7..7e165a12d5 100644 --- a/source/util/src/tlrucache.c +++ b/source/util/src/tlrucache.c @@ -333,13 +333,13 @@ static void taosLRUCacheShardEvictLRU(SLRUCacheShard *shard, size_t charge, SArr static void taosLRUCacheShardSetCapacity(SLRUCacheShard *shard, size_t capacity) { SArray *lastReferenceList = taosArrayInit(16, POINTER_BYTES); - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); shard->capacity = capacity; shard->highPriPoolCapacity = capacity * shard->highPriPoolRatio; taosLRUCacheShardEvictLRU(shard, 0, lastReferenceList); - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); for (int i = 0; i < taosArrayGetSize(lastReferenceList); ++i) { SLRUEntry *entry = taosArrayGetP(lastReferenceList, i); @@ -352,9 +352,9 @@ static int taosLRUCacheShardInit(SLRUCacheShard *shard, size_t capacity, bool st int maxUpperHashBits) { TAOS_CHECK_RETURN(taosLRUEntryTableInit(&shard->table, maxUpperHashBits)); - taosThreadMutexInit(&shard->mutex, NULL); + (void)taosThreadMutexInit(&shard->mutex, NULL); - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); shard->capacity = 0; shard->highPriPoolUsage = 0; shard->strictCapacity = strict; @@ -367,7 +367,7 @@ static int taosLRUCacheShardInit(SLRUCacheShard *shard, size_t capacity, bool st shard->lru.next = &shard->lru; shard->lru.prev = &shard->lru; shard->lruLowPri = &shard->lru; - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); taosLRUCacheShardSetCapacity(shard, capacity); @@ -375,7 +375,7 @@ static int taosLRUCacheShardInit(SLRUCacheShard *shard, size_t capacity, bool st } static void taosLRUCacheShardCleanup(SLRUCacheShard *shard) { - taosThreadMutexDestroy(&shard->mutex); + (void)taosThreadMutexDestroy(&shard->mutex); taosLRUEntryTableCleanup(&shard->table); } @@ -385,7 +385,7 @@ static LRUStatus taosLRUCacheShardInsertEntry(SLRUCacheShard *shard, SLRUEntry * LRUStatus status = TAOS_LRU_STATUS_OK; SArray *lastReferenceList = taosArrayInit(16, POINTER_BYTES); - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); taosLRUCacheShardEvictLRU(shard, e->totalCharge, lastReferenceList); @@ -429,7 +429,7 @@ static LRUStatus taosLRUCacheShardInsertEntry(SLRUCacheShard *shard, SLRUEntry * } } - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); for (int i = 0; i < taosArrayGetSize(lastReferenceList); ++i) { SLRUEntry *entry = taosArrayGetP(lastReferenceList, i); @@ -470,7 +470,7 @@ static LRUStatus taosLRUCacheShardInsert(SLRUCacheShard *shard, const void *key, static LRUHandle *taosLRUCacheShardLookup(SLRUCacheShard *shard, const void *key, size_t keyLen, uint32_t hash) { SLRUEntry *e = NULL; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); e = taosLRUEntryTableLookup(&shard->table, key, keyLen, hash); if (e != NULL) { ASSERT(TAOS_LRU_ENTRY_IN_CACHE(e)); @@ -481,14 +481,14 @@ static LRUHandle *taosLRUCacheShardLookup(SLRUCacheShard *shard, const void *key TAOS_LRU_ENTRY_SET_HIT(e); } - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return (LRUHandle *)e; } static void taosLRUCacheShardErase(SLRUCacheShard *shard, const void *key, size_t keyLen, uint32_t hash) { bool lastReference = false; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); SLRUEntry *e = taosLRUEntryTableRemove(&shard->table, key, keyLen, hash); if (e != NULL) { @@ -503,7 +503,7 @@ static void taosLRUCacheShardErase(SLRUCacheShard *shard, const void *key, size_ } } - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); if (lastReference) { taosLRUEntryFree(e); @@ -513,11 +513,11 @@ static void taosLRUCacheShardErase(SLRUCacheShard *shard, const void *key, size_ static int taosLRUCacheShardApply(SLRUCacheShard *shard, _taos_lru_functor_t functor, void *ud) { int ret; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); ret = taosLRUEntryTableApplyF(&shard->table, functor, ud); - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return ret; } @@ -525,7 +525,7 @@ static int taosLRUCacheShardApply(SLRUCacheShard *shard, _taos_lru_functor_t fun static void taosLRUCacheShardEraseUnrefEntries(SLRUCacheShard *shard) { SArray *lastReferenceList = taosArrayInit(16, POINTER_BYTES); - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); while (shard->lru.next != &shard->lru) { SLRUEntry *old = shard->lru.next; @@ -539,7 +539,7 @@ static void taosLRUCacheShardEraseUnrefEntries(SLRUCacheShard *shard) { taosArrayPush(lastReferenceList, &old); } - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); for (int i = 0; i < taosArrayGetSize(lastReferenceList); ++i) { SLRUEntry *entry = taosArrayGetP(lastReferenceList, i); @@ -552,12 +552,12 @@ static void taosLRUCacheShardEraseUnrefEntries(SLRUCacheShard *shard) { static bool taosLRUCacheShardRef(SLRUCacheShard *shard, LRUHandle *handle) { SLRUEntry *e = (SLRUEntry *)handle; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); ASSERT(TAOS_LRU_ENTRY_HAS_REFS(e)); TAOS_LRU_ENTRY_REF(e); - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return true; } @@ -570,7 +570,7 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b SLRUEntry *e = (SLRUEntry *)handle; bool lastReference = false; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); lastReference = taosLRUEntryUnref(e); if (lastReference && TAOS_LRU_ENTRY_IN_CACHE(e)) { @@ -591,7 +591,7 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b shard->usage -= e->totalCharge; } - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); if (lastReference) { taosLRUEntryFree(e); @@ -603,9 +603,9 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b static size_t taosLRUCacheShardGetUsage(SLRUCacheShard *shard) { size_t usage = 0; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); usage = shard->usage; - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return usage; } @@ -613,9 +613,9 @@ static size_t taosLRUCacheShardGetUsage(SLRUCacheShard *shard) { static int32_t taosLRUCacheShardGetElems(SLRUCacheShard *shard) { int32_t elems = 0; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); elems = shard->table.elems; - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return elems; } @@ -623,22 +623,22 @@ static int32_t taosLRUCacheShardGetElems(SLRUCacheShard *shard) { static size_t taosLRUCacheShardGetPinnedUsage(SLRUCacheShard *shard) { size_t usage = 0; - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); ASSERT(shard->usage >= shard->lruUsage); usage = shard->usage - shard->lruUsage; - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); return usage; } static void taosLRUCacheShardSetStrictCapacity(SLRUCacheShard *shard, bool strict) { - taosThreadMutexLock(&shard->mutex); + (void)taosThreadMutexLock(&shard->mutex); shard->strictCapacity = strict; - taosThreadMutexUnlock(&shard->mutex); + (void)taosThreadMutexUnlock(&shard->mutex); } struct SShardedCache { @@ -706,7 +706,7 @@ SLRUCache *taosLRUCacheInit(size_t capacity, int numShardBits, double highPriPoo cache->shardedCache.capacity = capacity; cache->shardedCache.lastId = 1; - taosThreadMutexInit(&cache->shardedCache.capacityMutex, NULL); + (void)taosThreadMutexInit(&cache->shardedCache.capacityMutex, NULL); return cache; } @@ -723,7 +723,7 @@ void taosLRUCacheCleanup(SLRUCache *cache) { cache->shards = 0; } - taosThreadMutexDestroy(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexDestroy(&cache->shardedCache.capacityMutex); taosMemoryFree(cache); } @@ -826,7 +826,7 @@ void taosLRUCacheSetCapacity(SLRUCache *cache, size_t capacity) { uint32_t numShards = cache->numShards; size_t perShard = (capacity + (numShards - 1)) / numShards; - taosThreadMutexLock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexLock(&cache->shardedCache.capacityMutex); for (int i = 0; i < numShards; ++i) { taosLRUCacheShardSetCapacity(&cache->shards[i], perShard); @@ -834,17 +834,17 @@ void taosLRUCacheSetCapacity(SLRUCache *cache, size_t capacity) { cache->shardedCache.capacity = capacity; - taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); } size_t taosLRUCacheGetCapacity(SLRUCache *cache) { size_t capacity = 0; - taosThreadMutexLock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexLock(&cache->shardedCache.capacityMutex); capacity = cache->shardedCache.capacity; - taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); return capacity; } @@ -852,7 +852,7 @@ size_t taosLRUCacheGetCapacity(SLRUCache *cache) { void taosLRUCacheSetStrictCapacity(SLRUCache *cache, bool strict) { uint32_t numShards = cache->numShards; - taosThreadMutexLock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexLock(&cache->shardedCache.capacityMutex); for (int i = 0; i < numShards; ++i) { taosLRUCacheShardSetStrictCapacity(&cache->shards[i], strict); @@ -860,17 +860,17 @@ void taosLRUCacheSetStrictCapacity(SLRUCache *cache, bool strict) { cache->shardedCache.strictCapacity = strict; - taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); } bool taosLRUCacheIsStrictCapacity(SLRUCache *cache) { bool strict = false; - taosThreadMutexLock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexLock(&cache->shardedCache.capacityMutex); strict = cache->shardedCache.strictCapacity; - taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); + (void)taosThreadMutexUnlock(&cache->shardedCache.capacityMutex); return strict; }