From 6c39f81c7bf06c307d604c6c6bc8edebf0312db0 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Tue, 16 Jul 2024 01:04:16 +0000 Subject: [PATCH 01/64] refactor error --- source/common/src/tglobal.c | 58 ++++++---- source/dnode/mgmt/exe/dmMain.c | 20 ++-- source/dnode/mgmt/node_mgmt/inc/dmMgmt.h | 1 + source/dnode/mgmt/node_mgmt/src/dmEnv.c | 106 +++++++++++------- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 56 +++++---- source/dnode/mgmt/node_mgmt/src/dmTransport.c | 4 +- source/dnode/mgmt/node_util/inc/dmUtil.h | 1 + source/dnode/mgmt/node_util/src/dmEps.c | 69 +++++++----- source/dnode/mgmt/node_util/src/dmFile.c | 6 + 9 files changed, 193 insertions(+), 128 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 119438fbd6..eaae9c2411 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -1370,58 +1370,68 @@ static int32_t taosCheckGlobalCfg() { return 0; } +static int32_t cfgInitWrapper(SConfig **pCfg) { + if (*pCfg == NULL) { + *pCfg = cfgInit(); + if (*pCfg == NULL) { + return terrno; + } + } + return 0; +} int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) { if (tsCfg != NULL) return 0; - tsCfg = cfgInit(); + + int32_t code = cfgInitWrapper(&tsCfg); if (tsc) { - if (taosAddClientCfg(tsCfg) != 0) return -1; - if (taosAddClientLogCfg(tsCfg) != 0) return -1; + if ((code = taosAddClientCfg(tsCfg)) != 0) return code; + if ((code = taosAddClientLogCfg(tsCfg)) != 0) return code; } else { - if (taosAddClientCfg(tsCfg) != 0) return -1; - if (taosAddServerCfg(tsCfg) != 0) return -1; - if (taosAddClientLogCfg(tsCfg) != 0) return -1; - if (taosAddServerLogCfg(tsCfg) != 0) return -1; + 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; } - taosAddSystemCfg(tsCfg); + code = taosAddSystemCfg(tsCfg); - if (taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl) != 0) { - uError("failed to load cfg since %s", terrstr()); + if ((code = taosLoadCfg(tsCfg, envCmd, cfgDir, envFile, apolloUrl)) != 0) { + uError("failed to load cfg since %s", tstrerror(code)); cfgCleanup(tsCfg); tsCfg = NULL; - return -1; + return code; } - if (cfgLoadFromArray(tsCfg, pArgs) != 0) { - uError("failed to load cfg from array since %s", terrstr()); + if ((code = cfgLoadFromArray(tsCfg, pArgs)) != 0) { + uError("failed to load cfg from array since %s", tstrerror(code)); cfgCleanup(tsCfg); tsCfg = NULL; - return -1; + return code; } if (tsc) { - if (taosSetClientCfg(tsCfg)) return -1; + if ((code = taosSetClientCfg(tsCfg)) != 0) return code; } else { - if (taosSetClientCfg(tsCfg)) return -1; - if (taosUpdateServerCfg(tsCfg)) return -1; - if (taosSetServerCfg(tsCfg)) return -1; - if (taosSetReleaseCfg(tsCfg)) return -1; - if (taosSetTfsCfg(tsCfg) != 0) return -1; - if (taosSetS3Cfg(tsCfg) != 0) return -1; + 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; } taosSetSystemCfg(tsCfg); - if (taosSetFileHandlesLimit() != 0) return -1; + if ((code = taosSetFileHandlesLimit()) != 0) return code; taosSetAllDebugFlag(tsCfg, cfgGetItem(tsCfg, "debugFlag")->i32); cfgDumpCfg(tsCfg, tsc, false); - if (taosCheckGlobalCfg() != 0) { - return -1; + if ((code = taosCheckGlobalCfg()) != 0) { + return code; } return 0; diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 1c5541de29..f4329995f3 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -310,6 +310,7 @@ static void taosCleanupArgs() { } int main(int argc, char const *argv[]) { + int32_t code = 0; #ifdef TD_JEMALLOC_ENABLED bool jeBackgroundThread = true; mallctl("background_thread", NULL, NULL, &jeBackgroundThread, sizeof(bool)); @@ -319,10 +320,10 @@ int main(int argc, char const *argv[]) { return -1; } - if (dmParseArgs(argc, argv) != 0) { + if ((code = dmParseArgs(argc, argv)) != 0) { //printf("failed to start since parse args error\n"); taosCleanupArgs(); - return -1; + return code; } #ifdef WINDOWS @@ -368,14 +369,15 @@ int mainWindows(int argc, char **argv) { #endif if(global.generateCode) { bool toLogFile = false; - if(taosReadDataFolder(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs) != 0){ - encryptError("failed to generate encrypt code since dataDir can not be set from cfg file"); - return -1; + if ((code = taosReadDataFolder(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs)) != 0) { + encryptError("failed to generate encrypt code since dataDir can not be set from cfg file,reason:%s", + tstrerror(code)); + return code; }; - - if(dmCheckRunning(tsDataDir) == NULL) { - encryptError("failed to generate encrypt code since taosd is running, please stop it first"); - return -1; + TdFilePtr pFile; + if ((code = dmCheckRunningWrapper(tsDataDir, &pFile)) != 0) { + encryptError("failed to generate encrypt code since taosd is running, please stop it first, reason:%s", tstrerror(code)); + return code; } int ret = dmUpdateEncryptKey(global.encryptKey, toLogFile); taosCloseLog(); diff --git a/source/dnode/mgmt/node_mgmt/inc/dmMgmt.h b/source/dnode/mgmt/node_mgmt/inc/dmMgmt.h index bc6a4652e7..9548d0cad9 100644 --- a/source/dnode/mgmt/node_mgmt/inc/dmMgmt.h +++ b/source/dnode/mgmt/node_mgmt/inc/dmMgmt.h @@ -98,6 +98,7 @@ SMgmtWrapper *dmAcquireWrapper(SDnode *pDnode, EDndNodeType nType); int32_t dmMarkWrapper(SMgmtWrapper *pWrapper); void dmReleaseWrapper(SMgmtWrapper *pWrapper); int32_t dmInitVars(SDnode *pDnode); +int32_t dmInitVarsWrapper(SDnode *pDnode); void dmClearVars(SDnode *pDnode); int32_t dmInitModule(SDnode *pDnode); SMgmtInputOpt dmBuildMgmtInputOpt(SMgmtWrapper *pWrapper); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 4739409d2c..987d592158 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -34,10 +34,11 @@ static SDnode globalDnode = {0}; SDnode *dmInstance() { return &globalDnode; } static int32_t dmCheckRepeatInit(SDnode *pDnode) { + int32_t code = 0; if (atomic_val_compare_exchange_8(&pDnode->once, DND_ENV_INIT, DND_ENV_READY) != DND_ENV_INIT) { dError("env is already initialized"); - terrno = TSDB_CODE_REPEAT_INIT; - return -1; + code = TSDB_CODE_REPEAT_INIT; + return terrno = code; } return 0; } @@ -107,7 +108,20 @@ static bool dmCheckDiskSpace() { } return ret; } +static int32_t dmCheckDiskSpaceWrapper() { + if (!dmCheckDiskSpace()) { + return terrno; + } + return 0; +} +int32_t tfsOpenWrapper(SDiskCfg *pCfg, int32_t ndisk, STfs **tfs) { + *tfs = tfsOpen(pCfg, ndisk); + if (*tfs == NULL) { + return terrno; + } + return 0; +} int32_t dmDiskInit() { SDnode *pDnode = dmInstance(); SDiskCfg dCfg = {.level = 0, .primary = 1, .disable = 0}; @@ -119,10 +133,10 @@ int32_t dmDiskInit() { numOfDisks = 1; } - pDnode->pTfs = tfsOpen(pDisks, numOfDisks); - if (pDnode->pTfs == NULL) { - dError("failed to init tfs since %s", terrstr()); - return -1; + int32_t code = tfsOpenWrapper(pDisks, numOfDisks, &pDnode->pTfs); + if (code != 0) { + dError("failed to init tfs since %s", tstrerror(code)); + return code; } return 0; } @@ -145,6 +159,12 @@ static bool dmCheckDataDirVersion() { return true; } +static int32_t dmCheckDataDirVersionWrapper() { + if (!dmCheckDataDirVersion()) { + return TSDB_CODE_INVALID_DATA_FMT; + } + return 0; +} #if defined(USE_S3) extern int32_t s3Begin(); @@ -155,16 +175,17 @@ extern int8_t tsS3Enabled; int32_t dmInit() { dInfo("start to init dnode env"); - if (dmDiskInit() != 0) return -1; - if (!dmCheckDataDirVersion()) return -1; - if (!dmCheckDiskSpace()) return -1; - if (dmCheckRepeatInit(dmInstance()) != 0) return -1; - if (dmInitSystem() != 0) return -1; - if (dmInitMonitor() != 0) return -1; - if (dmInitAudit() != 0) return -1; - if (dmInitDnode(dmInstance()) != 0) return -1; + int32_t code = 0; + if ((code = dmDiskInit()) != 0) return code; + if ((code = dmCheckDataDirVersion()) != 0) return code; + if ((code = dmCheckDiskSpace()) != 0) return code; + if ((code = dmCheckRepeatInit(dmInstance())) != 0) return code; + if ((code = dmInitSystem()) != 0) return code; + if ((code = dmInitMonitor()) != 0) return code; + if ((code = dmInitAudit()) != 0) return code; + if ((code = dmInitDnode(dmInstance())) != 0) return code; #if defined(USE_S3) - if (s3Begin() != 0) return -1; + if ((code = s3Begin()) != 0) return code; #endif dInfo("dnode env is initialized"); @@ -214,6 +235,7 @@ int32_t dmRun() { } static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { + int32_t code = 0; SDnode *pDnode = dmInstance(); SMgmtWrapper *pWrapper = dmAcquireWrapper(pDnode, ntype); @@ -221,19 +243,19 @@ static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { dmReleaseWrapper(pWrapper); switch (ntype) { case MNODE: - terrno = TSDB_CODE_MNODE_ALREADY_DEPLOYED; + code = TSDB_CODE_MNODE_ALREADY_DEPLOYED; break; case QNODE: - terrno = TSDB_CODE_QNODE_ALREADY_DEPLOYED; + code = TSDB_CODE_QNODE_ALREADY_DEPLOYED; break; case SNODE: - terrno = TSDB_CODE_SNODE_ALREADY_DEPLOYED; + code = TSDB_CODE_SNODE_ALREADY_DEPLOYED; break; default: - terrno = TSDB_CODE_APP_ERROR; + code = TSDB_CODE_APP_ERROR; } dError("failed to create node since %s", terrstr()); - return -1; + return terrno = code; } dInfo("start to process create-node-request"); @@ -241,18 +263,18 @@ static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { pWrapper = &pDnode->wrappers[ntype]; if (taosMkDir(pWrapper->path) != 0) { dmReleaseWrapper(pWrapper); - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to create dir:%s since %s", pWrapper->path, terrstr()); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create dir:%s since %s", pWrapper->path, tstrerror(code)); + return terrno = code; } taosThreadMutexLock(&pDnode->mutex); SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper); dInfo("node:%s, start to create", pWrapper->name); - int32_t code = (*pWrapper->func.createFp)(&input, pMsg); + code = (*pWrapper->func.createFp)(&input, pMsg); if (code != 0) { - dError("node:%s, failed to create since %s", pWrapper->name, terrstr()); + dError("node:%s, failed to create since %s", pWrapper->name, tstrerror(code)); } else { dInfo("node:%s, has been created", pWrapper->name); code = dmOpenNode(pWrapper); @@ -268,6 +290,7 @@ static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { } static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { + int32_t code = 0; SDnode *pDnode = dmInstance(); SMgmtWrapper *pWrapper = dmAcquireWrapper(pDnode, ntype); @@ -286,16 +309,16 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { dInfo("node:%s, checking node role:%d", pWrapper->name, role); if (role == TAOS_SYNC_ROLE_VOTER) { dError("node:%s, failed to alter node type since node already is role:%d", pWrapper->name, role); - terrno = TSDB_CODE_MNODE_ALREADY_IS_VOTER; - return -1; + code = TSDB_CODE_MNODE_ALREADY_IS_VOTER; + return terrno = code; } } if (pWrapper->func.isCatchUpFp != NULL) { dInfo("node:%s, checking node catch up", pWrapper->name); if ((*pWrapper->func.isCatchUpFp)(pWrapper->pMgmt) != 1) { - terrno = TSDB_CODE_MNODE_NOT_CATCH_UP; - return -1; + code = TSDB_CODE_MNODE_NOT_CATCH_UP; + return terrno = code; } } @@ -311,17 +334,17 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { pWrapper = &pDnode->wrappers[ntype]; if (taosMkDir(pWrapper->path) != 0) { taosThreadMutexUnlock(&pDnode->mutex); - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to create dir:%s since %s", pWrapper->path, terrstr()); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create dir:%s since %s", pWrapper->path, tstrerror(code)); + return terrno = code; } SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper); dInfo("node:%s, start to create", pWrapper->name); - int32_t code = (*pWrapper->func.createFp)(&input, pMsg); + code = (*pWrapper->func.createFp)(&input, pMsg); if (code != 0) { - dError("node:%s, failed to create since %s", pWrapper->name, terrstr()); + dError("node:%s, failed to create since %s", pWrapper->name, tstrerror(code)); } else { dInfo("node:%s, has been created", pWrapper->name); code = dmOpenNode(pWrapper); @@ -337,35 +360,36 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { } static int32_t dmProcessDropNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { + int32_t code = 0; SDnode *pDnode = dmInstance(); SMgmtWrapper *pWrapper = dmAcquireWrapper(pDnode, ntype); if (pWrapper == NULL) { switch (ntype) { case MNODE: - terrno = TSDB_CODE_MNODE_NOT_DEPLOYED; + code = TSDB_CODE_MNODE_NOT_DEPLOYED; break; case QNODE: - terrno = TSDB_CODE_QNODE_NOT_DEPLOYED; + code = TSDB_CODE_QNODE_NOT_DEPLOYED; break; case SNODE: - terrno = TSDB_CODE_SNODE_NOT_DEPLOYED; + code = TSDB_CODE_SNODE_NOT_DEPLOYED; break; default: - terrno = TSDB_CODE_APP_ERROR; + code = TSDB_CODE_APP_ERROR; } dError("failed to drop node since %s", terrstr()); - return -1; + return terrno = code; } taosThreadMutexLock(&pDnode->mutex); SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper); dInfo("node:%s, start to drop", pWrapper->name); - int32_t code = (*pWrapper->func.dropFp)(&input, pMsg); + code = (*pWrapper->func.dropFp)(&input, pMsg); if (code != 0) { - dError("node:%s, failed to drop since %s", pWrapper->name, terrstr()); + dError("node:%s, failed to drop since %s", pWrapper->name, tstrerror(code)); } else { dInfo("node:%s, has been dropped", pWrapper->name); pWrapper->required = false; diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index e6d8663e58..2e0533d91a 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -42,7 +42,7 @@ int32_t dmInitDnode(SDnode *pDnode) { int32_t code = -1; char path[PATH_MAX + 100] = {0}; - if (dmInitVars(pDnode) != 0) { + if ((code = dmInitVarsWrapper(pDnode)) != 0) { goto _OVER; } @@ -65,26 +65,31 @@ int32_t dmInitDnode(SDnode *pDnode) { snprintf(path, sizeof(path), "%s%s%s", tsDataDir, TD_DIRSEP, pWrapper->name); pWrapper->path = taosStrdup(path); if (pWrapper->path == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } pWrapper->required = dmRequireNode(pDnode, pWrapper); } - pDnode->lockfile = dmCheckRunning(tsDataDir); - if (pDnode->lockfile == NULL) { + code = dmCheckRunningWrapper(tsDataDir, &pDnode->lockfile); + if (code != 0) { goto _OVER; } - if (dmInitModule(pDnode) != 0) { + + if ((code = dmInitModule(pDnode)) != 0) { goto _OVER; } indexInit(tsNumOfCommitThreads); streamMetaInit(); - dmInitStatusClient(pDnode); - dmInitSyncClient(pDnode); + if ((code = dmInitStatusClient(pDnode)) != 0) { + goto _OVER; + } + if ((code = dmInitSyncClient(pDnode)) != 0) { + goto _OVER; + } dmReportStartup("dnode-transport", "initialized"); dDebug("dnode is created, ptr:%p", pDnode); @@ -94,7 +99,7 @@ _OVER: if (code != 0 && pDnode != NULL) { dmClearVars(pDnode); pDnode = NULL; - dError("failed to create dnode since %s", terrstr()); + dError("failed to create dnode since %s", tstrerror(code)); } return code; @@ -122,7 +127,15 @@ void dmCleanupDnode(SDnode *pDnode) { dDebug("dnode is closed, ptr:%p", pDnode); } +int32_t dmInitVarsWrapper(SDnode *pDnode) { + int32_t code = dmInitVars(pDnode); + if (code == -1) { + return terrno; + } + return 0; +} int32_t dmInitVars(SDnode *pDnode) { + int32_t code = 0; SDnodeData *pData = &pDnode->data; pData->dnodeId = 0; pData->clusterId = 0; @@ -138,21 +151,21 @@ int32_t dmInitVars(SDnode *pDnode) { taosMemoryFreeClear(machineId); } else { #if defined(TD_ENTERPRISE) && !defined(GRANTS_CFG) - terrno = TSDB_CODE_DNODE_NO_MACHINE_CODE; - return -1; + code = TSDB_CODE_DNODE_NO_MACHINE_CODE; + return terrno = code; #endif } pData->dnodeHash = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK); if (pData->dnodeHash == NULL) { dError("failed to init dnode hash"); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return terrno = code; } - if (dmReadEps(pData) != 0) { - dError("failed to read file since %s", terrstr()); - return -1; + if ((code = dmReadEps(pData)) != 0) { + dError("failed to read file since %s", tstrerror(code)); + return code; } #if defined(TD_ENTERPRISE) @@ -274,26 +287,25 @@ int32_t dmMarkWrapper(SMgmtWrapper *pWrapper) { } else { switch (pWrapper->ntype) { case MNODE: - terrno = TSDB_CODE_MNODE_NOT_FOUND; + code = TSDB_CODE_MNODE_NOT_FOUND; break; case QNODE: - terrno = TSDB_CODE_QNODE_NOT_FOUND; + code = TSDB_CODE_QNODE_NOT_FOUND; break; case SNODE: - terrno = TSDB_CODE_SNODE_NOT_FOUND; + code = TSDB_CODE_SNODE_NOT_FOUND; break; case VNODE: - terrno = TSDB_CODE_VND_STOPPED; + code = TSDB_CODE_VND_STOPPED; break; default: - terrno = TSDB_CODE_APP_IS_STOPPING; + code = TSDB_CODE_APP_IS_STOPPING; break; } - code = -1; } taosThreadRwlockUnlock(&pWrapper->lock); - return code; + return terrno = code; } void dmReleaseWrapper(SMgmtWrapper *pWrapper) { diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c index 99d641ff3f..2f5c4abd0b 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c +++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c @@ -426,7 +426,7 @@ int32_t dmInitStatusClient(SDnode *pDnode) { pTrans->statusRpc = rpcOpen(&rpcInit); if (pTrans->statusRpc == NULL) { dError("failed to init dnode rpc status client"); - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } dDebug("dnode rpc status client is initialized"); @@ -471,7 +471,7 @@ int32_t dmInitSyncClient(SDnode *pDnode) { pTrans->syncRpc = rpcOpen(&rpcInit); if (pTrans->syncRpc == NULL) { dError("failed to init dnode rpc sync client"); - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } dDebug("dnode rpc sync client is initialized"); diff --git a/source/dnode/mgmt/node_util/inc/dmUtil.h b/source/dnode/mgmt/node_util/inc/dmUtil.h index d316a82af2..3dc4ebdbae 100644 --- a/source/dnode/mgmt/node_util/inc/dmUtil.h +++ b/source/dnode/mgmt/node_util/inc/dmUtil.h @@ -206,6 +206,7 @@ void dmGetMonitorSystemInfo(SMonSysInfo *pInfo); int32_t dmReadFile(const char *path, const char *name, bool *pDeployed); int32_t dmWriteFile(const char *path, const char *name, bool deployed); TdFilePtr dmCheckRunning(const char *dataDir); +int32_t dmCheckRunningWrapper(const char *dataDir, TdFilePtr *pFile); // dmodule.c int32_t dmInitDndInfo(SDnodeData *pData); diff --git a/source/dnode/mgmt/node_util/src/dmEps.c b/source/dnode/mgmt/node_util/src/dmEps.c index c585a780ac..a75e614158 100644 --- a/source/dnode/mgmt/node_util/src/dmEps.c +++ b/source/dnode/mgmt/node_util/src/dmEps.c @@ -204,26 +204,26 @@ int32_t dmReadEps(SDnodeData *pData) { pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); dError("failed to open dnode file:%s since %s", file, terrstr()); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); dError("failed to fstat dnode file:%s since %s", file, terrstr()); goto _OVER; } content = taosMemoryMalloc(size + 1); if (content == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, content, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); dError("failed to read dnode file:%s since %s", file, terrstr()); goto _OVER; } @@ -232,12 +232,11 @@ int32_t dmReadEps(SDnodeData *pData) { pJson = tjsonParse(content); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } - if (dmDecodeEps(pJson, pData) < 0) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + if ((code = dmDecodeEps(pJson, pData)) < 0) { goto _OVER; } @@ -251,7 +250,7 @@ _OVER: if (code != 0) { dError("failed to read dnode file:%s since %s", file, terrstr()); - return code; + return terrno = code; } if (taosArrayGetSize(pData->dnodeEps) == 0) { @@ -261,8 +260,8 @@ _OVER: taosArrayPush(pData->dnodeEps, &dnodeEp); } - if (dmReadDnodePairs(pData) != 0) { - return -1; + if ((code = dmReadDnodePairs(pData)) != 0) { + return terrno = code; } dDebug("reset dnode list on startup"); @@ -270,8 +269,8 @@ _OVER: if (pData->oldDnodeEps == NULL && dmIsEpChanged(pData, pData->dnodeId, tsLocalEp)) { dError("localEp %s different with %s and need to be reconfigured", tsLocalEp, file); - terrno = TSDB_CODE_INVALID_CFG; - return -1; + code = TSDB_CODE_INVALID_CFG; + return terrno = code; } return code; @@ -308,7 +307,7 @@ static int32_t dmEncodeEps(SJson *pJson, SDnodeData *pData) { } int32_t dmWriteEps(SDnodeData *pData) { - int32_t code = -1; + int32_t code = 0; char *buffer = NULL; SJson *pJson = NULL; TdFilePtr pFile = NULL; @@ -317,16 +316,23 @@ int32_t dmWriteEps(SDnodeData *pData) { snprintf(file, sizeof(file), "%s%sdnode%sdnode.json.bak", tsDataDir, TD_DIRSEP, TD_DIRSEP); snprintf(realfile, sizeof(realfile), "%s%sdnode%sdnode.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); - terrno = TSDB_CODE_OUT_OF_MEMORY; - if ((code == dmInitDndInfo(pData)) != 0) goto _OVER; + // if ((code == dmInitDndInfo(pData)) != 0) goto _OVER; + TAOS_CHECK_GOTO(code = dmInitDndInfo(pData), NULL, _OVER); + pJson = tjsonCreateObject(); - if (pJson == NULL) goto _OVER; + if (pJson == NULL) + TAOS_CHECK_GOTO(code = TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + pData->engineVer = tsVersion; - if (dmEncodeEps(pJson, pData) != 0) goto _OVER; + + TAOS_CHECK_GOTO(code = dmEncodeEps(pJson, pData), NULL, _OVER);//dmEncodeEps(pJson, pData) != 0) goto _OVER; + buffer = tjsonToString(pJson); - if (buffer == NULL) goto _OVER; - terrno = 0; + if (buffer == NULL) { + TAOS_CHECK_GOTO(code = TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + } + code = 0; pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); if (pFile == NULL) goto _OVER; @@ -349,8 +355,8 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to write dnode file:%s since %s, dnodeVer:%" PRId64, realfile, terrstr(), pData->dnodeVer); + // code = TAOS_SYSTEM_ERROR(errno); + dError("failed to write dnode file:%s since %s, dnodeVer:%" PRId64, realfile, tstrerror(code), pData->dnodeVer); } return code; } @@ -592,28 +598,29 @@ static int32_t dmReadDnodePairs(SDnodeData *pData) { snprintf(file, sizeof(file), "%s%sdnode%sep.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); if (taosStatFile(file, NULL, NULL, NULL) < 0) { - dDebug("dnode file:%s not exist", file); + code = TAOS_SYSTEM_ERROR(errno); + dDebug("dnode file:%s not exist, reason:%s", file, tstrerror(code)); code = 0; goto _OVER; } pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); dError("failed to open dnode file:%s since %s", file, terrstr()); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); + code = TAOS_SYSTEM_ERROR(errno); dError("failed to fstat dnode file:%s since %s", file, terrstr()); goto _OVER; } content = taosMemoryMalloc(size + 1); if (content == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } @@ -627,12 +634,13 @@ static int32_t dmReadDnodePairs(SDnodeData *pData) { pJson = tjsonParse(content); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } pData->oldDnodeEps = taosArrayInit(1, sizeof(SDnodeEpPair)); if (pData->oldDnodeEps == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; dError("failed to calloc dnodeEp array since %s", strerror(errno)); goto _OVER; } @@ -640,7 +648,8 @@ static int32_t dmReadDnodePairs(SDnodeData *pData) { if (dmDecodeEpPairs(pJson, pData) < 0) { taosArrayDestroy(pData->oldDnodeEps); pData->oldDnodeEps = NULL; - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } @@ -653,7 +662,7 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - dError("failed to read dnode file:%s since %s", file, terrstr()); + dError("failed to read dnode file:%s since %s", file, tstrerror(code)); return code; } @@ -680,8 +689,8 @@ _OVER: pair->oldPort, pair->newFqdn, pair->newPort, pDnodeEp->id); taosArrayDestroy(pData->oldDnodeEps); pData->oldDnodeEps = NULL; - terrno = TSDB_CODE_INVALID_CFG; - return -1; + code = TSDB_CODE_INVALID_CFG; + return code; } } } diff --git a/source/dnode/mgmt/node_util/src/dmFile.c b/source/dnode/mgmt/node_util/src/dmFile.c index 752abb83a2..74463e09cb 100644 --- a/source/dnode/mgmt/node_util/src/dmFile.c +++ b/source/dnode/mgmt/node_util/src/dmFile.c @@ -151,6 +151,12 @@ _OVER: return code; } +int32_t dmCheckRunningWrapper(const char *dataDir, TdFilePtr *pFile) { + *pFile = dmCheckRunning(dataDir); + if (*pFile == NULL) return terrno; + + return 0; +} TdFilePtr dmCheckRunning(const char *dataDir) { char filepath[PATH_MAX] = {0}; snprintf(filepath, sizeof(filepath), "%s%s.running", dataDir, TD_DIRSEP); From 640eada5b1703b956ed9082fd88180c0e9973e6c Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Tue, 16 Jul 2024 10:01:09 +0000 Subject: [PATCH 02/64] refactor error code --- include/util/tqueue.h | 1 + source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 116 +++++++++----- source/dnode/mgmt/mgmt_dnode/src/dmInt.c | 32 ++-- source/dnode/mgmt/mgmt_dnode/src/dmWorker.c | 34 +++-- source/dnode/mgmt/mgmt_mnode/src/mmFile.c | 137 +++++++++++------ source/dnode/mgmt/mgmt_mnode/src/mmHandle.c | 37 ++--- source/dnode/mgmt/mgmt_mnode/src/mmInt.c | 68 +++++---- source/dnode/mgmt/mgmt_mnode/src/mmWorker.c | 48 +++--- source/dnode/mgmt/mgmt_qnode/src/qmHandle.c | 34 +++-- source/dnode/mgmt/mgmt_qnode/src/qmInt.c | 30 ++-- source/dnode/mgmt/mgmt_qnode/src/qmWorker.c | 16 +- source/dnode/mgmt/mgmt_snode/src/smHandle.c | 35 +++-- source/dnode/mgmt/mgmt_snode/src/smInt.c | 38 +++-- source/dnode/mgmt/mgmt_snode/src/smWorker.c | 61 ++++---- source/dnode/mgmt/mgmt_vnode/inc/vmInt.h | 42 ++--- source/dnode/mgmt/mgmt_vnode/src/vmFile.c | 143 ++++++++++++------ source/dnode/mgmt/mgmt_vnode/src/vmHandle.c | 25 ++- source/dnode/mgmt/mgmt_vnode/src/vmInt.c | 101 ++++++++++--- source/dnode/mgmt/mgmt_vnode/src/vmWorker.c | 78 +++++----- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 24 ++- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 2 +- source/dnode/mgmt/node_mgmt/src/dmNodes.c | 9 +- source/dnode/mgmt/node_mgmt/src/dmTransport.c | 58 +++---- source/dnode/mnode/impl/src/mndMain.c | 31 ++-- source/util/src/tqueue.c | 13 +- source/util/src/tversion.c | 6 +- 26 files changed, 726 insertions(+), 493 deletions(-) diff --git a/include/util/tqueue.h b/include/util/tqueue.h index bed218ac1b..b948bbf410 100644 --- a/include/util/tqueue.h +++ b/include/util/tqueue.h @@ -77,6 +77,7 @@ STaosQueue *taosOpenQueue(); void taosCloseQueue(STaosQueue *queue); void taosSetQueueFp(STaosQueue *queue, FItem itemFp, FItems itemsFp); void *taosAllocateQitem(int32_t size, EQItype itype, int64_t dataSize); +int32_t taosAllocateQitemWrapper(int32_t size, EQItype itype, int64_t dataSize, void **pItem); void taosFreeQitem(void *pItem); int32_t taosWriteQitem(STaosQueue *queue, void *pItem); int32_t taosReadQitem(STaosQueue *queue, void **ppItem); diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 0360b54d6f..d0459eb838 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -45,7 +45,7 @@ static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) { SRetrieveIpWhiteReq req = {.ipWhiteVer = oldVer}; int32_t contLen = tSerializeRetrieveIpWhite(NULL, 0, &req); - void * pHead = rpcMallocCont(contLen); + void *pHead = rpcMallocCont(contLen); tSerializeRetrieveIpWhite(pHead, contLen, &req); SRpcMsg rpcMsg = {.pCont = pHead, @@ -116,7 +116,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.clusterCfg.ttlChangeOnWrite = tsTtlChangeOnWrite; req.clusterCfg.enableWhiteList = tsEnableWhiteList ? 1 : 0; req.clusterCfg.encryptionKeyStat = tsEncryptionKeyStat; - req.clusterCfg.encryptionKeyChksum = tsEncryptionKeyChksum; + req.clusterCfg.encryptionKeyChksum = tsEncryptionKeyChksum; req.clusterCfg.monitorParas.tsEnableMonitor = tsEnableMonitor; req.clusterCfg.monitorParas.tsMonitorInterval = tsMonitorInterval; req.clusterCfg.monitorParas.tsSlowLogScope = tsSlowLogScope; @@ -146,7 +146,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.ipWhiteVer = pMgmt->pData->ipWhiteVer; int32_t contLen = tSerializeSStatusReq(NULL, 0, &req); - void * pHead = rpcMallocCont(contLen); + void *pHead = rpcMallocCont(contLen); tSerializeSStatusReq(pHead, contLen, &req); tFreeSStatusReq(&req); @@ -207,18 +207,22 @@ int32_t dmProcessGrantRsp(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { } int32_t dmProcessConfigReq(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { + int32_t code = 0; SDCfgDnodeReq cfgReq = {0}; if (tDeserializeSDCfgDnodeReq(pMsg->pCont, pMsg->contLen, &cfgReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } dInfo("start to config, option:%s, value:%s", cfgReq.config, cfgReq.value); SConfig *pCfg = taosGetCfg(); - cfgSetItem(pCfg, cfgReq.config, cfgReq.value, CFG_STYPE_ALTER_CMD, true); - taosCfgDynamicOptions(pCfg, cfgReq.config, true); - return 0; + + code = cfgSetItem(pCfg, cfgReq.config, cfgReq.value, CFG_STYPE_ALTER_CMD, true); + if (code != 0) { + return code; + } + + return taosCfgDynamicOptions(pCfg, cfgReq.config, true); } int32_t dmProcessCreateEncryptKeyReq(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { @@ -251,7 +255,7 @@ static void dmGetServerRunStatus(SDnodeMgmt *pMgmt, SServerStatusRsp *pStatus) { pStatus->statusCode = TSDB_SRV_STATUS_SERVICE_OK; pStatus->details[0] = 0; - SMonMloadInfo minfo = {0}; + SMonMloadInfo minfo = {0}; (*pMgmt->getMnodeLoadsFp)(&minfo); if (minfo.isMnode && (minfo.load.syncState == TAOS_SYNC_STATE_ERROR || minfo.load.syncState == TAOS_SYNC_STATE_OFFLINE)) { @@ -276,6 +280,7 @@ static void dmGetServerRunStatus(SDnodeMgmt *pMgmt, SServerStatusRsp *pStatus) { } int32_t dmProcessServerRunStatus(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { + int32_t code = 0; dDebug("server run status req is received"); SServerStatusRsp statusRsp = {0}; dmGetServerRunStatus(pMgmt, &statusRsp); @@ -284,24 +289,37 @@ int32_t dmProcessServerRunStatus(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { int32_t rspLen = tSerializeSServerStatusRsp(NULL, 0, &statusRsp); if (rspLen < 0) { rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return rspMsg.code; } void *pRsp = rpcMallocCont(rspLen); if (pRsp == NULL) { rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return rspMsg.code; + } + + code = tSerializeSServerStatusRsp(pRsp, rspLen, &statusRsp); + if (code != 0) { + rpcFreeCont(pRsp); + rspMsg.code = code; + return code; } - tSerializeSServerStatusRsp(pRsp, rspLen, &statusRsp); pMsg->info.rsp = pRsp; pMsg->info.rspLen = rspLen; return 0; } -SSDataBlock *dmBuildVariablesBlock(void) { - SSDataBlock * pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock)); - size_t size = 0; +int32_t dmBuildVariablesBlock(SSDataBlock **ppBlock) { + int32_t code = 0; + + SSDataBlock *pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock)); + if (pBlock == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + + size_t size = 0; + const SSysTableMeta *pMeta = NULL; getInfosDbMeta(&pMeta, &size); @@ -314,52 +332,74 @@ SSDataBlock *dmBuildVariablesBlock(void) { } pBlock->pDataBlock = taosArrayInit(pMeta[index].colNum, sizeof(SColumnInfoData)); + if (pBlock->pDataBlock == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } for (int32_t i = 0; i < pMeta[index].colNum; ++i) { SColumnInfoData colInfoData = {0}; colInfoData.info.colId = i + 1; colInfoData.info.type = pMeta[index].schema[i].type; colInfoData.info.bytes = pMeta[index].schema[i].bytes; - taosArrayPush(pBlock->pDataBlock, &colInfoData); + if (taosArrayPush(pBlock->pDataBlock, &colInfoData) == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; + } } pBlock->info.hasVarCol = true; - - return pBlock; +_exit: + if (code != 0) { + blockDataDestroy(pBlock); + } else { + *ppBlock = pBlock; + } + return code; } int32_t dmAppendVariablesToBlock(SSDataBlock *pBlock, int32_t dnodeId) { - /*int32_t code = */dumpConfToDataBlock(pBlock, 1); + int32_t code = dumpConfToDataBlock(pBlock, 1); + if (code != 0) { + return code; + } SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, 0); - colDataSetNItems(pColInfo, 0, (const char *)&dnodeId, pBlock->info.rows, false); + if (pColInfo == NULL) { + return TSDB_CODE_OUT_OF_RANGE; + } - return TSDB_CODE_SUCCESS; + return colDataSetNItems(pColInfo, 0, (const char *)&dnodeId, pBlock->info.rows, false); } int32_t dmProcessRetrieve(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { - int32_t size = 0; - int32_t rowsRead = 0; - + int32_t size = 0; + int32_t rowsRead = 0; + int32_t code = 0; SRetrieveTableReq retrieveReq = {0}; if (tDeserializeSRetrieveTableReq(pMsg->pCont, pMsg->contLen, &retrieveReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } #if 0 if (strcmp(retrieveReq.user, TSDB_DEFAULT_USER) != 0) { - terrno = TSDB_CODE_MND_NO_RIGHTS; - return -1; + code = TSDB_CODE_MND_NO_RIGHTS; + return code; } #endif if (strcasecmp(retrieveReq.tb, TSDB_INS_TABLE_DNODE_VARIABLES)) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } - SSDataBlock *pBlock = dmBuildVariablesBlock(); + SSDataBlock *pBlock = NULL; + if ((code = dmBuildVariablesBlock(&pBlock)) != 0) { + return code; + } - dmAppendVariablesToBlock(pBlock, pMgmt->pData->dnodeId); + code = dmAppendVariablesToBlock(pBlock, pMgmt->pData->dnodeId); + if (code != 0) { + blockDataDestroy(pBlock); + return code; + } size_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); size = sizeof(SRetrieveMetaTableRsp) + sizeof(int32_t) + sizeof(SSysTableSchema) * numOfCols + @@ -367,10 +407,10 @@ int32_t dmProcessRetrieve(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { SRetrieveMetaTableRsp *pRsp = rpcMallocCont(size); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - dError("failed to retrieve data since %s", terrstr()); + code = TSDB_CODE_OUT_OF_MEMORY; + dError("failed to retrieve data since %s", tstrerror(code)); blockDataDestroy(pBlock); - return -1; + return code; } char *pStart = pRsp->data; @@ -404,7 +444,9 @@ int32_t dmProcessRetrieve(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { SArray *dmGetMsgHandles() { int32_t code = -1; SArray *pArray = taosArrayInit(16, sizeof(SMgmtHandle)); - if (pArray == NULL) goto _OVER; + if (pArray == NULL) { + return NULL; + } // Requests handled by DNODE if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_MNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; @@ -416,7 +458,7 @@ SArray *dmGetMsgHandles() { if (dmSetMgmtHandle(pArray, TDMT_DND_CONFIG_DNODE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_DND_SERVER_STATUS, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_DND_SYSTABLE_RETRIEVE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; - if (dmSetMgmtHandle(pArray, TDMT_DND_ALTER_MNODE_TYPE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; + if (dmSetMgmtHandle(pArray, TDMT_DND_ALTER_MNODE_TYPE, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; if (dmSetMgmtHandle(pArray, TDMT_DND_CREATE_ENCRYPT_KEY, dmPutNodeMsgToMgmtQueue, 0) == NULL) goto _OVER; // Requests handled by MNODE diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmInt.c b/source/dnode/mgmt/mgmt_dnode/src/dmInt.c index b9dd45f1c0..958b411881 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmInt.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmInt.c @@ -18,22 +18,23 @@ #include "libs/function/tudf.h" static int32_t dmStartMgmt(SDnodeMgmt *pMgmt) { - if (dmStartStatusThread(pMgmt) != 0) { - return -1; + int32_t code = 0; + if ((code = dmStartStatusThread(pMgmt)) != 0) { + return code; } #if defined(TD_ENTERPRISE) - if (dmStartNotifyThread(pMgmt) != 0) { - return -1; + if ((code = dmStartNotifyThread(pMgmt)) != 0) { + return code; } #endif - if (dmStartMonitorThread(pMgmt) != 0) { - return -1; + if ((code = dmStartMonitorThread(pMgmt)) != 0) { + return code; } - if (dmStartAuditThread(pMgmt) != 0) { - return -1; + if ((code = dmStartAuditThread(pMgmt)) != 0) { + return code; } - if (dmStartCrashReportThread(pMgmt) != 0) { - return -1; + if ((code = dmStartCrashReportThread(pMgmt)) != 0) { + return code; } return 0; } @@ -50,10 +51,10 @@ static void dmStopMgmt(SDnodeMgmt *pMgmt) { } static int32_t dmOpenMgmt(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { + int32_t code = 0; SDnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SDnodeMgmt)); if (pMgmt == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } pMgmt->pData = pInput->pData; @@ -70,12 +71,11 @@ static int32_t dmOpenMgmt(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { pMgmt->getMnodeLoadsFp = pInput->getMnodeLoadsFp; pMgmt->getQnodeLoadsFp = pInput->getQnodeLoadsFp; - // pMgmt->pData->ipWhiteVer = 0; - if (dmStartWorker(pMgmt) != 0) { - return -1; + if ((code = dmStartWorker(pMgmt)) != 0) { + return code; } - if (udfStartUdfd(pMgmt->pData->dnodeId) != 0) { + if ((code = udfStartUdfd(pMgmt->pData->dnodeId)) != 0) { dError("failed to start udfd"); } diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c index eafa10aa32..add62d1edc 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c @@ -264,12 +264,14 @@ static void *dmCrashReportThreadFp(void *param) { } int32_t dmStartStatusThread(SDnodeMgmt *pMgmt) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->statusThread, &thAttr, dmStatusThreadFp, pMgmt) != 0) { - dError("failed to create status thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create status thread since %s", tstrerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -285,12 +287,14 @@ void dmStopStatusThread(SDnodeMgmt *pMgmt) { } int32_t dmStartNotifyThread(SDnodeMgmt *pMgmt) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->notifyThread, &thAttr, dmNotifyThreadFp, pMgmt) != 0) { - dError("failed to create notify thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create notify thread since %s", strerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -308,12 +312,14 @@ void dmStopNotifyThread(SDnodeMgmt *pMgmt) { } int32_t dmStartMonitorThread(SDnodeMgmt *pMgmt) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->monitorThread, &thAttr, dmMonitorThreadFp, pMgmt) != 0) { - dError("failed to create monitor thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create monitor thread since %s", tstrerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -322,12 +328,14 @@ int32_t dmStartMonitorThread(SDnodeMgmt *pMgmt) { } int32_t dmStartAuditThread(SDnodeMgmt *pMgmt) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->auditThread, &thAttr, dmAuditThreadFp, pMgmt) != 0) { - dError("failed to create audit thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create audit thread since %s", tstrerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -350,6 +358,7 @@ void dmStopAuditThread(SDnodeMgmt *pMgmt) { } int32_t dmStartCrashReportThread(SDnodeMgmt *pMgmt) { + int32_t code = 0; if (!tsEnableCrashReport) { return 0; } @@ -358,8 +367,9 @@ int32_t dmStartCrashReportThread(SDnodeMgmt *pMgmt) { taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->crashReportThread, &thAttr, dmCrashReportThreadFp, pMgmt) != 0) { - dError("failed to create crashReport thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create crashReport thread since %s", tstrerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -431,8 +441,8 @@ static void dmProcessMgmtQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) { code = dmProcessCreateEncryptKeyReq(pMgmt, pMsg); break; default: - terrno = TSDB_CODE_MSG_NOT_PROCESSED; - dGError("msg:%p, not processed in mgmt queue", pMsg); + code = TSDB_CODE_MSG_NOT_PROCESSED; + dGError("msg:%p, not processed in mgmt queue, reason:%s", pMsg, tstrerror(code)); break; } diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmFile.c b/source/dnode/mgmt/mgmt_mnode/src/mmFile.c index 27baa5ede5..b9b98eb09b 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmFile.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmFile.c @@ -21,31 +21,31 @@ static int32_t mmDecodeOption(SJson *pJson, SMnodeOpt *pOption) { int32_t code = 0; tjsonGetInt32ValueFromDouble(pJson, "deployed", pOption->deploy, code); - if (code < 0) return -1; + if (code < 0) return code; tjsonGetInt32ValueFromDouble(pJson, "selfIndex", pOption->selfIndex, code); - if (code < 0) return 0; + if (code < 0) return code; tjsonGetInt32ValueFromDouble(pJson, "lastIndex", pOption->lastIndex, code); - if (code < 0) return 0; + if (code < 0) return code; SJson *replicas = tjsonGetObjectItem(pJson, "replicas"); - if (replicas == NULL) return 0; + if (replicas == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; pOption->numOfTotalReplicas = tjsonGetArraySize(replicas); pOption->numOfReplicas = 0; for (int32_t i = 0; i < pOption->numOfTotalReplicas; ++i) { SJson *replica = tjsonGetArrayItem(replicas, i); - if (replica == NULL) return -1; + if (replica == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; SReplica *pReplica = pOption->replicas + i; tjsonGetInt32ValueFromDouble(replica, "id", pReplica->id, code); - if (code < 0) return -1; + if (code < 0) return code; code = tjsonGetStringValue(replica, "fqdn", pReplica->fqdn); - if (code < 0) return -1; + if (code < 0) return code; tjsonGetUInt16ValueFromDouble(replica, "port", pReplica->port, code); - if (code < 0) return -1; + if (code < 0) return code; tjsonGetInt32ValueFromDouble(replica, "role", pOption->nodeRoles[i], code); - if (code < 0) return -1; + if (code < 0) return code; if (pOption->nodeRoles[i] == TAOS_SYNC_ROLE_VOTER) { pOption->numOfReplicas++; } @@ -63,36 +63,41 @@ int32_t mmReadFile(const char *path, SMnodeOpt *pOption) { char *pData = NULL; SJson *pJson = NULL; char file[PATH_MAX] = {0}; - snprintf(file, sizeof(file), "%s%smnode.json", path, TD_DIRSEP); + + int32_t nBytes = snprintf(file, sizeof(file), "%s%smnode.json", path, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= sizeof(file)) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } if (taosStatFile(file, NULL, NULL, NULL) < 0) { - dInfo("mnode file:%s not exist", file); + dInfo("mnode file:%s not exist, reason:%s", file, tstrerror(TAOS_SYSTEM_ERROR(errno))); return 0; } pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to open mnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to open mnode file:%s since %s", file, tstrerror(code)); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to fstat mnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to fstat mnode file:%s since %s", file, tstrerror(code)); goto _OVER; } pData = taosMemoryMalloc(size + 1); if (pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, pData, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to read mnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to read mnode file:%s since %s", file, tstrerror(code)); goto _OVER; } @@ -100,12 +105,11 @@ int32_t mmReadFile(const char *path, SMnodeOpt *pOption) { pJson = tjsonParse(pData); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } - if (mmDecodeOption(pJson, pOption) < 0) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + if ((code = mmDecodeOption(pJson, pOption)) < 0) { goto _OVER; } @@ -118,37 +122,42 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - dError("failed to read mnode file:%s since %s", file, terrstr()); + dError("failed to read mnode file:%s since %s", file, tstrerror(code)); } return code; } static int32_t mmEncodeOption(SJson *pJson, const SMnodeOpt *pOption) { + int32_t code = 0; if (pOption->deploy && pOption->numOfTotalReplicas > 0) { - if (tjsonAddDoubleToObject(pJson, "selfIndex", pOption->selfIndex) < 0) return -1; + if ((code = tjsonAddDoubleToObject(pJson, "selfIndex", pOption->selfIndex)) < 0) return code; SJson *replicas = tjsonCreateArray(); - if (replicas == NULL) return -1; - if (tjsonAddItemToObject(pJson, "replicas", replicas) < 0) return -1; + if (replicas == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + if ((code = tjsonAddItemToObject(pJson, "replicas", replicas)) < 0) return code; for (int32_t i = 0; i < pOption->numOfTotalReplicas; ++i) { SJson *replica = tjsonCreateObject(); - if (replica == NULL) return -1; + if (replica == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } const SReplica *pReplica = pOption->replicas + i; - if (tjsonAddDoubleToObject(replica, "id", pReplica->id) < 0) return -1; - if (tjsonAddStringToObject(replica, "fqdn", pReplica->fqdn) < 0) return -1; - if (tjsonAddDoubleToObject(replica, "port", pReplica->port) < 0) return -1; - if (tjsonAddDoubleToObject(replica, "role", pOption->nodeRoles[i]) < 0) return -1; - if (tjsonAddItemToArray(replicas, replica) < 0) return -1; + if ((code = tjsonAddDoubleToObject(replica, "id", pReplica->id)) < 0) return code; + if ((code = tjsonAddStringToObject(replica, "fqdn", pReplica->fqdn)) < 0) return code; + if ((code = tjsonAddDoubleToObject(replica, "port", pReplica->port)) < 0) return code; + if ((code = tjsonAddDoubleToObject(replica, "role", pOption->nodeRoles[i])) < 0) return code; + if ((code = tjsonAddItemToArray(replicas, replica)) < 0) return code; } } - if (tjsonAddDoubleToObject(pJson, "lastIndex", pOption->lastIndex) < 0) return -1; + if ((code = tjsonAddDoubleToObject(pJson, "lastIndex", pOption->lastIndex)) < 0) return code; - if (tjsonAddDoubleToObject(pJson, "deployed", pOption->deploy) < 0) return -1; + if ((code = tjsonAddDoubleToObject(pJson, "deployed", pOption->deploy)) < 0) return code; - return 0; + return code; } int32_t mmWriteFile(const char *path, const SMnodeOpt *pOption) { @@ -158,28 +167,59 @@ int32_t mmWriteFile(const char *path, const SMnodeOpt *pOption) { TdFilePtr pFile = NULL; char file[PATH_MAX] = {0}; char realfile[PATH_MAX] = {0}; - snprintf(file, sizeof(file), "%s%smnode.json.bak", path, TD_DIRSEP); - snprintf(realfile, sizeof(realfile), "%s%smnode.json", path, TD_DIRSEP); - terrno = TSDB_CODE_OUT_OF_MEMORY; + int32_t nBytes = snprintf(file, sizeof(file), "%s%smnode.json.bak", path, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= sizeof(file)) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } + + nBytes = snprintf(realfile, sizeof(realfile), "%s%smnode.json", path, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= sizeof(realfile)) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } + + // terrno = TSDB_CODE_OUT_OF_MEMORY; pJson = tjsonCreateObject(); - if (pJson == NULL) goto _OVER; - if (mmEncodeOption(pJson, pOption) != 0) goto _OVER; + if (pJson == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } + + TAOS_CHECK_GOTO(mmEncodeOption(pJson, pOption), NULL, _OVER); + buffer = tjsonToString(pJson); - if (buffer == NULL) goto _OVER; - terrno = 0; + if (buffer == NULL) { + code = TSDB_CODE_INVALID_JSON_FORMAT; + goto _OVER; + } pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } int32_t len = strlen(buffer); - if (taosWriteFile(pFile, buffer, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, buffer, len) <= 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosFsyncFile(pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosCloseFile(&pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosRenameFile(file, realfile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - code = 0; dInfo("succeed to write mnode file:%s, deloyed:%d", realfile, pOption->deploy); _OVER: @@ -188,8 +228,7 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to write mnode file:%s since %s, deloyed:%d", realfile, terrstr(), pOption->deploy); + dError("failed to write mnode file:%s since %s, deloyed:%d", realfile, tstrerror(code), pOption->deploy); } return code; } diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c index 9b987b3237..067ce528d5 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmHandle.c @@ -26,11 +26,12 @@ void mmGetMnodeLoads(SMnodeMgmt *pMgmt, SMonMloadInfo *pInfo) { } int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; SDCreateMnodeReq createReq = {0}; if (tDeserializeSDCreateMnodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + return code; } SMnodeOpt option = {.deploy = true, @@ -56,43 +57,45 @@ int32_t mmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { } if (option.selfIndex == -1) { - terrno = TSDB_CODE_INVALID_OPTION; - dGError("failed to create mnode since %s, selfIndex is -1", terrstr()); - return -1; + code = TSDB_CODE_INVALID_OPTION; + dGError("failed to create mnode since %s, selfIndex is -1", tstrerror(code)); + return code; } - if (mmWriteFile(pInput->path, &option) != 0) { - dGError("failed to write mnode file since %s", terrstr()); - return -1; + if ((code = mmWriteFile(pInput->path, &option)) != 0) { + dGError("failed to write mnode file since %s", tstrerror(code)); + return code; } return 0; } int32_t mmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; + const STraceId *trace = &pMsg->info.traceId; SDDropMnodeReq dropReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + return code; } if (pInput->pData->dnodeId != 0 && dropReq.dnodeId != pInput->pData->dnodeId) { - terrno = TSDB_CODE_INVALID_OPTION; - dGError("failed to drop mnode since %s", terrstr()); + code = TSDB_CODE_INVALID_OPTION; + dGError("failed to drop mnode since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } SMnodeOpt option = {.deploy = false}; - if (mmWriteFile(pInput->path, &option) != 0) { - dGError("failed to write mnode file since %s", terrstr()); + if ((code = mmWriteFile(pInput->path, &option)) != 0) { + dGError("failed to write mnode file since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } tFreeSMCreateQnodeReq(&dropReq); - return 0; + return code; } SArray *mmGetMsgHandles() { diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmInt.c b/source/dnode/mgmt/mgmt_mnode/src/mmInt.c index d25c6438e8..57436adcd0 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmInt.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmInt.c @@ -25,9 +25,10 @@ static bool mmDeployRequired(const SMgmtInputOpt *pInput) { } static int32_t mmRequire(const SMgmtInputOpt *pInput, bool *required) { + int32_t code = 0; SMnodeOpt option = {0}; - if (mmReadFile(pInput->path, &option) != 0) { - return -1; + if ((code = mmReadFile(pInput->path, &option)) != 0) { + return code; } if (!option.deploy) { @@ -41,7 +42,7 @@ static int32_t mmRequire(const SMgmtInputOpt *pInput, bool *required) { dInfo("deploy mnode required. option deploy:%d", option.deploy); } - return 0; + return code; } static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, const SMgmtInputOpt *pInput, SMnodeOpt *pOption) { @@ -73,22 +74,31 @@ static void mmClose(SMnodeMgmt *pMgmt) { taosMemoryFree(pMgmt); } - +static int32_t mndOpenWrapper(const char *path, SMnodeOpt *opt, SMnode **pMnode) { + int32_t code = 0; + *pMnode = mndOpen(path, opt); + if (*pMnode == NULL) { + code = terrno; + } + ///*pMnode = pNode; + return code; +} static int32_t mmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { - if (walInit() != 0) { - dError("failed to init wal since %s", terrstr()); - return -1; + int32_t code = 0; + if ((code = walInit()) != 0) { + dError("failed to init wal since %s", tstrerror(code)); + return code; } - if (syncInit() != 0) { - dError("failed to init sync since %s", terrstr()); - return -1; + if ((code = syncInit()) != 0) { + dError("failed to init sync since %s", tstrerror(code)); + return code; } SMnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SMnodeMgmt)); if (pMgmt == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } pMgmt->pData = pInput->pData; @@ -100,10 +110,10 @@ static int32_t mmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { taosThreadRwlockInit(&pMgmt->lock, NULL); SMnodeOpt option = {0}; - if (mmReadFile(pMgmt->path, &option) != 0) { - dError("failed to read file since %s", terrstr()); + if ((code = mmReadFile(pMgmt->path, &option)) != 0) { + dError("failed to read file since %s", tstrerror(code)); mmClose(pMgmt); - return -1; + return code; } if (!option.deploy) { @@ -115,18 +125,18 @@ static int32_t mmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { mmBuildOptionForOpen(pMgmt, &option); } - pMgmt->pMnode = mndOpen(pMgmt->path, &option); - if (pMgmt->pMnode == NULL) { - dError("failed to open mnode since %s", terrstr()); + code = mndOpenWrapper(pMgmt->path, &option, &pMgmt->pMnode); + if (code != 0) { + dError("failed to open mnode since %s", tstrerror(code)); mmClose(pMgmt); - return -1; + return code; } tmsgReportStartup("mnode-impl", "initialized"); - if (mmStartWorker(pMgmt) != 0) { - dError("failed to start mnode worker since %s", terrstr()); + if ((code = mmStartWorker(pMgmt)) != 0) { + dError("failed to start mnode worker since %s", tstrerror(code)); mmClose(pMgmt); - return -1; + return code; } tmsgReportStartup("mnode-worker", "initialized"); @@ -134,9 +144,9 @@ static int32_t mmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { option.deploy = true; option.numOfReplicas = 0; option.numOfTotalReplicas = 0; - if (mmWriteFile(pMgmt->path, &option) != 0) { - dError("failed to write mnode file since %s", terrstr()); - return -1; + if ((code = mmWriteFile(pMgmt->path, &option)) != 0) { + dError("failed to write mnode file since %s", tstrerror(code)); + return code; } } @@ -160,13 +170,9 @@ static void mmStop(SMnodeMgmt *pMgmt) { mndStop(pMgmt->pMnode); } -static int32_t mmSyncIsCatchUp(SMnodeMgmt *pMgmt) { - return mndIsCatchUp(pMgmt->pMnode); -} +static int32_t mmSyncIsCatchUp(SMnodeMgmt *pMgmt) { return mndIsCatchUp(pMgmt->pMnode); } -static ESyncRole mmSyncGetRole(SMnodeMgmt *pMgmt) { - return mndGetRole(pMgmt->pMnode); -} +static ESyncRole mmSyncGetRole(SMnodeMgmt *pMgmt) { return mndGetRole(pMgmt->pMnode); } SMgmtFunc mmGetMgmtFunc() { SMgmtFunc mgmtFunc = {0}; diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmWorker.c b/source/dnode/mgmt/mgmt_mnode/src/mmWorker.c index e5c32f9a43..cce2a3568d 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmWorker.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmWorker.c @@ -186,7 +186,8 @@ int32_t mmPutMsgToQueue(SMnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { memcpy(pMsg, pRpc, sizeof(SRpcMsg)); pRpc->pCont = NULL; - dTrace("msg:%p, is created and will put into %s queue, type:%s len:%d", pMsg, pWorker->name, TMSG_INFO(pRpc->msgType), pRpc->contLen); + dTrace("msg:%p, is created and will put into %s queue, type:%s len:%d", pMsg, pWorker->name, TMSG_INFO(pRpc->msgType), + pRpc->contLen); int32_t code = mmPutMsgToWorker(pMgmt, pWorker, pMsg); if (code != 0) { dTrace("msg:%p, is freed", pMsg); @@ -197,6 +198,7 @@ int32_t mmPutMsgToQueue(SMnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { } int32_t mmStartWorker(SMnodeMgmt *pMgmt) { + int32_t code = 0; SSingleWorkerCfg qCfg = { .min = tsNumOfMnodeQueryThreads, .max = tsNumOfMnodeQueryThreads, @@ -205,9 +207,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .param = pMgmt, .poolType = QUERY_AUTO_QWORKER_POOL, }; - if (tSingleWorkerInit(&pMgmt->queryWorker, &qCfg) != 0) { - dError("failed to start mnode-query worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->queryWorker, &qCfg)) != 0) { + dError("failed to start mnode-query worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg fCfg = { @@ -217,9 +219,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessRpcMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->fetchWorker, &fCfg) != 0) { - dError("failed to start mnode-fetch worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->fetchWorker, &fCfg)) != 0) { + dError("failed to start mnode-fetch worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg rCfg = { @@ -229,9 +231,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessRpcMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->readWorker, &rCfg) != 0) { - dError("failed to start mnode-read worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->readWorker, &rCfg)) != 0) { + dError("failed to start mnode-read worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg wCfg = { @@ -241,9 +243,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessRpcMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->writeWorker, &wCfg) != 0) { - dError("failed to start mnode-write worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->writeWorker, &wCfg)) != 0) { + dError("failed to start mnode-write worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg sCfg = { @@ -253,9 +255,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessSyncMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->syncWorker, &sCfg) != 0) { - dError("failed to start mnode mnode-sync worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->syncWorker, &sCfg)) != 0) { + dError("failed to start mnode mnode-sync worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg scCfg = { @@ -265,9 +267,9 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessSyncMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->syncRdWorker, &scCfg) != 0) { - dError("failed to start mnode mnode-sync-rd worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->syncRdWorker, &scCfg)) != 0) { + dError("failed to start mnode mnode-sync-rd worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg arbCfg = { @@ -277,13 +279,13 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) { .fp = (FItem)mmProcessRpcMsg, .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->arbWorker, &arbCfg) != 0) { - dError("failed to start mnode mnode-arb worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->arbWorker, &arbCfg)) != 0) { + dError("failed to start mnode mnode-arb worker since %s", tstrerror(code)); + return code; } dDebug("mnode workers are initialized"); - return 0; + return code; } void mmStopWorker(SMnodeMgmt *pMgmt) { diff --git a/source/dnode/mgmt/mgmt_qnode/src/qmHandle.c b/source/dnode/mgmt/mgmt_qnode/src/qmHandle.c index 82876d6886..ae7125811e 100644 --- a/source/dnode/mgmt/mgmt_qnode/src/qmHandle.c +++ b/source/dnode/mgmt/mgmt_qnode/src/qmHandle.c @@ -30,24 +30,25 @@ void qmGetQnodeLoads(SQnodeMgmt *pMgmt, SQnodeLoad *pInfo) { } int32_t qmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; SDCreateQnodeReq createReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + return code; } if (pInput->pData->dnodeId != 0 && createReq.dnodeId != pInput->pData->dnodeId) { - terrno = TSDB_CODE_INVALID_OPTION; - dError("failed to create qnode since %s", terrstr()); + code = TSDB_CODE_INVALID_OPTION; + dError("failed to create qnode since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&createReq); - return -1; + return code; } bool deployed = true; - if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) { - dError("failed to write qnode file since %s", terrstr()); + if ((code = dmWriteFile(pInput->path, pInput->name, deployed)) != 0) { + dError("failed to write qnode file since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&createReq); - return -1; + return code; } tFreeSMCreateQnodeReq(&createReq); @@ -55,24 +56,25 @@ int32_t qmProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { } int32_t qmProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; SDDropQnodeReq dropReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + return code; } if (pInput->pData->dnodeId != 0 && dropReq.dnodeId != pInput->pData->dnodeId) { - terrno = TSDB_CODE_INVALID_OPTION; - dError("failed to drop qnode since %s", terrstr()); + code = TSDB_CODE_INVALID_OPTION; + dError("failed to drop qnode since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } bool deployed = false; - if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) { - dError("failed to write qnode file since %s", terrstr()); + if ((code = dmWriteFile(pInput->path, pInput->name, deployed)) != 0) { + dError("failed to write qnode file since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } tFreeSMCreateQnodeReq(&dropReq); diff --git a/source/dnode/mgmt/mgmt_qnode/src/qmInt.c b/source/dnode/mgmt/mgmt_qnode/src/qmInt.c index 8a042da078..553f39e5da 100644 --- a/source/dnode/mgmt/mgmt_qnode/src/qmInt.c +++ b/source/dnode/mgmt/mgmt_qnode/src/qmInt.c @@ -33,11 +33,18 @@ static void qmClose(SQnodeMgmt *pMgmt) { taosMemoryFree(pMgmt); } +static int32_t qndOpenWrapper(SQnodeOpt *pOption, SQnode **pQnode) { + *pQnode = qndOpen(pOption); + if (*pQnode == NULL) { + return terrno; + } + return 0; +} static int32_t qmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { + int32_t code = 0; SQnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SQnodeMgmt)); if (pMgmt == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } pMgmt->pData = pInput->pData; @@ -50,29 +57,30 @@ static int32_t qmOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { SQnodeOpt option = {0}; qmInitOption(pMgmt, &option); - pMgmt->pQnode = qndOpen(&option); - if (pMgmt->pQnode == NULL) { - dError("failed to open qnode since %s", terrstr()); + + code = qndOpenWrapper(&option, &pMgmt->pQnode); + if (code != 0) { + dError("failed to open qnode since %s", tstrerror(code)); qmClose(pMgmt); return -1; } tmsgReportStartup("qnode-impl", "initialized"); - if (udfcOpen() != 0) { + if ((code = udfcOpen()) != 0) { dError("qnode can not open udfc"); qmClose(pMgmt); - return -1; + return code; } - if (qmStartWorker(pMgmt) != 0) { - dError("failed to start qnode worker since %s", terrstr()); + if ((code = qmStartWorker(pMgmt)) != 0) { + dError("failed to start qnode worker since %s", tstrerror(code)); qmClose(pMgmt); - return -1; + return code; } tmsgReportStartup("qnode-worker", "initialized"); pOutput->pMgmt = pMgmt; - return 0; + return code; } SMgmtFunc qmGetMgmtFunc() { diff --git a/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c b/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c index 5c635ff5ea..57611b9e9c 100644 --- a/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c +++ b/source/dnode/mgmt/mgmt_qnode/src/qmWorker.c @@ -99,6 +99,8 @@ int32_t qmGetQueueSize(SQnodeMgmt *pMgmt, int32_t vgId, EQueueType qtype) { } int32_t qmStartWorker(SQnodeMgmt *pMgmt) { + int32_t code = 0; + SSingleWorkerCfg queryCfg = { .min = tsNumOfVnodeQueryThreads, .max = tsNumOfVnodeQueryThreads, @@ -108,9 +110,9 @@ int32_t qmStartWorker(SQnodeMgmt *pMgmt) { .poolType = QUERY_AUTO_QWORKER_POOL, }; - if (tSingleWorkerInit(&pMgmt->queryWorker, &queryCfg) != 0) { - dError("failed to start qnode-query worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->queryWorker, &queryCfg)) != 0) { + dError("failed to start qnode-query worker since %s", tstrerror(code)); + return code; } SSingleWorkerCfg fetchCfg = { @@ -121,13 +123,13 @@ int32_t qmStartWorker(SQnodeMgmt *pMgmt) { .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->fetchWorker, &fetchCfg) != 0) { - dError("failed to start qnode-fetch worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->fetchWorker, &fetchCfg)) != 0) { + dError("failed to start qnode-fetch worker since %s", tstrerror(code)); + return code; } dDebug("qnode workers are initialized"); - return 0; + return code; } void qmStopWorker(SQnodeMgmt *pMgmt) { diff --git a/source/dnode/mgmt/mgmt_snode/src/smHandle.c b/source/dnode/mgmt/mgmt_snode/src/smHandle.c index 5c2f54fd10..c2d146462a 100644 --- a/source/dnode/mgmt/mgmt_snode/src/smHandle.c +++ b/source/dnode/mgmt/mgmt_snode/src/smHandle.c @@ -19,24 +19,25 @@ void smGetMonitorInfo(SSnodeMgmt *pMgmt, SMonSmInfo *smInfo) {} int32_t smProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; SDCreateSnodeReq createReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + return code; } if (pInput->pData->dnodeId != 0 && createReq.dnodeId != pInput->pData->dnodeId) { - terrno = TSDB_CODE_INVALID_OPTION; - dError("failed to create snode since %s", terrstr()); + code = TSDB_CODE_INVALID_OPTION; + dError("failed to create snode since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&createReq); - return -1; + return code; } bool deployed = true; - if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) { - dError("failed to write snode file since %s", terrstr()); + if ((code = dmWriteFile(pInput->path, pInput->name, deployed)) != 0) { + dError("failed to write snode file since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&createReq); - return -1; + return code; } tFreeSMCreateQnodeReq(&createReq); @@ -44,24 +45,26 @@ int32_t smProcessCreateReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { } int32_t smProcessDropReq(const SMgmtInputOpt *pInput, SRpcMsg *pMsg) { + int32_t code = 0; SDDropSnodeReq dropReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pMsg->pCont, pMsg->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + + return code; } if (pInput->pData->dnodeId != 0 && dropReq.dnodeId != pInput->pData->dnodeId) { - terrno = TSDB_CODE_INVALID_OPTION; - dError("failed to drop snode since %s", terrstr()); + code = TSDB_CODE_INVALID_OPTION; + dError("failed to drop snode since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } bool deployed = false; - if (dmWriteFile(pInput->path, pInput->name, deployed) != 0) { - dError("failed to write snode file since %s", terrstr()); + if ((code = dmWriteFile(pInput->path, pInput->name, deployed)) != 0) { + dError("failed to write snode file since %s", tstrerror(code)); tFreeSMCreateQnodeReq(&dropReq); - return -1; + return code; } tFreeSMCreateQnodeReq(&dropReq); diff --git a/source/dnode/mgmt/mgmt_snode/src/smInt.c b/source/dnode/mgmt/mgmt_snode/src/smInt.c index 56744e4654..6bc0131e63 100644 --- a/source/dnode/mgmt/mgmt_snode/src/smInt.c +++ b/source/dnode/mgmt/mgmt_snode/src/smInt.c @@ -33,12 +33,19 @@ static void smClose(SSnodeMgmt *pMgmt) { taosMemoryFree(pMgmt); } - +int32_t sndOpenWrapper(const char *path, SSnodeOpt *pOption, SSnode **pNode) { + *pNode = sndOpen(path, pOption); + if (*pNode == NULL) { + return terrno; + } + return 0; +} int32_t smOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { + int32_t code = 0; SSnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SSnodeMgmt)); if (pMgmt == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } pMgmt->pData = pInput->pData; @@ -50,35 +57,34 @@ int32_t smOpen(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { SSnodeOpt option = {0}; smInitOption(pMgmt, &option); - pMgmt->pSnode = sndOpen(pMgmt->path, &option); - if (pMgmt->pSnode == NULL) { - dError("failed to open snode since %s", terrstr()); + + code = sndOpenWrapper(pMgmt->path, &option, &pMgmt->pSnode); + if (code != 0) { + dError("failed to open snode since %s", tstrerror(code)); smClose(pMgmt); - return -1; + return code; } tmsgReportStartup("snode-impl", "initialized"); - if (smStartWorker(pMgmt) != 0) { - dError("failed to start snode worker since %s", terrstr()); + if ((code = smStartWorker(pMgmt)) != 0) { + dError("failed to start snode worker since %s", tstrerror(code)); smClose(pMgmt); - return -1; + return code; } tmsgReportStartup("snode-worker", "initialized"); - if (udfcOpen() != 0) { - dError("failed to open udfc in snode"); + if ((code = udfcOpen()) != 0) { + dError("failed to open udfc in snode since:%s", tstrerror(code)); smClose(pMgmt); - return -1; + return code; } pOutput->pMgmt = pMgmt; return 0; } -static int32_t smStartSnodes(SSnodeMgmt *pMgmt) { - return sndInit(pMgmt->pSnode); -} +static int32_t smStartSnodes(SSnodeMgmt *pMgmt) { return sndInit(pMgmt->pSnode); } SMgmtFunc smGetMgmtFunc() { SMgmtFunc mgmtFunc = {0}; diff --git a/source/dnode/mgmt/mgmt_snode/src/smWorker.c b/source/dnode/mgmt/mgmt_snode/src/smWorker.c index 1c57685414..abae463ec3 100644 --- a/source/dnode/mgmt/mgmt_snode/src/smWorker.c +++ b/source/dnode/mgmt/mgmt_snode/src/smWorker.c @@ -68,17 +68,18 @@ static void smProcessStreamQueue(SQueueInfo *pInfo, SRpcMsg *pMsg) { } int32_t smStartWorker(SSnodeMgmt *pMgmt) { + int32_t code = 0; pMgmt->writeWroker = taosArrayInit(0, sizeof(SMultiWorker *)); if (pMgmt->writeWroker == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } for (int32_t i = 0; i < tsNumOfSnodeWriteThreads; i++) { SMultiWorker *pWriteWorker = taosMemoryMalloc(sizeof(SMultiWorker)); if (pWriteWorker == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } SMultiWorkerCfg cfg = { @@ -87,13 +88,13 @@ int32_t smStartWorker(SSnodeMgmt *pMgmt) { .fp = smProcessWriteQueue, .param = pMgmt, }; - if (tMultiWorkerInit(pWriteWorker, &cfg) != 0) { - dError("failed to start snode-unique worker since %s", terrstr()); - return -1; + if ((code = tMultiWorkerInit(pWriteWorker, &cfg)) != 0) { + dError("failed to start snode-unique worker since %s", tstrerror(code)); + return code; } if (taosArrayPush(pMgmt->writeWroker, &pWriteWorker) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + return code; } } @@ -105,13 +106,13 @@ int32_t smStartWorker(SSnodeMgmt *pMgmt) { .param = pMgmt, }; - if (tSingleWorkerInit(&pMgmt->streamWorker, &cfg)) { - dError("failed to start snode shared-worker since %s", terrstr()); - return -1; + if ((code = tSingleWorkerInit(&pMgmt->streamWorker, &cfg)) != 0) { + dError("failed to start snode shared-worker since %s", tstrerror(code)); + return code; } dDebug("snode workers are initialized"); - return 0; + return code; } void smStopWorker(SSnodeMgmt *pMgmt) { @@ -126,21 +127,23 @@ void smStopWorker(SSnodeMgmt *pMgmt) { } int32_t smPutMsgToQueue(SSnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { + int32_t code = 0; SRpcMsg *pMsg = taosAllocateQitem(sizeof(SRpcMsg), RPC_QITEM, pRpc->contLen); if (pMsg == NULL) { rpcFreeCont(pRpc->pCont); pRpc->pCont = NULL; - return -1; + return code = terrno; } SSnode *pSnode = pMgmt->pSnode; if (pSnode == NULL) { - dError("msg:%p failed to put into snode queue since %s, type:%s qtype:%d len:%d", pMsg, terrstr(), + code = terrno; + dError("msg:%p failed to put into snode queue since %s, type:%s qtype:%d len:%d", pMsg, tstrerror(code), TMSG_INFO(pMsg->msgType), qtype, pRpc->contLen); taosFreeQitem(pMsg); rpcFreeCont(pRpc->pCont); pRpc->pCont = NULL; - return -1; + return code; } SMsgHead *pHead = pRpc->pCont; @@ -151,48 +154,44 @@ int32_t smPutMsgToQueue(SSnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { switch (qtype) { case STREAM_QUEUE: - smPutNodeMsgToStreamQueue(pMgmt, pMsg); + code = smPutNodeMsgToStreamQueue(pMgmt, pMsg); break; case WRITE_QUEUE: - smPutNodeMsgToWriteQueue(pMgmt, pMsg); + code = smPutNodeMsgToWriteQueue(pMgmt, pMsg); break; default: - terrno = TSDB_CODE_INVALID_PARA; + code = TSDB_CODE_INVALID_PARA; rpcFreeCont(pMsg->pCont); taosFreeQitem(pMsg); - return -1; + return code; } - return 0; + return code; } int32_t smPutNodeMsgToMgmtQueue(SSnodeMgmt *pMgmt, SRpcMsg *pMsg) { + int32_t code = 0; SMultiWorker *pWorker = taosArrayGetP(pMgmt->writeWroker, 0); if (pWorker == NULL) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } dTrace("msg:%p, put into worker %s", pMsg, pWorker->name); - taosWriteQitem(pWorker->queue, pMsg); - return 0; + return taosWriteQitem(pWorker->queue, pMsg); } int32_t smPutNodeMsgToWriteQueue(SSnodeMgmt *pMgmt, SRpcMsg *pMsg) { SMultiWorker *pWorker = taosArrayGetP(pMgmt->writeWroker, 0); if (pWorker == NULL) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } dTrace("msg:%p, put into worker %s", pMsg, pWorker->name); - taosWriteQitem(pWorker->queue, pMsg); - return 0; + return taosWriteQitem(pWorker->queue, pMsg); } int32_t smPutNodeMsgToStreamQueue(SSnodeMgmt *pMgmt, SRpcMsg *pMsg) { SSingleWorker *pWorker = &pMgmt->streamWorker; dTrace("msg:%p, put into worker %s", pMsg, pWorker->name); - taosWriteQitem(pWorker->queue, pMsg); - return 0; + return taosWriteQitem(pWorker->queue, pMsg); } diff --git a/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h b/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h index c3b4bc0710..6b01b92445 100644 --- a/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h +++ b/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h @@ -54,24 +54,24 @@ typedef struct { } SWrapperCfg; typedef struct { - int32_t vgId; - int32_t vgVersion; - int32_t refCount; - int8_t dropped; - int8_t failed; - int8_t disable; - int32_t diskPrimary; - int32_t toVgId; - char *path; - SVnode *pImpl; - SMultiWorker pWriteW; - SMultiWorker pSyncW; - SMultiWorker pSyncRdW; - SMultiWorker pApplyW; - STaosQueue *pQueryQ; - STaosQueue *pStreamQ; - STaosQueue *pFetchQ; - STaosQueue *pMultiMgmQ; + int32_t vgId; + int32_t vgVersion; + int32_t refCount; + int8_t dropped; + int8_t failed; + int8_t disable; + int32_t diskPrimary; + int32_t toVgId; + char *path; + SVnode *pImpl; + SMultiWorker pWriteW; + SMultiWorker pSyncW; + SMultiWorker pSyncRdW; + SMultiWorker pApplyW; + STaosQueue *pQueryQ; + STaosQueue *pStreamQ; + STaosQueue *pFetchQ; + STaosQueue *pMultiMgmQ; } SVnodeObj; typedef struct { @@ -107,9 +107,9 @@ int32_t vmProcessCheckLearnCatchupReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg); int32_t vmProcessArbHeartBeatReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg); // vmFile.c -int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t *numOfVnodes); -int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt); -SVnodeObj **vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes); +int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t *numOfVnodes); +int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt); +int32_t vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes, SVnodeObj ***ppVnodes); // vmWorker.c int32_t vmStartWorker(SVnodeMgmt *pMgmt); diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmFile.c b/source/dnode/mgmt/mgmt_vnode/src/vmFile.c index 53139330a3..47ae2a1395 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmFile.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmFile.c @@ -19,12 +19,16 @@ #define MAX_CONTENT_LEN 2 * 1024 * 1024 -SVnodeObj **vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes) { +int32_t vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes, SVnodeObj ***ppVnodes) { taosThreadRwlockRdlock(&pMgmt->lock); int32_t num = 0; int32_t size = taosHashGetSize(pMgmt->hash); SVnodeObj **pVnodes = taosMemoryCalloc(size, sizeof(SVnodeObj *)); + if (pVnodes == NULL) { + taosThreadRwlockUnlock(&pMgmt->lock); + return TSDB_CODE_OUT_OF_MEMORY; + } void *pIter = taosHashIterate(pMgmt->hash, NULL); while (pIter) { @@ -42,8 +46,9 @@ SVnodeObj **vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes) { taosThreadRwlockUnlock(&pMgmt->lock); *numOfVnodes = num; + *ppVnodes = pVnodes; - return pVnodes; + return 0; } static int32_t vmDecodeVnodeList(SJson *pJson, SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t *numOfVnodes) { @@ -52,29 +57,32 @@ static int32_t vmDecodeVnodeList(SJson *pJson, SVnodeMgmt *pMgmt, SWrapperCfg ** *ppCfgs = NULL; SJson *vnodes = tjsonGetObjectItem(pJson, "vnodes"); - if (vnodes == NULL) return -1; + if (vnodes == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; int32_t vnodesNum = cJSON_GetArraySize(vnodes); if (vnodesNum > 0) { pCfgs = taosMemoryCalloc(vnodesNum, sizeof(SWrapperCfg)); - if (pCfgs == NULL) return -1; + if (pCfgs == NULL) return TSDB_CODE_OUT_OF_MEMORY; } for (int32_t i = 0; i < vnodesNum; ++i) { SJson *vnode = tjsonGetArrayItem(vnodes, i); - if (vnode == NULL) goto _OVER; + if (vnode == NULL) { + code = TSDB_CODE_INVALID_JSON_FORMAT; + goto _OVER; + } SWrapperCfg *pCfg = &pCfgs[i]; tjsonGetInt32ValueFromDouble(vnode, "vgId", pCfg->vgId, code); - if (code < 0) goto _OVER; + if (code != 0) goto _OVER; tjsonGetInt32ValueFromDouble(vnode, "dropped", pCfg->dropped, code); - if (code < 0) goto _OVER; + if (code != 0) goto _OVER; tjsonGetInt32ValueFromDouble(vnode, "vgVersion", pCfg->vgVersion, code); - if (code < 0) goto _OVER; + if (code != 0) goto _OVER; tjsonGetInt32ValueFromDouble(vnode, "diskPrimary", pCfg->diskPrimary, code); - if (code < 0) goto _OVER; + if (code != 0) goto _OVER; tjsonGetInt32ValueFromDouble(vnode, "toVgId", pCfg->toVgId, code); - if (code < 0) goto _OVER; + if (code != 0) goto _OVER; snprintf(pCfg->path, sizeof(pCfg->path), "%s%svnode%d", pMgmt->path, TD_DIRSEP, pCfg->vgId); } @@ -98,33 +106,35 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t snprintf(file, sizeof(file), "%s%svnodes.json", pMgmt->path, TD_DIRSEP); if (taosStatFile(file, NULL, NULL, NULL) < 0) { - dInfo("vnode file:%s not exist", file); - return 0; + code = TAOS_SYSTEM_ERROR(errno); + dInfo("vnode file:%s not exist, reason:%s", file, tstrerror(code)); + code = 0; + return code; } pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to open vnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to open vnode file:%s since %s", file, tstrerror(code)); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to fstat mnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to fstat mnode file:%s since %s", file, tstrerror(code)); goto _OVER; } pData = taosMemoryMalloc(size + 1); if (pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, pData, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to read vnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to read vnode file:%s since %s", file, tstrerror(code)); goto _OVER; } @@ -132,12 +142,12 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t pJson = tjsonParse(pData); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } if (vmDecodeVnodeList(pJson, pMgmt, ppCfgs, numOfVnodes) < 0) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } @@ -150,28 +160,36 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - dError("failed to read vnode file:%s since %s", file, terrstr()); + dError("failed to read vnode file:%s since %s", file, tstrerror(code)); } return code; } static int32_t vmEncodeVnodeList(SJson *pJson, SVnodeObj **ppVnodes, int32_t numOfVnodes) { - SJson *vnodes = tjsonCreateArray(); - if (vnodes == NULL) return -1; - if (tjsonAddItemToObject(pJson, "vnodes", vnodes) < 0) return -1; + int32_t code = 0; + SJson *vnodes = tjsonCreateArray(); + if (vnodes == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + if ((code = tjsonAddItemToObject(pJson, "vnodes", vnodes)) < 0) { + tjsonDelete(vnodes); + return code; + }; for (int32_t i = 0; i < numOfVnodes; ++i) { SVnodeObj *pVnode = ppVnodes[i]; if (pVnode == NULL) continue; SJson *vnode = tjsonCreateObject(); - if (vnode == NULL) return -1; - if (tjsonAddDoubleToObject(vnode, "vgId", pVnode->vgId) < 0) return -1; - if (tjsonAddDoubleToObject(vnode, "dropped", pVnode->dropped) < 0) return -1; - if (tjsonAddDoubleToObject(vnode, "vgVersion", pVnode->vgVersion) < 0) return -1; - if (tjsonAddDoubleToObject(vnode, "diskPrimary", pVnode->diskPrimary) < 0) return -1; - if (pVnode->toVgId && tjsonAddDoubleToObject(vnode, "toVgId", pVnode->toVgId) < 0) return -1; - if (tjsonAddItemToArray(vnodes, vnode) < 0) return -1; + if (vnode == NULL) return TSDB_CODE_OUT_OF_MEMORY; + if ((code = tjsonAddDoubleToObject(vnode, "vgId", pVnode->vgId)) < 0) return code; + if ((code = tjsonAddDoubleToObject(vnode, "dropped", pVnode->dropped)) < 0) return code; + if ((code = tjsonAddDoubleToObject(vnode, "vgVersion", pVnode->vgVersion)) < 0) return code; + if ((code = tjsonAddDoubleToObject(vnode, "diskPrimary", pVnode->diskPrimary)) < 0) return code; + if (pVnode->toVgId) { + if ((code = tjsonAddDoubleToObject(vnode, "toVgId", pVnode->toVgId)) < 0) return code; + } + if ((code = tjsonAddItemToArray(vnodes, vnode)) < 0) return code; } return 0; @@ -185,30 +203,60 @@ int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt) { SVnodeObj **ppVnodes = NULL; char file[PATH_MAX] = {0}; char realfile[PATH_MAX] = {0}; - snprintf(file, sizeof(file), "%s%svnodes_tmp.json", pMgmt->path, TD_DIRSEP); - snprintf(realfile, sizeof(realfile), "%s%svnodes.json", pMgmt->path, TD_DIRSEP); + + int32_t nBytes = snprintf(file, sizeof(file), "%s%svnodes_tmp.json", pMgmt->path, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= sizeof(file)) { + return TSDB_CODE_OUT_OF_RANGE; + } + + nBytes = snprintf(realfile, sizeof(realfile), "%s%svnodes.json", pMgmt->path, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= sizeof(realfile)) { + return TSDB_CODE_OUT_OF_RANGE; + } int32_t numOfVnodes = 0; - ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes); - if (ppVnodes == NULL) goto _OVER; + code = vmGetVnodeListFromHash(pMgmt, &numOfVnodes, &ppVnodes); + if (code) goto _OVER; - terrno = TSDB_CODE_OUT_OF_MEMORY; + // terrno = TSDB_CODE_OUT_OF_MEMORY; pJson = tjsonCreateObject(); - if (pJson == NULL) goto _OVER; - if (vmEncodeVnodeList(pJson, ppVnodes, numOfVnodes) != 0) goto _OVER; + if (pJson == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } + if ((code = vmEncodeVnodeList(pJson, ppVnodes, numOfVnodes)) != 0) goto _OVER; + buffer = tjsonToString(pJson); - if (buffer == NULL) goto _OVER; - terrno = 0; + if (buffer == NULL) { + code = TSDB_CODE_INVALID_JSON_FORMAT; + goto _OVER; + } pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } int32_t len = strlen(buffer); - if (taosWriteFile(pFile, buffer, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, buffer, len) <= 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosFsyncFile(pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + code = taosCloseFile(&pFile); + if (code != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosRenameFile(file, realfile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } code = 0; dInfo("succeed to write vnodes file:%s, vnodes:%d", realfile, numOfVnodes); @@ -228,8 +276,7 @@ _OVER: } if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to write vnodes file:%s since %s, vnodes:%d", realfile, terrstr(), numOfVnodes); + dError("failed to write vnodes file:%s since %s, vnodes:%d", realfile, tstrerror(code), numOfVnodes); } return code; } diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c index 0669956fb8..1e014e0df6 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmHandle.c @@ -256,8 +256,7 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { char path[TSDB_FILENAME_LEN] = {0}; if (tDeserializeSCreateVnodeReq(pMsg->pCont, pMsg->contLen, &req) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; + return TSDB_CODE_INVALID_MSG; } if (req.learnerReplica == 0) { @@ -298,25 +297,24 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { } if (pReplica->id != pMgmt->pData->dnodeId || pReplica->port != tsServerPort || strcmp(pReplica->fqdn, tsLocalFqdn) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - dError("vgId:%d, dnodeId:%d ep:%s:%u not matched with local dnode", req.vgId, pReplica->id, pReplica->fqdn, - pReplica->port); - return -1; + code = TSDB_CODE_INVALID_MSG; + dError("vgId:%d, dnodeId:%d ep:%s:%u not matched with local dnode, reason:%s", req.vgId, pReplica->id, + pReplica->fqdn, pReplica->port, tstrerror(code)); + return code; } if (req.encryptAlgorithm == DND_CA_SM4) { if (strlen(tsEncryptKey) == 0) { - terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; - dError("vgId:%d, failed to create vnode since encrypt key is empty", req.vgId); - return -1; + code = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; + dError("vgId:%d, failed to create vnode since encrypt key is empty, reason:%s", req.vgId, tstrerror(code)); + return code; } } vmGenerateVnodeCfg(&req, &vnodeCfg); - if (vmTsmaAdjustDays(&vnodeCfg, &req) < 0) { - dError("vgId:%d, failed to adjust tsma days since %s", req.vgId, terrstr()); - code = terrno != 0 ? terrno : -1; + if ((code = vmTsmaAdjustDays(&vnodeCfg, &req)) < 0) { + dError("vgId:%d, failed to adjust tsma days since %s", req.vgId, tstrerror(code)); goto _OVER; } @@ -327,8 +325,7 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { dError("vgId:%d, already exist", req.vgId); tFreeSCreateVnodeReq(&req); vmReleaseVnode(pMgmt, pVnode); - terrno = TSDB_CODE_VND_ALREADY_EXIST; - code = terrno; + code = TSDB_CODE_VND_ALREADY_EXIST; return 0; } diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c index aa9b009761..41ee392b4d 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c @@ -33,6 +33,7 @@ int32_t vmGetPrimaryDisk(SVnodeMgmt *pMgmt, int32_t vgId) { } int32_t vmAllocPrimaryDisk(SVnodeMgmt *pMgmt, int32_t vgId) { + int32_t code = 0; STfs *pTfs = pMgmt->pTfs; int32_t diskId = 0; if (!pTfs) { @@ -59,7 +60,12 @@ int32_t vmAllocPrimaryDisk(SVnodeMgmt *pMgmt, int32_t vgId) { // alloc int32_t disks[TFS_MAX_DISKS_PER_TIER] = {0}; int32_t numOfVnodes = 0; - SVnodeObj **ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes); + SVnodeObj **ppVnodes = NULL; + + code = vmGetVnodeListFromHash(pMgmt, &numOfVnodes, &ppVnodes); + if (code != 0) { + return code; + } for (int32_t v = 0; v < numOfVnodes; v++) { SVnodeObj *pVnode = ppVnodes[v]; disks[pVnode->diskPrimary] += 1; @@ -436,6 +442,7 @@ static void *vmCloseVnodeInThread(void *param) { } static void vmCloseVnodes(SVnodeMgmt *pMgmt) { + int32_t code = 0; dInfo("start to close all vnodes"); tSingleWorkerCleanup(&pMgmt->mgmtWorker); dInfo("vnodes mgmt worker is stopped"); @@ -443,7 +450,12 @@ static void vmCloseVnodes(SVnodeMgmt *pMgmt) { dInfo("vnodes multiple mgmt worker is stopped"); int32_t numOfVnodes = 0; - SVnodeObj **ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes); + SVnodeObj **ppVnodes = NULL; + code = vmGetVnodeListFromHash(pMgmt, &numOfVnodes, &ppVnodes); + if (code != 0) { + dError("failed to get vnode list since %s", tstrerror(code)); + return; + } int32_t threadNum = tsNumOfCores / 2; if (threadNum < 1) threadNum = 1; @@ -513,8 +525,14 @@ static void vmCleanup(SVnodeMgmt *pMgmt) { } static void vmCheckSyncTimeout(SVnodeMgmt *pMgmt) { + int32_t code = 0; int32_t numOfVnodes = 0; - SVnodeObj **ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes); + SVnodeObj **ppVnodes = NULL; + code = vmGetVnodeListFromHash(pMgmt, &numOfVnodes, &ppVnodes); + if (code != 0) { + dError("failed to get vnode list since %s", tstrerror(code)); + return; + } if (ppVnodes != NULL) { for (int32_t i = 0; i < numOfVnodes; ++i) { @@ -549,12 +567,14 @@ static void *vmThreadFp(void *param) { } static int32_t vmInitTimer(SVnodeMgmt *pMgmt) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pMgmt->thread, &thAttr, vmThreadFp, pMgmt) != 0) { - dError("failed to create vnode timer thread since %s", strerror(errno)); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to create vnode timer thread since %s", tstrerror(code)); + return code; } taosThreadAttrDestroy(&thAttr); @@ -573,7 +593,10 @@ static int32_t vmInit(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { int32_t code = -1; SVnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SVnodeMgmt)); - if (pMgmt == NULL) goto _OVER; + if (pMgmt == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } pMgmt->pData = pInput->pData; pMgmt->path = pInput->path; @@ -582,8 +605,18 @@ static int32_t vmInit(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { pMgmt->msgCb.putToQueueFp = (PutToQueueFp)vmPutRpcMsgToQueue; pMgmt->msgCb.qsizeFp = (GetQueueSizeFp)vmGetQueueSize; pMgmt->msgCb.mgmt = pMgmt; - taosThreadRwlockInit(&pMgmt->lock, NULL); - taosThreadMutexInit(&pMgmt->createLock, NULL); + + code = taosThreadRwlockInit(&pMgmt->lock, NULL); + if (code != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + + code = taosThreadMutexInit(&pMgmt->createLock, NULL); + if (code != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } pMgmt->pTfs = pInput->pTfs; if (pMgmt->pTfs == NULL) { @@ -592,38 +625,39 @@ static int32_t vmInit(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { } tmsgReportStartup("vnode-tfs", "initialized"); - if (walInit() != 0) { - dError("failed to init wal since %s", terrstr()); + if ((code = walInit()) != 0) { + dError("failed to init wal since %s", tstrerror(code)); goto _OVER; } + tmsgReportStartup("vnode-wal", "initialized"); - if (syncInit() != 0) { - dError("failed to open sync since %s", terrstr()); + if ((code = syncInit()) != 0) { + dError("failed to open sync since %s", tstrerror(code)); goto _OVER; } tmsgReportStartup("vnode-sync", "initialized"); - if (vnodeInit(tsNumOfCommitThreads) != 0) { - dError("failed to init vnode since %s", terrstr()); + if ((code = vnodeInit(tsNumOfCommitThreads)) != 0) { + dError("failed to init vnode since %s", tstrerror(code)); goto _OVER; } tmsgReportStartup("vnode-commit", "initialized"); - if (vmStartWorker(pMgmt) != 0) { - dError("failed to init workers since %s", terrstr()); + if ((code = vmStartWorker(pMgmt)) != 0) { + dError("failed to init workers since %s", tstrerror(code)); goto _OVER; } tmsgReportStartup("vnode-worker", "initialized"); - if (vmOpenVnodes(pMgmt) != 0) { - dError("failed to open all vnodes since %s", terrstr()); + if ((code = vmOpenVnodes(pMgmt)) != 0) { + dError("failed to open all vnodes since %s", tstrerror(code)); goto _OVER; } tmsgReportStartup("vnode-vnodes", "initialized"); - if (udfcOpen() != 0) { - dError("failed to open udfc in vnode"); + if ((code = udfcOpen()) != 0) { + dError("failed to open udfc in vnode since %s", tstrerror(code)); goto _OVER; } @@ -633,7 +667,7 @@ _OVER: if (code == 0) { pOutput->pMgmt = pMgmt; } else { - dError("failed to init vnodes-mgmt since %s", terrstr()); + dError("failed to init vnodes-mgmt since %s", tstrerror(code)); vmCleanup(pMgmt); } @@ -683,18 +717,32 @@ static void *vmRestoreVnodeInThread(void *param) { } static int32_t vmStartVnodes(SVnodeMgmt *pMgmt) { + int32_t code = 0; int32_t numOfVnodes = 0; - SVnodeObj **ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes); + SVnodeObj **ppVnodes = NULL; + code = vmGetVnodeListFromHash(pMgmt, &numOfVnodes, &ppVnodes); + if (code != 0) { + dError("failed to get vnode list since %s", tstrerror(code)); + return code; + } int32_t threadNum = tsNumOfCores / 2; if (threadNum < 1) threadNum = 1; int32_t vnodesPerThread = numOfVnodes / threadNum + 1; SVnodeThread *threads = taosMemoryCalloc(threadNum, sizeof(SVnodeThread)); + if (threads == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + for (int32_t t = 0; t < threadNum; ++t) { threads[t].threadIndex = t; threads[t].pMgmt = pMgmt; threads[t].ppVnodes = taosMemoryCalloc(vnodesPerThread, sizeof(SVnode *)); + if (threads[t].ppVnodes == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + break; + } } for (int32_t v = 0; v < numOfVnodes; ++v) { @@ -717,6 +765,7 @@ static int32_t vmStartVnodes(SVnodeMgmt *pMgmt) { taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); if (taosThreadCreate(&pThread->thread, &thAttr, vmRestoreVnodeInThread, pThread) != 0) { dError("thread:%d, failed to create thread to restore vnode since %s", pThread->threadIndex, strerror(errno)); + ASSERT(errno == 0); } taosThreadAttrDestroy(&thAttr); @@ -742,6 +791,14 @@ static int32_t vmStartVnodes(SVnodeMgmt *pMgmt) { } return vmInitTimer(pMgmt); + +_exit: + for (int32_t t = 0; t < threadNum; ++t) { + SVnodeThread *pThread = &threads[t]; + taosMemoryFree(pThread->ppVnodes); + } + taosMemoryFree(threads); + return code; } static void vmStop(SVnodeMgmt *pMgmt) { vmCleanupTimer(pMgmt); } diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c b/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c index 0415340be9..c78e8289a9 100644 --- a/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c +++ b/source/dnode/mgmt/mgmt_vnode/src/vmWorker.c @@ -200,26 +200,33 @@ static bool vmDataSpaceSufficient(SVnodeObj *pVnode) { } } +static int32_t vmAcquireVnodeWrapper(SVnodeMgmt *pMgt, int32_t vgId, SVnodeObj **pNode) { + *pNode = vmAcquireVnode(pMgt, vgId); + if (*pNode == NULL) { + return terrno; + } + return 0; +} static int32_t vmPutMsgToQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg, EQueueType qtype) { + int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; if (pMsg->contLen < sizeof(SMsgHead)) { dGError("invalid rpc msg with no msg head at pCont. pMsg:%p, type:%s, contLen:%d", pMsg, TMSG_INFO(pMsg->msgType), pMsg->contLen); - return -1; + return TSDB_CODE_INVALID_MSG; } SMsgHead *pHead = pMsg->pCont; - int32_t code = 0; pHead->contLen = ntohl(pHead->contLen); pHead->vgId = ntohl(pHead->vgId); - SVnodeObj *pVnode = vmAcquireVnode(pMgmt, pHead->vgId); - if (pVnode == NULL) { + SVnodeObj *pVnode = NULL; + code = vmAcquireVnodeWrapper(pMgmt, pHead->vgId, &pVnode); + if (code != 0) { dGDebug("vgId:%d, msg:%p failed to put into vnode queue since %s, type:%s qtype:%d contLen:%d", pHead->vgId, pMsg, - terrstr(), TMSG_INFO(pMsg->msgType), qtype, pHead->contLen); - terrno = (terrno != 0) ? terrno : -1; - return terrno; + tstrerror(code), TMSG_INFO(pMsg->msgType), qtype, pHead->contLen); + return code; } switch (qtype) { @@ -234,49 +241,45 @@ static int32_t vmPutMsgToQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg, EQueueType qtyp break; case STREAM_QUEUE: dGTrace("vgId:%d, msg:%p put into vnode-stream queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pStreamQ, pMsg); + code = taosWriteQitem(pVnode->pStreamQ, pMsg); break; case FETCH_QUEUE: dGTrace("vgId:%d, msg:%p put into vnode-fetch queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pFetchQ, pMsg); + code = taosWriteQitem(pVnode->pFetchQ, pMsg); break; case WRITE_QUEUE: if (!vmDataSpaceSufficient(pVnode)) { - terrno = TSDB_CODE_NO_ENOUGH_DISKSPACE; - code = terrno; + code = TSDB_CODE_NO_ENOUGH_DISKSPACE; dError("vgId:%d, msg:%p put into vnode-write queue failed since %s", pVnode->vgId, pMsg, tstrerror(code)); break; } if (pMsg->msgType == TDMT_VND_SUBMIT && (grantCheck(TSDB_GRANT_STORAGE) != TSDB_CODE_SUCCESS)) { - terrno = TSDB_CODE_VND_NO_WRITE_AUTH; - code = terrno; + code = TSDB_CODE_VND_NO_WRITE_AUTH; dDebug("vgId:%d, msg:%p put into vnode-write queue failed since %s", pVnode->vgId, pMsg, tstrerror(code)); break; } if (pMsg->msgType != TDMT_VND_ALTER_CONFIRM && pVnode->disable) { dDebug("vgId:%d, msg:%p put into vnode-write queue failed since its disable", pVnode->vgId, pMsg); - terrno = TSDB_CODE_VND_STOPPED; - code = terrno; + code = TSDB_CODE_VND_STOPPED; break; } dGTrace("vgId:%d, msg:%p put into vnode-write queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pWriteW.queue, pMsg); + code = taosWriteQitem(pVnode->pWriteW.queue, pMsg); break; case SYNC_QUEUE: dGTrace("vgId:%d, msg:%p put into vnode-sync queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pSyncW.queue, pMsg); + code = taosWriteQitem(pVnode->pSyncW.queue, pMsg); break; case SYNC_RD_QUEUE: dGTrace("vgId:%d, msg:%p put into vnode-sync-rd queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pSyncRdW.queue, pMsg); + code = taosWriteQitem(pVnode->pSyncRdW.queue, pMsg); break; case APPLY_QUEUE: dGTrace("vgId:%d, msg:%p put into vnode-apply queue", pVnode->vgId, pMsg); - taosWriteQitem(pVnode->pApplyW.queue, pMsg); + code = taosWriteQitem(pVnode->pApplyW.queue, pMsg); break; default: - code = -1; - terrno = TSDB_CODE_INVALID_PARA; + code = TSDB_CODE_INVALID_MSG; break; } @@ -299,32 +302,32 @@ int32_t vmPutMsgToStreamQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { return vmPutMs int32_t vmPutMsgToMultiMgmtQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { const STraceId *trace = &pMsg->info.traceId; dGTrace("msg:%p, put into vnode-multi-mgmt queue", pMsg); - taosWriteQitem(pMgmt->mgmtMultiWorker.queue, pMsg); - return 0; + return taosWriteQitem(pMgmt->mgmtMultiWorker.queue, pMsg); } int32_t vmPutMsgToMgmtQueue(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) { const STraceId *trace = &pMsg->info.traceId; dGTrace("msg:%p, put into vnode-mgmt queue", pMsg); - taosWriteQitem(pMgmt->mgmtWorker.queue, pMsg); - return 0; + return taosWriteQitem(pMgmt->mgmtWorker.queue, pMsg); } int32_t vmPutRpcMsgToQueue(SVnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { + int32_t code = 0; if (pRpc->contLen < sizeof(SMsgHead)) { dError("invalid rpc msg with no msg head at pCont. pRpc:%p, type:%s, len:%d", pRpc, TMSG_INFO(pRpc->msgType), pRpc->contLen); rpcFreeCont(pRpc->pCont); pRpc->pCont = NULL; - return -1; + return TSDB_CODE_INVALID_MSG; } EQItype itype = APPLY_QUEUE == qtype ? DEF_QITEM : RPC_QITEM; - SRpcMsg *pMsg = taosAllocateQitem(sizeof(SRpcMsg), itype, pRpc->contLen); - if (pMsg == NULL) { + SRpcMsg *pMsg = NULL; + code = taosAllocateQitemWrapper(sizeof(SRpcMsg), itype, pRpc->contLen, (void **)&pMsg); + if (code != 0) { rpcFreeCont(pRpc->pCont); pRpc->pCont = NULL; - return -1; + return code; } SMsgHead *pHead = pRpc->pCont; @@ -335,7 +338,7 @@ int32_t vmPutRpcMsgToQueue(SVnodeMgmt *pMgmt, EQueueType qtype, SRpcMsg *pRpc) { memcpy(pMsg, pRpc, sizeof(SRpcMsg)); pRpc->pCont = NULL; - int32_t code = vmPutMsgToQueue(pMgmt, pMsg, qtype); + code = vmPutMsgToQueue(pMgmt, pMsg, qtype); if (code != 0) { dTrace("msg:%p, is freed", pMsg); rpcFreeCont(pMsg->pCont); @@ -381,6 +384,7 @@ int32_t vmGetQueueSize(SVnodeMgmt *pMgmt, int32_t vgId, EQueueType qtype) { } int32_t vmAllocQueue(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) { + int32_t code = 0; SMultiWorkerCfg wcfg = {.max = 1, .name = "vnode-write", .fp = (FItems)vnodeProposeWriteMsg, .param = pVnode->pImpl}; SMultiWorkerCfg scfg = {.max = 1, .name = "vnode-sync", .fp = (FItems)vmProcessSyncQueue, .param = pVnode}; SMultiWorkerCfg sccfg = {.max = 1, .name = "vnode-sync-rd", .fp = (FItems)vmProcessSyncQueue, .param = pVnode}; @@ -396,8 +400,7 @@ int32_t vmAllocQueue(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) { if (pVnode->pWriteW.queue == NULL || pVnode->pSyncW.queue == NULL || pVnode->pSyncRdW.queue == NULL || pVnode->pApplyW.queue == NULL || pVnode->pQueryQ == NULL || pVnode->pStreamQ == NULL || pVnode->pFetchQ == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + return TSDB_CODE_OUT_OF_MEMORY; } dInfo("vgId:%d, write-queue:%p is alloced, thread:%08" PRId64, pVnode->vgId, pVnode->pWriteW.queue, @@ -426,26 +429,27 @@ void vmFreeQueue(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) { } int32_t vmStartWorker(SVnodeMgmt *pMgmt) { + int32_t code = 0; SQueryAutoQWorkerPool *pQPool = &pMgmt->queryPool; pQPool->name = "vnode-query"; pQPool->min = tsNumOfVnodeQueryThreads; pQPool->max = tsNumOfVnodeQueryThreads; - if (tQueryAutoQWorkerInit(pQPool) != 0) return -1; + if ((code = tQueryAutoQWorkerInit(pQPool)) != 0) return code; SAutoQWorkerPool *pStreamPool = &pMgmt->streamPool; pStreamPool->name = "vnode-stream"; pStreamPool->ratio = tsRatioOfVnodeStreamThreads; - if (tAutoQWorkerInit(pStreamPool) != 0) return -1; + if ((code = tAutoQWorkerInit(pStreamPool)) != 0) return code; SWWorkerPool *pFPool = &pMgmt->fetchPool; pFPool->name = "vnode-fetch"; pFPool->max = tsNumOfVnodeFetchThreads; - if (tWWorkerInit(pFPool) != 0) return -1; + if ((code = tWWorkerInit(pFPool)) != 0) return code; SSingleWorkerCfg mgmtCfg = { .min = 1, .max = 1, .name = "vnode-mgmt", .fp = (FItem)vmProcessMgmtQueue, .param = pMgmt}; - if (tSingleWorkerInit(&pMgmt->mgmtWorker, &mgmtCfg) != 0) return -1; + if ((code = tSingleWorkerInit(&pMgmt->mgmtWorker, &mgmtCfg)) != 0) return code; int32_t threadNum = 0; if (tsNumOfCores == 1) { @@ -459,7 +463,7 @@ int32_t vmStartWorker(SVnodeMgmt *pMgmt) { .fp = (FItem)vmProcessMultiMgmtQueue, .param = pMgmt}; - if (tSingleWorkerInit(&pMgmt->mgmtMultiWorker, &multiMgmtCfg) != 0) return -1; + if ((code = tSingleWorkerInit(&pMgmt->mgmtMultiWorker, &multiMgmtCfg)) != 0) return code; dDebug("vnode workers are initialized"); return 0; diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 15feaf1761..82809ad1a7 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -14,11 +14,11 @@ */ #define _DEFAULT_SOURCE -#include "dmMgmt.h" #include "audit.h" +#include "dmMgmt.h" #include "libs/function/tudf.h" -#include "tgrant.h" #include "tcompare.h" +#include "tgrant.h" #define DM_INIT_AUDIT() \ do { \ @@ -256,8 +256,8 @@ static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { default: code = TSDB_CODE_APP_ERROR; } - dError("failed to create node since %s", terrstr()); - return terrno = code; + dError("failed to create node since %s", tstrerror(code)); + return code; } dInfo("start to process create-node-request"); @@ -267,7 +267,7 @@ static int32_t dmProcessCreateNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { dmReleaseWrapper(pWrapper); code = TAOS_SYSTEM_ERROR(errno); dError("failed to create dir:%s since %s", pWrapper->path, tstrerror(code)); - return terrno = code; + return code; } taosThreadMutexLock(&pDnode->mutex); @@ -298,7 +298,7 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { SMgmtWrapper *pWrapper = dmAcquireWrapper(pDnode, ntype); if (pWrapper == NULL) { dError("fail to process alter node type since node not exist"); - return -1; + return TSDB_CODE_INVALID_MSG; } dmReleaseWrapper(pWrapper); @@ -312,7 +312,7 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { if (role == TAOS_SYNC_ROLE_VOTER) { dError("node:%s, failed to alter node type since node already is role:%d", pWrapper->name, role); code = TSDB_CODE_MNODE_ALREADY_IS_VOTER; - return terrno = code; + return code; } } @@ -320,7 +320,7 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { dInfo("node:%s, checking node catch up", pWrapper->name); if ((*pWrapper->func.isCatchUpFp)(pWrapper->pMgmt) != 1) { code = TSDB_CODE_MNODE_NOT_CATCH_UP; - return terrno = code; + return code; } } @@ -338,7 +338,7 @@ static int32_t dmProcessAlterNodeTypeReq(EDndNodeType ntype, SRpcMsg *pMsg) { taosThreadMutexUnlock(&pDnode->mutex); code = TAOS_SYSTEM_ERROR(errno); dError("failed to create dir:%s since %s", pWrapper->path, tstrerror(code)); - return terrno = code; + return code; } SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper); @@ -381,7 +381,7 @@ static int32_t dmProcessDropNodeReq(EDndNodeType ntype, SRpcMsg *pMsg) { code = TSDB_CODE_APP_ERROR; } - dError("failed to drop node since %s", terrstr()); + dError("failed to drop node since %s", tstrerror(code)); return terrno = code; } @@ -439,6 +439,4 @@ void dmReportStartup(const char *pName, const char *pDesc) { int64_t dmGetClusterId() { return globalDnode.data.clusterId; } -bool dmReadyForTest() { - return dmInstance()->data.dnodeVer > 0; -} +bool dmReadyForTest() { return dmInstance()->data.dnodeVer > 0; } diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index 2e0533d91a..f4be160965 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -305,7 +305,7 @@ int32_t dmMarkWrapper(SMgmtWrapper *pWrapper) { } taosThreadRwlockUnlock(&pWrapper->lock); - return terrno = code; + return code; } void dmReleaseWrapper(SMgmtWrapper *pWrapper) { diff --git a/source/dnode/mgmt/node_mgmt/src/dmNodes.c b/source/dnode/mgmt/node_mgmt/src/dmNodes.c index a8bf5be3e2..7ce16f40ad 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmNodes.c +++ b/source/dnode/mgmt/node_mgmt/src/dmNodes.c @@ -17,12 +17,13 @@ #include "dmMgmt.h" int32_t dmOpenNode(SMgmtWrapper *pWrapper) { + int32_t code = 0; SDnode *pDnode = pWrapper->pDnode; if (taosMkDir(pWrapper->path) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("node:%s, failed to create dir:%s since %s", pWrapper->name, pWrapper->path, terrstr()); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + dError("node:%s, failed to create dir:%s since %s", pWrapper->name, pWrapper->path, tstrerror(code)); + return terrno = code; } SMgmtOutputOpt output = {0}; @@ -30,7 +31,7 @@ int32_t dmOpenNode(SMgmtWrapper *pWrapper) { dInfo("node:%s, start to open", pWrapper->name); tmsgSetDefault(&input.msgCb); - if ((*pWrapper->func.openFp)(&input, &output) != 0) { + if ((code = (*pWrapper->func.openFp)(&input, &output)) != 0) { dError("node:%s, failed to open since %s", pWrapper->name, terrstr()); return -1; } diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c index 2f5c4abd0b..c8941c8dc6 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c +++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c @@ -39,9 +39,9 @@ int32_t dmProcessNodeMsg(SMgmtWrapper *pWrapper, SRpcMsg *pMsg) { NodeMsgFp msgFp = pWrapper->msgFps[TMSG_INDEX(pMsg->msgType)]; if (msgFp == NULL) { - terrno = TSDB_CODE_MSG_NOT_PROCESSED; + // terrno = TSDB_CODE_MSG_NOT_PROCESSED; dGError("msg:%p, not processed since no handler, type:%s", pMsg, TMSG_INFO(pMsg->msgType)); - return -1; + return TSDB_CODE_MSG_NOT_PROCESSED; } dGTrace("msg:%p, will be processed by %s", pMsg, pWrapper->name); @@ -54,14 +54,15 @@ static bool dmFailFastFp(tmsg_t msgType) { return msgType == TDMT_SYNC_HEARTBEAT || msgType == TDMT_SYNC_APPEND_ENTRIES; } -static void dmConvertErrCode(tmsg_t msgType) { - if (terrno != TSDB_CODE_APP_IS_STOPPING) { - return; +static int32_t dmConvertErrCode(tmsg_t msgType, int32_t code) { + if (code != TSDB_CODE_APP_IS_STOPPING) { + return code; } if ((msgType > TDMT_VND_MSG_MIN && msgType < TDMT_VND_MSG_MAX) || (msgType > TDMT_SCH_MSG_MIN && msgType < TDMT_SCH_MSG_MAX)) { - terrno = TSDB_CODE_VND_STOPPED; + code = TSDB_CODE_VND_STOPPED; } + return code; } static void dmUpdateRpcIpWhite(SDnodeData *pData, void *pTrans, SRpcMsg *pRpc) { SUpdateIpWhite ipWhite = {0}; // aosMemoryCalloc(1, sizeof(SUpdateIpWhite)); @@ -99,14 +100,14 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { int32_t svrVer = 0; taosVersionStrToInt(version, &svrVer); - if (0 != taosCheckVersionCompatible(pRpc->info.cliVer, svrVer, 3)) { + if ((code = taosCheckVersionCompatible(pRpc->info.cliVer, svrVer, 3)) != 0) { dError("Version not compatible, cli ver: %d, svr ver: %d", pRpc->info.cliVer, svrVer); goto _OVER; } bool isForbidden = dmIsForbiddenIp(pRpc->info.forbiddenIp, pRpc->info.conn.user, pRpc->info.conn.clientIp); if (isForbidden) { - terrno = TSDB_CODE_IP_NOT_IN_WHITE_LIST; + code = TSDB_CODE_IP_NOT_IN_WHITE_LIST; goto _OVER; } @@ -119,7 +120,7 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { case TDMT_SCH_FETCH_RSP: case TDMT_SCH_MERGE_FETCH_RSP: case TDMT_VND_SUBMIT_RSP: - qWorkerProcessRspMsg(NULL, NULL, pRpc, 0); + code = qWorkerProcessRspMsg(NULL, NULL, pRpc, 0); return; case TDMT_MND_STATUS_RSP: if (pEpSet != NULL) { @@ -148,32 +149,32 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { return; } else { if (pDnode->status == DND_STAT_INIT) { - terrno = TSDB_CODE_APP_IS_STARTING; + code = TSDB_CODE_APP_IS_STARTING; } else { - terrno = TSDB_CODE_APP_IS_STOPPING; + code = TSDB_CODE_APP_IS_STOPPING; } goto _OVER; } } } else { - terrno = TSDB_CODE_APP_IS_STARTING; + code = TSDB_CODE_APP_IS_STARTING; goto _OVER; } if (pRpc->pCont == NULL && (IsReq(pRpc) || pRpc->contLen != 0)) { dGError("msg:%p, type:%s pCont is NULL", pRpc, TMSG_INFO(pRpc->msgType)); - terrno = TSDB_CODE_INVALID_MSG_LEN; + code = TSDB_CODE_INVALID_MSG_LEN; goto _OVER; } else if ((pRpc->code == TSDB_CODE_RPC_NETWORK_UNAVAIL || pRpc->code == TSDB_CODE_RPC_BROKEN_LINK) && (!IsReq(pRpc)) && (pRpc->pCont == NULL)) { dGError("msg:%p, type:%s pCont is NULL, err: %s", pRpc, TMSG_INFO(pRpc->msgType), tstrerror(pRpc->code)); - terrno = pRpc->code; + code = pRpc->code; goto _OVER; } if (pHandle->defaultNtype == NODE_END) { dGError("msg:%p, type:%s not processed since no handle", pRpc, TMSG_INFO(pRpc->msgType)); - terrno = TSDB_CODE_MSG_NOT_PROCESSED; + code = TSDB_CODE_MSG_NOT_PROCESSED; goto _OVER; } @@ -197,12 +198,12 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { } } else { dGError("msg:%p, type:%s contLen is 0", pRpc, TMSG_INFO(pRpc->msgType)); - terrno = TSDB_CODE_INVALID_MSG_LEN; + code = TSDB_CODE_INVALID_MSG_LEN; goto _OVER; } } - if (dmMarkWrapper(pWrapper) != 0) { + if ((code = dmMarkWrapper(pWrapper)) != 0) { pWrapper = NULL; goto _OVER; } @@ -210,8 +211,10 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { pRpc->info.wrapper = pWrapper; EQItype itype = IsReq(pRpc) ? RPC_QITEM : DEF_QITEM; // rsp msg is not restricted by tsRpcQueueMemoryUsed - pMsg = taosAllocateQitem(sizeof(SRpcMsg), itype, pRpc->contLen); - if (pMsg == NULL) goto _OVER; + code = taosAllocateQitemWrapper(sizeof(SRpcMsg), itype, pRpc->contLen, (void **)&pMsg); + if (code != 0) { + goto _OVER; + } memcpy(pMsg, pRpc, sizeof(SRpcMsg)); dGTrace("msg:%p, is created, type:%s handle:%p len:%d", pMsg, TMSG_INFO(pRpc->msgType), pMsg->info.handle, @@ -221,10 +224,9 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) { _OVER: if (code != 0) { - dmConvertErrCode(pRpc->msgType); - if (terrno != 0) code = terrno; + code = dmConvertErrCode(pRpc->msgType, code); if (pMsg) { - dGTrace("msg:%p, failed to process %s since %s", pMsg, TMSG_INFO(pMsg->msgType), terrstr()); + dGTrace("msg:%p, failed to process %s since %s", pMsg, TMSG_INFO(pMsg->msgType), tstrerror(code)); } else { dGTrace("msg:%p, failed to process empty msg since %s", pMsg, terrstr()); } @@ -280,17 +282,19 @@ int32_t dmInitMsgHandle(SDnode *pDnode) { } static inline int32_t dmSendReq(const SEpSet *pEpSet, SRpcMsg *pMsg) { + int32_t code = 0; SDnode *pDnode = dmInstance(); if (pDnode->status != DND_STAT_RUNNING && pMsg->msgType < TDMT_SYNC_MSG_MIN) { rpcFreeCont(pMsg->pCont); pMsg->pCont = NULL; if (pDnode->status == DND_STAT_INIT) { - terrno = TSDB_CODE_APP_IS_STARTING; + code = TSDB_CODE_APP_IS_STARTING; } else { - terrno = TSDB_CODE_APP_IS_STOPPING; + code = TSDB_CODE_APP_IS_STOPPING; } - dError("failed to send rpc msg:%s since %s, handle:%p", TMSG_INFO(pMsg->msgType), terrstr(), pMsg->info.handle); - return -1; + dError("failed to send rpc msg:%s since %s, handle:%p", TMSG_INFO(pMsg->msgType), tstrerror(code), + pMsg->info.handle); + return code; } else { pMsg->info.handle = 0; rpcSendRequest(pDnode->trans.clientRpc, pEpSet, pMsg, NULL); @@ -521,7 +525,7 @@ int32_t dmInitServer(SDnode *pDnode) { pTrans->serverRpc = rpcOpen(&rpcInit); if (pTrans->serverRpc == NULL) { dError("failed to init dnode rpc server"); - return -1; + return terrno; } dDebug("dnode rpc server is initialized"); diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 723e3701a1..0c510ec742 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -464,26 +464,23 @@ static int32_t mndCreateDir(SMnode *pMnode, const char *path) { static int32_t mndInitWal(SMnode *pMnode) { char path[PATH_MAX + 20] = {0}; snprintf(path, sizeof(path), "%s%swal", pMnode->path, TD_DIRSEP); - SWalCfg cfg = { - .vgId = 1, - .fsyncPeriod = 0, - .rollPeriod = -1, - .segSize = -1, - .retentionPeriod = 0, - .retentionSize = 0, - .level = TAOS_WAL_FSYNC, - .encryptAlgorithm = 0, - .encryptKey = {0} - }; + SWalCfg cfg = {.vgId = 1, + .fsyncPeriod = 0, + .rollPeriod = -1, + .segSize = -1, + .retentionPeriod = 0, + .retentionSize = 0, + .level = TAOS_WAL_FSYNC, + .encryptAlgorithm = 0, + .encryptKey = {0}}; #if defined(TD_ENTERPRISE) - if(tsiEncryptAlgorithm == DND_CA_SM4 && (tsiEncryptScope & DND_CS_MNODE_WAL) == DND_CS_MNODE_WAL){ - cfg.encryptAlgorithm = (tsiEncryptScope & DND_CS_MNODE_WAL)? tsiEncryptAlgorithm : 0; - if(tsEncryptKey[0] == '\0'){ + if (tsiEncryptAlgorithm == DND_CA_SM4 && (tsiEncryptScope & DND_CS_MNODE_WAL) == DND_CS_MNODE_WAL) { + cfg.encryptAlgorithm = (tsiEncryptScope & DND_CS_MNODE_WAL) ? tsiEncryptAlgorithm : 0; + if (tsEncryptKey[0] == '\0') { terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; return -1; - } - else{ + } else { strncpy(cfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN); } } @@ -856,7 +853,7 @@ _OVER: return -1; } -int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo* pQueueInfo) { +int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo *pQueueInfo) { SMnode *pMnode = pMsg->info.node; const STraceId *trace = &pMsg->info.traceId; int32_t code = TSDB_CODE_SUCCESS; diff --git a/source/util/src/tqueue.c b/source/util/src/tqueue.c index 45a8a462fb..1a7f517bbf 100644 --- a/source/util/src/tqueue.c +++ b/source/util/src/tqueue.c @@ -146,6 +146,15 @@ int64_t taosQueueMemorySize(STaosQueue *queue) { return memOfItems; } +int32_t taosAllocateQitemWrapper(int32_t size, EQItype itype, int64_t dataSize, void **pItem) { + int32_t code = 0; + *pItem = taosAllocateQitem(size, itype, dataSize); + if (*pItem == NULL) { + return terrno; + } + + return code; +} void *taosAllocateQitem(int32_t size, EQItype itype, int64_t dataSize) { STaosQnode *pNode = taosMemoryCalloc(1, sizeof(STaosQnode) + size); if (pNode == NULL) { @@ -533,9 +542,7 @@ int64_t taosQallUnAccessedMemSize(STaosQall *qall) { return qall->unAccessMemOfI void taosResetQitems(STaosQall *qall) { qall->current = qall->start; } int32_t taosGetQueueNumber(STaosQset *qset) { return qset->numOfQueues; } -void taosQueueSetThreadId(STaosQueue* pQueue, int64_t threadId) { - pQueue->threadId = threadId; -} +void taosQueueSetThreadId(STaosQueue *pQueue, int64_t threadId) { pQueue->threadId = threadId; } int64_t taosQueueGetThreadId(STaosQueue *pQueue) { return pQueue->threadId; } diff --git a/source/util/src/tversion.c b/source/util/src/tversion.c index 0f84f6bafa..b44262d3c5 100644 --- a/source/util/src/tversion.c +++ b/source/util/src/tversion.c @@ -83,15 +83,13 @@ int32_t taosCheckVersionCompatible(int32_t clientVer, int32_t serverVer, int32_t serverVer /= 1000000; break; default: - terrno = TSDB_CODE_INVALID_VERSION_NUMBER; - return -1; + return TSDB_CODE_INVALID_VERSION_NUMBER; } if (clientVer == serverVer) { return 0; } else { - terrno = TSDB_CODE_VERSION_NOT_COMPATIBLE; - return -1; + return TSDB_CODE_VERSION_NOT_COMPATIBLE; } } From 21de23e14bf1fee7ab48449f7ccabaa68c4f4ae8 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Tue, 16 Jul 2024 11:00:12 +0000 Subject: [PATCH 03/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 16 +- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 6 +- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 2 +- source/dnode/mgmt/node_mgmt/src/dmNodes.c | 40 +-- source/dnode/mgmt/node_util/inc/dmUtil.h | 34 +-- source/dnode/mgmt/node_util/src/dmFile.c | 352 ++++++++++++++-------- 6 files changed, 276 insertions(+), 174 deletions(-) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index f4329995f3..81c048569e 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -202,7 +202,7 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) { global.generateGrant = true; } else if (strcmp(argv[i], "-y") == 0) { global.generateCode = true; - if(i < argc - 1) { + if (i < argc - 1) { int32_t len = strlen(argv[++i]); if (len < ENCRYPT_KEY_LEN_MIN) { printf("ERROR: Encrypt key should be at least %d characters\n", ENCRYPT_KEY_LEN_MIN); @@ -321,7 +321,7 @@ int main(int argc, char const *argv[]) { } if ((code = dmParseArgs(argc, argv)) != 0) { - //printf("failed to start since parse args error\n"); + // printf("failed to start since parse args error\n"); taosCleanupArgs(); return code; } @@ -367,7 +367,7 @@ int mainWindows(int argc, char **argv) { printf("memory dbg enabled\n"); } #endif - if(global.generateCode) { + if (global.generateCode) { bool toLogFile = false; if ((code = taosReadDataFolder(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs)) != 0) { encryptError("failed to generate encrypt code since dataDir can not be set from cfg file,reason:%s", @@ -375,8 +375,9 @@ int mainWindows(int argc, char **argv) { return code; }; TdFilePtr pFile; - if ((code = dmCheckRunningWrapper(tsDataDir, &pFile)) != 0) { - encryptError("failed to generate encrypt code since taosd is running, please stop it first, reason:%s", tstrerror(code)); + if ((code = dmCheckRunning(tsDataDir, &pFile)) != 0) { + encryptError("failed to generate encrypt code since taosd is running, please stop it first, reason:%s", + tstrerror(code)); return code; } int ret = dmUpdateEncryptKey(global.encryptKey, toLogFile); @@ -437,7 +438,7 @@ int mainWindows(int argc, char **argv) { osSetProcPath(argc, (char **)argv); taosCleanupArgs(); - if(dmGetEncryptKey() != 0){ + if (dmGetEncryptKey() != 0) { dError("failed to start since failed to get encrypt key"); taosCloseLog(); taosCleanupArgs(); @@ -461,7 +462,8 @@ int mainWindows(int argc, char **argv) { dmSetSignalHandle(); tsDndStart = taosGetTimestampMs(); tsDndStartOsUptime = taosGetOsUptime(); - int32_t code = dmRun(); + + code = dmRun(); dInfo("shutting down the service"); dmCleanup(); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 82809ad1a7..6b402c2a81 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -14,11 +14,13 @@ */ #define _DEFAULT_SOURCE -#include "audit.h" +// clang-format off #include "dmMgmt.h" +#include "audit.h" #include "libs/function/tudf.h" -#include "tcompare.h" #include "tgrant.h" +#include "tcompare.h" +// clang-format on #define DM_INIT_AUDIT() \ do { \ diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index f4be160965..b0f314974e 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -72,7 +72,7 @@ int32_t dmInitDnode(SDnode *pDnode) { pWrapper->required = dmRequireNode(pDnode, pWrapper); } - code = dmCheckRunningWrapper(tsDataDir, &pDnode->lockfile); + code = dmCheckRunning(tsDataDir, &pDnode->lockfile); if (code != 0) { goto _OVER; } diff --git a/source/dnode/mgmt/node_mgmt/src/dmNodes.c b/source/dnode/mgmt/node_mgmt/src/dmNodes.c index 7ce16f40ad..9c950ac592 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmNodes.c +++ b/source/dnode/mgmt/node_mgmt/src/dmNodes.c @@ -23,7 +23,7 @@ int32_t dmOpenNode(SMgmtWrapper *pWrapper) { if (taosMkDir(pWrapper->path) != 0) { code = TAOS_SYSTEM_ERROR(errno); dError("node:%s, failed to create dir:%s since %s", pWrapper->name, pWrapper->path, tstrerror(code)); - return terrno = code; + return code; } SMgmtOutputOpt output = {0}; @@ -32,8 +32,8 @@ int32_t dmOpenNode(SMgmtWrapper *pWrapper) { dInfo("node:%s, start to open", pWrapper->name); tmsgSetDefault(&input.msgCb); if ((code = (*pWrapper->func.openFp)(&input, &output)) != 0) { - dError("node:%s, failed to open since %s", pWrapper->name, terrstr()); - return -1; + dError("node:%s, failed to open since %s", pWrapper->name, tstrerror(code)); + return code; } dInfo("node:%s, has been opened", pWrapper->name); pWrapper->deployed = true; @@ -47,11 +47,12 @@ int32_t dmOpenNode(SMgmtWrapper *pWrapper) { } int32_t dmStartNode(SMgmtWrapper *pWrapper) { + int32_t code = 0; if (pWrapper->func.startFp != NULL) { dDebug("node:%s, start to start", pWrapper->name); - if ((*pWrapper->func.startFp)(pWrapper->pMgmt) != 0) { - dError("node:%s, failed to start since %s", pWrapper->name, terrstr()); - return -1; + if ((code = (*pWrapper->func.startFp)(pWrapper->pMgmt)) != 0) { + dError("node:%s, failed to start since %s", pWrapper->name, tstrerror(code)); + return code; } dDebug("node:%s, has been started", pWrapper->name); } @@ -87,12 +88,13 @@ void dmCloseNode(SMgmtWrapper *pWrapper) { } static int32_t dmOpenNodes(SDnode *pDnode) { + int32_t code = 0; for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) { SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype]; if (!pWrapper->required) continue; - if (dmOpenNode(pWrapper) != 0) { - dError("node:%s, failed to open since %s", pWrapper->name, terrstr()); - return -1; + if ((code = dmOpenNode(pWrapper)) != 0) { + dError("node:%s, failed to open since %s", pWrapper->name, tstrerror(code)); + return code; } } @@ -101,12 +103,13 @@ static int32_t dmOpenNodes(SDnode *pDnode) { } static int32_t dmStartNodes(SDnode *pDnode) { + int32_t code = 0; for (EDndNodeType ntype = DNODE; ntype < NODE_END; ++ntype) { SMgmtWrapper *pWrapper = &pDnode->wrappers[ntype]; if (!pWrapper->required) continue; - if (dmStartNode(pWrapper) != 0) { - dError("node:%s, failed to start since %s", pWrapper->name, terrstr()); - return -1; + if ((code = dmStartNode(pWrapper)) != 0) { + dError("node:%s, failed to start since %s", pWrapper->name, tstrerror(code)); + return code; } } @@ -130,19 +133,20 @@ static void dmCloseNodes(SDnode *pDnode) { } int32_t dmRunDnode(SDnode *pDnode) { + int32_t code = 0; int32_t count = 0; - if (dmOpenNodes(pDnode) != 0) { - dError("failed to open nodes since %s", terrstr()); + if ((code = dmOpenNodes(pDnode)) != 0) { + dError("failed to open nodes since %s", tstrerror(code)); dmCloseNodes(pDnode); - return -1; + return code; } - if (dmStartNodes(pDnode) != 0) { - dError("failed to start nodes since %s", terrstr()); + if ((code = dmStartNodes(pDnode)) != 0) { + dError("failed to start nodes since %s", tstrerror(code)); dmSetStatus(pDnode, DND_STAT_STOPPED); dmStopNodes(pDnode); dmCloseNodes(pDnode); - return -1; + return code; } while (1) { diff --git a/source/dnode/mgmt/node_util/inc/dmUtil.h b/source/dnode/mgmt/node_util/inc/dmUtil.h index 3dc4ebdbae..3b94f00bee 100644 --- a/source/dnode/mgmt/node_util/inc/dmUtil.h +++ b/source/dnode/mgmt/node_util/inc/dmUtil.h @@ -145,20 +145,20 @@ typedef struct { } SDnodeData; typedef struct { - const char *path; - const char *name; - STfs *pTfs; - SDnodeData *pData; - SMsgCb msgCb; - ProcessCreateNodeFp processCreateNodeFp; + const char *path; + const char *name; + STfs *pTfs; + SDnodeData *pData; + SMsgCb msgCb; + ProcessCreateNodeFp processCreateNodeFp; ProcessAlterNodeTypeFp processAlterNodeTypeFp; - ProcessDropNodeFp processDropNodeFp; - SendMonitorReportFp sendMonitorReportFp; - SendAuditRecordsFp sendAuditRecordFp; - GetVnodeLoadsFp getVnodeLoadsFp; - GetVnodeLoadsFp getVnodeLoadsLiteFp; - GetMnodeLoadsFp getMnodeLoadsFp; - GetQnodeLoadsFp getQnodeLoadsFp; + ProcessDropNodeFp processDropNodeFp; + SendMonitorReportFp sendMonitorReportFp; + SendAuditRecordsFp sendAuditRecordFp; + GetVnodeLoadsFp getVnodeLoadsFp; + GetVnodeLoadsFp getVnodeLoadsLiteFp; + GetMnodeLoadsFp getMnodeLoadsFp; + GetQnodeLoadsFp getQnodeLoadsFp; } SMgmtInputOpt; typedef struct { @@ -203,10 +203,10 @@ void *dmSetMgmtHandle(SArray *pArray, tmsg_t msgType, void *nodeMsgFp, boo void dmGetMonitorSystemInfo(SMonSysInfo *pInfo); // dmFile.c -int32_t dmReadFile(const char *path, const char *name, bool *pDeployed); -int32_t dmWriteFile(const char *path, const char *name, bool deployed); -TdFilePtr dmCheckRunning(const char *dataDir); -int32_t dmCheckRunningWrapper(const char *dataDir, TdFilePtr *pFile); +int32_t dmReadFile(const char *path, const char *name, bool *pDeployed); +int32_t dmWriteFile(const char *path, const char *name, bool deployed); +int32_t dmCheckRunning(const char *dataDir, TdFilePtr *pFile); +//int32_t dmCheckRunningWrapper(const char *dataDir, TdFilePtr *pFile); // dmodule.c int32_t dmInitDndInfo(SDnodeData *pData); diff --git a/source/dnode/mgmt/node_util/src/dmFile.c b/source/dnode/mgmt/node_util/src/dmFile.c index 74463e09cb..c6ad535b9e 100644 --- a/source/dnode/mgmt/node_util/src/dmFile.c +++ b/source/dnode/mgmt/node_util/src/dmFile.c @@ -14,23 +14,23 @@ */ #define _DEFAULT_SOURCE -#include "dmUtil.h" -#include "tjson.h" -#include "tgrant.h" #include "crypt.h" +#include "dmUtil.h" #include "tchecksum.h" +#include "tgrant.h" +#include "tjson.h" -#define MAXLEN 1024 -#define DM_KEY_INDICATOR "this indicator!" -#define DM_ENCRYPT_CODE_FILE "encryptCode.cfg" -#define DM_CHECK_CODE_FILE "checkCode.bin" +#define MAXLEN 1024 +#define DM_KEY_INDICATOR "this indicator!" +#define DM_ENCRYPT_CODE_FILE "encryptCode.cfg" +#define DM_CHECK_CODE_FILE "checkCode.bin" static int32_t dmDecodeFile(SJson *pJson, bool *deployed) { int32_t code = 0; int32_t value = 0; tjsonGetInt32ValueFromDouble(pJson, "deployed", value, code); - if (code < 0) return -1; + if (code < 0) return code; *deployed = (value != 0); return code; @@ -42,7 +42,11 @@ int32_t dmReadFile(const char *path, const char *name, bool *pDeployed) { char *content = NULL; SJson *pJson = NULL; char file[PATH_MAX] = {0}; - snprintf(file, sizeof(file), "%s%s%s.json", path, TD_DIRSEP, name); + int32_t nBytes = snprintf(file, sizeof(file), "%s%s%s.json", path, TD_DIRSEP, name); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } if (taosStatFile(file, NULL, NULL, NULL) < 0) { dInfo("file:%s not exist", file); @@ -52,27 +56,27 @@ int32_t dmReadFile(const char *path, const char *name, bool *pDeployed) { pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to open file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to open file:%s since %s", file, tstrerror(code)); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to fstat file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to fstat file:%s since %s", file, tstrerror(code)); goto _OVER; } content = taosMemoryMalloc(size + 1); if (content == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, content, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to read file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to read file:%s since %s", file, tstrerror(code)); goto _OVER; } @@ -80,12 +84,12 @@ int32_t dmReadFile(const char *path, const char *name, bool *pDeployed) { pJson = tjsonParse(content); if (pJson == NULL) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } if (dmDecodeFile(pJson, pDeployed) < 0) { - terrno = TSDB_CODE_INVALID_JSON_FORMAT; + code = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; } @@ -98,13 +102,13 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - dError("failed to read dnode file:%s since %s", file, terrstr()); + dError("failed to read dnode file:%s since %s", file, tstrerror(code)); } return code; } static int32_t dmEncodeFile(SJson *pJson, bool deployed) { - if (tjsonAddDoubleToObject(pJson, "deployed", deployed) < 0) return -1; + if (tjsonAddDoubleToObject(pJson, "deployed", deployed) < 0) return TSDB_CODE_INVALID_JSON_FORMAT; return 0; } @@ -115,26 +119,57 @@ int32_t dmWriteFile(const char *path, const char *name, bool deployed) { TdFilePtr pFile = NULL; char file[PATH_MAX] = {0}; char realfile[PATH_MAX] = {0}; - snprintf(file, sizeof(file), "%s%s%s.json", path, TD_DIRSEP, name); - snprintf(realfile, sizeof(realfile), "%s%s%s.json", path, TD_DIRSEP, name); - terrno = TSDB_CODE_OUT_OF_MEMORY; + int32_t nBytes = snprintf(file, sizeof(file), "%s%s%s.json", path, TD_DIRSEP, name); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } + + nBytes = snprintf(realfile, sizeof(realfile), "%s%s%s.json", path, TD_DIRSEP, name); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + code = TSDB_CODE_OUT_OF_BUFFER; + goto _OVER; + } + pJson = tjsonCreateObject(); - if (pJson == NULL) goto _OVER; - if (dmEncodeFile(pJson, deployed) != 0) goto _OVER; + if (pJson == NULL) { + code = TSDB_CODE_OUT_OF_MEMORY; + goto _OVER; + } + + if ((code = dmEncodeFile(pJson, deployed)) != 0) goto _OVER; + buffer = tjsonToString(pJson); - if (buffer == NULL) goto _OVER; - terrno = 0; + if (buffer == NULL) { + code = TSDB_CODE_INVALID_JSON_FORMAT; + goto _OVER; + } pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } int32_t len = strlen(buffer); - if (taosWriteFile(pFile, buffer, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, buffer, len) <= 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosFsyncFile(pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosCloseFile(&pFile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosRenameFile(file, realfile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } code = 0; dInfo("succeed to write file:%s, deloyed:%d", realfile, deployed); @@ -145,60 +180,58 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to write file:%s since %s, deloyed:%d", realfile, terrstr(), deployed); + dError("failed to write file:%s since %s, deloyed:%d", realfile, tstrerror(code), deployed); } return code; } -int32_t dmCheckRunningWrapper(const char *dataDir, TdFilePtr *pFile) { - *pFile = dmCheckRunning(dataDir); - if (*pFile == NULL) return terrno; - - return 0; -} -TdFilePtr dmCheckRunning(const char *dataDir) { - char filepath[PATH_MAX] = {0}; +int32_t dmCheckRunning(const char *dataDir, TdFilePtr *pFile) { + int32_t code = 0; + char filepath[PATH_MAX] = {0}; snprintf(filepath, sizeof(filepath), "%s%s.running", dataDir, TD_DIRSEP); - TdFilePtr pFile = taosOpenFile(filepath, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_CLOEXEC); - if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to open file:%s since %s", filepath, terrstr()); - return NULL; + *pFile = taosOpenFile(filepath, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_CLOEXEC); + if (*pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to open file:%s since %s", filepath, tstrerror(code)); + return code; } int32_t retryTimes = 0; int32_t ret = 0; do { - ret = taosLockFile(pFile); + ret = taosLockFile(*pFile); if (ret == 0) break; - terrno = TAOS_SYSTEM_ERROR(errno); + + code = TAOS_SYSTEM_ERROR(errno); taosMsleep(1000); retryTimes++; - dError("failed to lock file:%s since %s, retryTimes:%d", filepath, terrstr(), retryTimes); + dError("failed to lock file:%s since %s, retryTimes:%d", filepath, tstrerror(code), retryTimes); } while (retryTimes < 12); if (ret < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - taosCloseFile(&pFile); - return NULL; + code = TAOS_SYSTEM_ERROR(errno); + taosCloseFile(pFile); + *pFile = NULL; + return code; } - terrno = 0; dDebug("lock file:%s to prevent repeated starts", filepath); - return pFile; + return code; } extern int32_t generateEncryptCode(const char *key, const char *machineId, char **encryptCode); -static int32_t dmWriteCheckCodeFile(char* file, char* realfile, char* key, bool toLogFile){ +static int32_t dmWriteCheckCodeFile(char *file, char *realfile, char *key, bool toLogFile) { TdFilePtr pFile = NULL; char *result = NULL; int32_t code = -1; int32_t len = ENCRYPTED_LEN(sizeof(DM_KEY_INDICATOR)); result = taosMemoryMalloc(len); + if (result == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } SCryptOpts opts; strncpy(opts.key, key, ENCRYPT_KEY_LEN); @@ -209,48 +242,81 @@ static int32_t dmWriteCheckCodeFile(char* file, char* realfile, char* key, bool CBC_Encrypt(&opts); pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - if (taosWriteFile(pFile, opts.result, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, opts.result, len) <= 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosFsyncFile(pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + + if (taosCloseFile(&pFile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + + if (taosRenameFile(file, realfile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } encryptDebug("succeed to write checkCode file:%s", realfile); code = 0; _OVER: - if(pFile != NULL) taosCloseFile(&pFile); - if(result != NULL) taosMemoryFree(result); + if (pFile != NULL) taosCloseFile(&pFile); + if (result != NULL) taosMemoryFree(result); return code; } -static int32_t dmWriteEncryptCodeFile(char* file, char* realfile, char* encryptCode, bool toLogFile){ +static int32_t dmWriteEncryptCodeFile(char *file, char *realfile, char *encryptCode, bool toLogFile) { TdFilePtr pFile = NULL; int32_t code = -1; pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } int32_t len = strlen(encryptCode); - if (taosWriteFile(pFile, encryptCode, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, encryptCode, len) <= 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + if (taosFsyncFile(pFile) < 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } - taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosCloseFile(&pFile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } + + if (taosRenameFile(file, realfile) != 0) { + code = TAOS_SYSTEM_ERROR(errno); + goto _OVER; + } encryptDebug("succeed to write encryptCode file:%s", realfile); code = 0; _OVER: - if(pFile != NULL) taosCloseFile(&pFile); + if (pFile != NULL) taosCloseFile(&pFile); return code; } -static int32_t dmCompareEncryptKey(char* file, char* key, bool toLogFile){ +static int32_t dmCompareEncryptKey(char *file, char *key, bool toLogFile) { char *content = NULL; int64_t size = 0; TdFilePtr pFile = NULL; @@ -259,31 +325,31 @@ static int32_t dmCompareEncryptKey(char* file, char* key, bool toLogFile){ pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - encryptError("failed to open dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + encryptError("failed to open dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - encryptError("failed to fstat dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + encryptError("failed to fstat dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } content = taosMemoryMalloc(size); if (content == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, content, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); - encryptError("failed to read dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + encryptError("failed to read dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } encryptDebug("succeed to read checkCode file:%s", file); - + int len = ENCRYPTED_LEN(size); result = taosMemoryMalloc(len); @@ -295,8 +361,8 @@ static int32_t dmCompareEncryptKey(char* file, char* key, bool toLogFile){ opts.unitLen = 16; CBC_Decrypt(&opts); - if(strcmp(opts.result, DM_KEY_INDICATOR) != 0) { - terrno = TSDB_CODE_DNODE_ENCRYPTKEY_CHANGED; + if (strcmp(opts.result, DM_KEY_INDICATOR) != 0) { + code = TSDB_CODE_DNODE_ENCRYPTKEY_CHANGED; encryptError("failed to compare decrypted result"); goto _OVER; } @@ -304,9 +370,9 @@ static int32_t dmCompareEncryptKey(char* file, char* key, bool toLogFile){ encryptDebug("succeed to compare checkCode file:%s", file); code = 0; _OVER: - if(result != NULL) taosMemoryFree(result); - if(content != NULL) taosMemoryFree(content); - if(pFile != NULL) taosCloseFile(&pFile); + if (result != NULL) taosMemoryFree(result); + if (content != NULL) taosMemoryFree(content); + if (pFile != NULL) taosCloseFile(&pFile); return code; } @@ -325,40 +391,57 @@ int32_t dmUpdateEncryptKey(char *key, bool toLogFile) { char checkFile[PATH_MAX] = {0}; char realCheckFile[PATH_MAX] = {0}; - snprintf(folder, sizeof(folder), "%s%sdnode", tsDataDir, TD_DIRSEP); - snprintf(encryptFile, sizeof(realEncryptFile), "%s%s%s.bak", folder, TD_DIRSEP, DM_ENCRYPT_CODE_FILE); - snprintf(realEncryptFile, sizeof(realEncryptFile), "%s%s%s", folder, TD_DIRSEP, DM_ENCRYPT_CODE_FILE); - snprintf(checkFile, sizeof(checkFile), "%s%s%s.bak", folder, TD_DIRSEP, DM_CHECK_CODE_FILE); - snprintf(realCheckFile, sizeof(realCheckFile), "%s%s%s", folder, TD_DIRSEP, DM_CHECK_CODE_FILE); + int32_t nBytes = snprintf(folder, sizeof(folder), "%s%sdnode", tsDataDir, TD_DIRSEP); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + return TSDB_CODE_OUT_OF_BUFFER; + } - terrno = 0; + nBytes = snprintf(encryptFile, sizeof(realEncryptFile), "%s%s%s.bak", folder, TD_DIRSEP, DM_ENCRYPT_CODE_FILE); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + return TSDB_CODE_OUT_OF_BUFFER; + } + + nBytes = snprintf(realEncryptFile, sizeof(realEncryptFile), "%s%s%s", folder, TD_DIRSEP, DM_ENCRYPT_CODE_FILE); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + return TSDB_CODE_OUT_OF_BUFFER; + } + + nBytes = snprintf(checkFile, sizeof(checkFile), "%s%s%s.bak", folder, TD_DIRSEP, DM_CHECK_CODE_FILE); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + return TSDB_CODE_OUT_OF_BUFFER; + } + + snprintf(realCheckFile, sizeof(realCheckFile), "%s%s%s", folder, TD_DIRSEP, DM_CHECK_CODE_FILE); + if (nBytes <= 0 || nBytes >= PATH_MAX) { + return TSDB_CODE_OUT_OF_BUFFER; + } if (taosMkDir(folder) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - encryptError("failed to create dir:%s since %s", folder, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + encryptError("failed to create dir:%s since %s", folder, tstrerror(code)); goto _OVER; } - if(taosCheckExistFile(realCheckFile)){ - if(dmCompareEncryptKey(realCheckFile, key, toLogFile) != 0){ + if (taosCheckExistFile(realCheckFile)) { + if ((code = dmCompareEncryptKey(realCheckFile, key, toLogFile)) != 0) { goto _OVER; } } - + if (!(machineId = tGetMachineId())) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } - if (generateEncryptCode(key, machineId, &encryptCode) != 0) { + if ((code = generateEncryptCode(key, machineId, &encryptCode)) != 0) { goto _OVER; } - if(dmWriteEncryptCodeFile(encryptFile, realEncryptFile, encryptCode, toLogFile) != 0){ + if ((code = dmWriteEncryptCodeFile(encryptFile, realEncryptFile, encryptCode, toLogFile)) != 0) { goto _OVER; } - if(dmWriteCheckCodeFile(checkFile, realCheckFile, key, toLogFile) != 0){ + if ((code = dmWriteCheckCodeFile(checkFile, realCheckFile, key, toLogFile)) != 0) { goto _OVER; } @@ -369,8 +452,7 @@ _OVER: taosMemoryFree(encryptCode); taosMemoryFree(machineId); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - encryptError("failed to update encrypt key since %s", terrstr()); + encryptError("failed to update encrypt key since %s", tstrerror(code)); } return code; #else @@ -380,89 +462,102 @@ _OVER: extern int32_t checkAndGetCryptKey(const char *encryptCode, const char *machineId, char **key); -static int32_t dmReadEncryptCodeFile(char* file, char** output){ +static int32_t dmReadEncryptCodeFile(char *file, char **output) { TdFilePtr pFile = NULL; int32_t code = -1; char *content = NULL; pFile = taosOpenFile(file, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to open dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to open dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } int64_t size = 0; if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to fstat dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to fstat dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } content = taosMemoryMalloc(size + 1); if (content == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } if (taosReadFile(pFile, content, size) != size) { - terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to read dnode file:%s since %s", file, terrstr()); + code = TAOS_SYSTEM_ERROR(errno); + dError("failed to read dnode file:%s since %s", file, tstrerror(code)); goto _OVER; } content[size] = '\0'; *output = content; + content = NULL; dInfo("succeed to read encryptCode file:%s", file); code = 0; _OVER: - if(pFile != NULL) taosCloseFile(&pFile); + if (pFile != NULL) taosCloseFile(&pFile); + taosMemoryFree(content); return code; } -int32_t dmGetEncryptKey(){ +int32_t dmGetEncryptKey() { #ifdef TD_ENTERPRISE - int32_t code = -1; - char encryptFile[PATH_MAX] = {0}; - char checkFile[PATH_MAX] = {0}; - char *machineId = NULL; - char *encryptKey = NULL; - char *content = NULL; + int32_t code = -1; + char encryptFile[PATH_MAX] = {0}; + char checkFile[PATH_MAX] = {0}; + char *machineId = NULL; + char *encryptKey = NULL; + char *content = NULL; - snprintf(encryptFile, sizeof(encryptFile), "%s%sdnode%s%s", tsDataDir, TD_DIRSEP, TD_DIRSEP, DM_ENCRYPT_CODE_FILE); - snprintf(checkFile, sizeof(checkFile), "%s%sdnode%s%s", tsDataDir, TD_DIRSEP, TD_DIRSEP, DM_CHECK_CODE_FILE); + int32_t nBytes = snprintf(encryptFile, sizeof(encryptFile), "%s%sdnode%s%s", tsDataDir, TD_DIRSEP, TD_DIRSEP, + DM_ENCRYPT_CODE_FILE); + if (nBytes <= 0 || nBytes >= sizeof(encryptFile)) { + code = TSDB_CODE_OUT_OF_BUFFER; + return code; + } - if(!taosCheckExistFile(encryptFile)){ + nBytes = snprintf(checkFile, sizeof(checkFile), "%s%sdnode%s%s", tsDataDir, TD_DIRSEP, TD_DIRSEP, DM_CHECK_CODE_FILE); + if (nBytes <= 0 || nBytes >= sizeof(checkFile)) { + code = TSDB_CODE_OUT_OF_BUFFER; + return code; + } + + if (!taosCheckExistFile(encryptFile)) { + code = TSDB_CODE_DNODE_INVALID_ENCRYPT_CONFIG; dInfo("no exist, checkCode file:%s", encryptFile); return 0; } - if(dmReadEncryptCodeFile(encryptFile, &content) != 0){ + if ((code = dmReadEncryptCodeFile(encryptFile, &content)) != 0) { goto _OVER; } if (!(machineId = tGetMachineId())) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } - if(checkAndGetCryptKey(content, machineId, &encryptKey) != 0){ + if ((code = checkAndGetCryptKey(content, machineId, &encryptKey)) != 0) { goto _OVER; } taosMemoryFreeClear(machineId); taosMemoryFreeClear(content); - if(encryptKey[0] == '\0'){ - terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; - dError("failed to read key since %s", terrstr()); + if (encryptKey[0] == '\0') { + code = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; + dError("failed to read key since %s", tstrerror(code)); goto _OVER; } - if(dmCompareEncryptKey(checkFile, encryptKey, true) != 0){ + if ((code = dmCompareEncryptKey(checkFile, encryptKey, true)) != 0) { goto _OVER; } @@ -477,8 +572,7 @@ _OVER: if (encryptKey != NULL) taosMemoryFree(encryptKey); if (machineId != NULL) taosMemoryFree(machineId); if (code != 0) { - if (terrno == 0) terrno = TAOS_SYSTEM_ERROR(errno); - dError("failed to get encrypt key since %s", terrstr()); + dError("failed to get encrypt key since %s", tstrerror(code)); } return code; #else From cd9b4b132e473b02d73e7c1f83f210f28f6a4a5d Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Wed, 17 Jul 2024 02:51:28 +0000 Subject: [PATCH 04/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 24 ++-- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 56 ++++---- source/os/src/osString.c | 168 +++++++++++++----------- 3 files changed, 130 insertions(+), 118 deletions(-) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 81c048569e..673af68572 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -386,26 +386,26 @@ int mainWindows(int argc, char **argv) { return ret; } - if (dmInitLog() != 0) { + if ((code = dmInitLog()) != 0) { printf("failed to start since init log error\n"); taosCleanupArgs(); - return -1; + return code; } dmPrintArgs(argc, argv); - if (taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0) != 0) { + if ((code = taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0)) != 0) { dError("failed to start since read config error"); taosCloseLog(); taosCleanupArgs(); - return -1; + return code; } - if (taosConvInit() != 0) { + if ((code = taosConvInit()) != 0) { dError("failed to init conv"); taosCloseLog(); taosCleanupArgs(); - return -1; + return code; } if (global.checkS3) { @@ -438,24 +438,24 @@ int mainWindows(int argc, char **argv) { osSetProcPath(argc, (char **)argv); taosCleanupArgs(); - if (dmGetEncryptKey() != 0) { + if ((code = dmGetEncryptKey()) != 0) { dError("failed to start since failed to get encrypt key"); taosCloseLog(); taosCleanupArgs(); - return -1; + return code; }; - if (dmInit() != 0) { - if (terrno == TSDB_CODE_NOT_FOUND) { + if ((code = dmInit()) != 0) { + if (code == TSDB_CODE_NOT_FOUND) { dError("failed to init dnode since unsupported platform, please visit https://www.taosdata.com for support"); } else { - dError("failed to init dnode since %s", terrstr()); + dError("failed to init dnode since %s", tstrerror(code)); } taosCleanupCfg(); taosCloseLog(); taosConvDestroy(); - return -1; + return code; } dInfo("start to init service"); diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 6b402c2a81..6e364e67f6 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -22,14 +22,14 @@ #include "tcompare.h" // clang-format on -#define DM_INIT_AUDIT() \ - do { \ - auditCfg.port = tsMonitorPort; \ - auditCfg.server = tsMonitorFqdn; \ - auditCfg.comp = tsMonitorComp; \ - if (auditInit(&auditCfg) != 0) { \ - return -1; \ - } \ +#define DM_INIT_AUDIT() \ + do { \ + auditCfg.port = tsMonitorPort; \ + auditCfg.server = tsMonitorFqdn; \ + auditCfg.comp = tsMonitorComp; \ + if ((code = auditInit(&auditCfg)) != 0) { \ + return code; \ + } \ } while (0) static SDnode globalDnode = {0}; @@ -41,7 +41,7 @@ static int32_t dmCheckRepeatInit(SDnode *pDnode) { if (atomic_val_compare_exchange_8(&pDnode->once, DND_ENV_INIT, DND_ENV_READY) != DND_ENV_INIT) { dError("env is already initialized"); code = TSDB_CODE_REPEAT_INIT; - return terrno = code; + return code; } return 0; } @@ -61,18 +61,15 @@ static int32_t dmInitMonitor() { monCfg.port = tsMonitorPort; monCfg.server = tsMonitorFqdn; monCfg.comp = tsMonitorComp; - if (monInit(&monCfg) != 0) { - if (terrno != 0) code = terrno; - goto _exit; + if ((code = monInit(&monCfg)) != 0) { + dError("failed to init monitor since %s", tstrerror(code)); } - -_exit: - if (code) terrno = code; return code; } static int32_t dmInitAudit() { SAuditCfg auditCfg = {0}; + int32_t code = 0; DM_INIT_AUDIT(); @@ -91,31 +88,25 @@ static bool dmDataSpaceAvailable() { return true; } -static bool dmCheckDiskSpace() { +static int32_t dmCheckDiskSpace() { osUpdate(); // availability - bool ret = true; + int32_t code = 0; if (!dmDataSpaceAvailable()) { - terrno = TSDB_CODE_NO_DISKSPACE; - ret = false; + code = TSDB_CODE_NO_DISKSPACE; + return code; } if (!osLogSpaceAvailable()) { dError("log disk space unavailable, i.e. %s", tsLogDir); - terrno = TSDB_CODE_NO_DISKSPACE; - ret = false; + code = TSDB_CODE_NO_DISKSPACE; + return code; } if (!osTempSpaceAvailable()) { dError("temp disk space unavailable, i.e. %s", tsTempDir); - terrno = TSDB_CODE_NO_DISKSPACE; - ret = false; + code = TSDB_CODE_NO_DISKSPACE; + return code; } - return ret; -} -static int32_t dmCheckDiskSpaceWrapper() { - if (!dmCheckDiskSpace()) { - return terrno; - } - return 0; + return code; } int32_t tfsOpenWrapper(SDiskCfg *pCfg, int32_t ndisk, STfs **tfs) { @@ -180,7 +171,10 @@ int32_t dmInit() { dInfo("start to init dnode env"); int32_t code = 0; if ((code = dmDiskInit()) != 0) return code; - if ((code = dmCheckDataDirVersion()) != 0) return code; + if (!dmCheckDataDirVersion()) { + code = TSDB_CODE_INVALID_DATA_FMT; + return code; + } if ((code = dmCheckDiskSpace()) != 0) return code; if ((code = dmCheckRepeatInit(dmInstance())) != 0) return code; if ((code = dmInitSystem()) != 0) return code; diff --git a/source/os/src/osString.c b/source/os/src/osString.c index 768bbe5cd1..99a3cdd03d 100644 --- a/source/os/src/osString.c +++ b/source/os/src/osString.c @@ -102,21 +102,21 @@ int32_t tasoUcs4Compare(TdUcs4 *f1_ucs4, TdUcs4 *f2_ucs4, int32_t bytes) { return 0; -//#if 0 -// int32_t ucs4_max_len = bytes + 4; -// char *f1_mbs = taosMemoryCalloc(bytes, 1); -// char *f2_mbs = taosMemoryCalloc(bytes, 1); -// if (taosUcs4ToMbs(f1_ucs4, ucs4_max_len, f1_mbs) < 0) { -// return -1; -// } -// if (taosUcs4ToMbs(f2_ucs4, ucs4_max_len, f2_mbs) < 0) { -// return -1; -// } -// int32_t ret = strcmp(f1_mbs, f2_mbs); -// taosMemoryFree(f1_mbs); -// taosMemoryFree(f2_mbs); -// return ret; -//#endif + //#if 0 + // int32_t ucs4_max_len = bytes + 4; + // char *f1_mbs = taosMemoryCalloc(bytes, 1); + // char *f2_mbs = taosMemoryCalloc(bytes, 1); + // if (taosUcs4ToMbs(f1_ucs4, ucs4_max_len, f1_mbs) < 0) { + // return -1; + // } + // if (taosUcs4ToMbs(f2_ucs4, ucs4_max_len, f2_mbs) < 0) { + // return -1; + // } + // int32_t ret = strcmp(f1_mbs, f2_mbs); + // taosMemoryFree(f1_mbs); + // taosMemoryFree(f2_mbs); + // return ret; + //#endif } TdUcs4 *tasoUcs4Copy(TdUcs4 *target_ucs4, TdUcs4 *source_ucs4, int32_t len_ucs4) { @@ -142,17 +142,22 @@ int32_t taosConvInit(void) { gConv[M2C] = taosMemoryCalloc(gConvMaxNum[M2C], sizeof(SConv)); gConv[1 - M2C] = taosMemoryCalloc(gConvMaxNum[1 - M2C], sizeof(SConv)); + if (gConv[M2C] == NULL || gConv[1 - M2C] == NULL) { + taosMemoryFree(gConv[M2C]); + taosMemoryFree(gConv[1 - M2C]); + return TSDB_CODE_OUT_OF_MEMORY; + } for (int32_t i = 0; i < gConvMaxNum[M2C]; ++i) { gConv[M2C][i].conv = iconv_open(DEFAULT_UNICODE_ENCODEC, tsCharset); if ((iconv_t)-1 == gConv[M2C][i].conv || (iconv_t)0 == gConv[M2C][i].conv) { - return -1; + return TAOS_SYSTEM_ERROR(errno); } } for (int32_t i = 0; i < gConvMaxNum[1 - M2C]; ++i) { gConv[1 - M2C][i].conv = iconv_open(tsCharset, DEFAULT_UNICODE_ENCODEC); if ((iconv_t)-1 == gConv[1 - M2C][i].conv || (iconv_t)0 == gConv[1 - M2C][i].conv) { - return -1; + return TAOS_SYSTEM_ERROR(errno); } } @@ -491,17 +496,17 @@ float taosStr2Float(const char *str, char **pEnd) { return tmp; } -#define HEX_PREFIX_LEN 2 // \x -bool isHex(const char* z, uint32_t n){ - if(n < HEX_PREFIX_LEN) return false; - if(z[0] == '\\' && z[1] == 'x') return true; +#define HEX_PREFIX_LEN 2 // \x +bool isHex(const char *z, uint32_t n) { + if (n < HEX_PREFIX_LEN) return false; + if (z[0] == '\\' && z[1] == 'x') return true; return false; } -bool isValidateHex(const char* z, uint32_t n){ - if((n & 1) != 0) return false; - for(size_t i = HEX_PREFIX_LEN; i < n; i++){ - if(isxdigit(z[i]) == 0){ +bool isValidateHex(const char *z, uint32_t n) { + if ((n & 1) != 0) return false; + for (size_t i = HEX_PREFIX_LEN; i < n; i++) { + if (isxdigit(z[i]) == 0) { return false; } } @@ -540,70 +545,83 @@ int32_t taosHex2Ascii(const char *z, uint32_t n, void **data, uint32_t *size) { return 0; } -//int32_t taosBin2Ascii(const char *z, uint32_t n, void** data, uint32_t* size){ +// int32_t taosBin2Ascii(const char *z, uint32_t n, void** data, uint32_t* size){ // -// for (i = 2; isdigit(z[i]) || (z[i] >= 'a' && z[i] <= 'f') || (z[i] >= 'A' && z[i] <= 'F'); ++i) { -// } +// for (i = 2; isdigit(z[i]) || (z[i] >= 'a' && z[i] <= 'f') || (z[i] >= 'A' && z[i] <= 'F'); ++i) { +// } // -// n -= 2; // remove 0b -// z += 2; -// *size = n%8 == 0 ? n/8 : n/8 + 1; -// uint8_t* tmp = (uint8_t*)taosMemoryCalloc(*size, 1); -// if(tmp == NULL) return -1; -// int8_t num = 0; -// uint8_t *byte = tmp + *size - 1; +// n -= 2; // remove 0b +// z += 2; +// *size = n%8 == 0 ? n/8 : n/8 + 1; +// uint8_t* tmp = (uint8_t*)taosMemoryCalloc(*size, 1); +// if(tmp == NULL) return -1; +// int8_t num = 0; +// uint8_t *byte = tmp + *size - 1; // -// for (int i = n - 1; i >= 0; i--) { -// *byte |= ((uint8_t)(z[i] - '0') << num); -// if (num == 7) { -// byte--; -// num = 0; -// } else { -// num++; -// } -// } -// *data = tmp; -// return 0; -//} +// for (int i = n - 1; i >= 0; i--) { +// *byte |= ((uint8_t)(z[i] - '0') << num); +// if (num == 7) { +// byte--; +// num = 0; +// } else { +// num++; +// } +// } +// *data = tmp; +// return 0; +// } -static char valueOf(uint8_t symbol) -{ - switch(symbol) - { - case 0: return '0'; - case 1: return '1'; - case 2: return '2'; - case 3: return '3'; - case 4: return '4'; - case 5: return '5'; - case 6: return '6'; - case 7: return '7'; - case 8: return '8'; - case 9: return '9'; - case 10: return 'A'; - case 11: return 'B'; - case 12: return 'C'; - case 13: return 'D'; - case 14: return 'E'; - case 15: return 'F'; - default: - { +static char valueOf(uint8_t symbol) { + switch (symbol) { + case 0: + return '0'; + case 1: + return '1'; + case 2: + return '2'; + case 3: + return '3'; + case 4: + return '4'; + case 5: + return '5'; + case 6: + return '6'; + case 7: + return '7'; + case 8: + return '8'; + case 9: + return '9'; + case 10: + return 'A'; + case 11: + return 'B'; + case 12: + return 'C'; + case 13: + return 'D'; + case 14: + return 'E'; + case 15: + return 'F'; + default: { return -1; } } } -int32_t taosAscii2Hex(const char *z, uint32_t n, void** data, uint32_t* size){ +int32_t taosAscii2Hex(const char *z, uint32_t n, void **data, uint32_t *size) { *size = n * 2 + HEX_PREFIX_LEN; - uint8_t* tmp = (uint8_t*)taosMemoryCalloc(*size + 1, 1); - if(tmp == NULL) return -1; + uint8_t *tmp = (uint8_t *)taosMemoryCalloc(*size + 1, 1); + if (tmp == NULL) return -1; *data = tmp; *(tmp++) = '\\'; *(tmp++) = 'x'; - for(int i = 0; i < n; i ++){ + for (int i = 0; i < n; i++) { uint8_t val = z[i]; - tmp[i*2] = valueOf(val >> 4); - tmp[i*2 + 1] = valueOf(val & 0x0F); + tmp[i * 2] = valueOf(val >> 4); + tmp[i * 2 + 1] = valueOf(val & 0x0F); } return 0; } From f0fa962410b659325f7b4606a8f3e71f630b68ab Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Wed, 17 Jul 2024 03:00:38 +0000 Subject: [PATCH 05/64] refactor error code --- source/dnode/mgmt/mgmt_mnode/src/mmFile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/mgmt/mgmt_mnode/src/mmFile.c b/source/dnode/mgmt/mgmt_mnode/src/mmFile.c index b9b98eb09b..563d123b83 100644 --- a/source/dnode/mgmt/mgmt_mnode/src/mmFile.c +++ b/source/dnode/mgmt/mgmt_mnode/src/mmFile.c @@ -28,7 +28,7 @@ static int32_t mmDecodeOption(SJson *pJson, SMnodeOpt *pOption) { if (code < 0) return code; SJson *replicas = tjsonGetObjectItem(pJson, "replicas"); - if (replicas == NULL) return TSDB_CODE_INVALID_JSON_FORMAT; + if (replicas == NULL) return 0; pOption->numOfTotalReplicas = tjsonGetArraySize(replicas); pOption->numOfReplicas = 0; From 3369f7ae41e0cd323e42761972125585ddbc9ecd Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 00:48:27 +0000 Subject: [PATCH 06/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 673af68572..d3236a7940 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -167,23 +167,23 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) { if (i < argc - 1) { if (strlen(argv[++i]) >= PATH_MAX) { printf("config file path overflow"); - return -1; + return TSDB_CODE_INVALID_CFG; } tstrncpy(configDir, argv[i], PATH_MAX); } else { printf("'-c' requires a parameter, default is %s\n", configDir); - return -1; + return TSDB_CODE_INVALID_CFG; } } else if (strcmp(argv[i], "-a") == 0) { if (i < argc - 1) { if (strlen(argv[++i]) >= PATH_MAX) { printf("apollo url overflow"); - return -1; + return TSDB_CODE_INVALID_CFG; } tstrncpy(global.apolloUrl, argv[i], PATH_MAX); } else { printf("'-a' requires a parameter\n"); - return -1; + return TSDB_CODE_INVALID_CFG; } } else if (strcmp(argv[i], "-s") == 0) { global.dumpSdb = true; @@ -191,12 +191,12 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) { if (i < argc - 1) { if (strlen(argv[++i]) >= PATH_MAX) { printf("env file path overflow"); - return -1; + return TSDB_CODE_INVALID_CFG; } tstrncpy(global.envFile, argv[i], PATH_MAX); } else { printf("'-E' requires a parameter\n"); - return -1; + return TSDB_CODE_INVALID_CFG; } } else if (strcmp(argv[i], "-k") == 0) { global.generateGrant = true; @@ -206,16 +206,16 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) { int32_t len = strlen(argv[++i]); if (len < ENCRYPT_KEY_LEN_MIN) { printf("ERROR: Encrypt key should be at least %d characters\n", ENCRYPT_KEY_LEN_MIN); - return -1; + return TSDB_CODE_INVALID_CFG; } if (len > ENCRYPT_KEY_LEN) { printf("ERROR: Encrypt key overflow, it should be at most %d characters\n", ENCRYPT_KEY_LEN); - return -1; + return TSDB_CODE_INVALID_CFG; } tstrncpy(global.encryptKey, argv[i], ENCRYPT_KEY_LEN); } else { printf("'-y' requires a parameter\n"); - return -1; + return TSDB_CODE_INVALID_CFG; } } else if (strcmp(argv[i], "-C") == 0) { global.dumpConfig = true; From 3fc95ef47c623ef48ddcd60ddf3c063e1969c0fc Mon Sep 17 00:00:00 2001 From: dmchen Date: Thu, 18 Jul 2024 04:47:49 +0000 Subject: [PATCH 07/64] fix/TD-30989 --- include/util/taoserror.h | 1 + source/dnode/mnode/impl/src/mndDb.c | 676 +++++++++++++++------------- source/util/src/terror.c | 1 + 3 files changed, 360 insertions(+), 318 deletions(-) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 053bb20e2a..6e001f303e 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -224,6 +224,7 @@ int32_t taosGetErrSize(); // #define TSDB_CODE_MND_FAILED_TO_INIT_STEP TAOS_DEF_ERROR_CODE(0, 0x0314) // 2.x #define TSDB_CODE_MND_USER_DISABLED TAOS_DEF_ERROR_CODE(0, 0x0315) #define TSDB_CODE_MND_INVALID_PLATFORM TAOS_DEF_ERROR_CODE(0, 0x0316) +#define TSDB_CODE_MND_RETURN_VALUE_NULL TAOS_DEF_ERROR_CODE(0, 0x0317) // mnode-sdb #define TSDB_CODE_SDB_OBJ_ALREADY_THERE TAOS_DEF_ERROR_CODE(0, 0x0320) // internal diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 8432855c6f..9e3e95e0b7 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -290,14 +290,24 @@ static int32_t mndNewDbActionValidate(SMnode *pMnode, STrans *pTrans, SSdbRaw *p int code = -1; pRow = mndDbActionDecode(pRaw); - if (pRow == NULL) goto _OVER; + if (pRow == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } pNewDb = sdbGetRowObj(pRow); - if (pNewDb == NULL) goto _OVER; + if (pNewDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } SDbObj *pOldDb = sdbAcquire(pMnode->pSdb, SDB_DB, pNewDb->name); if (pOldDb != NULL) { mError("trans:%d, db name already in use. name: %s", pTrans->id, pNewDb->name); sdbRelease(pMnode->pSdb, pOldDb); + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -387,143 +397,139 @@ void mndReleaseDb(SMnode *pMnode, SDbObj *pDb) { static int32_t mndCheckDbName(const char *dbName, SUserObj *pUser) { char *pos = strstr(dbName, TS_PATH_DELIMITER); if (pos == NULL) { - terrno = TSDB_CODE_MND_INVALID_DB; - return -1; + return TSDB_CODE_MND_INVALID_DB; } int32_t acctId = atoi(dbName); if (acctId != pUser->acctId) { - terrno = TSDB_CODE_MND_INVALID_DB_ACCT; - return -1; + return TSDB_CODE_MND_INVALID_DB_ACCT; } return 0; } static int32_t mndCheckDbCfg(SMnode *pMnode, SDbCfg *pCfg) { - terrno = TSDB_CODE_MND_INVALID_DB_OPTION; + int32_t code = TSDB_CODE_MND_INVALID_DB_OPTION; - if (pCfg->numOfVgroups < TSDB_MIN_VNODES_PER_DB || pCfg->numOfVgroups > TSDB_MAX_VNODES_PER_DB) return -1; - if (pCfg->numOfStables < TSDB_DB_STREAM_MODE_OFF || pCfg->numOfStables > TSDB_DB_STREAM_MODE_ON) return -1; - if (pCfg->buffer < TSDB_MIN_BUFFER_PER_VNODE || pCfg->buffer > TSDB_MAX_BUFFER_PER_VNODE) return -1; - if (pCfg->pageSize < TSDB_MIN_PAGESIZE_PER_VNODE || pCfg->pageSize > TSDB_MAX_PAGESIZE_PER_VNODE) return -1; - if (pCfg->pages < TSDB_MIN_PAGES_PER_VNODE || pCfg->pages > TSDB_MAX_PAGES_PER_VNODE) return -1; - if (pCfg->cacheLastSize < TSDB_MIN_DB_CACHE_SIZE || pCfg->cacheLastSize > TSDB_MAX_DB_CACHE_SIZE) return -1; - if (pCfg->daysPerFile < TSDB_MIN_DAYS_PER_FILE || pCfg->daysPerFile > TSDB_MAX_DAYS_PER_FILE) return -1; - if (pCfg->daysToKeep0 < TSDB_MIN_KEEP || pCfg->daysToKeep0 > TSDB_MAX_KEEP) return -1; - if (pCfg->daysToKeep1 < TSDB_MIN_KEEP || pCfg->daysToKeep1 > TSDB_MAX_KEEP) return -1; - if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > TSDB_MAX_KEEP) return -1; - if (pCfg->daysToKeep0 < pCfg->daysPerFile) return -1; - if (pCfg->daysToKeep0 > pCfg->daysToKeep1) return -1; - if (pCfg->daysToKeep1 > pCfg->daysToKeep2) return -1; - if (pCfg->keepTimeOffset < TSDB_MIN_KEEP_TIME_OFFSET || pCfg->keepTimeOffset > TSDB_MAX_KEEP_TIME_OFFSET) return -1; - if (pCfg->minRows < TSDB_MIN_MINROWS_FBLOCK || pCfg->minRows > TSDB_MAX_MINROWS_FBLOCK) return -1; - if (pCfg->maxRows < TSDB_MIN_MAXROWS_FBLOCK || pCfg->maxRows > TSDB_MAX_MAXROWS_FBLOCK) return -1; - if (pCfg->minRows > pCfg->maxRows) return -1; - if (pCfg->walFsyncPeriod < TSDB_MIN_FSYNC_PERIOD || pCfg->walFsyncPeriod > TSDB_MAX_FSYNC_PERIOD) return -1; - if (pCfg->walLevel < TSDB_MIN_WAL_LEVEL || pCfg->walLevel > TSDB_MAX_WAL_LEVEL) return -1; - if (pCfg->precision < TSDB_MIN_PRECISION && pCfg->precision > TSDB_MAX_PRECISION) return -1; - if (pCfg->compression < TSDB_MIN_COMP_LEVEL || pCfg->compression > TSDB_MAX_COMP_LEVEL) return -1; - if (pCfg->replications < TSDB_MIN_DB_REPLICA || pCfg->replications > TSDB_MAX_DB_REPLICA) return -1; + if (pCfg->numOfVgroups < TSDB_MIN_VNODES_PER_DB || pCfg->numOfVgroups > TSDB_MAX_VNODES_PER_DB) return code; + if (pCfg->numOfStables < TSDB_DB_STREAM_MODE_OFF || pCfg->numOfStables > TSDB_DB_STREAM_MODE_ON) return code; + if (pCfg->buffer < TSDB_MIN_BUFFER_PER_VNODE || pCfg->buffer > TSDB_MAX_BUFFER_PER_VNODE) return code; + if (pCfg->pageSize < TSDB_MIN_PAGESIZE_PER_VNODE || pCfg->pageSize > TSDB_MAX_PAGESIZE_PER_VNODE) return code; + if (pCfg->pages < TSDB_MIN_PAGES_PER_VNODE || pCfg->pages > TSDB_MAX_PAGES_PER_VNODE) return code; + if (pCfg->cacheLastSize < TSDB_MIN_DB_CACHE_SIZE || pCfg->cacheLastSize > TSDB_MAX_DB_CACHE_SIZE) return code; + if (pCfg->daysPerFile < TSDB_MIN_DAYS_PER_FILE || pCfg->daysPerFile > TSDB_MAX_DAYS_PER_FILE) return code; + if (pCfg->daysToKeep0 < TSDB_MIN_KEEP || pCfg->daysToKeep0 > TSDB_MAX_KEEP) return code; + if (pCfg->daysToKeep1 < TSDB_MIN_KEEP || pCfg->daysToKeep1 > TSDB_MAX_KEEP) return code; + if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > TSDB_MAX_KEEP) return code; + if (pCfg->daysToKeep0 < pCfg->daysPerFile) return code; + if (pCfg->daysToKeep0 > pCfg->daysToKeep1) return code; + if (pCfg->daysToKeep1 > pCfg->daysToKeep2) return code; + if (pCfg->keepTimeOffset < TSDB_MIN_KEEP_TIME_OFFSET || pCfg->keepTimeOffset > TSDB_MAX_KEEP_TIME_OFFSET) return code; + if (pCfg->minRows < TSDB_MIN_MINROWS_FBLOCK || pCfg->minRows > TSDB_MAX_MINROWS_FBLOCK) return code; + if (pCfg->maxRows < TSDB_MIN_MAXROWS_FBLOCK || pCfg->maxRows > TSDB_MAX_MAXROWS_FBLOCK) return code; + if (pCfg->minRows > pCfg->maxRows) return code; + if (pCfg->walFsyncPeriod < TSDB_MIN_FSYNC_PERIOD || pCfg->walFsyncPeriod > TSDB_MAX_FSYNC_PERIOD) return code; + if (pCfg->walLevel < TSDB_MIN_WAL_LEVEL || pCfg->walLevel > TSDB_MAX_WAL_LEVEL) return code; + if (pCfg->precision < TSDB_MIN_PRECISION && pCfg->precision > TSDB_MAX_PRECISION) return code; + if (pCfg->compression < TSDB_MIN_COMP_LEVEL || pCfg->compression > TSDB_MAX_COMP_LEVEL) return code; + if (pCfg->replications < TSDB_MIN_DB_REPLICA || pCfg->replications > TSDB_MAX_DB_REPLICA) return code; #ifdef TD_ENTERPRISE - if ((pCfg->replications == 2) ^ (pCfg->withArbitrator == TSDB_MAX_DB_WITH_ARBITRATOR)) return -1; - if (pCfg->encryptAlgorithm < TSDB_MIN_ENCRYPT_ALGO || pCfg->encryptAlgorithm > TSDB_MAX_ENCRYPT_ALGO) return -1; + if ((pCfg->replications == 2) ^ (pCfg->withArbitrator == TSDB_MAX_DB_WITH_ARBITRATOR)) return code; + if (pCfg->encryptAlgorithm < TSDB_MIN_ENCRYPT_ALGO || pCfg->encryptAlgorithm > TSDB_MAX_ENCRYPT_ALGO) return code; #else - if (pCfg->replications != 1 && pCfg->replications != 3) return -1; - if (pCfg->encryptAlgorithm != TSDB_DEFAULT_ENCRYPT_ALGO) return -1; + if (pCfg->replications != 1 && pCfg->replications != 3) return code; + if (pCfg->encryptAlgorithm != TSDB_DEFAULT_ENCRYPT_ALGO) return code; #endif - if (pCfg->strict < TSDB_DB_STRICT_OFF || pCfg->strict > TSDB_DB_STRICT_ON) return -1; - if (pCfg->schemaless < TSDB_DB_SCHEMALESS_OFF || pCfg->schemaless > TSDB_DB_SCHEMALESS_ON) return -1; - if (pCfg->cacheLast < TSDB_CACHE_MODEL_NONE || pCfg->cacheLast > TSDB_CACHE_MODEL_BOTH) return -1; - if (pCfg->hashMethod != 1) return -1; + if (pCfg->strict < TSDB_DB_STRICT_OFF || pCfg->strict > TSDB_DB_STRICT_ON) return code; + if (pCfg->schemaless < TSDB_DB_SCHEMALESS_OFF || pCfg->schemaless > TSDB_DB_SCHEMALESS_ON) return code; + if (pCfg->cacheLast < TSDB_CACHE_MODEL_NONE || pCfg->cacheLast > TSDB_CACHE_MODEL_BOTH) return code; + if (pCfg->hashMethod != 1) return code; if (pCfg->replications > mndGetDnodeSize(pMnode)) { terrno = TSDB_CODE_MND_NO_ENOUGH_DNODES; - return -1; + return code; } - if (pCfg->walRetentionPeriod < TSDB_DB_MIN_WAL_RETENTION_PERIOD) return -1; - if (pCfg->walRetentionSize < TSDB_DB_MIN_WAL_RETENTION_SIZE) return -1; - if (pCfg->walRollPeriod < TSDB_DB_MIN_WAL_ROLL_PERIOD) return -1; - if (pCfg->walSegmentSize < TSDB_DB_MIN_WAL_SEGMENT_SIZE) return -1; - if (pCfg->sstTrigger < TSDB_MIN_STT_TRIGGER || pCfg->sstTrigger > TSDB_MAX_STT_TRIGGER) return -1; - if (pCfg->hashPrefix < TSDB_MIN_HASH_PREFIX || pCfg->hashPrefix > TSDB_MAX_HASH_PREFIX) return -1; - if (pCfg->hashSuffix < TSDB_MIN_HASH_SUFFIX || pCfg->hashSuffix > TSDB_MAX_HASH_SUFFIX) return -1; - if ((pCfg->hashSuffix * pCfg->hashPrefix) < 0) return -1; - if ((pCfg->hashPrefix + pCfg->hashSuffix) >= (TSDB_TABLE_NAME_LEN - 1)) return -1; - if (pCfg->tsdbPageSize < TSDB_MIN_TSDB_PAGESIZE || pCfg->tsdbPageSize > TSDB_MAX_TSDB_PAGESIZE) return -1; - if (taosArrayGetSize(pCfg->pRetensions) != pCfg->numOfRetensions) return -1; + if (pCfg->walRetentionPeriod < TSDB_DB_MIN_WAL_RETENTION_PERIOD) return code; + if (pCfg->walRetentionSize < TSDB_DB_MIN_WAL_RETENTION_SIZE) return code; + if (pCfg->walRollPeriod < TSDB_DB_MIN_WAL_ROLL_PERIOD) return code; + if (pCfg->walSegmentSize < TSDB_DB_MIN_WAL_SEGMENT_SIZE) return code; + if (pCfg->sstTrigger < TSDB_MIN_STT_TRIGGER || pCfg->sstTrigger > TSDB_MAX_STT_TRIGGER) return code; + if (pCfg->hashPrefix < TSDB_MIN_HASH_PREFIX || pCfg->hashPrefix > TSDB_MAX_HASH_PREFIX) return code; + if (pCfg->hashSuffix < TSDB_MIN_HASH_SUFFIX || pCfg->hashSuffix > TSDB_MAX_HASH_SUFFIX) return code; + if ((pCfg->hashSuffix * pCfg->hashPrefix) < 0) return code; + if ((pCfg->hashPrefix + pCfg->hashSuffix) >= (TSDB_TABLE_NAME_LEN - 1)) return code; + if (pCfg->tsdbPageSize < TSDB_MIN_TSDB_PAGESIZE || pCfg->tsdbPageSize > TSDB_MAX_TSDB_PAGESIZE) return code; + if (taosArrayGetSize(pCfg->pRetensions) != pCfg->numOfRetensions) return code; - if (pCfg->s3ChunkSize < TSDB_MIN_S3_CHUNK_SIZE || pCfg->s3ChunkSize > TSDB_MAX_S3_CHUNK_SIZE) return -1; - if (pCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return -1; - if (pCfg->s3Compact < TSDB_MIN_S3_COMPACT || pCfg->s3Compact > TSDB_MAX_S3_COMPACT) return -1; + if (pCfg->s3ChunkSize < TSDB_MIN_S3_CHUNK_SIZE || pCfg->s3ChunkSize > TSDB_MAX_S3_CHUNK_SIZE) return code; + if (pCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return code; + if (pCfg->s3Compact < TSDB_MIN_S3_COMPACT || pCfg->s3Compact > TSDB_MAX_S3_COMPACT) return code; - terrno = 0; - return terrno; + TAOS_RETURN(code); } static int32_t mndCheckInChangeDbCfg(SMnode *pMnode, SDbCfg *pOldCfg, SDbCfg *pNewCfg) { - terrno = TSDB_CODE_MND_INVALID_DB_OPTION; - if (pNewCfg->buffer < TSDB_MIN_BUFFER_PER_VNODE || pNewCfg->buffer > TSDB_MAX_BUFFER_PER_VNODE) return -1; - if (pNewCfg->pages < TSDB_MIN_PAGES_PER_VNODE || pNewCfg->pages > TSDB_MAX_PAGES_PER_VNODE) return -1; - if (pNewCfg->pageSize < TSDB_MIN_PAGESIZE_PER_VNODE || pNewCfg->pageSize > TSDB_MAX_PAGESIZE_PER_VNODE) return -1; - if (pNewCfg->daysPerFile < TSDB_MIN_DAYS_PER_FILE || pNewCfg->daysPerFile > TSDB_MAX_DAYS_PER_FILE) return -1; - if (pNewCfg->daysToKeep0 < TSDB_MIN_KEEP || pNewCfg->daysToKeep0 > TSDB_MAX_KEEP) return -1; - if (pNewCfg->daysToKeep1 < TSDB_MIN_KEEP || pNewCfg->daysToKeep1 > TSDB_MAX_KEEP) return -1; - if (pNewCfg->daysToKeep2 < TSDB_MIN_KEEP || pNewCfg->daysToKeep2 > TSDB_MAX_KEEP) return -1; - if (pNewCfg->daysToKeep0 < pNewCfg->daysPerFile) return -1; - if (pNewCfg->daysToKeep0 > pNewCfg->daysToKeep1) return -1; - if (pNewCfg->daysToKeep1 > pNewCfg->daysToKeep2) return -1; + int32_t code = TSDB_CODE_MND_INVALID_DB_OPTION; + if (pNewCfg->buffer < TSDB_MIN_BUFFER_PER_VNODE || pNewCfg->buffer > TSDB_MAX_BUFFER_PER_VNODE) return code; + if (pNewCfg->pages < TSDB_MIN_PAGES_PER_VNODE || pNewCfg->pages > TSDB_MAX_PAGES_PER_VNODE) return code; + if (pNewCfg->pageSize < TSDB_MIN_PAGESIZE_PER_VNODE || pNewCfg->pageSize > TSDB_MAX_PAGESIZE_PER_VNODE) return code; + if (pNewCfg->daysPerFile < TSDB_MIN_DAYS_PER_FILE || pNewCfg->daysPerFile > TSDB_MAX_DAYS_PER_FILE) return code; + if (pNewCfg->daysToKeep0 < TSDB_MIN_KEEP || pNewCfg->daysToKeep0 > TSDB_MAX_KEEP) return code; + if (pNewCfg->daysToKeep1 < TSDB_MIN_KEEP || pNewCfg->daysToKeep1 > TSDB_MAX_KEEP) return code; + if (pNewCfg->daysToKeep2 < TSDB_MIN_KEEP || pNewCfg->daysToKeep2 > TSDB_MAX_KEEP) return code; + if (pNewCfg->daysToKeep0 < pNewCfg->daysPerFile) return code; + if (pNewCfg->daysToKeep0 > pNewCfg->daysToKeep1) return code; + if (pNewCfg->daysToKeep1 > pNewCfg->daysToKeep2) return code; if (pNewCfg->keepTimeOffset < TSDB_MIN_KEEP_TIME_OFFSET || pNewCfg->keepTimeOffset > TSDB_MAX_KEEP_TIME_OFFSET) - return -1; - if (pNewCfg->walFsyncPeriod < TSDB_MIN_FSYNC_PERIOD || pNewCfg->walFsyncPeriod > TSDB_MAX_FSYNC_PERIOD) return -1; - if (pNewCfg->walLevel < TSDB_MIN_WAL_LEVEL || pNewCfg->walLevel > TSDB_MAX_WAL_LEVEL) return -1; - if (pNewCfg->cacheLast < TSDB_CACHE_MODEL_NONE || pNewCfg->cacheLast > TSDB_CACHE_MODEL_BOTH) return -1; - if (pNewCfg->cacheLastSize < TSDB_MIN_DB_CACHE_SIZE || pNewCfg->cacheLastSize > TSDB_MAX_DB_CACHE_SIZE) return -1; - if (pNewCfg->replications < TSDB_MIN_DB_REPLICA || pNewCfg->replications > TSDB_MAX_DB_REPLICA) return -1; + return code; + if (pNewCfg->walFsyncPeriod < TSDB_MIN_FSYNC_PERIOD || pNewCfg->walFsyncPeriod > TSDB_MAX_FSYNC_PERIOD) return code; + if (pNewCfg->walLevel < TSDB_MIN_WAL_LEVEL || pNewCfg->walLevel > TSDB_MAX_WAL_LEVEL) return code; + if (pNewCfg->cacheLast < TSDB_CACHE_MODEL_NONE || pNewCfg->cacheLast > TSDB_CACHE_MODEL_BOTH) return code; + if (pNewCfg->cacheLastSize < TSDB_MIN_DB_CACHE_SIZE || pNewCfg->cacheLastSize > TSDB_MAX_DB_CACHE_SIZE) return code; + if (pNewCfg->replications < TSDB_MIN_DB_REPLICA || pNewCfg->replications > TSDB_MAX_DB_REPLICA) return code; #ifdef TD_ENTERPRISE - if ((pNewCfg->replications == 2) ^ (pNewCfg->withArbitrator == TSDB_MAX_DB_WITH_ARBITRATOR)) return -1; + if ((pNewCfg->replications == 2) ^ (pNewCfg->withArbitrator == TSDB_MAX_DB_WITH_ARBITRATOR)) return code; if (pNewCfg->replications == 2 && pNewCfg->withArbitrator == TSDB_MAX_DB_WITH_ARBITRATOR) { if (pOldCfg->replications != 1 && pOldCfg->replications != 2) { terrno = TSDB_CODE_OPS_NOT_SUPPORT; - return -1; + return code; } } if (pNewCfg->replications != 2 && pOldCfg->replications == 2) { terrno = TSDB_CODE_OPS_NOT_SUPPORT; - return -1; + return code; } #else - if (pNewCfg->replications != 1 && pNewCfg->replications != 3) return -1; + if (pNewCfg->replications != 1 && pNewCfg->replications != 3) return code; #endif if (pNewCfg->walLevel == 0 && pOldCfg->replications > 1) { terrno = TSDB_CODE_MND_INVALID_WAL_LEVEL; - return -1; + return code; } if (pNewCfg->replications > 1 && pOldCfg->walLevel == 0) { terrno = TSDB_CODE_MND_INVALID_WAL_LEVEL; - return -1; + return code; } if (pNewCfg->sstTrigger != pOldCfg->sstTrigger && (pNewCfg->sstTrigger < TSDB_MIN_STT_TRIGGER || pNewCfg->sstTrigger > TSDB_MAX_STT_TRIGGER)) - return -1; - if (pNewCfg->minRows < TSDB_MIN_MINROWS_FBLOCK || pNewCfg->minRows > TSDB_MAX_MINROWS_FBLOCK) return -1; - if (pNewCfg->maxRows < TSDB_MIN_MAXROWS_FBLOCK || pNewCfg->maxRows > TSDB_MAX_MAXROWS_FBLOCK) return -1; - if (pNewCfg->minRows > pNewCfg->maxRows) return -1; - if (pNewCfg->walRetentionPeriod < TSDB_DB_MIN_WAL_RETENTION_PERIOD) return -1; - if (pNewCfg->walRetentionSize < TSDB_DB_MIN_WAL_RETENTION_SIZE) return -1; - if (pNewCfg->strict < TSDB_DB_STRICT_OFF || pNewCfg->strict > TSDB_DB_STRICT_ON) return -1; + return code; + if (pNewCfg->minRows < TSDB_MIN_MINROWS_FBLOCK || pNewCfg->minRows > TSDB_MAX_MINROWS_FBLOCK) return code; + if (pNewCfg->maxRows < TSDB_MIN_MAXROWS_FBLOCK || pNewCfg->maxRows > TSDB_MAX_MAXROWS_FBLOCK) return code; + if (pNewCfg->minRows > pNewCfg->maxRows) return code; + if (pNewCfg->walRetentionPeriod < TSDB_DB_MIN_WAL_RETENTION_PERIOD) return code; + if (pNewCfg->walRetentionSize < TSDB_DB_MIN_WAL_RETENTION_SIZE) return code; + if (pNewCfg->strict < TSDB_DB_STRICT_OFF || pNewCfg->strict > TSDB_DB_STRICT_ON) return code; if (pNewCfg->replications > mndGetDnodeSize(pMnode)) { terrno = TSDB_CODE_MND_NO_ENOUGH_DNODES; - return -1; + return code; } - if (pNewCfg->s3ChunkSize < TSDB_MIN_S3_CHUNK_SIZE || pNewCfg->s3ChunkSize > TSDB_MAX_S3_CHUNK_SIZE) return -1; - if (pNewCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pNewCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return -1; - if (pNewCfg->s3Compact < TSDB_MIN_S3_COMPACT || pNewCfg->s3Compact > TSDB_MAX_S3_COMPACT) return -1; + if (pNewCfg->s3ChunkSize < TSDB_MIN_S3_CHUNK_SIZE || pNewCfg->s3ChunkSize > TSDB_MAX_S3_CHUNK_SIZE) return code; + if (pNewCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pNewCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return code; + if (pNewCfg->s3Compact < TSDB_MIN_S3_COMPACT || pNewCfg->s3Compact > TSDB_MAX_S3_COMPACT) return code; - terrno = 0; - return terrno; + TAOS_RETURN(code); } static void mndSetDefaultDbCfg(SDbCfg *pCfg) { @@ -581,16 +587,25 @@ static int32_t mndSetNewVgPrepareActions(SMnode *pMnode, STrans *pTrans, SDbObj } static int32_t mndSetCreateDbRedoLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroups) { + int32_t code = 0; SSdbRaw *pDbRaw = mndDbActionEncode(pDb); - if (pDbRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pDbRaw) != 0) return -1; - if (sdbSetRawStatus(pDbRaw, SDB_STATUS_UPDATE) != 0) return -1; + if (pDbRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pDbRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pDbRaw, SDB_STATUS_UPDATE)); for (int32_t v = 0; v < pDb->cfg.numOfVgroups; ++v) { SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroups + v); - if (pVgRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pVgRaw) != 0) return -1; - if (sdbSetRawStatus(pVgRaw, SDB_STATUS_UPDATE) != 0) return -1; + if (pVgRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pVgRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pVgRaw, SDB_STATUS_UPDATE)); } if (pDb->cfg.withArbitrator) { @@ -598,24 +613,33 @@ static int32_t mndSetCreateDbRedoLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD SVgObj *pVgObj = pVgroups + v; SArbGroup arbGroup = {0}; mndArbGroupInitFromVgObj(pVgObj, &arbGroup); - if (mndSetCreateArbGroupRedoLogs(pTrans, &arbGroup) != 0) return -1; + TAOS_CHECK_RETURN(mndSetCreateArbGroupRedoLogs(pTrans, &arbGroup)); } } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateDbUndoLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroups) { + int32_t code = 0; SSdbRaw *pDbRaw = mndDbActionEncode(pDb); - if (pDbRaw == NULL) return -1; - if (mndTransAppendUndolog(pTrans, pDbRaw) != 0) return -1; - if (sdbSetRawStatus(pDbRaw, SDB_STATUS_DROPPED) != 0) return -1; + if (pDbRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendUndolog(pTrans, pDbRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pDbRaw, SDB_STATUS_DROPPED)); for (int32_t v = 0; v < pDb->cfg.numOfVgroups; ++v) { SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroups + v); - if (pVgRaw == NULL) return -1; - if (mndTransAppendUndolog(pTrans, pVgRaw) != 0) return -1; - if (sdbSetRawStatus(pVgRaw, SDB_STATUS_DROPPED) != 0) return -1; + if (pVgRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendUndolog(pTrans, pVgRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pVgRaw, SDB_STATUS_DROPPED)); } if (pDb->cfg.withArbitrator) { @@ -623,25 +647,34 @@ static int32_t mndSetCreateDbUndoLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD SVgObj *pVgObj = pVgroups + v; SArbGroup arbGroup = {0}; mndArbGroupInitFromVgObj(pVgObj, &arbGroup); - if (mndSetCreateArbGroupUndoLogs(pTrans, &arbGroup) != 0) return -1; + TAOS_CHECK_RETURN(mndSetCreateArbGroupUndoLogs(pTrans, &arbGroup)); } } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroups, SUserObj *pUserDuped) { + int32_t code = 0; SSdbRaw *pDbRaw = mndDbActionEncode(pDb); - if (pDbRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pDbRaw) != 0) return -1; - if (sdbSetRawStatus(pDbRaw, SDB_STATUS_READY) != 0) return -1; + if (pDbRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pDbRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pDbRaw, SDB_STATUS_READY)); for (int32_t v = 0; v < pDb->cfg.numOfVgroups; ++v) { SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroups + v); - if (pVgRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pVgRaw) != 0) return -1; - if (sdbSetRawStatus(pVgRaw, SDB_STATUS_READY) != 0) return -1; + if (pVgRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pVgRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pVgRaw, SDB_STATUS_READY)); } if (pDb->cfg.withArbitrator) { @@ -649,51 +682,54 @@ static int32_t mndSetCreateDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj * SVgObj *pVgObj = pVgroups + v; SArbGroup arbGroup = {0}; mndArbGroupInitFromVgObj(pVgObj, &arbGroup); - if (mndSetCreateArbGroupCommitLogs(pTrans, &arbGroup) != 0) return -1; + TAOS_CHECK_RETURN(mndSetCreateArbGroupCommitLogs(pTrans, &arbGroup)); } } if (pUserDuped) { SSdbRaw *pUserRaw = mndUserActionEncode(pUserDuped); - if (pUserRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pUserRaw) != 0) return -1; - if (sdbSetRawStatus(pUserRaw, SDB_STATUS_READY) != 0) return -1; + if (pUserRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pUserRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pUserRaw, SDB_STATUS_READY)); } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroups) { + int32_t code = 0; for (int32_t vg = 0; vg < pDb->cfg.numOfVgroups; ++vg) { SVgObj *pVgroup = pVgroups + vg; for (int32_t vn = 0; vn < pVgroup->replica; ++vn) { SVnodeGid *pVgid = pVgroup->vnodeGid + vn; - if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndAddCreateVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid)); } } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateDbUndoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroups) { + int32_t code = 0; for (int32_t vg = 0; vg < pDb->cfg.numOfVgroups; ++vg) { SVgObj *pVgroup = pVgroups + vg; for (int32_t vn = 0; vn < pVgroup->replica; ++vn) { SVnodeGid *pVgid = pVgroup->vnodeGid + vn; - if (mndAddDropVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid, false) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndAddDropVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid, false)); } } - return 0; + TAOS_RETURN(code); } static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, SUserObj *pUser) { + int32_t code = -1; SDbObj dbObj = {0}; memcpy(dbObj.name, pCreate->db, TSDB_DB_FNAME_LEN); memcpy(dbObj.acct, pUser->acct, TSDB_USER_LEN); @@ -747,14 +783,14 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, mndSetDefaultDbCfg(&dbObj.cfg); - if (mndCheckDbName(dbObj.name, pUser) != 0) { + if ((code = mndCheckDbName(dbObj.name, pUser)) != 0) { mError("db:%s, failed to create since %s", pCreate->db, terrstr()); - return -1; + TAOS_RETURN(code); } - if (mndCheckDbCfg(pMnode, &dbObj.cfg) != 0) { + if ((code = mndCheckDbCfg(pMnode, &dbObj.cfg)) != 0) { mError("db:%s, failed to create since %s", pCreate->db, terrstr()); - return -1; + TAOS_RETURN(code); } if (dbObj.cfg.hashPrefix > 0) { @@ -768,37 +804,40 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate, } SVgObj *pVgroups = NULL; - if (mndAllocVgroup(pMnode, &dbObj, &pVgroups) != 0) { + if ((code = mndAllocVgroup(pMnode, &dbObj, &pVgroups)) != 0) { mError("db:%s, failed to create since %s", pCreate->db, terrstr()); - return -1; + TAOS_RETURN(code); } // add database privileges for user SUserObj newUserObj = {0}, *pNewUserDuped = NULL; if (!pUser->superUser) { - if (mndUserDupObj(pUser, &newUserObj) != 0) goto _OVER; + 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); pNewUserDuped = &newUserObj; } - int32_t code = -1; STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_DB, pReq, "create-db"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } // mndTransSetSerial(pTrans); mInfo("trans:%d, used to create db:%s", pTrans->id, pCreate->db); mndTransSetDbName(pTrans, dbObj.name, NULL); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); mndTransSetOper(pTrans, MND_OPER_CREATE_DB); - if (mndSetCreateDbPrepareAction(pMnode, pTrans, &dbObj) != 0) goto _OVER; - if (mndSetCreateDbRedoActions(pMnode, pTrans, &dbObj, pVgroups) != 0) goto _OVER; - if (mndSetNewVgPrepareActions(pMnode, pTrans, &dbObj, pVgroups) != 0) goto _OVER; - if (mndSetCreateDbUndoLogs(pMnode, pTrans, &dbObj, pVgroups) != 0) goto _OVER; - if (mndSetCreateDbCommitLogs(pMnode, pTrans, &dbObj, pVgroups, pNewUserDuped) != 0) goto _OVER; - if (mndSetCreateDbUndoActions(pMnode, pTrans, &dbObj, pVgroups) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetCreateDbPrepareAction(pMnode, pTrans, &dbObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateDbRedoActions(pMnode, pTrans, &dbObj, pVgroups), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetNewVgPrepareActions(pMnode, pTrans, &dbObj, pVgroups), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateDbUndoLogs(pMnode, pTrans, &dbObj, pVgroups), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateDbCommitLogs(pMnode, pTrans, &dbObj, pVgroups, pNewUserDuped), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateDbUndoActions(pMnode, pTrans, &dbObj, pVgroups), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; @@ -806,7 +845,7 @@ _OVER: taosMemoryFree(pVgroups); mndUserFreeObj(&newUserObj); mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static void mndBuildAuditDetailInt32(char *detail, char *tmp, char *format, int32_t para) { @@ -833,9 +872,7 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { #ifdef TD_ENTERPRISE if (pReq->encryptAlgorithm == TSDB_ENCRYPT_ALGO_NONE) goto _exit; - if ((code = grantCheck(TSDB_GRANT_DB_ENCRYPTION)) != 0) { - goto _exit; - } + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DB_ENCRYPTION), NULL, _exit); if (tsEncryptionKeyStat != ENCRYPT_KEY_STAT_LOADED) { code = TSDB_CODE_MND_INVALID_ENCRYPT_KEY; mError("db:%s, failed to check encryption key:%" PRIi8 " in mnode leader since it's not loaded", pReq->db, @@ -853,6 +890,7 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { "-%u in dnode:%d since it's inconsitent with mnode leader:%" PRIi8 "-%u", pReq->db, pDnode->encryptionKeyStat, pDnode->encryptionKeyChksum, pDnode->id, tsEncryptionKeyStat, tsEncryptionKeyChksum); + sdbCancelFetch(pSdb, pDnode); sdbRelease(pSdb, pDnode); break; } @@ -865,7 +903,7 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { } #endif _exit: - return code; + TAOS_RETURN(code); } static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { @@ -875,10 +913,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { SUserObj *pUser = NULL; SCreateDbReq createReq = {0}; - if (tDeserializeSCreateDbReq(pReq->pCont, pReq->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateDbReq(pReq->pCont, pReq->contLen, &createReq), NULL, _OVER); #ifdef WINDOWS if (taosArrayGetSize(createReq.pRetensions) > 0) { terrno = TSDB_CODE_MND_INVALID_PLATFORM; @@ -894,7 +929,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { code = 0; goto _OVER; } else { - terrno = TSDB_CODE_MND_DB_ALREADY_EXIST; + code = TSDB_CODE_MND_DB_ALREADY_EXIST; goto _OVER; } } else { @@ -910,29 +945,20 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { } } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_DB, NULL) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_DB, NULL), NULL, _OVER); - if ((terrno = grantCheck(TSDB_GRANT_DB)) != 0) { - code = terrno; - goto _OVER; - } + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DB), NULL, _OVER); if (createReq.replications == 2) { - if ((terrno = grantCheck(TSDB_GRANT_DUAL_REPLICA_HA)) != 0) { - code = terrno; - goto _OVER; - } + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DUAL_REPLICA_HA), NULL, _OVER); } - if ((code = mndCheckDbEncryptKey(pMnode, &createReq)) != 0) { - terrno = code; - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbEncryptKey(pMnode, &createReq), NULL, _OVER); pUser = mndAcquireUser(pMnode, pReq->info.conn.user); if (pUser == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -953,140 +979,145 @@ _OVER: mndReleaseUser(pMnode, pUser); tFreeSCreateDbReq(&createReq); - return code; + TAOS_RETURN(code); } static int32_t mndSetDbCfgFromAlterDbReq(SDbObj *pDb, SAlterDbReq *pAlter) { - terrno = TSDB_CODE_MND_DB_OPTION_UNCHANGED; + int32_t code = TSDB_CODE_MND_DB_OPTION_UNCHANGED; if (pAlter->buffer > 0 && pAlter->buffer != pDb->cfg.buffer) { pDb->cfg.buffer = pAlter->buffer; - terrno = 0; + code = 0; } if (pAlter->pages > 0 && pAlter->pages != pDb->cfg.pages) { pDb->cfg.pages = pAlter->pages; - terrno = 0; + code = 0; } if (pAlter->pageSize > 0 && pAlter->pageSize != pDb->cfg.pageSize) { pDb->cfg.pageSize = pAlter->pageSize; - terrno = 0; + code = 0; } if (pAlter->daysPerFile > 0 && pAlter->daysPerFile != pDb->cfg.daysPerFile) { pDb->cfg.daysPerFile = pAlter->daysPerFile; - terrno = 0; + code = 0; } if (pAlter->daysToKeep0 > 0 && pAlter->daysToKeep0 != pDb->cfg.daysToKeep0) { pDb->cfg.daysToKeep0 = pAlter->daysToKeep0; - terrno = 0; + code = 0; } if (pAlter->daysToKeep1 > 0 && pAlter->daysToKeep1 != pDb->cfg.daysToKeep1) { pDb->cfg.daysToKeep1 = pAlter->daysToKeep1; - terrno = 0; + code = 0; } if (pAlter->daysToKeep2 > 0 && pAlter->daysToKeep2 != pDb->cfg.daysToKeep2) { pDb->cfg.daysToKeep2 = pAlter->daysToKeep2; - terrno = 0; + code = 0; } if (pAlter->keepTimeOffset >= 0 && pAlter->keepTimeOffset != pDb->cfg.keepTimeOffset) { pDb->cfg.keepTimeOffset = pAlter->keepTimeOffset; - terrno = 0; + code = 0; } if (pAlter->walFsyncPeriod >= 0 && pAlter->walFsyncPeriod != pDb->cfg.walFsyncPeriod) { pDb->cfg.walFsyncPeriod = pAlter->walFsyncPeriod; - terrno = 0; + code = 0; } if (pAlter->walLevel >= 0 && pAlter->walLevel != pDb->cfg.walLevel) { pDb->cfg.walLevel = pAlter->walLevel; - terrno = 0; + code = 0; } if (pAlter->strict >= 0 && pAlter->strict != pDb->cfg.strict) { #if 1 - terrno = TSDB_CODE_OPS_NOT_SUPPORT; + code = TSDB_CODE_OPS_NOT_SUPPORT; #else pDb->cfg.strict = pAlter->strict; - terrno = 0; + code = 0; #endif } if (pAlter->cacheLast >= 0 && pAlter->cacheLast != pDb->cfg.cacheLast) { pDb->cfg.cacheLast = pAlter->cacheLast; - terrno = 0; + code = 0; } if (pAlter->cacheLastSize > 0 && pAlter->cacheLastSize != pDb->cfg.cacheLastSize) { pDb->cfg.cacheLastSize = pAlter->cacheLastSize; - terrno = 0; + code = 0; } if (pAlter->replications > 0 && pAlter->replications != pDb->cfg.replications) { pDb->cfg.replications = pAlter->replications; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->sstTrigger > 0 && pAlter->sstTrigger != pDb->cfg.sstTrigger) { pDb->cfg.sstTrigger = pAlter->sstTrigger; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->minRows > 0 && pAlter->minRows != pDb->cfg.minRows) { pDb->cfg.minRows = pAlter->minRows; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->walRetentionPeriod > TSDB_DB_MIN_WAL_RETENTION_PERIOD && pAlter->walRetentionPeriod != pDb->cfg.walRetentionPeriod) { pDb->cfg.walRetentionPeriod = pAlter->walRetentionPeriod; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->walRetentionSize > TSDB_DB_MIN_WAL_RETENTION_SIZE && pAlter->walRetentionSize != pDb->cfg.walRetentionSize) { pDb->cfg.walRetentionSize = pAlter->walRetentionSize; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->s3KeepLocal > TSDB_MIN_S3_KEEP_LOCAL && pAlter->s3KeepLocal != pDb->cfg.s3KeepLocal) { pDb->cfg.s3KeepLocal = pAlter->s3KeepLocal; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->s3Compact > TSDB_MIN_S3_COMPACT && pAlter->s3Compact != pDb->cfg.s3Compact) { pDb->cfg.s3Compact = pAlter->s3Compact; pDb->vgVersion++; - terrno = 0; + code = 0; } if (pAlter->withArbitrator >= TSDB_MIN_DB_WITH_ARBITRATOR && pAlter->withArbitrator != pDb->cfg.withArbitrator) { pDb->cfg.withArbitrator = pAlter->withArbitrator; pDb->vgVersion++; - terrno = 0; + code = 0; } - return terrno; + TAOS_RETURN(code); } static int32_t mndSetAlterDbPrepareLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pOld, SDbObj *pNew) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndDbActionEncode(pOld); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendPrepareLog(pTrans, pRedoRaw) != 0) { + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + if ((code = mndTransAppendPrepareLog(pTrans, pRedoRaw)) != 0) { sdbFreeRaw(pRedoRaw); - return -1; + TAOS_RETURN(code); } (void)sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY); @@ -1094,18 +1125,24 @@ static int32_t mndSetAlterDbPrepareLogs(SMnode *pMnode, STrans *pTrans, SDbObj * } static int32_t mndSetAlterDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pOld, SDbObj *pNew) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndDbActionEncode(pNew); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + if ((code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { sdbFreeRaw(pCommitRaw); - return -1; + TAOS_RETURN(code); } (void)sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY); - return 0; + TAOS_RETURN(code); } static int32_t mndSetAlterDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pOldDb, SDbObj *pNewDb) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SArray *pArray = mndBuildDnodesArray(pMnode, 0); @@ -1117,31 +1154,31 @@ static int32_t mndSetAlterDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj * if (mndVgroupInDb(pVgroup, pNewDb->uid)) { SVgObj newVgroup = {0}; - if (mndBuildAlterVgroupAction(pMnode, pTrans, pOldDb, pNewDb, pVgroup, pArray, &newVgroup) != 0) { + if ((code = mndBuildAlterVgroupAction(pMnode, pTrans, pOldDb, pNewDb, pVgroup, pArray, &newVgroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); taosArrayDestroy(pArray); - return -1; + TAOS_RETURN(code); } if (pNewDb->cfg.withArbitrator != pOldDb->cfg.withArbitrator) { if (pNewDb->cfg.withArbitrator) { SArbGroup arbGroup = {0}; mndArbGroupInitFromVgObj(&newVgroup, &arbGroup); - if (mndSetCreateArbGroupCommitLogs(pTrans, &arbGroup) != 0) { + if ((code = mndSetCreateArbGroupCommitLogs(pTrans, &arbGroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); taosArrayDestroy(pArray); - return -1; + TAOS_RETURN(code); } } else { SArbGroup arbGroup = {0}; mndArbGroupInitFromVgObj(pVgroup, &arbGroup); - if (mndSetDropArbGroupCommitLogs(pTrans, &arbGroup) != 0) { + if ((code = mndSetDropArbGroupCommitLogs(pTrans, &arbGroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); taosArrayDestroy(pArray); - return -1; + TAOS_RETURN(code); } } } @@ -1151,22 +1188,26 @@ static int32_t mndSetAlterDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj * } taosArrayDestroy(pArray); - return 0; + TAOS_RETURN(code); } static int32_t mndAlterDb(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pOld, SDbObj *pNew) { + int32_t code = -1; STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_DB, pReq, "alter-db"); - if (pTrans == NULL) return -1; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } mInfo("trans:%d, used to alter db:%s", pTrans->id, pOld->name); - int32_t code = -1; mndTransSetDbName(pTrans, pOld->name, NULL); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_RETURN(mndTransCheckConflict(pMnode, pTrans)); - if (mndSetAlterDbPrepareLogs(pMnode, pTrans, pOld, pNew) != 0) goto _OVER; - if (mndSetAlterDbCommitLogs(pMnode, pTrans, pOld, pNew) != 0) goto _OVER; - if (mndSetAlterDbRedoActions(pMnode, pTrans, pOld, pNew) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_RETURN(mndSetAlterDbPrepareLogs(pMnode, pTrans, pOld, pNew)); + TAOS_CHECK_RETURN(mndSetAlterDbCommitLogs(pMnode, pTrans, pOld, pNew)); + TAOS_CHECK_RETURN(mndSetAlterDbRedoActions(pMnode, pTrans, pOld, pNew)); + TAOS_CHECK_RETURN(mndTransPrepare(pMnode, pTrans)); code = 0; _OVER: @@ -1181,35 +1222,28 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { SAlterDbReq alterReq = {0}; SDbObj dbObj = {0}; - if (tDeserializeSAlterDbReq(pReq->pCont, pReq->contLen, &alterReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSAlterDbReq(pReq->pCont, pReq->contLen, &alterReq), NULL, _OVER); mInfo("db:%s, start to alter", alterReq.db); pDb = mndAcquireDb(pMnode, alterReq.db); if (pDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_ALTER_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_ALTER_DB, pDb), NULL, _OVER); if (alterReq.replications == 2) { - if ((code = grantCheck(TSDB_GRANT_DUAL_REPLICA_HA)) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DUAL_REPLICA_HA), NULL, _OVER); } int32_t numOfTopics = 0; - if (mndGetNumOfTopics(pMnode, pDb->name, &numOfTopics) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndGetNumOfTopics(pMnode, pDb->name, &numOfTopics), NULL, _OVER); if (numOfTopics != 0 && alterReq.walRetentionPeriod == 0) { - terrno = TSDB_CODE_MND_DB_RETENTION_PERIOD_ZERO; + code = TSDB_CODE_MND_DB_RETENTION_PERIOD_ZERO; mError("db:%s, not allowed to set WAL_RETENTION_PERIOD 0 when there are topics defined. numOfTopics:%d", pDb->name, numOfTopics); goto _OVER; @@ -1227,8 +1261,7 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { goto _OVER; } - code = mndCheckInChangeDbCfg(pMnode, &pDb->cfg, &dbObj.cfg); - if (code != 0) goto _OVER; + TAOS_CHECK_GOTO(mndCheckInChangeDbCfg(pMnode, &pDb->cfg, &dbObj.cfg), NULL, _OVER); dbObj.cfgVersion++; dbObj.updateTime = taosGetTimestampMs(); @@ -1256,8 +1289,7 @@ _OVER: taosArrayDestroy(dbObj.cfg.pRetensions); tFreeSAlterDbReq(&alterReq); - terrno = code; - return code; + TAOS_RETURN(code); } static void mndDumpDbCfgInfo(SDbCfgRsp *cfgRsp, SDbObj *pDb) { @@ -1309,14 +1341,13 @@ static int32_t mndProcessGetDbCfgReq(SRpcMsg *pReq) { SDbCfgReq cfgReq = {0}; SDbCfgRsp cfgRsp = {0}; - if (tDeserializeSDbCfgReq(pReq->pCont, pReq->contLen, &cfgReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSDbCfgReq(pReq->pCont, pReq->contLen, &cfgReq), NULL, _OVER); if (strcasecmp(cfgReq.db, TSDB_INFORMATION_SCHEMA_DB) && strcasecmp(cfgReq.db, TSDB_PERFORMANCE_SCHEMA_DB)) { pDb = mndAcquireDb(pMnode, cfgReq.db); if (pDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -1326,8 +1357,8 @@ static int32_t mndProcessGetDbCfgReq(SRpcMsg *pReq) { int32_t contLen = tSerializeSDbCfgRsp(NULL, 0, &cfgRsp); void *pRsp = rpcMallocCont(contLen); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - code = -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -1348,14 +1379,19 @@ _OVER: mndReleaseDb(pMnode, pDb); - return code; + TAOS_RETURN(code); } static int32_t mndSetDropDbPrepareLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndDbActionEncode(pDb); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendPrepareLog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING) != 0) return -1; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + TAOS_CHECK_RETURN(mndTransAppendPrepareLog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING)); SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; @@ -1366,24 +1402,29 @@ static int32_t mndSetDropDbPrepareLogs(SMnode *pMnode, STrans *pTrans, SDbObj *p if (pIter == NULL) break; if (pArbGroup->dbUid == pDb->uid) { - if (mndSetDropArbGroupPrepareLogs(pTrans, pArbGroup) != 0) { + if ((code = mndSetDropArbGroupPrepareLogs(pTrans, pArbGroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pArbGroup); - return -1; + TAOS_RETURN(code); } } sdbRelease(pSdb, pArbGroup); } - return 0; + TAOS_RETURN(code); } static int32_t mndSetDropDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndDbActionEncode(pDb); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) != 0) return -1; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED)); SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; @@ -1394,10 +1435,10 @@ static int32_t mndSetDropDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD if (pIter == NULL) break; if (pArbGroup->dbUid == pDb->uid) { - if (mndSetDropArbGroupCommitLogs(pTrans, pArbGroup) != 0) { + if ((code = mndSetDropArbGroupCommitLogs(pTrans, pArbGroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pArbGroup); - return -1; + TAOS_RETURN(code); } } @@ -1411,10 +1452,17 @@ static int32_t mndSetDropDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD if (pVgroup->dbUid == pDb->uid) { SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroup); - if (pVgRaw == NULL || mndTransAppendCommitlog(pTrans, pVgRaw) != 0) { + if (pVgRaw == NULL) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + if ((code = mndTransAppendCommitlog(pTrans, pVgRaw)) != 0) { + sdbCancelFetch(pSdb, pIter); + sdbRelease(pSdb, pVgroup); + TAOS_RETURN(code); } (void)sdbSetRawStatus(pVgRaw, SDB_STATUS_DROPPED); } @@ -1429,7 +1477,14 @@ static int32_t mndSetDropDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD if (pStb->dbUid == pDb->uid) { SSdbRaw *pStbRaw = mndStbActionEncode(pStb); - if (pStbRaw == NULL || mndTransAppendCommitlog(pTrans, pStbRaw) != 0) { + if (pStbRaw == NULL) { + sdbCancelFetch(pSdb, pIter); + sdbRelease(pSdb, pStbRaw); + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + if ((code = mndTransAppendCommitlog(pTrans, pStbRaw)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pStbRaw); return -1; @@ -1440,21 +1495,21 @@ static int32_t mndSetDropDbCommitLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD sdbRelease(pSdb, pStb); } - return 0; + TAOS_RETURN(code); } static int32_t mndBuildDropVgroupAction(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup) { + int32_t code = 0; for (int32_t vn = 0; vn < pVgroup->replica; ++vn) { SVnodeGid *pVgid = pVgroup->vnodeGid + vn; - if (mndAddDropVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid, true) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndAddDropVnodeAction(pMnode, pTrans, pDb, pVgroup, pVgid, true)); } - return 0; + TAOS_RETURN(code); } static int32_t mndSetDropDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; @@ -1464,20 +1519,21 @@ static int32_t mndSetDropDbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *p if (pIter == NULL) break; if (pVgroup->dbUid == pDb->uid) { - if (mndBuildDropVgroupAction(pMnode, pTrans, pDb, pVgroup) != 0) { + if ((code = mndBuildDropVgroupAction(pMnode, pTrans, pDb, pVgroup)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); - return -1; + TAOS_RETURN(code); } } sdbRelease(pSdb, pVgroup); } - return 0; + TAOS_RETURN(code); } static int32_t mndBuildDropDbRsp(SDbObj *pDb, int32_t *pRspLen, void **ppRsp, bool useRpcMalloc) { + int32_t code = 0; SDropDbRsp dropRsp = {0}; if (pDb != NULL) { memcpy(dropRsp.db, pDb->name, TSDB_DB_FNAME_LEN); @@ -1493,14 +1549,14 @@ static int32_t mndBuildDropDbRsp(SDbObj *pDb, int32_t *pRspLen, void **ppRsp, bo } if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } tSerializeSDropDbRsp(pRsp, rspLen, &dropRsp); *pRspLen = rspLen; *ppRsp = pRsp; - return 0; + TAOS_RETURN(code); } static int32_t mndDropDb(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb) { @@ -1508,46 +1564,46 @@ static int32_t mndDropDb(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb) { STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_DB, pReq, "drop-db"); if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } mInfo("trans:%d start to drop db:%s", pTrans->id, pDb->name); mndTransSetDbName(pTrans, pDb->name, NULL); - if (mndTransCheckConflict(pMnode, pTrans) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); if (mndTopicExistsForDb(pMnode, pDb)) { - terrno = TSDB_CODE_MND_TOPIC_MUST_BE_DELETED; + code = TSDB_CODE_MND_TOPIC_MUST_BE_DELETED; goto _OVER; } - if (mndSetDropDbPrepareLogs(pMnode, pTrans, pDb) != 0) goto _OVER; - if (mndSetDropDbCommitLogs(pMnode, pTrans, pDb) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetDropDbPrepareLogs(pMnode, pTrans, pDb), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetDropDbCommitLogs(pMnode, pTrans, pDb), NULL, _OVER); /*if (mndDropOffsetByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/ /*if (mndDropSubByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/ /*if (mndDropTopicByDB(pMnode, pTrans, pDb) != 0) goto _OVER;*/ - if (mndDropStreamByDb(pMnode, pTrans, pDb) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndDropStreamByDb(pMnode, pTrans, pDb), NULL, _OVER); #ifdef TD_ENTERPRISE - if (mndDropViewByDb(pMnode, pTrans, pDb) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndDropViewByDb(pMnode, pTrans, pDb), NULL, _OVER); #endif - if (mndDropSmasByDb(pMnode, pTrans, pDb) != 0) goto _OVER; - if (mndDropIdxsByDb(pMnode, pTrans, pDb) != 0) goto _OVER; - if (mndSetDropDbRedoActions(pMnode, pTrans, pDb) != 0) goto _OVER; - if (mndUserRemoveDb(pMnode, pTrans, pDb->name) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndDropSmasByDb(pMnode, pTrans, pDb), NULL, _OVER); + TAOS_CHECK_GOTO(mndDropIdxsByDb(pMnode, pTrans, pDb), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetDropDbRedoActions(pMnode, pTrans, pDb), NULL, _OVER); + TAOS_CHECK_GOTO(mndUserRemoveDb(pMnode, pTrans, pDb->name), NULL, _OVER); int32_t rspLen = 0; void *pRsp = NULL; - if (mndBuildDropDbRsp(pDb, &rspLen, &pRsp, false) < 0) goto _OVER; + TAOS_CHECK_GOTO(mndBuildDropDbRsp(pDb, &rspLen, &pRsp, false), NULL, _OVER); mndTransSetRpcRsp(pTrans, pRsp, rspLen); - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; _OVER: mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndProcessDropDbReq(SRpcMsg *pReq) { @@ -1556,10 +1612,7 @@ static int32_t mndProcessDropDbReq(SRpcMsg *pReq) { SDbObj *pDb = NULL; SDropDbReq dropReq = {0}; - if (tDeserializeSDropDbReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSDropDbReq(pReq->pCont, pReq->contLen, &dropReq), NULL, _OVER); mInfo("db:%s, start to drop", dropReq.db); @@ -1571,9 +1624,7 @@ static int32_t mndProcessDropDbReq(SRpcMsg *pReq) { goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_DB, pDb), NULL, _OVER); code = mndDropDb(pMnode, pReq, pDb); if (code == TSDB_CODE_SUCCESS) { @@ -1592,7 +1643,7 @@ _OVER: mndReleaseDb(pMnode, pDb); tFreeSDropDbReq(&dropReq); - return code; + TAOS_RETURN(code); } static int32_t mndGetDBTableNum(SDbObj *pDb, SMnode *pMnode) { @@ -1662,10 +1713,11 @@ void mndBuildDBVgroupInfo(SDbObj *pDb, SMnode *pMnode, SArray *pVgList) { } int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUseDbReq *pReq) { + int32_t code = 0; pRsp->pVgroupInfos = taosArrayInit(pDb->cfg.numOfVgroups, sizeof(SVgroupInfo)); if (pRsp->pVgroupInfos == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } int32_t numOfTable = mndGetDBTableNum(pDb, pMnode); @@ -1683,7 +1735,7 @@ int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUs pRsp->hashMethod = pDb->cfg.hashMethod; pRsp->hashPrefix = pDb->cfg.hashPrefix; pRsp->hashSuffix = pDb->cfg.hashSuffix; - return 0; + TAOS_RETURN(code); } static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { @@ -1693,10 +1745,7 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { SUseDbReq usedbReq = {0}; SUseDbRsp usedbRsp = {0}; - if (tDeserializeSUseDbReq(pReq->pCont, pReq->contLen, &usedbReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSUseDbReq(pReq->pCont, pReq->contLen, &usedbReq), NULL, _OVER); char *p = strchr(usedbReq.db, '.'); if (p && ((0 == strcmp(p + 1, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcmp(p + 1, TSDB_PERFORMANCE_SCHEMA_DB))))) { @@ -1726,13 +1775,9 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { goto _OVER; } } else { - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_USE_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_USE_DB, pDb), NULL, _OVER); - if (mndExtractDbInfo(pMnode, pDb, &usedbRsp, &usedbReq) < 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndExtractDbInfo(pMnode, pDb, &usedbRsp, &usedbReq), NULL, _OVER); mDebug("db:%s, process usedb req vgVersion:%d stateTs:%" PRId64 ", rsp vgVersion:%d stateTs:%" PRId64, usedbReq.db, usedbReq.vgVersion, usedbReq.stateTs, usedbRsp.vgVersion, usedbRsp.stateTs); @@ -1761,15 +1806,16 @@ _OVER: mndReleaseDb(pMnode, pDb); tFreeSUsedbRsp(&usedbRsp); - return code; + TAOS_RETURN(code); } int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, void **ppRsp, int32_t *pRspLen) { + int32_t code = 0; SDbHbBatchRsp batchRsp = {0}; batchRsp.pArray = taosArrayInit(numOfDbs, sizeof(SDbHbRsp)); if (batchRsp.pArray == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(code); } for (int32_t i = 0; i < numOfDbs; ++i) { @@ -1886,7 +1932,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbCacheInfo *pDbs, int32_t numOfDbs, *pRspLen = rspLen; tFreeSDbHbBatchRsp(&batchRsp); - return 0; + TAOS_RETURN(code); } static int32_t mndTrimDb(SMnode *pMnode, SDbObj *pDb) { @@ -1931,21 +1977,18 @@ static int32_t mndProcessTrimDbReq(SRpcMsg *pReq) { SDbObj *pDb = NULL; STrimDbReq trimReq = {0}; - if (tDeserializeSTrimDbReq(pReq->pCont, pReq->contLen, &trimReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSTrimDbReq(pReq->pCont, pReq->contLen, &trimReq), NULL, _OVER); mInfo("db:%s, start to trim", trimReq.db); pDb = mndAcquireDb(pMnode, trimReq.db); if (pDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_TRIM_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_TRIM_DB, pDb), NULL, _OVER); code = mndTrimDb(pMnode, pDb); @@ -1955,7 +1998,7 @@ _OVER: } mndReleaseDb(pMnode, pDb); - return code; + TAOS_RETURN(code); } static int32_t mndS3MigrateDb(SMnode *pMnode, SDbObj *pDb) { @@ -2002,21 +2045,18 @@ static int32_t mndProcessS3MigrateDbReq(SRpcMsg *pReq) { SDbObj *pDb = NULL; SS3MigrateDbReq s3migrateReq = {0}; - if (tDeserializeSS3MigrateDbReq(pReq->pCont, pReq->contLen, &s3migrateReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSS3MigrateDbReq(pReq->pCont, pReq->contLen, &s3migrateReq), NULL, _OVER); mInfo("db:%s, start to s3migrate", s3migrateReq.db); pDb = mndAcquireDb(pMnode, s3migrateReq.db); if (pDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_TRIM_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_TRIM_DB, pDb), NULL, _OVER); code = mndS3MigrateDb(pMnode, pDb); @@ -2026,7 +2066,7 @@ _OVER: } mndReleaseDb(pMnode, pDb); - return code; + TAOS_RETURN(code); } const char *mndGetDbStr(const char *src) { diff --git a/source/util/src/terror.c b/source/util/src/terror.c index ab50b83937..4543e746a1 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -168,6 +168,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_QUERY_ID, "Invalid query id") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_CONN_ID, "Invalid connection id") TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_DISABLED, "User is disabled") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_PLATFORM, "Unsupported feature on this platform") +TAOS_DEFINE_ERROR(TSDB_CODE_MND_RETURN_VALUE_NULL, "Return value is null") // mnode-sdb TAOS_DEFINE_ERROR(TSDB_CODE_SDB_OBJ_ALREADY_THERE, "Object already there") From 26663153b5f407be7bbcc605da711dd4ae823d94 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 05:26:36 +0000 Subject: [PATCH 08/64] refactor error code --- source/dnode/mgmt/node_util/src/dmEps.c | 71 ++++++++++++------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/source/dnode/mgmt/node_util/src/dmEps.c b/source/dnode/mgmt/node_util/src/dmEps.c index a75e614158..866dce1b87 100644 --- a/source/dnode/mgmt/node_util/src/dmEps.c +++ b/source/dnode/mgmt/node_util/src/dmEps.c @@ -95,18 +95,18 @@ static int32_t dmDecodeEps(SJson *pJson, SDnodeData *pData) { } int dmOccurrences(char *str, char *toSearch) { - int count = 0; - char *ptr = str; - while ((ptr = strstr(ptr, toSearch)) != NULL) { - count++; - ptr++; - } - return count; + int count = 0; + char *ptr = str; + while ((ptr = strstr(ptr, toSearch)) != NULL) { + count++; + ptr++; + } + return count; } -void dmSplitStr(char** arr, char* str, const char* del) { +void dmSplitStr(char **arr, char *str, const char *del) { char *lasts; - char* s = strsep(&str, del); + char *s = strsep(&str, del); while (s != NULL) { *arr++ = s; s = strsep(&str, del); @@ -132,11 +132,10 @@ int32_t dmReadEps(SDnodeData *pData) { dInfo("dnode file:%s not exist", file); #ifdef TD_ENTERPRISE - if(strlen(tsEncryptAlgorithm) > 0){ - if(strcmp(tsEncryptAlgorithm, "sm4") == 0) { + if (strlen(tsEncryptAlgorithm) > 0) { + if (strcmp(tsEncryptAlgorithm, "sm4") == 0) { pData->encryptAlgorigthm = DND_CA_SM4; - } - else{ + } else { terrno = TSDB_CODE_DNODE_INVALID_ENCRYPT_CONFIG; dError("invalid tsEncryptAlgorithm:%s", tsEncryptAlgorithm); goto _OVER; @@ -144,45 +143,45 @@ int32_t dmReadEps(SDnodeData *pData) { dInfo("start to parse encryptScope:%s", tsEncryptScope); int32_t scopeLen = strlen(tsEncryptScope); - if(scopeLen == 0){ + if (scopeLen == 0) { terrno = TSDB_CODE_DNODE_INVALID_ENCRYPT_CONFIG; dError("invalid tsEncryptScope:%s", tsEncryptScope); goto _OVER; } - char* tmp = taosMemoryMalloc(scopeLen + 1); + char *tmp = taosMemoryMalloc(scopeLen + 1); memset(tmp, 0, scopeLen + 1); memcpy(tmp, tsEncryptScope, scopeLen); int32_t count = dmOccurrences(tmp, ","); - char** array = taosMemoryMalloc(sizeof(char*) * (count + 1)); - memset(array, 0, sizeof(char*) * (count + 1)); + char **array = taosMemoryMalloc(sizeof(char *) * (count + 1)); + memset(array, 0, sizeof(char *) * (count + 1)); dmSplitStr(array, tmp, ","); - for(int32_t i = 0; i < count + 1; i++){ - char* str = *(array + i); + for (int32_t i = 0; i < count + 1; i++) { + char *str = *(array + i); bool success = false; - if(strcasecmp(str, "tsdb") == 0 || strcasecmp(str, "all") == 0){ + if (strcasecmp(str, "tsdb") == 0 || strcasecmp(str, "all") == 0) { pData->encryptScope |= DND_CS_TSDB; success = true; } - if(strcasecmp(str, "vnode_wal") == 0 || strcasecmp(str, "all") == 0){ + if (strcasecmp(str, "vnode_wal") == 0 || strcasecmp(str, "all") == 0) { pData->encryptScope |= DND_CS_VNODE_WAL; success = true; } - if(strcasecmp(str, "sdb") == 0 || strcasecmp(str, "all") == 0){ + if (strcasecmp(str, "sdb") == 0 || strcasecmp(str, "all") == 0) { pData->encryptScope |= DND_CS_SDB; success = true; } - if(strcasecmp(str, "mnode_wal") == 0 || strcasecmp(str, "all") == 0){ + if (strcasecmp(str, "mnode_wal") == 0 || strcasecmp(str, "all") == 0) { pData->encryptScope |= DND_CS_MNODE_WAL; success = true; } - if(!success){ + if (!success) { terrno = TSDB_CODE_DNODE_INVALID_ENCRYPT_CONFIG; taosMemoryFree(tmp); taosMemoryFree(array); @@ -196,7 +195,7 @@ int32_t dmReadEps(SDnodeData *pData) { dInfo("set tsCryptAlgorithm:%s, tsCryptScope:%s from cfg", tsEncryptAlgorithm, tsEncryptScope); } - + #endif code = 0; goto _OVER; @@ -316,33 +315,30 @@ int32_t dmWriteEps(SDnodeData *pData) { snprintf(file, sizeof(file), "%s%sdnode%sdnode.json.bak", tsDataDir, TD_DIRSEP, TD_DIRSEP); snprintf(realfile, sizeof(realfile), "%s%sdnode%sdnode.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); - // if ((code == dmInitDndInfo(pData)) != 0) goto _OVER; - TAOS_CHECK_GOTO(code = dmInitDndInfo(pData), NULL, _OVER); + TAOS_CHECK_GOTO(dmInitDndInfo(pData), NULL, _OVER); pJson = tjsonCreateObject(); - if (pJson == NULL) - TAOS_CHECK_GOTO(code = TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + if (pJson == NULL) TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); pData->engineVer = tsVersion; - TAOS_CHECK_GOTO(code = dmEncodeEps(pJson, pData), NULL, _OVER);//dmEncodeEps(pJson, pData) != 0) goto _OVER; + TAOS_CHECK_GOTO(dmEncodeEps(pJson, pData), NULL, _OVER); // dmEncodeEps(pJson, pData) != 0) goto _OVER; buffer = tjsonToString(pJson); if (buffer == NULL) { - TAOS_CHECK_GOTO(code = TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); - } - code = 0; + TAOS_CHECK_GOTO(TSDB_CODE_OUT_OF_MEMORY, NULL, _OVER); + } pFile = taosOpenFile(file, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); - if (pFile == NULL) goto _OVER; + if (pFile == NULL) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), NULL, _OVER); int32_t len = strlen(buffer); - if (taosWriteFile(pFile, buffer, len) <= 0) goto _OVER; - if (taosFsyncFile(pFile) < 0) goto _OVER; + if (taosWriteFile(pFile, buffer, len) <= 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), NULL, _OVER); + if (taosFsyncFile(pFile) < 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), NULL, _OVER); taosCloseFile(&pFile); - if (taosRenameFile(file, realfile) != 0) goto _OVER; + if (taosRenameFile(file, realfile) != 0) TAOS_CHECK_GOTO(TAOS_SYSTEM_ERROR(errno), NULL, _OVER); code = 0; pData->updateTime = taosGetTimestampMs(); @@ -355,7 +351,6 @@ _OVER: if (pFile != NULL) taosCloseFile(&pFile); if (code != 0) { - // code = TAOS_SYSTEM_ERROR(errno); dError("failed to write dnode file:%s since %s, dnodeVer:%" PRId64, realfile, tstrerror(code), pData->dnodeVer); } return code; From ac7e64f1786c04f7530e897a0030743b899a7f98 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 05:29:35 +0000 Subject: [PATCH 09/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index d3236a7940..5ed6a499e6 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -358,7 +358,7 @@ int mainWindows(int argc, char **argv) { #if defined(LINUX) if (global.memDbg) { - int32_t code = taosMemoryDbgInit(); + code = taosMemoryDbgInit(); if (code) { printf("failed to init memory dbg, error:%s\n", tstrerror(code)); return code; From 51853914b592a2e5dbe2b468ce2e41c1aa16120f Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 05:30:39 +0000 Subject: [PATCH 10/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 5ed6a499e6..0362c99a92 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -409,7 +409,7 @@ int mainWindows(int argc, char **argv) { } if (global.checkS3) { - int32_t code = dmCheckS3(); + code = dmCheckS3(); taosCleanupCfg(); taosCloseLog(); taosCleanupArgs(); From a1163f2844f2946c4e779d0431d3b2ef66fb765b Mon Sep 17 00:00:00 2001 From: dmchen Date: Thu, 18 Jul 2024 06:27:34 +0000 Subject: [PATCH 11/64] fix case --- source/dnode/mnode/impl/src/mndDb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 9e3e95e0b7..261a40edd1 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -465,6 +465,7 @@ static int32_t mndCheckDbCfg(SMnode *pMnode, SDbCfg *pCfg) { if (pCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return code; if (pCfg->s3Compact < TSDB_MIN_S3_COMPACT || pCfg->s3Compact > TSDB_MAX_S3_COMPACT) return code; + code = 0; TAOS_RETURN(code); } @@ -529,6 +530,7 @@ static int32_t mndCheckInChangeDbCfg(SMnode *pMnode, SDbCfg *pOldCfg, SDbCfg *pN if (pNewCfg->s3KeepLocal < TSDB_MIN_S3_KEEP_LOCAL || pNewCfg->s3KeepLocal > TSDB_MAX_S3_KEEP_LOCAL) return code; if (pNewCfg->s3Compact < TSDB_MIN_S3_COMPACT || pNewCfg->s3Compact > TSDB_MAX_S3_COMPACT) return code; + code = 0; TAOS_RETURN(code); } @@ -890,7 +892,7 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { "-%u in dnode:%d since it's inconsitent with mnode leader:%" PRIi8 "-%u", pReq->db, pDnode->encryptionKeyStat, pDnode->encryptionKeyChksum, pDnode->id, tsEncryptionKeyStat, tsEncryptionKeyChksum); - sdbCancelFetch(pSdb, pDnode); + sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pDnode); break; } From 91182fd39c768dd8d6a332375a9bd5b3c31cd9c8 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 08:23:38 +0000 Subject: [PATCH 12/64] refactor error code --- source/dnode/mgmt/exe/dmMain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 0362c99a92..85b0317541 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -336,6 +336,7 @@ int main(int argc, char const *argv[]) { return 0; } int mainWindows(int argc, char **argv) { + int32_t code = 0; #endif if (global.generateGrant) { From e20a972b7f2710f09f1154851a62ab6010084d94 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Thu, 18 Jul 2024 08:45:58 +0000 Subject: [PATCH 13/64] refactor rsync --- include/common/rsync.h | 2 +- source/common/src/rsync.c | 26 +++++++++++++++++--------- source/dnode/snode/src/snode.c | 10 ++++++++-- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/common/rsync.h b/include/common/rsync.h index 0840b51793..5bb98f9eab 100644 --- a/include/common/rsync.h +++ b/include/common/rsync.h @@ -12,7 +12,7 @@ extern "C" { #include "tarray.h" void stopRsync(); -void startRsync(); +int32_t startRsync(); int32_t uploadByRsync(const char* id, const char* path); int32_t downloadRsync(const char* id, const char* path); int32_t deleteRsync(const char* id); diff --git a/source/common/src/rsync.c b/source/common/src/rsync.c index d0b10b7f41..5e51f62a1f 100644 --- a/source/common/src/rsync.c +++ b/source/common/src/rsync.c @@ -54,10 +54,11 @@ static void changeDirFromWindowsToLinux(char* from, char* to) { #endif static int32_t generateConfigFile(char* confDir) { + int32_t code = 0; TdFilePtr pFile = taosOpenFile(confDir, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC); if (pFile == NULL) { uError("[rsync] open conf file error, dir:%s," ERRNO_ERR_FORMAT, confDir, ERRNO_ERR_DATA); - return -1; + return TAOS_SYSTEM_ERROR(errno); } #ifdef WINDOWS @@ -92,7 +93,8 @@ static int32_t generateConfigFile(char* confDir) { if (taosWriteFile(pFile, confContent, strlen(confContent)) <= 0) { uError("[rsync] write conf file error," ERRNO_ERR_FORMAT, ERRNO_ERR_DATA); taosCloseFile(&pFile); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + return code; } taosCloseFile(&pFile); @@ -129,11 +131,13 @@ void stopRsync() { taosMsleep(500); // sleep 500 ms to wait for the completion of kill operation. } -void startRsync() { +int32_t startRsync() { + int32_t code = 0; if (taosMulMkDir(tsCheckpointBackupDir) != 0) { uError("[rsync] build checkpoint backup dir failed, path:%s," ERRNO_ERR_FORMAT, tsCheckpointBackupDir, ERRNO_ERR_DATA); - return; + code = TAOS_SYSTEM_ERROR(errno); + return code; } removeEmptyDir(); @@ -141,9 +145,9 @@ void startRsync() { char confDir[PATH_MAX] = {0}; snprintf(confDir, PATH_MAX, "%srsync.conf", tsCheckpointBackupDir); - int32_t code = generateConfigFile(confDir); + code = generateConfigFile(confDir); if (code != 0) { - return; + return code; } char cmd[PATH_MAX] = {0}; @@ -152,9 +156,11 @@ void startRsync() { code = system(cmd); if (code != 0) { uError("[rsync] cmd:%s start server failed, code:%d," ERRNO_ERR_FORMAT, cmd, code, ERRNO_ERR_DATA); + code = TAOS_SYSTEM_ERROR(errno); } else { uInfo("[rsync] cmd:%s start server successful", cmd); } + return code; } int32_t uploadByRsync(const char* id, const char* path) { @@ -199,6 +205,7 @@ int32_t uploadByRsync(const char* id, const char* path) { if (code != 0) { uError("[rsync] s-task:%s prepare checkpoint data in %s to %s failed, code:%d," ERRNO_ERR_FORMAT, id, path, tsSnodeAddress, code, ERRNO_ERR_DATA); + code = TAOS_SYSTEM_ERROR(errno); } else { int64_t el = (taosGetTimestampMs() - st); uDebug("[rsync] s-task:%s prepare checkpoint data in:%s to %s successfully, elapsed time:%" PRId64 "ms", id, path, @@ -242,6 +249,7 @@ int32_t uploadByRsync(const char* id, const char* path) { if (code != 0) { uError("[rsync] s-task:%s upload checkpoint data in %s to %s failed, code:%d," ERRNO_ERR_FORMAT, id, path, tsSnodeAddress, code, ERRNO_ERR_DATA); + code = TAOS_SYSTEM_ERROR(errno); } else { int64_t el = (taosGetTimestampMs() - st); uDebug("[rsync] s-task:%s upload checkpoint data in:%s to %s successfully, elapsed time:%" PRId64 "ms", id, path, @@ -283,13 +291,13 @@ int32_t downloadRsync(const char* id, const char* path) { uError("[rsync] %s download checkpoint data:%s failed, retry after 1sec, times:%d, code:%d," ERRNO_ERR_FORMAT, id, path, times, code, ERRNO_ERR_DATA); taosSsleep(1); + code = TAOS_SYSTEM_ERROR(errno); } else { int32_t el = taosGetTimestampMs() - st; uDebug("[rsync] %s download checkpoint data:%s successfully, elapsed time:%dms", id, path, el); break; } } - return code; } @@ -298,7 +306,7 @@ int32_t deleteRsync(const char* id) { int32_t code = taosMkDir(tmp); if (code != 0) { uError("[rsync] make tmp dir failed. code:%d," ERRNO_ERR_FORMAT, code, ERRNO_ERR_DATA); - return -1; + return TAOS_SYSTEM_ERROR(errno); } char command[PATH_MAX] = {0}; @@ -310,7 +318,7 @@ int32_t deleteRsync(const char* id) { taosRemoveDir(tmp); if (code != 0) { uError("[rsync] get failed code:%d," ERRNO_ERR_FORMAT, code, ERRNO_ERR_DATA); - return -1; + return TAOS_SYSTEM_ERROR(errno); } uDebug("[rsync] delete data:%s successful", id); diff --git a/source/dnode/snode/src/snode.c b/source/dnode/snode/src/snode.c index cfa24b2430..f6ac17a1b7 100644 --- a/source/dnode/snode/src/snode.c +++ b/source/dnode/snode/src/snode.c @@ -61,6 +61,7 @@ int32_t sndBuildStreamTask(SSnode *pSnode, SStreamTask *pTask, int64_t nextProce } SSnode *sndOpen(const char *path, const SSnodeOpt *pOption) { + int32_t code = 0; SSnode *pSnode = taosMemoryCalloc(1, sizeof(SSnode)); if (pSnode == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -68,10 +69,15 @@ SSnode *sndOpen(const char *path, const SSnodeOpt *pOption) { } stopRsync(); - startRsync(); + code = startRsync(); + if (code != 0) { + terrno = code; + goto FAIL; + } pSnode->msgCb = pOption->msgCb; - pSnode->pMeta = streamMetaOpen(path, pSnode, (FTaskBuild *)sndBuildStreamTask, tqExpandStreamTask, SNODE_HANDLE, taosGetTimestampMs(), tqStartTaskCompleteCallback); + pSnode->pMeta = streamMetaOpen(path, pSnode, (FTaskBuild *)sndBuildStreamTask, tqExpandStreamTask, SNODE_HANDLE, + taosGetTimestampMs(), tqStartTaskCompleteCallback); if (pSnode->pMeta == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; goto FAIL; From 01a8412805b52adc4c6c5dd0e08fd9fc8793420c Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Fri, 19 Jul 2024 02:21:24 +0000 Subject: [PATCH 14/64] refactor error code --- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 6e364e67f6..ea82d21fba 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -181,6 +181,7 @@ int32_t dmInit() { if ((code = dmInitMonitor()) != 0) return code; if ((code = dmInitAudit()) != 0) return code; if ((code = dmInitDnode(dmInstance())) != 0) return code; + if ((code = InitRegexCache() != 0)) return code; #if defined(USE_S3) if ((code = s3Begin()) != 0) return code; #endif From 6b9c00cb9b462c5c6415d322dbd447938e11ee71 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 14:49:25 +0800 Subject: [PATCH 15/64] fix:[TD-31017]process return value in clientRawBlockWrite.c --- include/libs/qcom/query.h | 2 +- include/os/osString.h | 2 +- source/client/src/clientImpl.c | 3 +- source/client/src/clientRawBlockWrite.c | 1198 +++++++++----------- source/common/src/tmsg.c | 2 + source/libs/catalog/src/catalog.c | 3 +- source/libs/catalog/src/ctgAsync.c | 3 +- source/libs/command/src/command.c | 9 +- source/libs/executor/src/sysscanoperator.c | 3 +- source/libs/qcom/src/queryUtil.c | 29 +- 10 files changed, 587 insertions(+), 667 deletions(-) diff --git a/include/libs/qcom/query.h b/include/libs/qcom/query.h index 2078455f1d..c0f6b23c77 100644 --- a/include/libs/qcom/query.h +++ b/include/libs/qcom/query.h @@ -334,7 +334,7 @@ SSchema createSchema(int8_t type, int32_t bytes, col_id_t colId, const char* nam void destroyQueryExecRes(SExecResult* pRes); int32_t dataConverToStr(char* str, int type, void* buf, int32_t bufSize, int32_t* len); -char* parseTagDatatoJson(void* p); +void parseTagDatatoJson(void* p, char** jsonStr); int32_t cloneTableMeta(STableMeta* pSrc, STableMeta** pDst); void getColumnTypeFromMeta(STableMeta* pMeta, char* pName, ETableColumnType* pType); int32_t cloneDbVgInfo(SDBVgInfo* pSrc, SDBVgInfo** pDst); diff --git a/include/os/osString.h b/include/os/osString.h index ac7dd7eda8..8672da616d 100644 --- a/include/os/osString.h +++ b/include/os/osString.h @@ -55,7 +55,7 @@ typedef enum { M2C = 0, C2M } ConvType; #define tstrncpy(dst, src, size) \ do { \ - strncpy((dst), (src), (size)); \ + (void)strncpy((dst), (src), (size)); \ (dst)[(size)-1] = 0; \ } while (0) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index f8a817dc46..7f8bcb8613 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -2007,7 +2007,8 @@ static int32_t doConvertJson(SReqResultInfo* pResultInfo, int32_t numOfCols, int sprintf(varDataVal(dst), "%s", TSDB_DATA_NULL_STR_L); varDataSetLen(dst, strlen(varDataVal(dst))); } else if (tTagIsJson(data)) { - char* jsonString = parseTagDatatoJson(data); + char* jsonString = NULL; + parseTagDatatoJson(data, &jsonString); STR_TO_VARSTR(dst, jsonString); taosMemoryFree(jsonString); } else if (jsonInnerType == TSDB_DATA_TYPE_NCHAR) { // value -> "value" diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index ce404092b0..bc76cb5da9 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -23,6 +23,31 @@ #include "tglobal.h" #include "tmsgtype.h" +#define RAW_NULL_CHECK(c) \ + do { \ + if (c == NULL) { \ + code = TSDB_CODE_OUT_OF_MEMORY; \ + goto end; \ + } \ + } while (0) + +#define RAW_FALSE_CHECK(c) \ + do { \ + if (!c) { \ + code = TSDB_CODE_INVALID_PARA; \ + goto end; \ + } \ + } while (0) + +#define RAW_RETURN_CHECK(c) \ + do { \ + code == c; \ + if (code != 0) { \ + goto end; \ + } \ + } while (0) + + #define LOG_ID_TAG "connId:0x%" PRIx64 ",reqId:0x%" PRIx64 #define LOG_ID_VALUE *(int64_t*)taos, pRequest->requestId @@ -32,8 +57,9 @@ static int32_t tmqWriteBatchMetaDataImpl(TAOS* taos, void* meta, int32_t metaLen static tb_uid_t processSuid(tb_uid_t suid, char* db) { return suid + MurmurHash3_32(db, strlen(db)); } -static cJSON* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* schemaTag, char* name, int64_t id, - int8_t t, SColCmprWrapper* pColCmprRow) { +static void buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* schemaTag, char* name, int64_t id, + int8_t t, SColCmprWrapper* pColCmprRow, cJSON** pJson) { + int32_t code = TSDB_CODE_SUCCESS; int8_t buildDefaultCompress = 0; if (pColCmprRow->nCols <= 0) { buildDefaultCompress = 1; @@ -41,43 +67,45 @@ static cJSON* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* sc char* string = NULL; cJSON* json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed") return NULL; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("create"); - cJSON_AddItemToObject(json, "type", type); + RAW_NULL_CHECK(type); - // char uid[32] = {0}; - // sprintf(uid, "%"PRIi64, id); - // cJSON* id_ = cJSON_CreateString(uid); - // cJSON_AddItemToObject(json, "id", id_); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* tableType = cJSON_CreateString(t == TSDB_NORMAL_TABLE ? "normal" : "super"); - cJSON_AddItemToObject(json, "tableType", tableType); + RAW_NULL_CHECK(tableType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableType", tableType)); cJSON* tableName = cJSON_CreateString(name); - cJSON_AddItemToObject(json, "tableName", tableName); - // cJSON* version = cJSON_CreateNumber(1); - // cJSON_AddItemToObject(json, "version", version); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); cJSON* columns = cJSON_CreateArray(); + RAW_NULL_CHECK(columns); for (int i = 0; i < schemaRow->nCols; i++) { cJSON* column = cJSON_CreateObject(); + RAW_NULL_CHECK(column); SSchema* s = schemaRow->pSchema + i; cJSON* cname = cJSON_CreateString(s->name); - cJSON_AddItemToObject(column, "name", cname); + RAW_NULL_CHECK(cname); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "name", cname)); cJSON* ctype = cJSON_CreateNumber(s->type); - cJSON_AddItemToObject(column, "type", ctype); + RAW_NULL_CHECK(ctype); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "type", ctype)); if (s->type == TSDB_DATA_TYPE_BINARY || s->type == TSDB_DATA_TYPE_VARBINARY || s->type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = s->bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(column, "length", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "length", cbytes)); } else if (s->type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (s->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(column, "length", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "length", cbytes)); } cJSON* isPk = cJSON_CreateBool(s->flags & COL_IS_KEY); - cJSON_AddItemToObject(column, "isPrimarykey", isPk); - cJSON_AddItemToArray(columns, column); + RAW_NULL_CHECK(isPk); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "isPrimarykey", isPk)); + RAW_FALSE_CHECK(cJSON_AddItemToArray(columns, column)); if (pColCmprRow == NULL) { continue; @@ -91,177 +119,222 @@ static cJSON* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* sc alg = pColCmpr->alg; } const char* encode = columnEncodeStr(COMPRESS_L1_TYPE_U32(alg)); + RAW_NULL_CHECK(encode); const char* compress = columnCompressStr(COMPRESS_L2_TYPE_U32(alg)); + RAW_NULL_CHECK(compress); const char* level = columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(alg)); + RAW_NULL_CHECK(level); cJSON* encodeJson = cJSON_CreateString(encode); - cJSON_AddItemToObject(column, "encode", encodeJson); + RAW_NULL_CHECK(encodeJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "encode", encodeJson)); cJSON* compressJson = cJSON_CreateString(compress); - cJSON_AddItemToObject(column, "compress", compressJson); + RAW_NULL_CHECK(compressJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "compress", compressJson)); cJSON* levelJson = cJSON_CreateString(level); - cJSON_AddItemToObject(column, "level", levelJson); + RAW_NULL_CHECK(levelJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(column, "level", levelJson)); } - cJSON_AddItemToObject(json, "columns", columns); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "columns", columns)); cJSON* tags = cJSON_CreateArray(); + RAW_NULL_CHECK(tags); for (int i = 0; schemaTag && i < schemaTag->nCols; i++) { cJSON* tag = cJSON_CreateObject(); + RAW_NULL_CHECK(tag); SSchema* s = schemaTag->pSchema + i; cJSON* tname = cJSON_CreateString(s->name); - cJSON_AddItemToObject(tag, "name", tname); + RAW_NULL_CHECK(tname); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "name", tname)); cJSON* ttype = cJSON_CreateNumber(s->type); - cJSON_AddItemToObject(tag, "type", ttype); + RAW_NULL_CHECK(ttype); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "type", ttype)); if (s->type == TSDB_DATA_TYPE_BINARY || s->type == TSDB_DATA_TYPE_VARBINARY || s->type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = s->bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(tag, "length", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "length", cbytes)); } else if (s->type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (s->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(tag, "length", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "length", cbytes)); } - cJSON_AddItemToArray(tags, tag); + RAW_FALSE_CHECK(cJSON_AddItemToArray(tags, tag)); } - cJSON_AddItemToObject(json, "tags", tags); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tags", tags)); - return json; +end: + *pJson = json; } static int32_t setCompressOption(cJSON* json, uint32_t para) { uint8_t encode = COMPRESS_L1_TYPE_U32(para); + int32_t code = 0; if (encode != 0) { const char* encodeStr = columnEncodeStr(encode); + RAW_NULL_CHECK(encodeStr); cJSON* encodeJson = cJSON_CreateString(encodeStr); - cJSON_AddItemToObject(json, "encode", encodeJson); - return 0; + RAW_NULL_CHECK(encodeJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "encode", encodeJson)); + return code; } uint8_t compress = COMPRESS_L2_TYPE_U32(para); if (compress != 0) { const char* compressStr = columnCompressStr(compress); + RAW_NULL_CHECK(compressStr); cJSON* compressJson = cJSON_CreateString(compressStr); - cJSON_AddItemToObject(json, "compress", compressJson); - return 0; + RAW_NULL_CHECK(compressJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "compress", compressJson)); + return code; } uint8_t level = COMPRESS_L2_TYPE_LEVEL_U32(para); if (level != 0) { const char* levelStr = columnLevelStr(level); + RAW_NULL_CHECK(levelStr); cJSON* levelJson = cJSON_CreateString(levelStr); - cJSON_AddItemToObject(json, "level", levelJson); - return 0; + RAW_NULL_CHECK(levelJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "level", levelJson)); + return code } - return 0; + +end: + return code; } -static cJSON* buildAlterSTableJson(void* alterData, int32_t alterDataLen) { +static void buildAlterSTableJson(void* alterData, int32_t alterDataLen, cJSON** pJson) { SMAlterStbReq req = {0}; cJSON* json = NULL; char* string = NULL; + int32_t code = 0; if (tDeserializeSMAlterStbReq(alterData, alterDataLen, &req) != 0) { goto end; } json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed"); - goto end; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("alter"); - cJSON_AddItemToObject(json, "type", type); - // cJSON* uid = cJSON_CreateNumber(id); - // cJSON_AddItemToObject(json, "uid", uid); + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); SName name = {0}; - tNameFromString(&name, req.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE); + RAW_RETURN_CHECK(tNameFromString(&name, req.name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE)); cJSON* tableType = cJSON_CreateString("super"); - cJSON_AddItemToObject(json, "tableType", tableType); + RAW_NULL_CHECK(tableType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableType", tableType)); cJSON* tableName = cJSON_CreateString(name.tname); - cJSON_AddItemToObject(json, "tableName", tableName); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); cJSON* alterType = cJSON_CreateNumber(req.alterType); - cJSON_AddItemToObject(json, "alterType", alterType); + RAW_NULL_CHECK(alterType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "alterType", alterType)); switch (req.alterType) { case TSDB_ALTER_TABLE_ADD_TAG: case TSDB_ALTER_TABLE_ADD_COLUMN: { TAOS_FIELD* field = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(field); cJSON* colName = cJSON_CreateString(field->name); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(field->type); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (field->type == TSDB_DATA_TYPE_BINARY || field->type == TSDB_DATA_TYPE_VARBINARY || field->type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = field->bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (field->type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (field->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } break; } case TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION: { SFieldWithOptions* field = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(field); cJSON* colName = cJSON_CreateString(field->name); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(field->type); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (field->type == TSDB_DATA_TYPE_BINARY || field->type == TSDB_DATA_TYPE_VARBINARY || field->type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = field->bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (field->type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (field->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } - setCompressOption(json, field->compress); + RAW_RETURN_CHECK(setCompressOption(json, field->compress)); break; } case TSDB_ALTER_TABLE_DROP_TAG: case TSDB_ALTER_TABLE_DROP_COLUMN: { TAOS_FIELD* field = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(field); cJSON* colName = cJSON_CreateString(field->name); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); break; } case TSDB_ALTER_TABLE_UPDATE_TAG_BYTES: case TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES: { TAOS_FIELD* field = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(field); cJSON* colName = cJSON_CreateString(field->name); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(field->type); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (field->type == TSDB_DATA_TYPE_BINARY || field->type == TSDB_DATA_TYPE_VARBINARY || field->type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = field->bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (field->type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (field->bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } break; } case TSDB_ALTER_TABLE_UPDATE_TAG_NAME: case TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME: { TAOS_FIELD* oldField = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(oldField); TAOS_FIELD* newField = taosArrayGet(req.pFields, 1); + RAW_NULL_CHECK(newField); cJSON* colName = cJSON_CreateString(oldField->name); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colNewName = cJSON_CreateString(newField->name); - cJSON_AddItemToObject(json, "colNewName", colNewName); + RAW_NULL_CHECK(colNewName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colNewName", colNewName)); break; } case TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS: { TAOS_FIELD* field = taosArrayGet(req.pFields, 0); + RAW_NULL_CHECK(field); cJSON* colName = cJSON_CreateString(field->name); - cJSON_AddItemToObject(json, "colName", colName); - setCompressOption(json, field->bytes); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); + RAW_RETURN_CHECK(setCompressOption(json, field->bytes)); break; } default: @@ -270,13 +343,12 @@ static cJSON* buildAlterSTableJson(void* alterData, int32_t alterDataLen) { end: tFreeSMAltertbReq(&req); - return json; + *pJson = json; } -static cJSON* processCreateStb(SMqMetaRsp* metaRsp) { +static void processCreateStb(SMqMetaRsp* metaRsp, cJSON** pJson) { SVCreateStbReq req = {0}; SDecoder coder; - cJSON* pJson = NULL; uDebug("create stable data:%p", metaRsp); // decode and process req @@ -285,19 +357,18 @@ static cJSON* processCreateStb(SMqMetaRsp* metaRsp) { tDecoderInit(&coder, data, len); if (tDecodeSVCreateStbReq(&coder, &req) < 0) { - goto _err; + goto end; } - pJson = buildCreateTableJson(&req.schemaRow, &req.schemaTag, req.name, req.suid, TSDB_SUPER_TABLE, &req.colCmpr); -_err: - uDebug("create stable return, sql json:%s", cJSON_PrintUnformatted(pJson)); + buildCreateTableJson(&req.schemaRow, &req.schemaTag, req.name, req.suid, TSDB_SUPER_TABLE, &req.colCmpr, pJson); + +end: + uDebug("create stable return, sql json:%s", cJSON_PrintUnformatted(*pJson)); tDecoderClear(&coder); - return pJson; } -static cJSON* processAlterStb(SMqMetaRsp* metaRsp) { +static void processAlterStb(SMqMetaRsp* metaRsp, cJSON** pJson) { SVCreateStbReq req = {0}; - SDecoder coder; - cJSON* pJson = NULL; + SDecoder coder = {0}; uDebug("alter stable data:%p", metaRsp); // decode and process req @@ -306,13 +377,13 @@ static cJSON* processAlterStb(SMqMetaRsp* metaRsp) { tDecoderInit(&coder, data, len); if (tDecodeSVCreateStbReq(&coder, &req) < 0) { - goto _err; + goto end; } - pJson = buildAlterSTableJson(req.alterOriData, req.alterOriDataLen); -_err: - uDebug("alter stable return, sql json:%s", cJSON_PrintUnformatted(pJson)); + buildAlterSTableJson(req.alterOriData, req.alterOriDataLen, pJson); + +end: + uDebug("alter stable return, sql json:%s", cJSON_PrintUnformatted(*pJson)); tDecoderClear(&coder); - return pJson; } static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { @@ -322,23 +393,22 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { SArray* tagName = pCreateReq->ctb.tagName; int64_t id = pCreateReq->uid; uint8_t tagNum = pCreateReq->ctb.tagNum; + int32_t code = 0; cJSON* tableName = cJSON_CreateString(name); - cJSON_AddItemToObject(json, "tableName", tableName); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); cJSON* using = cJSON_CreateString(sname); - cJSON_AddItemToObject(json, "using", using); + RAW_NULL_CHECK(using); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "using", using)); cJSON* tagNumJson = cJSON_CreateNumber(tagNum); - cJSON_AddItemToObject(json, "tagNum", tagNumJson); - // cJSON* version = cJSON_CreateNumber(1); - // cJSON_AddItemToObject(json, "version", version); + RAW_NULL_CHECK(tagNumJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tagNum", tagNumJson)); cJSON* tags = cJSON_CreateArray(); + RAW_NULL_CHECK(tags); SArray* pTagVals = NULL; - int32_t code = tTagToValArray(pTag, &pTagVals); - if (code) { - uError("tTagToValArray failed code:%d", code); - goto end; - } + RAW_RETURN_CHECK(tTagToValArray(pTag, &pTagVals)); if (tTagIsJson(pTag)) { STag* p = (STag*)pTag; @@ -346,36 +416,41 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { uError("p->nTag == 0"); goto end; } - char* pJson = parseTagDatatoJson(pTag); + char* pJson = NULL; + parseTagDatatoJson(pTag, &pJson); cJSON* tag = cJSON_CreateObject(); + RAW_NULL_CHECK(tag); STagVal* pTagVal = taosArrayGet(pTagVals, 0); - + RAW_NULL_CHECK(pTagVal); char* ptname = taosArrayGet(tagName, 0); + RAW_NULL_CHECK(ptname); cJSON* tname = cJSON_CreateString(ptname); - cJSON_AddItemToObject(tag, "name", tname); - // cJSON* cid_ = cJSON_CreateString(""); - // cJSON_AddItemToObject(tag, "cid", cid_); + RAW_NULL_CHECK(tname); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "name", tname)); cJSON* ttype = cJSON_CreateNumber(TSDB_DATA_TYPE_JSON); - cJSON_AddItemToObject(tag, "type", ttype); + RAW_NULL_CHECK(ttype); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "type", ttype)); cJSON* tvalue = cJSON_CreateString(pJson); - cJSON_AddItemToObject(tag, "value", tvalue); - cJSON_AddItemToArray(tags, tag); + RAW_NULL_CHECK(tvalue); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "value", tvalue)); + RAW_FALSE_CHECK(cJSON_AddItemToArray(tags, tag)); taosMemoryFree(pJson); goto end; } for (int i = 0; i < taosArrayGetSize(pTagVals); i++) { STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, i); - + RAW_NULL_CHECK(pTagVal); cJSON* tag = cJSON_CreateObject(); - + RAW_NULL_CHECK(tag); char* ptname = taosArrayGet(tagName, i); + RAW_NULL_CHECK(ptname); cJSON* tname = cJSON_CreateString(ptname); - cJSON_AddItemToObject(tag, "name", tname); - // cJSON* cid = cJSON_CreateNumber(pTagVal->cid); - // cJSON_AddItemToObject(tag, "cid", cid); + RAW_NULL_CHECK(tname); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "name", tname)); cJSON* ttype = cJSON_CreateNumber(pTagVal->type); - cJSON_AddItemToObject(tag, "type", ttype); + RAW_NULL_CHECK(ttype); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "type", ttype)); cJSON* tvalue = NULL; if (IS_VAR_DATA_TYPE(pTagVal->type)) { @@ -385,127 +460,132 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { } else { buf = taosMemoryCalloc(pTagVal->nData + 3, 1); } - - if (!buf) goto end; - dataConverToStr(buf, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL); + RAW_NULL_CHECK(buf); + RAW_RETURN_CHECK(dataConverToStr(buf, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL)); tvalue = cJSON_CreateString(buf); + RAW_NULL_CHECK(tvalue); taosMemoryFree(buf); } else { double val = 0; GET_TYPED_DATA(val, double, pTagVal->type, &pTagVal->i64); tvalue = cJSON_CreateNumber(val); + RAW_NULL_CHECK(tvalue); } - cJSON_AddItemToObject(tag, "value", tvalue); - cJSON_AddItemToArray(tags, tag); + RAW_FALSE_CHECK(cJSON_AddItemToObject(tag, "value", tvalue)); + RAW_FALSE_CHECK(cJSON_AddItemToArray(tags, tag)); } end: - cJSON_AddItemToObject(json, "tags", tags); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tags", tags)); taosArrayDestroy(pTagVals); } -static cJSON* buildCreateCTableJson(SVCreateTbReq* pCreateReq, int32_t nReqs) { +static void buildCreateCTableJson(SVCreateTbReq* pCreateReq, int32_t nReqs, cJSON** pJson) { + int32_t code = 0; char* string = NULL; cJSON* json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed"); - return NULL; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("create"); - cJSON_AddItemToObject(json, "type", type); - // char cid[32] = {0}; - // sprintf(cid, "%"PRIi64, id); - // cJSON* cid_ = cJSON_CreateString(cid); - // cJSON_AddItemToObject(json, "id", cid_); + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* tableType = cJSON_CreateString("child"); - cJSON_AddItemToObject(json, "tableType", tableType); + RAW_NULL_CHECK(tableType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableType", tableType)); buildChildElement(json, pCreateReq); cJSON* createList = cJSON_CreateArray(); + RAW_NULL_CHECK(createList); for (int i = 0; nReqs > 1 && i < nReqs; i++) { cJSON* create = cJSON_CreateObject(); + RAW_NULL_CHECK(create); buildChildElement(create, pCreateReq + i); - cJSON_AddItemToArray(createList, create); + RAW_FALSE_CHECK(cJSON_AddItemToArray(createList, create)); } - cJSON_AddItemToObject(json, "createList", createList); - return json; + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "createList", createList)); + +end: + *pJson = json; } -static cJSON* processCreateTable(SMqMetaRsp* metaRsp) { +static void processCreateTable(SMqMetaRsp* metaRsp, cJSON** pJson) { SDecoder decoder = {0}; SVCreateTbBatchReq req = {0}; SVCreateTbReq* pCreateReq; - cJSON* pJson = NULL; // decode uDebug("create table data:%p", metaRsp); void* data = POINTER_SHIFT(metaRsp->metaRsp, sizeof(SMsgHead)); int32_t len = metaRsp->metaRspLen - sizeof(SMsgHead); tDecoderInit(&decoder, data, len); if (tDecodeSVCreateTbBatchReq(&decoder, &req) < 0) { - goto _exit; + goto end; } // loop to create table if (req.nReqs > 0) { pCreateReq = req.pReqs; if (pCreateReq->type == TSDB_CHILD_TABLE) { - pJson = buildCreateCTableJson(req.pReqs, req.nReqs); + buildCreateCTableJson(req.pReqs, req.nReqs, pJson); } else if (pCreateReq->type == TSDB_NORMAL_TABLE) { - pJson = buildCreateTableJson(&pCreateReq->ntb.schemaRow, NULL, pCreateReq->name, pCreateReq->uid, - TSDB_NORMAL_TABLE, &pCreateReq->colCmpr); + buildCreateTableJson(&pCreateReq->ntb.schemaRow, NULL, pCreateReq->name, pCreateReq->uid, + TSDB_NORMAL_TABLE, &pCreateReq->colCmpr, pJson); } } -_exit: - uDebug("create table return, sql json:%s", cJSON_PrintUnformatted(pJson)); +end: + uDebug("create table return, sql json:%s", cJSON_PrintUnformatted(*pJson)); tDeleteSVCreateTbBatchReq(&req); tDecoderClear(&decoder); - return pJson; } -static char* processAutoCreateTable(STaosxRsp* rsp) { +static void processAutoCreateTable(STaosxRsp* rsp, char** string) { + SDecoder* decoder = NULL; + SVCreateTbReq* pCreateReq = NULL; + int32_t code = 0; uDebug("auto create table data:%p", rsp); if (rsp->createTableNum <= 0) { uError("processAutoCreateTable rsp->createTableNum <= 0"); - goto _exit; + goto end; } - SDecoder* decoder = taosMemoryCalloc(rsp->createTableNum, sizeof(SDecoder)); - SVCreateTbReq* pCreateReq = taosMemoryCalloc(rsp->createTableNum, sizeof(SVCreateTbReq)); - char* string = NULL; + decoder = taosMemoryCalloc(rsp->createTableNum, sizeof(SDecoder)); + RAW_NULL_CHECK(decoder); + pCreateReq = taosMemoryCalloc(rsp->createTableNum, sizeof(SVCreateTbReq)); + RAW_NULL_CHECK(pCreateReq); // loop to create table for (int32_t iReq = 0; iReq < rsp->createTableNum; iReq++) { // decode void** data = taosArrayGet(rsp->createTableReq, iReq); + RAW_NULL_CHECK(data); int32_t* len = taosArrayGet(rsp->createTableLen, iReq); + RAW_NULL_CHECK(len); tDecoderInit(&decoder[iReq], *data, *len); if (tDecodeSVCreateTbReq(&decoder[iReq], pCreateReq + iReq) < 0) { - goto _exit; + goto end; } if (pCreateReq[iReq].type != TSDB_CHILD_TABLE) { uError("processAutoCreateTable pCreateReq[iReq].type != TSDB_CHILD_TABLE"); - goto _exit; + goto end; } } cJSON* pJson = buildCreateCTableJson(pCreateReq, rsp->createTableNum); - string = cJSON_PrintUnformatted(pJson); + *string = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); -_exit: - uDebug("auto created table return, sql json:%s", string); - for (int i = 0; i < rsp->createTableNum; i++) { + +end: + uDebug("auto created table return, sql json:%s", *string); + for (int i = 0; decoder && pCreateReq && i < rsp->createTableNum; i++) { tDecoderClear(&decoder[i]); taosMemoryFreeClear(pCreateReq[i].comment); if (pCreateReq[i].type == TSDB_CHILD_TABLE) { - taosArrayDestroy(pCreateReq[i].ctb.tagName); + (void)taosArrayDestroy(pCreateReq[i].ctb.tagName); } } taosMemoryFree(decoder); taosMemoryFree(pCreateReq); - return string; } static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { @@ -513,6 +593,7 @@ static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { SVAlterTbReq vAlterTbReq = {0}; char* string = NULL; cJSON* json = NULL; + int32_t code = 0; uDebug("alter table data:%p", metaRsp); // decode @@ -521,95 +602,110 @@ static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { tDecoderInit(&decoder, data, len); if (tDecodeSVAlterTbReq(&decoder, &vAlterTbReq) < 0) { uError("tDecodeSVAlterTbReq error"); - goto _exit; + goto end; } json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed"); - goto _exit; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("alter"); - cJSON_AddItemToObject(json, "type", type); - // cJSON* uid = cJSON_CreateNumber(id); - // cJSON_AddItemToObject(json, "uid", uid); + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* tableType = cJSON_CreateString(vAlterTbReq.action == TSDB_ALTER_TABLE_UPDATE_TAG_VAL ? "child" : "normal"); - cJSON_AddItemToObject(json, "tableType", tableType); + RAW_NULL_CHECK(tableType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableType", tableType)); cJSON* tableName = cJSON_CreateString(vAlterTbReq.tbName); - cJSON_AddItemToObject(json, "tableName", tableName); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); cJSON* alterType = cJSON_CreateNumber(vAlterTbReq.action); - cJSON_AddItemToObject(json, "alterType", alterType); + RAW_NULL_CHECK(alterType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "alterType", alterType)); switch (vAlterTbReq.action) { case TSDB_ALTER_TABLE_ADD_COLUMN: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(vAlterTbReq.type); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (vAlterTbReq.type == TSDB_DATA_TYPE_BINARY || vAlterTbReq.type == TSDB_DATA_TYPE_VARBINARY || vAlterTbReq.type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = vAlterTbReq.bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (vAlterTbReq.type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (vAlterTbReq.bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } break; } case TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(vAlterTbReq.type); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (vAlterTbReq.type == TSDB_DATA_TYPE_BINARY || vAlterTbReq.type == TSDB_DATA_TYPE_VARBINARY || vAlterTbReq.type == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = vAlterTbReq.bytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (vAlterTbReq.type == TSDB_DATA_TYPE_NCHAR) { int32_t length = (vAlterTbReq.bytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } - setCompressOption(json, vAlterTbReq.compress); + RAW_RETURN_CHECK(setCompressOption(json, vAlterTbReq.compress)); break; } case TSDB_ALTER_TABLE_DROP_COLUMN: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); break; } case TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colType = cJSON_CreateNumber(vAlterTbReq.colModType); - cJSON_AddItemToObject(json, "colType", colType); + RAW_NULL_CHECK(colType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colType", colType)); if (vAlterTbReq.colModType == TSDB_DATA_TYPE_BINARY || vAlterTbReq.colModType == TSDB_DATA_TYPE_VARBINARY || vAlterTbReq.colModType == TSDB_DATA_TYPE_GEOMETRY) { int32_t length = vAlterTbReq.colModBytes - VARSTR_HEADER_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } else if (vAlterTbReq.colModType == TSDB_DATA_TYPE_NCHAR) { int32_t length = (vAlterTbReq.colModBytes - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE; cJSON* cbytes = cJSON_CreateNumber(length); - cJSON_AddItemToObject(json, "colLength", cbytes); + RAW_NULL_CHECK(cbytes); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colLength", cbytes)); } break; } case TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); cJSON* colNewName = cJSON_CreateString(vAlterTbReq.colNewName); - cJSON_AddItemToObject(json, "colNewName", colNewName); + RAW_NULL_CHECK(colNewName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colNewName", colNewName)); break; } case TSDB_ALTER_TABLE_UPDATE_TAG_VAL: { cJSON* tagName = cJSON_CreateString(vAlterTbReq.tagName); - cJSON_AddItemToObject(json, "colName", tagName); + RAW_NULL_CHECK(tagName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", tagName)); bool isNull = vAlterTbReq.isNull; if (vAlterTbReq.tagType == TSDB_DATA_TYPE_JSON) { @@ -622,47 +718,53 @@ static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { if (vAlterTbReq.tagType == TSDB_DATA_TYPE_JSON) { if (!tTagIsJson(vAlterTbReq.pTagVal)) { uError("processAlterTable isJson false"); - goto _exit; + goto end; } - buf = parseTagDatatoJson(vAlterTbReq.pTagVal); + parseTagDatatoJson(vAlterTbReq.pTagVal, &buf); } else { if (vAlterTbReq.tagType == TSDB_DATA_TYPE_VARBINARY) { buf = taosMemoryCalloc(vAlterTbReq.nTagVal * 2 + 2 + 3, 1); } else { buf = taosMemoryCalloc(vAlterTbReq.nTagVal + 3, 1); } - dataConverToStr(buf, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL); + RAW_NULL_CHECK(buf); + RAW_RETURN_CHECK(dataConverToStr(buf, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL)); } cJSON* colValue = cJSON_CreateString(buf); - cJSON_AddItemToObject(json, "colValue", colValue); + RAW_NULL_CHECK(colValue); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colValue", colValue)); taosMemoryFree(buf); } cJSON* isNullCJson = cJSON_CreateBool(isNull); - cJSON_AddItemToObject(json, "colValueNull", isNullCJson); + RAW_NULL_CHECK(isNullCJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colValueNull", isNullCJson)); break; } case TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS: { cJSON* colName = cJSON_CreateString(vAlterTbReq.colName); - cJSON_AddItemToObject(json, "colName", colName); - setCompressOption(json, vAlterTbReq.compress); + RAW_NULL_CHECK(colName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "colName", colName)); + RAW_RETURN_CHECK(setCompressOption(json, vAlterTbReq.compress)); break; } default: break; } -_exit: +end: uDebug("alter table return, sql json:%s", cJSON_PrintUnformatted(json)); tDecoderClear(&decoder); return json; } -static cJSON* processDropSTable(SMqMetaRsp* metaRsp) { +static void processDropSTable(SMqMetaRsp* metaRsp, cJSON** pJson) { SDecoder decoder = {0}; SVDropStbReq req = {0}; cJSON* json = NULL; + int32_t code = 0; + uDebug("processDropSTable data:%p", metaRsp); // decode @@ -671,30 +773,31 @@ static cJSON* processDropSTable(SMqMetaRsp* metaRsp) { tDecoderInit(&decoder, data, len); if (tDecodeSVDropStbReq(&decoder, &req) < 0) { uError("tDecodeSVDropStbReq failed"); - goto _exit; + goto end; } json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed"); - goto _exit; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("drop"); - cJSON_AddItemToObject(json, "type", type); + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* tableType = cJSON_CreateString("super"); - cJSON_AddItemToObject(json, "tableType", tableType); + RAW_NULL_CHECK(tableType); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableType", tableType)); cJSON* tableName = cJSON_CreateString(req.name); - cJSON_AddItemToObject(json, "tableName", tableName); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableName", tableName)); -_exit: +end: uDebug("processDropSTable return, sql json:%s", cJSON_PrintUnformatted(json)); tDecoderClear(&decoder); - return json; + *pJson = json; } -static cJSON* processDeleteTable(SMqMetaRsp* metaRsp) { +static void processDeleteTable(SMqMetaRsp* metaRsp, cJSON** pJson) { SDeleteRes req = {0}; SDecoder coder = {0}; cJSON* json = NULL; + int32_t code = 0; uDebug("processDeleteTable data:%p", metaRsp); // decode and process req @@ -704,34 +807,34 @@ static cJSON* processDeleteTable(SMqMetaRsp* metaRsp) { tDecoderInit(&coder, data, len); if (tDecodeDeleteRes(&coder, &req) < 0) { uError("tDecodeDeleteRes failed"); - goto _exit; + goto end; } // getTbName(req.tableFName); char sql[256] = {0}; - snprintf(sql, sizeof(sql), "delete from `%s` where `%s` >= %" PRId64 " and `%s` <= %" PRId64, req.tableFName, + (void)snprintf(sql, sizeof(sql), "delete from `%s` where `%s` >= %" PRId64 " and `%s` <= %" PRId64, req.tableFName, req.tsColName, req.skey, req.tsColName, req.ekey); json = cJSON_CreateObject(); - if (json == NULL) { - uError("creaet json object failed"); - goto _exit; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("delete"); - cJSON_AddItemToObject(json, "type", type); + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* sqlJson = cJSON_CreateString(sql); - cJSON_AddItemToObject(json, "sql", sqlJson); + RAW_NULL_CHECK(sqlJson); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "sql", sqlJson)); -_exit: +end: uDebug("processDeleteTable return, sql json:%s", cJSON_PrintUnformatted(json)); tDecoderClear(&coder); - return json; + *pJson = json; } -static cJSON* processDropTable(SMqMetaRsp* metaRsp) { +static void processDropTable(SMqMetaRsp* metaRsp, cJSON** pJson) { SDecoder decoder = {0}; SVDropTbBatchReq req = {0}; cJSON* json = NULL; + int32_t code = 0; uDebug("processDropTable data:%p", metaRsp); // decode @@ -740,40 +843,33 @@ static cJSON* processDropTable(SMqMetaRsp* metaRsp) { tDecoderInit(&decoder, data, len); if (tDecodeSVDropTbBatchReq(&decoder, &req) < 0) { uError("tDecodeSVDropTbBatchReq failed"); - goto _exit; + goto end; } json = cJSON_CreateObject(); - if (json == NULL) { - uError("create json object failed"); - goto _exit; - } + RAW_NULL_CHECK(json); cJSON* type = cJSON_CreateString("drop"); - cJSON_AddItemToObject(json, "type", type); - // cJSON* uid = cJSON_CreateNumber(id); - // cJSON_AddItemToObject(json, "uid", uid); - // cJSON* tableType = cJSON_CreateString("normal"); - // cJSON_AddItemToObject(json, "tableType", tableType); - + RAW_NULL_CHECK(type); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "type", type)); cJSON* tableNameList = cJSON_CreateArray(); + RAW_NULL_CHECK(tableNameList); for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { SVDropTbReq* pDropTbReq = req.pReqs + iReq; - cJSON* tableName = cJSON_CreateString(pDropTbReq->name); - cJSON_AddItemToArray(tableNameList, tableName); + RAW_NULL_CHECK(tableName); + RAW_FALSE_CHECK(cJSON_AddItemToArray(tableNameList, tableName)); } - cJSON_AddItemToObject(json, "tableNameList", tableNameList); + RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tableNameList", tableNameList)); -_exit: +end: uDebug("processDropTable return, json sql:%s", cJSON_PrintUnformatted(json)); tDecoderClear(&decoder); - return json; + *pJson = json; } static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SVCreateStbReq req = {0}; SDecoder coder; @@ -781,11 +877,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { int32_t code = TSDB_CODE_SUCCESS; SRequestObj* pRequest = NULL; - code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return code; - } + RAW_RETURN_CHECK(buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0)); uDebug(LOG_ID_TAG " create stable, meta:%p, metaLen:%d", LOG_ID_VALUE, meta, metaLen); pRequest->syncQuery = true; if (!pRequest->pDb) { @@ -808,25 +900,27 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { } // build create stable pReq.pColumns = taosArrayInit(req.schemaRow.nCols, sizeof(SFieldWithOptions)); + RAW_NULL_CHECK (pReq.pColumns); for (int32_t i = 0; i < req.schemaRow.nCols; i++) { SSchema* pSchema = req.schemaRow.pSchema + i; SFieldWithOptions field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes}; - strcpy(field.name, pSchema->name); + (void)strcpy(field.name, pSchema->name); if (createDefaultCompress) { field.compress = createDefaultColCmprByType(pSchema->type); } else { - SColCmpr* p = &req.colCmpr.pColCmpr[i]; - field.compress = p->alg; + SColCmpr* pCmp = &req.colCmpr.pColCmpr[i]; + field.compress = pCmp->alg; } - taosArrayPush(pReq.pColumns, &field); + RAW_NULL_CHECK(taosArrayPush(pReq.pColumns, &field)); } pReq.pTags = taosArrayInit(req.schemaTag.nCols, sizeof(SField)); + RAW_NULL_CHECK(pReq.pTags); for (int32_t i = 0; i < req.schemaTag.nCols; i++) { SSchema* pSchema = req.schemaTag.pSchema + i; SField field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes}; - strcpy(field.name, pSchema->name); - taosArrayPush(pReq.pTags, &field); + (void)strcpy(field.name, pSchema->name); + RAW_NULL_CHECK(taosArrayPush(pReq.pTags, &field)); } pReq.colVer = req.schemaRow.version; @@ -841,19 +935,22 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { uDebug(LOG_ID_TAG " create stable name:%s suid:%" PRId64 " processSuid:%" PRId64, LOG_ID_VALUE, req.name, req.suid, pReq.suid); STscObj* pTscObj = pRequest->pTscObj; - SName tableName; - tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name); - + SName tableName = {0}; + RAW_RETURN_CHECK(tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name)); SCmdMsgInfo pCmdMsg = {0}; pCmdMsg.epSet = getEpSet_s(&pTscObj->pAppInfo->mgmtEp); pCmdMsg.msgType = TDMT_MND_CREATE_STB; pCmdMsg.msgLen = tSerializeSMCreateStbReq(NULL, 0, &pReq); - pCmdMsg.pMsg = taosMemoryMalloc(pCmdMsg.msgLen); - if (NULL == pCmdMsg.pMsg) { - code = TSDB_CODE_OUT_OF_MEMORY; + if (pCmdMsg.msgLen <= 0) { + code = TSDB_CODE_INVALID_PARA; + goto end; + } + pCmdMsg.pMsg = taosMemoryMalloc(pCmdMsg.msgLen); + RAW_NULL_CHECK(pCmdMsg.pMsg); + if (tSerializeSMCreateStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq) <= 0){ + code = TSDB_CODE_INVALID_PARA; goto end; } - tSerializeSMCreateStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq); SQuery pQuery = {0}; pQuery.execMode = QUERY_EXEC_MODE_RPC; @@ -861,12 +958,13 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { pQuery.msgType = pQuery.pCmdMsg->msgType; pQuery.stableQuery = true; - launchQueryImpl(pRequest, &pQuery, true, NULL); + (void)launchQueryImpl(pRequest, &pQuery, true, NULL); //ignore, because return value is pRequest if (pRequest->code == TSDB_CODE_SUCCESS) { SCatalog* pCatalog = NULL; - catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); - catalogRemoveTableMeta(pCatalog, &tableName); + // ignore the return value + (void)catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); + (void)catalogRemoveTableMeta(pCatalog, &tableName); } code = pRequest->code; @@ -877,14 +975,12 @@ end: destroyRequest(pRequest); tFreeSMCreateStbReq(&pReq); tDecoderClear(&coder); - terrno = code; return code; } static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SVDropStbReq req = {0}; SDecoder coder = {0}; @@ -892,12 +988,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { int32_t code = TSDB_CODE_SUCCESS; SRequestObj* pRequest = NULL; - code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return code; - } - + RAW_RETURN_CHECK(buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0)); uDebug(LOG_ID_TAG " drop stable, meta:%p, metaLen:%d", LOG_ID_VALUE, meta, metaLen); pRequest->syncQuery = true; if (!pRequest->pDb) { @@ -914,16 +1005,13 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { } SCatalog* pCatalog = NULL; - code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {.pTrans = pRequest->pTscObj->pAppInfo->pTransporter, .requestId = pRequest->requestId, .requestObjRefId = pRequest->self, .mgmtEps = getEpSet_s(&pRequest->pTscObj->pAppInfo->mgmtEp)}; SName pName = {0}; - toName(pRequest->pTscObj->acctId, pRequest->pDb, req.name, &pName); + (void)toName(pRequest->pTscObj->acctId, pRequest->pDb, req.name, &pName); // ignore the return value, always return pName STableMeta* pTableMeta = NULL; code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST) { @@ -946,18 +1034,26 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { pReq.suid); STscObj* pTscObj = pRequest->pTscObj; SName tableName = {0}; - tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name); + if (tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name) != 0) { + code = TSDB_CODE_INVALID_PARA; + goto end; + } SCmdMsgInfo pCmdMsg = {0}; pCmdMsg.epSet = getEpSet_s(&pTscObj->pAppInfo->mgmtEp); pCmdMsg.msgType = TDMT_MND_DROP_STB; pCmdMsg.msgLen = tSerializeSMDropStbReq(NULL, 0, &pReq); - pCmdMsg.pMsg = taosMemoryMalloc(pCmdMsg.msgLen); - if (NULL == pCmdMsg.pMsg) { - code = TSDB_CODE_OUT_OF_MEMORY; + if (pCmdMsg.msgLen <= 0) { + code = TSDB_CODE_INVALID_PARA; goto end; } - tSerializeSMDropStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq); + pCmdMsg.pMsg = taosMemoryMalloc(pCmdMsg.msgLen); + RAW_NULL_CHECK(pCmdMsg.pMsg); + if (tSerializeSMDropStbReq(pCmdMsg.pMsg, pCmdMsg.msgLen, &pReq) <= 0){ + code = TSDB_CODE_INVALID_PARA; + goto end; + } + SQuery pQuery = {0}; pQuery.execMode = QUERY_EXEC_MODE_RPC; @@ -965,12 +1061,12 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) { pQuery.msgType = pQuery.pCmdMsg->msgType; pQuery.stableQuery = true; - launchQueryImpl(pRequest, &pQuery, true, NULL); + (void)launchQueryImpl(pRequest, &pQuery, true, NULL); //ignore, because return value is pRequest if (pRequest->code == TSDB_CODE_SUCCESS) { - // SCatalog* pCatalog = NULL; - catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); - catalogRemoveTableMeta(pCatalog, &tableName); + // ignore the error code + (void)catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); + (void)catalogRemoveTableMeta(pCatalog, &tableName); } code = pRequest->code; @@ -980,7 +1076,6 @@ end: uDebug(LOG_ID_TAG " drop stable return, msg:%s", LOG_ID_VALUE, tstrerror(code)); destroyRequest(pRequest); tDecoderClear(&coder); - terrno = code; return code; } @@ -992,13 +1087,12 @@ typedef struct SVgroupCreateTableBatch { static void destroyCreateTbReqBatch(void* data) { SVgroupCreateTableBatch* pTbBatch = (SVgroupCreateTableBatch*)data; - taosArrayDestroy(pTbBatch->req.pArray); + (void)taosArrayDestroy(pTbBatch->req.pArray); } static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SVCreateTbBatchReq req = {0}; SDecoder coder = {0}; @@ -1007,12 +1101,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { SQuery* pQuery = NULL; SHashObj* pVgroupHashmap = NULL; - code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return code; - } - + RAW_RETURN_CHECK(buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0)); uDebug(LOG_ID_TAG " create table, meta:%p, metaLen:%d", LOG_ID_VALUE, meta, metaLen); pRequest->syncQuery = true; @@ -1033,16 +1122,9 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { SVCreateTbReq* pCreateReq = NULL; SCatalog* pCatalog = NULL; - code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - + RAW_RETURN_CHECK(catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog)); pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); - if (NULL == pVgroupHashmap) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pVgroupHashmap); taosHashSetFreeFp(pVgroupHashmap, destroyCreateTbReqBatch); SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter, @@ -1051,13 +1133,14 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { .mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp)}; pRequest->tableList = taosArrayInit(req.nReqs, sizeof(SName)); + RAW_NULL_CHECK(pRequest->tableList); // loop to create table for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { pCreateReq = req.pReqs + iReq; SVgroupInfo pInfo = {0}; SName pName = {0}; - toName(pTscObj->acctId, pRequest->pDb, pCreateReq->name, &pName); + (void)toName(pTscObj->acctId, pRequest->pDb, pCreateReq->name, &pName); code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &pInfo); if (code != TSDB_CODE_SUCCESS) { goto end; @@ -1070,7 +1153,7 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { SName sName = {0}; tb_uid_t oldSuid = pCreateReq->ctb.suid; // pCreateReq->ctb.suid = processSuid(pCreateReq->ctb.suid, pRequest->pDb); - toName(pTscObj->acctId, pRequest->pDb, pCreateReq->ctb.stbName, &sName); + (void)toName(pTscObj->acctId, pRequest->pDb, pCreateReq->ctb.stbName, &sName); code = catalogGetTableMeta(pCatalog, &conn, &sName, &pTableMeta); if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST) { code = TSDB_CODE_SUCCESS; @@ -1085,6 +1168,9 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { for (int32_t i = 0; i < taosArrayGetSize(pCreateReq->ctb.tagName); i++) { char* tName = taosArrayGet(pCreateReq->ctb.tagName, i); + if (tName == NULL) { + continue; + } for (int32_t j = pTableMeta->tableInfo.numOfColumns; j < pTableMeta->tableInfo.numOfColumns + pTableMeta->tableInfo.numOfTags; j++) { SSchema* tag = &pTableMeta->schema[j]; @@ -1095,21 +1181,21 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { } taosMemoryFreeClear(pTableMeta); } - taosArrayPush(pRequest->tableList, &pName); + RAW_NULL_CHECK(taosArrayPush(pRequest->tableList, &pName)); SVgroupCreateTableBatch* pTableBatch = taosHashGet(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId)); if (pTableBatch == NULL) { SVgroupCreateTableBatch tBatch = {0}; tBatch.info = pInfo; - strcpy(tBatch.dbName, pRequest->pDb); + (void)strcpy(tBatch.dbName, pRequest->pDb); tBatch.req.pArray = taosArrayInit(4, sizeof(struct SVCreateTbReq)); - taosArrayPush(tBatch.req.pArray, pCreateReq); + RAW_NULL_CHECK(tBatch.req.pArray); + RAW_NULL_CHECK(taosArrayPush(tBatch.req.pArray, pCreateReq)); tBatch.req.source = TD_REQ_FROM_TAOX; - - taosHashPut(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId), &tBatch, sizeof(tBatch)); + RAW_RETURN_CHECK(taosHashPut(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId), &tBatch, sizeof(tBatch))); } else { // add to the correct vgroup - taosArrayPush(pTableBatch->req.pArray, pCreateReq); + RAW_NULL_CHECK(taosArrayPush(pTableBatch->req.pArray, pCreateReq)); } } @@ -1117,25 +1203,21 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) { goto end; } SArray* pBufArray = serializeVgroupsCreateTableBatch(pVgroupHashmap); - if (NULL == pBufArray) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pBufArray); pQuery = (SQuery*)nodesMakeNode(QUERY_NODE_QUERY); + RAW_NULL_CHECK(pQuery); pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; pQuery->msgType = TDMT_VND_CREATE_TABLE; pQuery->stableQuery = false; pQuery->pRoot = nodesMakeNode(QUERY_NODE_CREATE_TABLE_STMT); + RAW_NULL_CHECK(pQuery->pRoot); - code = rewriteToVnodeModifyOpStmt(pQuery, pBufArray); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pBufArray)); - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); if (pRequest->code == TSDB_CODE_SUCCESS) { - removeMeta(pTscObj, pRequest->tableList, false); + (void)removeMeta(pTscObj, pRequest->tableList, false); } code = pRequest->code; @@ -1148,7 +1230,6 @@ end: destroyRequest(pRequest); tDecoderClear(&coder); qDestroyQuery(pQuery); - terrno = code; return code; } @@ -1160,13 +1241,12 @@ typedef struct SVgroupDropTableBatch { static void destroyDropTbReqBatch(void* data) { SVgroupDropTableBatch* pTbBatch = (SVgroupDropTableBatch*)data; - taosArrayDestroy(pTbBatch->req.pArray); + (void)taosArrayDestroy(pTbBatch->req.pArray); } static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SVDropTbBatchReq req = {0}; SDecoder coder = {0}; @@ -1175,11 +1255,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { SQuery* pQuery = NULL; SHashObj* pVgroupHashmap = NULL; - code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return code; - } + RAW_RETURN_CHECK(buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0)); uDebug(LOG_ID_TAG " drop table, meta:%p, len:%d", LOG_ID_VALUE, meta, metaLen); pRequest->syncQuery = true; @@ -1200,16 +1276,10 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { SVDropTbReq* pDropReq = NULL; SCatalog* pCatalog = NULL; - code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog)); pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK); - if (NULL == pVgroupHashmap) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pVgroupHashmap); taosHashSetFreeFp(pVgroupHashmap, destroyDropTbReqBatch); SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter, @@ -1217,6 +1287,7 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { .requestObjRefId = pRequest->self, .mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp)}; pRequest->tableList = taosArrayInit(req.nReqs, sizeof(SName)); + RAW_NULL_CHECK(pRequest->tableList); // loop to create table for (int32_t iReq = 0; iReq < req.nReqs; iReq++) { pDropReq = req.pReqs + iReq; @@ -1225,11 +1296,8 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { SVgroupInfo pInfo = {0}; SName pName = {0}; - toName(pTscObj->acctId, pRequest->pDb, pDropReq->name, &pName); - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &pInfo); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + (void)toName(pTscObj->acctId, pRequest->pDb, pDropReq->name, &pName); + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &pInfo)); STableMeta* pTableMeta = NULL; code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); @@ -1247,17 +1315,17 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { uDebug(LOG_ID_TAG " drop table name:%s suid:%" PRId64 " new suid:%" PRId64, LOG_ID_VALUE, pDropReq->name, oldSuid, pDropReq->suid); - taosArrayPush(pRequest->tableList, &pName); + RAW_NULL_CHECK(taosArrayPush(pRequest->tableList, &pName)); SVgroupDropTableBatch* pTableBatch = taosHashGet(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId)); if (pTableBatch == NULL) { SVgroupDropTableBatch tBatch = {0}; tBatch.info = pInfo; tBatch.req.pArray = taosArrayInit(TARRAY_MIN_SIZE, sizeof(SVDropTbReq)); - taosArrayPush(tBatch.req.pArray, pDropReq); - - taosHashPut(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId), &tBatch, sizeof(tBatch)); + RAW_NULL_CHECK(tBatch.req.pArray); + RAW_NULL_CHECK(taosArrayPush(tBatch.req.pArray, pDropReq)); + RAW_RETURN_CHECK(taosHashPut(pVgroupHashmap, &pInfo.vgId, sizeof(pInfo.vgId), &tBatch, sizeof(tBatch))); } else { // add to the correct vgroup - taosArrayPush(pTableBatch->req.pArray, pDropReq); + RAW_NULL_CHECK(taosArrayPush(pTableBatch->req.pArray, pDropReq)); } } @@ -1265,25 +1333,20 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) { goto end; } SArray* pBufArray = serializeVgroupsDropTableBatch(pVgroupHashmap); - if (NULL == pBufArray) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pBufArray); pQuery = (SQuery*)nodesMakeNode(QUERY_NODE_QUERY); + RAW_NULL_CHECK(pQuery); pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; pQuery->msgType = TDMT_VND_DROP_TABLE; pQuery->stableQuery = false; pQuery->pRoot = nodesMakeNode(QUERY_NODE_DROP_TABLE_STMT); + RAW_NULL_CHECK(pQuery->pRoot); + RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pBufArray)); - code = rewriteToVnodeModifyOpStmt(pQuery, pBufArray); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); if (pRequest->code == TSDB_CODE_SUCCESS) { - removeMeta(pTscObj, pRequest->tableList, false); + (void)removeMeta(pTscObj, pRequest->tableList, false); } code = pRequest->code; @@ -1293,46 +1356,12 @@ end: destroyRequest(pRequest); tDecoderClear(&coder); qDestroyQuery(pQuery); - terrno = code; return code; } -// delete from db.tabl where .. -> delete from tabl where .. -// delete from db .tabl where .. -> delete from tabl where .. -// static void getTbName(char *sql){ -// char *ch = sql; -// -// bool inBackQuote = false; -// int8_t dotIndex = 0; -// while(*ch != '\0'){ -// if(!inBackQuote && *ch == '`'){ -// inBackQuote = true; -// ch++; -// continue; -// } -// -// if(inBackQuote && *ch == '`'){ -// inBackQuote = false; -// ch++; -// -// continue; -// } -// -// if(!inBackQuote && *ch == '.'){ -// dotIndex ++; -// if(dotIndex == 2){ -// memmove(sql, ch + 1, strlen(ch + 1) + 1); -// break; -// } -// } -// ch++; -// } -//} - static int32_t taosDeleteData(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SDeleteRes req = {0}; SDecoder coder = {0}; @@ -1350,11 +1379,11 @@ static int32_t taosDeleteData(TAOS* taos, void* meta, int32_t metaLen) { goto end; } - // getTbName(req.tableFName); - snprintf(sql, sizeof(sql), "delete from `%s` where `%s` >= %" PRId64 " and `%s` <= %" PRId64, req.tableFName, + (void)snprintf(sql, sizeof(sql), "delete from `%s` where `%s` >= %" PRId64 " and `%s` <= %" PRId64, req.tableFName, req.tsColName, req.skey, req.tsColName, req.ekey); TAOS_RES* res = taosQueryImpl(taos, sql, false, TD_REQ_FROM_TAOX); + RAW_NULL_CHECK(res); SRequestObj* pRequest = (SRequestObj*)res; code = pRequest->code; if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST || code == TSDB_CODE_PAR_GET_META_ERROR) { @@ -1365,14 +1394,12 @@ static int32_t taosDeleteData(TAOS* taos, void* meta, int32_t metaLen) { end: uDebug("connId:0x%" PRIx64 " delete data sql:%s, code:%s", *(int64_t*)taos, sql, tstrerror(code)); tDecoderClear(&coder); - terrno = code; return code; } static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SVAlterTbReq req = {0}; SDecoder dcoder = {0}; @@ -1382,11 +1409,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { SArray* pArray = NULL; SVgDataBlocks* pVgData = NULL; - code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - return code; - } + RAW_RETURN_CHECK(buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest, 0)); uDebug(LOG_ID_TAG " alter table, meta:%p, len:%d", LOG_ID_VALUE, meta, metaLen); pRequest->syncQuery = true; if (!pRequest->pDb) { @@ -1409,11 +1432,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { STscObj* pTscObj = pRequest->pTscObj; SCatalog* pCatalog = NULL; - code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - + RAW_RETURN_CHECK(catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {.pTrans = pTscObj->pAppInfo->pTransporter, .requestId = pRequest->requestId, .requestObjRefId = pRequest->self, @@ -1421,23 +1440,13 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { SVgroupInfo pInfo = {0}; SName pName = {0}; - toName(pTscObj->acctId, pRequest->pDb, req.tbName, &pName); - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &pInfo); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - + (void)toName(pTscObj->acctId, pRequest->pDb, req.tbName, &pName); + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &pInfo)); pArray = taosArrayInit(1, sizeof(void*)); - if (NULL == pArray) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pArray); pVgData = taosMemoryCalloc(1, sizeof(SVgDataBlocks)); - if (NULL == pVgData) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pVgData); pVgData->vg = pInfo; int tlen = 0; @@ -1449,10 +1458,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { } tlen += sizeof(SMsgHead); void* pMsg = taosMemoryMalloc(tlen); - if (NULL == pMsg) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pMsg); ((SMsgHead*)pMsg)->vgId = htonl(pInfo.vgId); ((SMsgHead*)pMsg)->contLen = htonl(tlen); void* pBuf = POINTER_SHIFT(pMsg, sizeof(SMsgHead)); @@ -1470,24 +1476,19 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) { pVgData->size = tlen; pVgData->numOfTables = 1; - taosArrayPush(pArray, &pVgData); + RAW_NULL_CHECK(taosArrayPush(pArray, &pVgData)); pQuery = (SQuery*)nodesMakeNode(QUERY_NODE_QUERY); - if (NULL == pQuery) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pQuery); pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE; pQuery->msgType = TDMT_VND_ALTER_TABLE; pQuery->stableQuery = false; pQuery->pRoot = nodesMakeNode(QUERY_NODE_ALTER_TABLE_STMT); + RAW_NULL_CHECK(pQuery->pRoot); + RAW_RETURN_CHECK(rewriteToVnodeModifyOpStmt(pQuery, pArray)); - code = rewriteToVnodeModifyOpStmt(pQuery, pArray); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); pVgData = NULL; pArray = NULL; @@ -1504,13 +1505,12 @@ 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)); - taosArrayDestroy(pArray); + (void)taosArrayDestroy(pArray); if (pVgData) taosMemoryFreeClear(pVgData->pData); taosMemoryFreeClear(pVgData); destroyRequest(pRequest); tDecoderClear(&dcoder); qDestroyQuery(pQuery); - terrno = code; return code; } @@ -1522,8 +1522,7 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch int taos_write_raw_block_with_fields_with_reqid(TAOS* taos, int rows, char* pData, const char* tbname, TAOS_FIELD* fields, int numFields, int64_t reqid) { if (!taos || !pData || !tbname) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } int32_t code = TSDB_CODE_SUCCESS; STableMeta* pTableMeta = NULL; @@ -1531,9 +1530,7 @@ int taos_write_raw_block_with_fields_with_reqid(TAOS* taos, int rows, char* pDat SHashObj* pVgHash = NULL; SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, reqid); - if (!pRequest) { - return terrno; - } + RAW_NULL_CHECK(pRequest); uDebug(LOG_ID_TAG " write raw block with field, rows:%d, pData:%p, tbname:%s, fields:%p, numFields:%d", LOG_ID_VALUE, rows, pData, tbname, fields, numFields); @@ -1549,10 +1546,7 @@ int taos_write_raw_block_with_fields_with_reqid(TAOS* taos, int rows, char* pDat tstrncpy(pName.tname, tbname, sizeof(pName.tname)); struct SCatalog* pCatalog = NULL; - code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {0}; conn.pTrans = pRequest->pTscObj->pAppInfo->pTransporter; @@ -1561,36 +1555,18 @@ int taos_write_raw_block_with_fields_with_reqid(TAOS* taos, int rows, char* pDat conn.mgmtEps = getEpSet_s(&pRequest->pTscObj->pAppInfo->mgmtEp); SVgroupInfo vgData = {0}; - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vgData); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - // uError("td23101 0vgId:%d, vgId:%d, name:%s, uid:%"PRIu64, vgData.vgId, pTableMeta->vgId, tbname, pTableMeta->uid); + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vgData)); + RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta)); pQuery = smlInitHandle(); - if (pQuery == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pQuery); pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK); - taosHashPut(pVgHash, (const char*)&vgData.vgId, sizeof(vgData.vgId), (char*)&vgData, sizeof(vgData)); + RAW_NULL_CHECK(pVgHash); + RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vgData.vgId, sizeof(vgData.vgId), (char*)&vgData, sizeof(vgData))); + RAW_RETURN_CHECK(rawBlockBindData(pQuery, pTableMeta, pData, NULL, fields, numFields, false, NULL, 0)); + RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - code = rawBlockBindData(pQuery, pTableMeta, pData, NULL, fields, numFields, false, NULL, 0); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - code = smlBuildOutput(pQuery, pVgHash); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1599,7 +1575,6 @@ end: qDestroyQuery(pQuery); destroyRequest(pRequest); taosHashCleanup(pVgHash); - terrno = code; return code; } @@ -1609,8 +1584,7 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname) int taos_write_raw_block_with_reqid(TAOS* taos, int rows, char* pData, const char* tbname, int64_t reqid) { if (!taos || !pData || !tbname) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } int32_t code = TSDB_CODE_SUCCESS; STableMeta* pTableMeta = NULL; @@ -1618,9 +1592,7 @@ int taos_write_raw_block_with_reqid(TAOS* taos, int rows, char* pData, const cha SHashObj* pVgHash = NULL; SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, reqid); - if (!pRequest) { - return terrno; - } + RAW_NULL_CHECK(pRequest); uDebug(LOG_ID_TAG " write raw block, rows:%d, pData:%p, tbname:%s", LOG_ID_VALUE, rows, pData, tbname); @@ -1635,10 +1607,7 @@ int taos_write_raw_block_with_reqid(TAOS* taos, int rows, char* pData, const cha tstrncpy(pName.tname, tbname, sizeof(pName.tname)); struct SCatalog* pCatalog = NULL; - code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {0}; conn.pTrans = pRequest->pTscObj->pAppInfo->pTransporter; @@ -1647,34 +1616,17 @@ int taos_write_raw_block_with_reqid(TAOS* taos, int rows, char* pData, const cha conn.mgmtEps = getEpSet_s(&pRequest->pTscObj->pAppInfo->mgmtEp); SVgroupInfo vgData = {0}; - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vgData); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vgData)); + RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta)); pQuery = smlInitHandle(); - if (pQuery == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pRequest); pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK); - taosHashPut(pVgHash, (const char*)&vgData.vgId, sizeof(vgData.vgId), (char*)&vgData, sizeof(vgData)); + RAW_NULL_CHECK(pVgHash); + RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vgData.vgId, sizeof(vgData.vgId), (char*)&vgData, sizeof(vgData))); + RAW_RETURN_CHECK(rawBlockBindData(pQuery, pTableMeta, pData, NULL, NULL, 0, false, NULL, 0)); + RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - code = rawBlockBindData(pQuery, pTableMeta, pData, NULL, NULL, 0, false, NULL, 0); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - code = smlBuildOutput(pQuery, pVgHash); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } - - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1683,7 +1635,6 @@ end: qDestroyQuery(pQuery); destroyRequest(pRequest); taosHashCleanup(pVgHash); - terrno = code; return code; } @@ -1701,9 +1652,8 @@ static void* getRawDataFromRes(void* pRetrieve) { static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { if (taos == NULL || data == NULL) { - terrno = TSDB_CODE_INVALID_PARA; SET_ERROR_MSG("taos:%p or data:%p is NULL", taos, data); - return terrno; + return TSDB_CODE_INVALID_PARA; } int32_t code = TSDB_CODE_SUCCESS; SHashObj* pVgHash = NULL; @@ -1712,12 +1662,8 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { SDecoder decoder = {0}; STableMeta* pTableMeta = NULL; - terrno = TSDB_CODE_SUCCESS; SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0); - if (!pRequest) { - SET_ERROR_MSG("pRequest is NULL"); - return terrno; - } + RAW_NULL_CHECK(pRequest); uDebug(LOG_ID_TAG " write raw data, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen); pRequest->syncQuery = true; @@ -1743,11 +1689,7 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { } struct SCatalog* pCatalog = NULL; - code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get handle failed"); - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {0}; conn.pTrans = pRequest->pTscObj->pAppInfo->pTransporter; @@ -1756,59 +1698,37 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { conn.mgmtEps = getEpSet_s(&pRequest->pTscObj->pAppInfo->mgmtEp); pQuery = smlInitHandle(); - if (pQuery == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - SET_ERROR_MSG("init sml handle failed"); - goto end; - } + RAW_NULL_CHECK(pQuery); pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK); + RAW_NULL_CHECK(pVgHash); while (++rspObj.common.resIter < rspObj.rsp.common.blockNum) { void* pRetrieve = taosArrayGetP(rspObj.rsp.common.blockData, rspObj.common.resIter); + RAW_NULL_CHECK(pRetrieve); if (!rspObj.rsp.common.withSchema) { goto end; } const char* tbName = (const char*)taosArrayGetP(rspObj.rsp.common.blockTbName, rspObj.common.resIter); - if (!tbName) { - SET_ERROR_MSG("block tbname is null"); - code = TSDB_CODE_TMQ_INVALID_MSG; - goto end; - } + RAW_NULL_CHECK(tbName); SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}}; - strcpy(pName.dbname, pRequest->pDb); - strcpy(pName.tname, tbName); + (void)strcpy(pName.dbname, pRequest->pDb); + (void)strcpy(pName.tname, tbName); - code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); - // if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST) { - // uError("WriteRaw:catalogGetTableMeta table not exist. table name: %s", tbName); - // code = TSDB_CODE_SUCCESS; - // continue; - // } - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get table:%s meta failed", tbName); - goto end; - } + RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta)); - SVgroupInfo vg; - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg); - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get table:%s vgroup failed", tbName); - goto end; - } + SVgroupInfo vg = {0}; + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg)); void* hData = taosHashGet(pVgHash, &vg.vgId, sizeof(vg.vgId)); if (hData == NULL) { - taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)); + RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg))); } SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.common.blockSchema, rspObj.common.resIter); + RAW_NULL_CHECK(pSW); TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); - if (fields == NULL) { - SET_ERROR_MSG("calloc fields failed"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(fields); for (int i = 0; i < pSW->nCols; i++) { fields[i].type = pSW->pSchema[i].type; fields[i].bytes = pSW->pSchema[i].bytes; @@ -1825,13 +1745,9 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) { } } - code = smlBuildOutput(pQuery, pVgHash); - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("sml build output failed"); - goto end; - } + RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -1842,15 +1758,13 @@ end: destroyRequest(pRequest); taosHashCleanup(pVgHash); taosMemoryFreeClear(pTableMeta); - terrno = code; return code; } static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) { if (taos == NULL || data == NULL) { - terrno = TSDB_CODE_INVALID_PARA; SET_ERROR_MSG("taos:%p or data:%p is NULL", taos, data); - return terrno; + return TSDB_CODE_INVALID_PARA; } int32_t code = TSDB_CODE_SUCCESS; SHashObj* pVgHash = NULL; @@ -1860,12 +1774,9 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) STableMeta* pTableMeta = NULL; SVCreateTbReq* pCreateReqDst = NULL; - terrno = TSDB_CODE_SUCCESS; SRequestObj* pRequest = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT, 0); - if (!pRequest) { - SET_ERROR_MSG("pRequest is NULL"); - return terrno; - } + RAW_NULL_CHECK(pRequest); + uDebug(LOG_ID_TAG " write raw metadata, data:%p, dataLen:%d", LOG_ID_VALUE, data, dataLen); pRequest->syncQuery = true; rspObj.common.resIter = -1; @@ -1891,11 +1802,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) } struct SCatalog* pCatalog = NULL; - code = catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog); - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get handle failed"); - goto end; - } + RAW_RETURN_CHECK(catalogGetHandle(pRequest->pTscObj->pAppInfo->clusterId, &pCatalog)); SRequestConnInfo conn = {0}; conn.pTrans = pRequest->pTscObj->pAppInfo->pTransporter; @@ -1904,16 +1811,14 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) conn.mgmtEps = getEpSet_s(&pRequest->pTscObj->pAppInfo->mgmtEp); pQuery = smlInitHandle(); - if (pQuery == NULL) { - SET_ERROR_MSG("init sml handle failed"); - code = TSDB_CODE_OUT_OF_MEMORY; - goto end; - } + RAW_NULL_CHECK(pQuery); pVgHash = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_NO_LOCK); + RAW_NULL_CHECK(pVgHash); uDebug(LOG_ID_TAG " write raw metadata block num:%d", LOG_ID_VALUE, rspObj.rsp.common.blockNum); while (++rspObj.common.resIter < rspObj.rsp.common.blockNum) { void* pRetrieve = taosArrayGetP(rspObj.rsp.common.blockData, rspObj.common.resIter); + RAW_NULL_CHECK(pRetrieve); if (!rspObj.rsp.common.withSchema) { goto end; } @@ -1927,13 +1832,15 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) uDebug(LOG_ID_TAG " write raw metadata block tbname:%s", LOG_ID_VALUE, tbName); SName pName = {TSDB_TABLE_NAME_T, pRequest->pTscObj->acctId, {0}, {0}}; - strcpy(pName.dbname, pRequest->pDb); - strcpy(pName.tname, tbName); + (void)strcpy(pName.dbname, pRequest->pDb); + (void)strcpy(pName.tname, tbName); // find schema data info for (int j = 0; j < rspObj.rsp.createTableNum; j++) { void** dataTmp = taosArrayGet(rspObj.rsp.createTableReq, j); + RAW_NULL_CHECK(dataTmp); int32_t* lenTmp = taosArrayGet(rspObj.rsp.createTableLen, j); + RAW_NULL_CHECK(dataTmp); SDecoder decoderTmp = {0}; SVCreateTbReq pCreateReq = {0}; @@ -1954,8 +1861,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) goto end; } if (strcmp(tbName, pCreateReq.name) == 0) { - cloneSVreateTbReq(&pCreateReq, &pCreateReqDst); - // pCreateReqDst->ctb.suid = processSuid(pCreateReqDst->ctb.suid, pRequest->pDb); + RAW_RETURN_CHECK(cloneSVreateTbReq(&pCreateReq, &pCreateReqDst)); tDecoderClear(&decoderTmp); tDestroySVCreateTbReq(&pCreateReq, TSDB_MSG_FLG_DECODE); break; @@ -1964,26 +1870,12 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) tDestroySVCreateTbReq(&pCreateReq, TSDB_MSG_FLG_DECODE); } - SVgroupInfo vg; - code = catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg); - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get table:%s vgroup failed", tbName); - goto end; - } - + SVgroupInfo vg = {0}; + RAW_RETURN_CHECK(catalogGetTableHashVgroup(pCatalog, &conn, &pName, &vg)); if (pCreateReqDst) { // change stable name to get meta - strcpy(pName.tname, pCreateReqDst->ctb.stbName); - } - code = catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta); - // if (code == TSDB_CODE_PAR_TABLE_NOT_EXIST) { - // uError("WriteRaw:catalogGetTableMeta table not exist. table name: %s", tbName); - // code = TSDB_CODE_SUCCESS; - // continue; - // } - if (code != TSDB_CODE_SUCCESS) { - SET_ERROR_MSG("cata log get table:%s meta failed", tbName); - goto end; + (void)strcpy(pName.tname, pCreateReqDst->ctb.stbName); } + RAW_RETURN_CHECK(catalogGetTableMeta(pCatalog, &conn, &pName, &pTableMeta)); if (pCreateReqDst) { pTableMeta->vgId = vg.vgId; @@ -1992,10 +1884,11 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) } void* hData = taosHashGet(pVgHash, &vg.vgId, sizeof(vg.vgId)); if (hData == NULL) { - taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg)); + RAW_RETURN_CHECK(taosHashPut(pVgHash, (const char*)&vg.vgId, sizeof(vg.vgId), (char*)&vg, sizeof(vg))); } SSchemaWrapper* pSW = (SSchemaWrapper*)taosArrayGetP(rspObj.rsp.common.blockSchema, rspObj.common.resIter); + RAW_NULL_CHECK(pSW); TAOS_FIELD* fields = taosMemoryCalloc(pSW->nCols, sizeof(TAOS_FIELD)); if (fields == NULL) { SET_ERROR_MSG("calloc fields failed"); @@ -2018,12 +1911,9 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) } } - code = smlBuildOutput(pQuery, pVgHash); - if (code != TSDB_CODE_SUCCESS) { - goto end; - } + RAW_RETURN_CHECK(smlBuildOutput(pQuery, pVgHash)); - launchQueryImpl(pRequest, pQuery, true, NULL); + (void)launchQueryImpl(pRequest, pQuery, true, NULL); code = pRequest->code; end: @@ -2038,67 +1928,70 @@ end: tdDestroySVCreateTbReq(pCreateReqDst); taosMemoryFree(pCreateReqDst); } - terrno = code; return code; } -static cJSON* processSimpleMeta(SMqMetaRsp* pMetaRsp) { +static void processSimpleMeta(SMqMetaRsp* pMetaRsp, cJSON** meta) { if (pMetaRsp->resMsgType == TDMT_VND_CREATE_STB) { - return processCreateStb(pMetaRsp); + processCreateStb(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_ALTER_STB) { - return processAlterStb(pMetaRsp); + processAlterStb(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_DROP_STB) { - return processDropSTable(pMetaRsp); + processDropSTable(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_CREATE_TABLE) { - return processCreateTable(pMetaRsp); + processCreateTable(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_ALTER_TABLE) { - return processAlterTable(pMetaRsp); + processAlterTable(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_DROP_TABLE) { - return processDropTable(pMetaRsp); + processDropTable(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_DROP_TABLE) { - return processDropTable(pMetaRsp); + processDropTable(pMetaRsp, meta); } else if (pMetaRsp->resMsgType == TDMT_VND_DELETE) { - return processDeleteTable(pMetaRsp); + processDeleteTable(pMetaRsp, meta); } - - return NULL; } -static char* processBatchMetaToJson(SMqBatchMetaRsp* pMsgRsp) { + +static void processBatchMetaToJson(SMqBatchMetaRsp* pMsgRsp, char** string) { SDecoder coder; SMqBatchMetaRsp rsp = {0}; + int32_t code = 0; tDecoderInit(&coder, pMsgRsp->pMetaBuff, pMsgRsp->metaBuffLen); if (tDecodeMqBatchMetaRsp(&coder, &rsp) < 0) { - goto _end; + goto end; } cJSON* pJson = cJSON_CreateObject(); - cJSON_AddStringToObject(pJson, "tmq_meta_version", TMQ_META_VERSION); + RAW_NULL_CHECK(pJson); + RAW_FALSE_CHECK(cJSON_AddStringToObject(pJson, "tmq_meta_version", TMQ_META_VERSION)); cJSON* pMetaArr = cJSON_CreateArray(); + RAW_NULL_CHECK(pMetaArr); int32_t num = taosArrayGetSize(rsp.batchMetaReq); for (int32_t i = 0; i < num; i++) { - int32_t len = *(int32_t*)taosArrayGet(rsp.batchMetaLen, i); + int32_t* len = taosArrayGet(rsp.batchMetaLen, i); + RAW_NULL_CHECK(len); void* tmpBuf = taosArrayGetP(rsp.batchMetaReq, i); + RAW_NULL_CHECK(tmpBuf); SDecoder metaCoder = {0}; SMqMetaRsp metaRsp = {0}; - tDecoderInit(&metaCoder, POINTER_SHIFT(tmpBuf, sizeof(SMqRspHead)), len - sizeof(SMqRspHead)); + tDecoderInit(&metaCoder, POINTER_SHIFT(tmpBuf, sizeof(SMqRspHead)), *len - sizeof(SMqRspHead)); if(tDecodeMqMetaRsp(&metaCoder, &metaRsp) < 0 ) { - goto _end; + goto end; } - cJSON* pItem = processSimpleMeta(&metaRsp); + cJSON* pItem = NULL; + processSimpleMeta(&metaRsp, &pItem); tDeleteMqMetaRsp(&metaRsp); - cJSON_AddItemToArray(pMetaArr, pItem); + RAW_FALSE_CHECK(cJSON_AddItemToArray(pMetaArr, pItem)); } - cJSON_AddItemToObject(pJson, "metas", pMetaArr); + RAW_FALSE_CHECK(cJSON_AddItemToObject(pJson, "metas", pMetaArr)); tDeleteMqBatchMetaRsp(&rsp); char* fullStr = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); - return fullStr; + *string = fullStr; -_end: +end: cJSON_Delete(pJson); tDeleteMqBatchMetaRsp(&rsp); - return NULL; } char* tmq_get_json_meta(TAOS_RES* res) { @@ -2110,14 +2003,19 @@ char* tmq_get_json_meta(TAOS_RES* res) { if (TD_RES_TMQ_METADATA(res)) { SMqTaosxRspObj* pMetaDataRspObj = (SMqTaosxRspObj*)res; - return processAutoCreateTable(&pMetaDataRspObj->rsp); + char* string = NULL; + processAutoCreateTable(&pMetaDataRspObj->rsp, &string); + return string; } else if (TD_RES_TMQ_BATCH_META(res)) { SMqBatchMetaRspObj* pBatchMetaRspObj = (SMqBatchMetaRspObj*)res; - return processBatchMetaToJson(&pBatchMetaRspObj->rsp); + char* string = NULL; + processBatchMetaToJson(&pBatchMetaRspObj->rsp, &string); + return string; } SMqMetaRspObj* pMetaRspObj = (SMqMetaRspObj*)res; - cJSON* pJson = processSimpleMeta(&pMetaRspObj->metaRsp); + cJSON* pJson = NULL; + processSimpleMeta(&pMetaRspObj->metaRsp, &pJson); char* string = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); return string; @@ -2145,48 +2043,47 @@ static int32_t encodeMqDataRsp(__encode_func__* encodeFunc, void* rspObj, tmq_ra void* buf = NULL; tEncodeSize(encodeFunc, rspObj, len, code); if (code < 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto FAILED; } len += sizeof(int8_t) + sizeof(int32_t); buf = taosMemoryCalloc(1, len); if (buf == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto FAILED; } tEncoderInit(&encoder, buf, len); if (tEncodeI8(&encoder, MQ_DATA_RSP_VERSION) < 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto FAILED; } int32_t offsetLen = getOffSetLen(rspObj); if (offsetLen <= 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto FAILED; } if (tEncodeI32(&encoder, offsetLen) < 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto FAILED; } if (encodeFunc(&encoder, rspObj) < 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto FAILED; } tEncoderClear(&encoder); raw->raw = buf; raw->raw_len = len; - return 0; + return code; FAILED: tEncoderClear(&encoder); taosMemoryFree(buf); - return terrno; + return code; } int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) { if (!raw || !res) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } if (TD_RES_TMQ_META(res)) { SMqMetaRspObj* pMetaRspObj = (SMqMetaRspObj*)res; @@ -2196,18 +2093,20 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) { uDebug("tmq get raw type meta:%p", raw); } else if (TD_RES_TMQ(res)) { SMqRspObj* rspObj = ((SMqRspObj*)res); - if (encodeMqDataRsp(tEncodeMqDataRsp, &rspObj->rsp, raw) != 0) { + int32_t code = encodeMqDataRsp(tEncodeMqDataRsp, &rspObj->rsp, raw); + if (code != 0) { uError("tmq get raw type error:%d", terrno); - return terrno; + return code; } raw->raw_type = RES_TYPE__TMQ; uDebug("tmq get raw type data:%p", raw); } else if (TD_RES_TMQ_METADATA(res)) { SMqTaosxRspObj* rspObj = ((SMqTaosxRspObj*)res); - if (encodeMqDataRsp(tEncodeSTaosxRsp, &rspObj->rsp, raw) != 0) { + int32_t code = encodeMqDataRsp(tEncodeSTaosxRsp, &rspObj->rsp, raw); + if (code != 0) { uError("tmq get raw type error:%d", terrno); - return terrno; + return code; } raw->raw_type = RES_TYPE__TMQ_METADATA; uDebug("tmq get raw type metadata:%p", raw); @@ -2219,8 +2118,7 @@ int32_t tmq_get_raw(TAOS_RES* res, tmq_raw_data* raw) { uDebug("tmq get raw batch meta:%p", raw); } else { uError("tmq get raw error type:%d", *(int8_t*)res); - terrno = TSDB_CODE_TMQ_INVALID_MSG; - return terrno; + return TSDB_CODE_TMQ_INVALID_MSG; } return TSDB_CODE_SUCCESS; } @@ -2230,7 +2128,7 @@ void tmq_free_raw(tmq_raw_data raw) { if (raw.raw_type == RES_TYPE__TMQ || raw.raw_type == RES_TYPE__TMQ_METADATA) { taosMemoryFree(raw.raw); } - memset(terrMsg, 0, ERR_MSG_LEN); + (void)memset(terrMsg, 0, ERR_MSG_LEN); } static int32_t writeRawImpl(TAOS* taos, void* buf, uint32_t len, uint16_t type) { @@ -2268,39 +2166,39 @@ int32_t tmq_write_raw(TAOS* taos, tmq_raw_data raw) { static int32_t tmqWriteBatchMetaDataImpl(TAOS* taos, void* meta, int32_t metaLen) { if (taos == NULL || meta == NULL) { - terrno = TSDB_CODE_INVALID_PARA; - return terrno; + return TSDB_CODE_INVALID_PARA; } SMqBatchMetaRsp rsp = {0}; - SDecoder coder; + SDecoder coder = {0}; int32_t code = TSDB_CODE_SUCCESS; // decode and process req tDecoderInit(&coder, meta, metaLen); if (tDecodeMqBatchMetaRsp(&coder, &rsp) < 0) { code = TSDB_CODE_INVALID_PARA; - goto _end; + goto end; } int32_t num = taosArrayGetSize(rsp.batchMetaReq); for (int32_t i = 0; i < num; i++) { - int32_t len = *(int32_t*)taosArrayGet(rsp.batchMetaLen, i); - void* tmpBuf = taosArrayGetP(rsp.batchMetaReq, i); + int32_t* len = taosArrayGet(rsp.batchMetaLen, i); + RAW_NULL_CHECK(len); + void* tmpBuf = taosArrayGetP(rsp.batchMetaReq, i); + RAW_NULL_CHECK(tmpBuf); SDecoder metaCoder = {0}; SMqMetaRsp metaRsp = {0}; - tDecoderInit(&metaCoder, POINTER_SHIFT(tmpBuf, sizeof(SMqRspHead)), len - sizeof(SMqRspHead)); + tDecoderInit(&metaCoder, POINTER_SHIFT(tmpBuf, sizeof(SMqRspHead)), *len - sizeof(SMqRspHead)); if (tDecodeMqMetaRsp(&metaCoder, &metaRsp) < 0) { code = TSDB_CODE_INVALID_PARA; - goto _end; + goto end; } code = writeRawImpl(taos, metaRsp.metaRsp, metaRsp.metaRspLen, metaRsp.resMsgType); tDeleteMqMetaRsp(&metaRsp); if (code != TSDB_CODE_SUCCESS) { - goto _end; + goto end; } } -_end: +end: tDeleteMqBatchMetaRsp(&rsp); - errno = code; return code; } diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index 7e89753241..692771602e 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -10820,7 +10820,9 @@ int32_t tDecodeMqBatchMetaRsp(SDecoder *pDecoder, SMqBatchMetaRsp *pRsp) { if (tDecodeI32(pDecoder, &size) < 0) return -1; if (size > 0) { pRsp->batchMetaReq = taosArrayInit(size, POINTER_BYTES); + if (!pRsp->batchMetaReq) return -1; pRsp->batchMetaLen = taosArrayInit(size, sizeof(int32_t)); + if (!pRsp->batchMetaLen) return -1; for (int32_t i = 0; i < size; i++) { void *pCreate = NULL; uint64_t len = 0; diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c index 4048c8841b..83484fdc65 100644 --- a/source/libs/catalog/src/catalog.c +++ b/source/libs/catalog/src/catalog.c @@ -448,7 +448,8 @@ int32_t ctgGetTbTag(SCatalog* pCtg, SRequestConnInfo* pConn, SName* pTableName, CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } - char* pJson = parseTagDatatoJson(pTag); + char* pJson = NULL; + parseTagDatatoJson(pTag, &pJson); STagVal tagVal; tagVal.cid = 0; tagVal.type = TSDB_DATA_TYPE_JSON; diff --git a/source/libs/catalog/src/ctgAsync.c b/source/libs/catalog/src/ctgAsync.c index 601e01f7e9..e27548ab4f 100644 --- a/source/libs/catalog/src/ctgAsync.c +++ b/source/libs/catalog/src/ctgAsync.c @@ -1772,7 +1772,8 @@ int32_t ctgHandleGetTbTagRsp(SCtgTaskReq* tReq, int32_t reqType, const SDataBuf* CTG_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } - char* pJson = parseTagDatatoJson(pTag); + char* pJson = NULL; + parseTagDatatoJson(pTag, &pJson); STagVal tagVal; tagVal.cid = 0; tagVal.type = TSDB_DATA_TYPE_JSON; diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 40e85e90d2..9506e801c5 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -503,11 +503,10 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { } if (tTagIsJson(pTag)) { - char* pJson = parseTagDatatoJson(pTag); - if (pJson) { - *len += sprintf(buf + VARSTR_HEADER_SIZE + *len, "%s", pJson); - taosMemoryFree(pJson); - } + char* pJson = NULL; + parseTagDatatoJson(pTag, &pJson); + *len += sprintf(buf + VARSTR_HEADER_SIZE + *len, "%s", pJson); + taosMemoryFree(pJson); return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c index 415c7d1f0e..dd6c653a8a 100644 --- a/source/libs/executor/src/sysscanoperator.c +++ b/source/libs/executor/src/sysscanoperator.c @@ -966,7 +966,8 @@ static int32_t sysTableUserTagsFillOneTableTags(const SSysTableScanInfo* pInfo, char* tagVarChar = NULL; if (tagData != NULL) { if (tagType == TSDB_DATA_TYPE_JSON) { - char* tagJson = parseTagDatatoJson(tagData); + char* tagJson = NULL; + parseTagDatatoJson(tagData, &tagJson); tagVarChar = taosMemoryMalloc(strlen(tagJson) + VARSTR_HEADER_SIZE); memcpy(varDataVal(tagVarChar), tagJson, strlen(tagJson)); varDataSetLen(tagVarChar, strlen(tagJson)); diff --git a/source/libs/qcom/src/queryUtil.c b/source/libs/qcom/src/queryUtil.c index 9ff6fc3e49..836cd6752b 100644 --- a/source/libs/qcom/src/queryUtil.c +++ b/source/libs/qcom/src/queryUtil.c @@ -415,7 +415,7 @@ int32_t dataConverToStr(char* str, int type, void* buf, int32_t bufSize, int32_t return TSDB_CODE_SUCCESS; } -char* parseTagDatatoJson(void* p) { +void parseTagDatatoJson(void* p, char** jsonStr) { char* string = NULL; SArray* pTagVals = NULL; cJSON* json = NULL; @@ -434,6 +434,9 @@ char* parseTagDatatoJson(void* p) { } for (int j = 0; j < nCols; ++j) { STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, j); + if (pTagVal == NULL) { + continue; + } // json key encode by binary tstrncpy(tagJsonKey, pTagVal->pKey, sizeof(tagJsonKey)); // json value @@ -443,11 +446,16 @@ char* parseTagDatatoJson(void* p) { if (value == NULL) { goto end; } - cJSON_AddItemToObject(json, tagJsonKey, value); + if(!cJSON_AddItemToObject(json, tagJsonKey, value)){ + goto end; + } } else if (type == TSDB_DATA_TYPE_NCHAR) { cJSON* value = NULL; if (pTagVal->nData > 0) { char* tagJsonValue = taosMemoryCalloc(pTagVal->nData, 1); + if (tagJsonValue == NULL) { + goto end; + } int32_t length = taosUcs4ToMbs((TdUcs4*)pTagVal->pData, pTagVal->nData, tagJsonValue); if (length < 0) { qError("charset:%s to %s. val:%s convert json value failed.", DEFAULT_UNICODE_ENCODEC, tsCharset, @@ -462,25 +470,34 @@ char* parseTagDatatoJson(void* p) { } } else if (pTagVal->nData == 0) { value = cJSON_CreateString(""); + if (value == NULL) { + goto end; + } } else { goto end; } - cJSON_AddItemToObject(json, tagJsonKey, value); + if(!cJSON_AddItemToObject(json, tagJsonKey, value)){ + goto end; + } } else if (type == TSDB_DATA_TYPE_DOUBLE) { double jsonVd = *(double*)(&pTagVal->i64); cJSON* value = cJSON_CreateNumber(jsonVd); if (value == NULL) { goto end; } - cJSON_AddItemToObject(json, tagJsonKey, value); + if(!cJSON_AddItemToObject(json, tagJsonKey, value)){ + goto end; + } } else if (type == TSDB_DATA_TYPE_BOOL) { char jsonVd = *(char*)(&pTagVal->i64); cJSON* value = cJSON_CreateBool(jsonVd); if (value == NULL) { goto end; } - cJSON_AddItemToObject(json, tagJsonKey, value); + if(!cJSON_AddItemToObject(json, tagJsonKey, value)){ + goto end; + } } else { goto end; } @@ -492,7 +509,7 @@ end: if (string == NULL) { string = taosStrdup(TSDB_DATA_NULL_STR_L); } - return string; + *jsonStr = string; } int32_t cloneTableMeta(STableMeta* pSrc, STableMeta** pDst) { From eaabc6d67776927039c1419928b1e23fc57926e0 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 14:58:43 +0800 Subject: [PATCH 16/64] fix:[TD-31017]process return value in clientRawBlockWrite.c --- source/client/src/clientRawBlockWrite.c | 9 +++++---- source/client/test/CMakeLists.txt | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index bc76cb5da9..18b4b924e6 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -197,7 +197,7 @@ static int32_t setCompressOption(cJSON* json, uint32_t para) { cJSON* levelJson = cJSON_CreateString(levelStr); RAW_NULL_CHECK(levelJson); RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "level", levelJson)); - return code + return code; } end: @@ -571,7 +571,8 @@ static void processAutoCreateTable(STaosxRsp* rsp, char** string) { goto end; } } - cJSON* pJson = buildCreateCTableJson(pCreateReq, rsp->createTableNum); + cJSON* pJson = NULL; + buildCreateCTableJson(pCreateReq, rsp->createTableNum, &pJson); *string = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); @@ -588,7 +589,7 @@ end: taosMemoryFree(pCreateReq); } -static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { +static void processAlterTable(SMqMetaRsp* metaRsp, cJSON** pJson) { SDecoder decoder = {0}; SVAlterTbReq vAlterTbReq = {0}; char* string = NULL; @@ -756,7 +757,7 @@ static cJSON* processAlterTable(SMqMetaRsp* metaRsp) { end: uDebug("alter table return, sql json:%s", cJSON_PrintUnformatted(json)); tDecoderClear(&decoder); - return json; + *pJson = json; } static void processDropSTable(SMqMetaRsp* metaRsp, cJSON** pJson) { diff --git a/source/client/test/CMakeLists.txt b/source/client/test/CMakeLists.txt index 7c3847e4a1..3d70c67661 100644 --- a/source/client/test/CMakeLists.txt +++ b/source/client/test/CMakeLists.txt @@ -23,11 +23,11 @@ TARGET_LINK_LIBRARIES( PUBLIC os util common transport parser catalog scheduler function gtest taos_static qcom geometry ) -ADD_EXECUTABLE(clientMonitorTest clientMonitorTests.cpp) -TARGET_LINK_LIBRARIES( - clientMonitorTest - PUBLIC os util common transport monitor parser catalog scheduler function gtest taos_static qcom executor -) +#ADD_EXECUTABLE(clientMonitorTest clientMonitorTests.cpp) +#TARGET_LINK_LIBRARIES( +# clientMonitorTest +# PUBLIC os util common transport monitor parser catalog scheduler function gtest taos_static qcom executor +#) TARGET_INCLUDE_DIRECTORIES( clientTest @@ -47,11 +47,11 @@ TARGET_INCLUDE_DIRECTORIES( PRIVATE "${TD_SOURCE_DIR}/source/client/inc" ) -TARGET_INCLUDE_DIRECTORIES( - clientMonitorTest - PUBLIC "${TD_SOURCE_DIR}/include/client/" - PRIVATE "${TD_SOURCE_DIR}/source/client/inc" -) +#TARGET_INCLUDE_DIRECTORIES( +# clientMonitorTest +# PUBLIC "${TD_SOURCE_DIR}/include/client/" +# PRIVATE "${TD_SOURCE_DIR}/source/client/inc" +#) add_test( NAME smlTest From 60e1c2c7d41c05d438ab109c1553e20444ac79eb Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 15:00:56 +0800 Subject: [PATCH 17/64] fix:[TD-31017]process return value in clientRawBlockWrite.c --- include/util/taoserror.h | 2 +- source/client/src/clientRawBlockWrite.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 24f9d041fc..443cb3fa5a 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -53,7 +53,7 @@ int32_t taosGetErrSize(); #define terrln (*taosGetErrln()) #define SET_ERROR_MSG(MSG, ...) \ - snprintf(terrMsg, ERR_MSG_LEN, MSG, ##__VA_ARGS__) + (void)snprintf(terrMsg, ERR_MSG_LEN, MSG, ##__VA_ARGS__) #define TSDB_CODE_SUCCESS 0 #define TSDB_CODE_FAILED -1 // unknown or needn't tell detail error diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index 18b4b924e6..3db3e67169 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -478,7 +478,7 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { end: RAW_FALSE_CHECK(cJSON_AddItemToObject(json, "tags", tags)); - taosArrayDestroy(pTagVals); + (void)taosArrayDestroy(pTagVals); } static void buildCreateCTableJson(SVCreateTbReq* pCreateReq, int32_t nReqs, cJSON** pJson) { From 4688d4f0c1a4e27b47507fbe414b7ed2ed68b191 Mon Sep 17 00:00:00 2001 From: dmchen Date: Fri, 19 Jul 2024 07:14:10 +0000 Subject: [PATCH 18/64] fix case --- source/dnode/mnode/impl/src/mndDb.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 261a40edd1..6b5f7ff425 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -1772,10 +1772,9 @@ static int32_t mndProcessUseDbReq(SRpcMsg *pReq) { usedbRsp.vgVersion = usedbReq.vgVersion; usedbRsp.errCode = terrno; - if (terrno == TSDB_CODE_MND_DB_IN_CREATING) { - code = terrno; - goto _OVER; - } + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; } else { TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_USE_DB, pDb), NULL, _OVER); From 13b75ba72a8d5a34781b4b45cbae43bff1dc5106 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 16:15:37 +0800 Subject: [PATCH 19/64] adj operator result --- include/common/tdatablock.h | 2 +- include/util/tutil.h | 4 + source/common/src/tdatablock.c | 8 +- source/libs/executor/inc/executorInt.h | 13 +- source/libs/executor/src/groupoperator.c | 24 +- source/libs/executor/src/scanoperator.c | 1860 +++++++++++------ .../executor/src/streamcountwindowoperator.c | 94 +- .../executor/src/streameventwindowoperator.c | 100 +- source/libs/executor/src/streamfilloperator.c | 108 +- .../executor/src/streamtimewindowoperator.c | 487 ++--- source/libs/stream/src/streamSessionState.c | 86 +- source/libs/stream/src/streamState.c | 30 +- source/libs/stream/src/streamUpdate.c | 88 +- source/libs/stream/src/tstreamFileState.c | 58 +- source/util/src/tbloomfilter.c | 22 +- source/util/src/tscalablebf.c | 44 +- 16 files changed, 1850 insertions(+), 1178 deletions(-) diff --git a/include/common/tdatablock.h b/include/common/tdatablock.h index c271f118ae..89f6beaab4 100644 --- a/include/common/tdatablock.h +++ b/include/common/tdatablock.h @@ -247,7 +247,7 @@ int32_t doEnsureCapacity(SColumnInfoData* pColumn, const SDataBlockInfo* pBlockI size_t blockDataGetCapacityInRow(const SSDataBlock* pBlock, size_t pageSize, int32_t extraSize); int32_t blockDataTrimFirstRows(SSDataBlock* pBlock, size_t n); -int32_t blockDataKeepFirstNRows(SSDataBlock* pBlock, size_t n); +void blockDataKeepFirstNRows(SSDataBlock* pBlock, size_t n); int32_t assignOneDataBlock(SSDataBlock* dst, const SSDataBlock* src); int32_t copyDataBlock(SSDataBlock* pDst, const SSDataBlock* pSrc); diff --git a/include/util/tutil.h b/include/util/tutil.h index 2aa28ac1df..5af79dfc49 100644 --- a/include/util/tutil.h +++ b/include/util/tutil.h @@ -135,6 +135,8 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, } \ } while (0) +#define QUERY_CHECK_CODE TSDB_CHECK_CODE + #define TSDB_CHECK_NULL(ptr, CODE, LINO, LABEL, ERRNO) \ if ((ptr) == NULL) { \ (CODE) = (ERRNO); \ @@ -142,6 +144,8 @@ static FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, goto LABEL; \ } +#define QUERY_CHECK_NULL TSDB_CHECK_NULL + #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) #define VND_CHECK_CODE(CODE, LINO, LABEL) TSDB_CHECK_CODE(CODE, LINO, LABEL) diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 43bac56f93..d12db23a43 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1990,14 +1990,14 @@ static void colDataKeepFirstNRows(SColumnInfoData* pColInfoData, size_t n, size_ } } -int32_t blockDataKeepFirstNRows(SSDataBlock* pBlock, size_t n) { +void blockDataKeepFirstNRows(SSDataBlock* pBlock, size_t n) { if (n == 0) { blockDataEmpty(pBlock); - return TSDB_CODE_SUCCESS; + return ; } if (pBlock->info.rows <= n) { - return TSDB_CODE_SUCCESS; + return ; } else { size_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); for (int32_t i = 0; i < numOfCols; ++i) { @@ -2007,7 +2007,7 @@ int32_t blockDataKeepFirstNRows(SSDataBlock* pBlock, size_t n) { pBlock->info.rows = n; } - return TSDB_CODE_SUCCESS; + return ; } int32_t tEncodeDataBlock(void** buf, const SSDataBlock* pBlock) { diff --git a/source/libs/executor/inc/executorInt.h b/source/libs/executor/inc/executorInt.h index c6266c1612..d8267c4579 100644 --- a/source/libs/executor/inc/executorInt.h +++ b/source/libs/executor/inc/executorInt.h @@ -862,10 +862,11 @@ 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); -void setTbNameColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, const char* name); -void setVgIdColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int32_t vgId); -void setVgVerColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int64_t vgVer); +void 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); +int32_t setVgVerColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int64_t vgVer); int32_t setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t numOfOutput, int32_t* rowEntryInfoOffset); @@ -897,8 +898,8 @@ bool isOverdue(TSKEY ts, STimeWindowAggSupp* pSup); bool isCloseWindow(STimeWindow* pWin, STimeWindowAggSupp* pSup); bool isDeletedStreamWindow(STimeWindow* pWin, uint64_t groupId, void* pState, STimeWindowAggSupp* pTwSup, SStateStore* pStore); -void appendDataToSpecialBlock(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, uint64_t* pUid, uint64_t* pGp, - void* pTbName); +int32_t appendDataToSpecialBlock(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, uint64_t* pUid, uint64_t* pGp, + void* pTbName); uint64_t calGroupIdByData(SPartitionBySupporter* pParSup, SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t rowId); diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index cacb0cb20b..2382f10503 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -1166,7 +1166,7 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) { int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->stateStore.streamStateGetParName(pOperator->pTaskInfo->streamInfo.pState, pParInfo->groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode == TSDB_CODE_SUCCESS) { memcpy(pDest->info.parTbName, tbname, TSDB_TABLE_NAME_LEN); @@ -1199,7 +1199,7 @@ int32_t appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTag void* pValue = NULL; int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->streamStateGetParName(pState, groupId, &pValue, true, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { SSDataBlock* pTmpBlock = blockCopyOneRow(pSrcBlock, rowId); @@ -1209,7 +1209,7 @@ int32_t appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTag if (pTableSup->numOfExprs > 0) { code = projectApplyFunctions(pTableSup->pExprInfo, pDestBlock, pTmpBlock, pTableSup->pCtx, pTableSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pTbCol = taosArrayGet(pDestBlock->pDataBlock, UD_TABLE_NAME_COLUMN_INDEX); memset(tbName, 0, TSDB_TABLE_NAME_LEN); @@ -1222,7 +1222,7 @@ int32_t appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTag len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN - 1); memcpy(tbName, varDataVal(pData), len); code = pAPI->streamStatePutParName(pState, groupId, tbName); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pTmpBlock->info.parTbName, tbName, len); pDestBlock->info.rows--; @@ -1234,7 +1234,7 @@ int32_t appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTag if (pTagSup->numOfExprs > 0) { code = projectApplyFunctions(pTagSup->pExprInfo, pDestBlock, pTmpBlock, pTagSup->pCtx, pTagSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pDestBlock->info.rows--; } else { memcpy(pDestBlock->info.parTbName, pTmpBlock->info.parTbName, TSDB_TABLE_NAME_LEN); @@ -1242,7 +1242,7 @@ int32_t appendCreateTableRow(void* pState, SExprSupp* pTableSup, SExprSupp* pTag void* pGpIdCol = taosArrayGet(pDestBlock->pDataBlock, UD_GROUPID_COLUMN_INDEX); code = colDataSetVal(pGpIdCol, pDestBlock->info.rows, (const char*)&groupId, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pDestBlock->info.rows++; blockDataDestroy(pTmpBlock); } else { @@ -1269,14 +1269,14 @@ static int32_t buildStreamCreateTableResult(SOperatorInfo* pOperator) { } blockDataCleanup(pInfo->pCreateTbRes); code = blockDataEnsureCapacity(pInfo->pCreateTbRes, taosHashGetSize(pInfo->pPartitions)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pTbNameIte != NULL) { SPartitionDataInfo* pParInfo = (SPartitionDataInfo*)pInfo->pTbNameIte; int32_t rowId = *(int32_t*)taosArrayGet(pParInfo->rowIds, 0); code = appendCreateTableRow(pTask->streamInfo.pState, &pInfo->tbnameCalSup, &pInfo->tagCalSup, pParInfo->groupId, pSrc, rowId, pInfo->pCreateTbRes, &pTask->storageAPI.stateStore); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pTbNameIte = taosHashIterate(pInfo->pPartitions, pInfo->pTbNameIte); } @@ -1318,7 +1318,7 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { if (hasRemainTbName(pInfo)) { code = buildStreamCreateTableResult(pOperator); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pCreateTbRes && pInfo->pCreateTbRes->info.rows > 0) { return pInfo->pCreateTbRes; } @@ -1373,7 +1373,7 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { pInfo->parIte = taosHashIterate(pInfo->pPartitions, NULL); pInfo->pTbNameIte = taosHashIterate(pInfo->pPartitions, NULL); code = buildStreamCreateTableResult(pOperator); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pCreateTbRes && pInfo->pCreateTbRes->info.rows > 0) { return pInfo->pCreateTbRes; } @@ -1569,10 +1569,10 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr setOperatorStreamStateFn(pOperator, streamOpReleaseState, streamOpReloadState); code = initParDownStream(downstream, &pInfo->partitionSup, &pInfo->scalarSup, &pInfo->tbnameCalSup); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); return pOperator; diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 583dd7b41b..a878af8762 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -19,31 +19,31 @@ #include "functionMgt.h" #include "os.h" #include "querynodes.h" -#include "systable.h" #include "streamexecutorInt.h" +#include "systable.h" #include "tname.h" #include "tdatablock.h" #include "tmsg.h" +#include "operator.h" #include "query.h" +#include "querytask.h" #include "tcompare.h" #include "thash.h" #include "ttypes.h" -#include "operator.h" -#include "querytask.h" #include "storageapi.h" #include "wal.h" int32_t scanDebug = 0; -#define MULTI_READER_MAX_TABLE_NUM 5000 -#define SET_REVERSE_SCAN_FLAG(_info) ((_info)->scanFlag = REVERSE_SCAN) -#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC)) -#define STREAM_SCAN_OP_NAME "StreamScanOperator" -#define STREAM_SCAN_OP_STATE_NAME "StreamScanFillHistoryState" -#define STREAM_SCAN_OP_CHECKPOINT_NAME "StreamScanOperator_Checkpoint" +#define MULTI_READER_MAX_TABLE_NUM 5000 +#define SET_REVERSE_SCAN_FLAG(_info) ((_info)->scanFlag = REVERSE_SCAN) +#define SWITCH_ORDER(n) (((n) = ((n) == TSDB_ORDER_ASC) ? TSDB_ORDER_DESC : TSDB_ORDER_ASC)) +#define STREAM_SCAN_OP_NAME "StreamScanOperator" +#define STREAM_SCAN_OP_STATE_NAME "StreamScanFillHistoryState" +#define STREAM_SCAN_OP_CHECKPOINT_NAME "StreamScanOperator_Checkpoint" typedef struct STableMergeScanExecInfo { SFileBlockLoadRecorder blockRecorder; @@ -168,20 +168,20 @@ static SResultRow* getTableGroupOutputBuf(SOperatorInfo* pOperator, uint64_t gro static int32_t insertTableToScanIgnoreList(STableScanInfo* pTableScanInfo, uint64_t uid) { if (NULL == pTableScanInfo->pIgnoreTables) { int32_t tableNum = taosArrayGetSize(pTableScanInfo->base.pTableListInfo->pTableList); - pTableScanInfo->pIgnoreTables = taosHashInit(tableNum, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); + pTableScanInfo->pIgnoreTables = + taosHashInit(tableNum, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, HASH_NO_LOCK); if (NULL == pTableScanInfo->pIgnoreTables) { return TSDB_CODE_OUT_OF_MEMORY; } } - taosHashPut(pTableScanInfo->pIgnoreTables, &uid, sizeof(uid), &pTableScanInfo->scanTimes, sizeof(pTableScanInfo->scanTimes)); - - return TSDB_CODE_SUCCESS; + return taosHashPut(pTableScanInfo->pIgnoreTables, &uid, sizeof(uid), &pTableScanInfo->scanTimes, + sizeof(pTableScanInfo->scanTimes)); } static int32_t doDynamicPruneDataBlock(SOperatorInfo* pOperator, SDataBlockInfo* pBlockInfo, uint32_t* status) { STableScanInfo* pTableScanInfo = pOperator->info; - int32_t code = TSDB_CODE_SUCCESS; + int32_t code = TSDB_CODE_SUCCESS; if (pTableScanInfo->base.pdInfo.pExprSup == NULL) { return TSDB_CODE_SUCCESS; @@ -221,7 +221,7 @@ static int32_t doDynamicPruneDataBlock(SOperatorInfo* pOperator, SDataBlockInfo* } static int32_t doFilterByBlockSMA(SFilterInfo* pFilterInfo, SColumnDataAgg* pColsAgg, int32_t numOfCols, - int32_t numOfRows, bool *keep) { + int32_t numOfRows, bool* keep) { if (pColsAgg == NULL || pFilterInfo == NULL) { *keep = true; return TSDB_CODE_SUCCESS; @@ -235,7 +235,8 @@ static bool doLoadBlockSMA(STableScanBase* pTableScanInfo, SSDataBlock* pBlock, bool allColumnsHaveAgg = true; bool hasNullSMA = false; - int32_t code = pAPI->tsdReader.tsdReaderRetrieveBlockSMAInfo(pTableScanInfo->dataReader, pBlock, &allColumnsHaveAgg, &hasNullSMA); + int32_t code = pAPI->tsdReader.tsdReaderRetrieveBlockSMAInfo(pTableScanInfo->dataReader, pBlock, &allColumnsHaveAgg, + &hasNullSMA); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pTaskInfo->env, code); } @@ -274,7 +275,11 @@ bool applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo qDebug("current block ignore due to offset, current:%" PRId64 ", %s", pLimitInfo->remainOffset, id); return false; } else { - blockDataTrimFirstRows(pBlock, pLimitInfo->remainOffset); + int32_t code = blockDataTrimFirstRows(pBlock, pLimitInfo->remainOffset); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } pLimitInfo->remainOffset = 0; } } @@ -295,6 +300,8 @@ bool applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableScanInfo, SSDataBlock* pBlock, uint32_t* status) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; @@ -350,9 +357,10 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca if (pOperator->exprSupp.pFilterInfo != NULL && (!loadSMA)) { bool success = doLoadBlockSMA(pTableScanInfo, pBlock, pTaskInfo); if (success) { - size_t size = taosArrayGetSize(pBlock->pDataBlock); - bool keep = false; - int32_t code = doFilterByBlockSMA(pOperator->exprSupp.pFilterInfo, pBlock->pBlockAgg, size, pBlockInfo->rows, &keep); + size_t size = taosArrayGetSize(pBlock->pDataBlock); + bool keep = false; + int32_t code = + doFilterByBlockSMA(pOperator->exprSupp.pFilterInfo, pBlock->pBlockAgg, size, pBlockInfo->rows, &keep); if (TSDB_CODE_SUCCESS != code) { return code; } @@ -373,7 +381,9 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca taosMemoryFreeClear(pBlock->pBlockAgg); // try to filter data block according to current results - doDynamicPruneDataBlock(pOperator, pBlockInfo, status); + code = doDynamicPruneDataBlock(pOperator, pBlockInfo, status); + QUERY_CHECK_CODE(code, lino, _end); + if (*status == FUNC_DATA_REQUIRED_NOT_LOAD) { qDebug("%s data block skipped due to dynamic prune, brange:%" PRId64 "-%" PRId64 ", rows:%" PRId64, GET_TASKID(pTaskInfo), pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows); @@ -393,7 +403,7 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca pCost->loadBlocks += 1; SSDataBlock* p = NULL; - int32_t code = pAPI->tsdReader.tsdReaderRetrieveDataBlock(pTableScanInfo->dataReader, &p, NULL); + code = pAPI->tsdReader.tsdReaderRetrieveDataBlock(pTableScanInfo->dataReader, &p, NULL); if (p == NULL || code != TSDB_CODE_SUCCESS) { return code; } @@ -405,11 +415,11 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca pCost->totalRows -= pBlock->info.rows; if (pOperator->exprSupp.pFilterInfo != NULL) { - int32_t code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, &pTableScanInfo->matchInfo); - if (code != TSDB_CODE_SUCCESS) return code; + code = doFilter(pBlock, pOperator->exprSupp.pFilterInfo, &pTableScanInfo->matchInfo); + QUERY_CHECK_CODE(code, lino, _end); int64_t st = taosGetTimestampUs(); - double el = (taosGetTimestampUs() - st) / 1000.0; + double el = (taosGetTimestampUs() - st) / 1000.0; pTableScanInfo->readRecorder.filterTime += el; if (pBlock->info.rows == 0) { @@ -427,7 +437,12 @@ static int32_t loadDataBlock(SOperatorInfo* pOperator, STableScanBase* pTableSca } pCost->totalRows += pBlock->info.rows; - return TSDB_CODE_SUCCESS; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static void prepareForDescendingScan(STableScanBase* pTableScanInfo, SqlFunctionCtx* pCtx, int32_t numOfOutput) { @@ -489,7 +504,8 @@ static void doSetNullValue(SSDataBlock* pBlock, const SExprInfo* pExpr, int32_t int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int32_t numOfExpr, SSDataBlock* pBlock, int32_t rows, SExecTaskInfo* pTask, STableMetaCacheInfo* pCache) { - int32_t code = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; bool freeReader = false; LRUHandle* h = NULL; STableCachedVal val = {0}; @@ -575,7 +591,7 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int STableCachedVal* pVal = taosLRUCacheValue(pCache->pTableMetaEntryCache, h); val = *pVal; - taosLRUCacheRelease(pCache->pTableMetaEntryCache, h, false); + (void)taosLRUCacheRelease(pCache->pTableMetaEntryCache, h, false); } qDebug("retrieve table meta from cache:%" PRIu64 ", hit:%" PRIu64 " miss:%" PRIu64 ", %s", pCache->metaFetch, @@ -595,11 +611,14 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int if (fmIsScanPseudoColumnFunc(functionId)) { int32_t fType = pExpr1->pExpr->_function.functionType; if (fType == FUNCTION_TYPE_TBNAME) { - setTbNameColData(pBlock, pColInfoData, functionId, val.pName); + code = setTbNameColData(pBlock, pColInfoData, functionId, val.pName); + QUERY_CHECK_CODE(code, lino, _end); } else if (fType == FUNCTION_TYPE_VGID) { - setVgIdColData(pBlock, pColInfoData, functionId, pTask->id.vgId); + code = setVgIdColData(pBlock, pColInfoData, functionId, pTask->id.vgId); + QUERY_CHECK_CODE(code, lino, _end); } else if (fType == FUNCTION_TYPE_VGVER) { - setVgVerColData(pBlock, pColInfoData, functionId, pBlock->info.version); + code = setVgVerColData(pBlock, pColInfoData, functionId, pBlock->info.version); + QUERY_CHECK_CODE(code, lino, _end); } } else { // these are tags STagVal tagVal = {0}; @@ -629,7 +648,8 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int } } else { // todo opt for json tag for (int32_t i = 0; i < pBlock->info.rows; ++i) { - colDataSetVal(pColInfoData, i, data, false); + code = colDataSetVal(pColInfoData, i, data, false); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -641,12 +661,20 @@ int32_t addTagPseudoColumnData(SReadHandle* pHandle, const SExprInfo* pExpr, int pHandle->api.metaReaderFn.clearReader(&mr); } - return TSDB_CODE_SUCCESS; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -void setTbNameColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, const char* name) { +int32_t setTbNameColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, + const char* name) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; struct SScalarFuncExecFuncs fpSet = {0}; - fmGetScalarFuncExecFuncs(functionId, &fpSet); + code = fmGetScalarFuncExecFuncs(functionId, &fpSet); + QUERY_CHECK_CODE(code, lino, _end); size_t len = TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE; char buf[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; @@ -654,65 +682,102 @@ void setTbNameColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, len, 1); - colInfoDataEnsureCapacity(&infoData, 1, false); - colDataSetVal(&infoData, 0, buf, false); + code = colInfoDataEnsureCapacity(&infoData, 1, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(&infoData, 0, buf, false); + QUERY_CHECK_CODE(code, lino, _end); SScalarParam srcParam = {.numOfRows = pBlock->info.rows, .columnData = &infoData}; SScalarParam param = {.columnData = pColInfoData}; if (fpSet.process != NULL) { - fpSet.process(&srcParam, 1, ¶m); + code = fpSet.process(&srcParam, 1, ¶m); + QUERY_CHECK_CODE(code, lino, _end); } else { qError("failed to get the corresponding callback function, functionId:%d", functionId); } colDataDestroy(&infoData); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -void setVgIdColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int32_t vgId) { +int32_t setVgIdColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int32_t vgId) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; struct SScalarFuncExecFuncs fpSet = {0}; - fmGetScalarFuncExecFuncs(functionId, &fpSet); + code = fmGetScalarFuncExecFuncs(functionId, &fpSet); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData infoData = createColumnInfoData(pColInfoData->info.type, pColInfoData->info.bytes, 1); - colInfoDataEnsureCapacity(&infoData, 1, false); - colDataSetVal(&infoData, 0, (const char*)&vgId, false); + code = colInfoDataEnsureCapacity(&infoData, 1, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(&infoData, 0, (const char*)&vgId, false); + QUERY_CHECK_CODE(code, lino, _end); SScalarParam srcParam = {.numOfRows = pBlock->info.rows, .columnData = &infoData}; SScalarParam param = {.columnData = pColInfoData}; if (fpSet.process != NULL) { - fpSet.process(&srcParam, 1, ¶m); + code = fpSet.process(&srcParam, 1, ¶m); + QUERY_CHECK_CODE(code, lino, _end); } else { qError("failed to get the corresponding callback function, functionId:%d", functionId); } +_end: colDataDestroy(&infoData); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -void setVgVerColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int64_t vgVer) { +int32_t setVgVerColData(const SSDataBlock* pBlock, SColumnInfoData* pColInfoData, int32_t functionId, int64_t vgVer) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; struct SScalarFuncExecFuncs fpSet = {0}; - fmGetScalarFuncExecFuncs(functionId, &fpSet); + code = fmGetScalarFuncExecFuncs(functionId, &fpSet); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData infoData = createColumnInfoData(pColInfoData->info.type, pColInfoData->info.bytes, 1); - colInfoDataEnsureCapacity(&infoData, 1, false); - colDataSetVal(&infoData, 0, (const char*)&vgVer, false); + code = colInfoDataEnsureCapacity(&infoData, 1, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(&infoData, 0, (const char*)&vgVer, false); + QUERY_CHECK_CODE(code, lino, _end); SScalarParam srcParam = {.numOfRows = pBlock->info.rows, .columnData = &infoData}; SScalarParam param = {.columnData = pColInfoData}; if (fpSet.process != NULL) { - fpSet.process(&srcParam, 1, ¶m); + code = fpSet.process(&srcParam, 1, ¶m); + QUERY_CHECK_CODE(code, lino, _end); } else { qError("failed to get the corresponding callback function, functionId:%d", functionId); } +_end: colDataDestroy(&infoData); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static void initNextGroupScan(STableScanInfo* pInfo, STableKeyInfo** pKeyInfo, int32_t* size) { - tableListGetGroupList(pInfo->base.pTableListInfo, pInfo->currentGroupId, pKeyInfo, size); +static int32_t initNextGroupScan(STableScanInfo* pInfo, STableKeyInfo** pKeyInfo, int32_t* size) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + code = tableListGetGroupList(pInfo->base.pTableListInfo, pInfo->currentGroupId, pKeyInfo, size); + QUERY_CHECK_CODE(code, lino, _end); pInfo->tableStartIndex = TARRAY_ELEM_IDX(pInfo->base.pTableListInfo->pTableList, *pKeyInfo); pInfo->tableEndIndex = (pInfo->tableStartIndex + (*size) - 1); @@ -724,16 +789,22 @@ static void initNextGroupScan(STableScanInfo* pInfo, STableKeyInfo** pKeyInfo, i } else { pInfo->countState = TABLE_COUNT_STATE_SCAN; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } void markGroupProcessed(STableScanInfo* pInfo, uint64_t groupId) { - if (pInfo->countState == TABLE_COUNT_STATE_END) { + if (pInfo->countState == TABLE_COUNT_STATE_END) { return; } if (pInfo->base.pTableListInfo->groupOffset) { pInfo->countState = TABLE_COUNT_STATE_PROCESSED; } else { - taosHashRemove(pInfo->base.pTableListInfo->remainGroups, &groupId, sizeof(groupId)); + (void)taosHashRemove(pInfo->base.pTableListInfo->remainGroups, &groupId, sizeof(groupId)); } } @@ -771,9 +842,9 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; - SSDataBlock* pBlock = pTableScanInfo->pResBlock; - bool hasNext = false; - int32_t code = TSDB_CODE_SUCCESS; + SSDataBlock* pBlock = pTableScanInfo->pResBlock; + bool hasNext = false; + int32_t code = TSDB_CODE_SUCCESS; pBlock->info.dataLoad = false; int64_t st = taosGetTimestampUs(); @@ -835,9 +906,11 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { } static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pTableScanInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; // The read handle is not initialized yet, since no qualified tables exists if (pTableScanInfo->base.dataReader == NULL || pOperator->status == OP_EXEC_DONE) { @@ -862,7 +935,8 @@ static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { qDebug("start to repeat ascending order scan data blocks due to query func required, %s", GET_TASKID(pTaskInfo)); // do prepare for the next round table scan operation - pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + code = pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -870,7 +944,8 @@ static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { if (pTableScanInfo->scanTimes < total) { if (pTableScanInfo->base.cond.order == TSDB_ORDER_ASC) { prepareForDescendingScan(&pTableScanInfo->base, pOperator->exprSupp.pCtx, 0); - pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + code = pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + QUERY_CHECK_CODE(code, lino, _end); qDebug("%s start to descending order scan data blocks due to query func required", GET_TASKID(pTaskInfo)); } @@ -889,7 +964,8 @@ static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { pTableScanInfo->base.scanFlag = MAIN_SCAN; qDebug("%s start to repeat descending order scan data blocks", GET_TASKID(pTaskInfo)); - pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + code = pAPI->tsdReader.tsdReaderResetStatus(pTableScanInfo->base.dataReader, &pTableScanInfo->base.cond); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -922,23 +998,29 @@ static SSDataBlock* doGroupedTableScan(SOperatorInfo* pOperator) { pTableScanInfo->countState = TABLE_COUNT_STATE_END; } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return NULL; } static int32_t createTableListInfoFromParam(SOperatorInfo* pOperator) { - STableScanInfo* pInfo = pOperator->info; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - int32_t code = 0; - STableListInfo* pListInfo = pInfo->base.pTableListInfo; + STableScanInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t code = 0; + STableListInfo* pListInfo = pInfo->base.pTableListInfo; STableScanOperatorParam* pParam = (STableScanOperatorParam*)pOperator->pOperatorGetParam->value; - int32_t num = taosArrayGetSize(pParam->pUidList); + int32_t num = taosArrayGetSize(pParam->pUidList); if (num <= 0) { qError("empty table scan uid list"); return TSDB_CODE_INVALID_PARA; } - - qDebug("vgId:%d add total %d dynamic tables to scan, tableSeq:%d, exist num:%" PRId64 ", operator status:%d", - pTaskInfo->id.vgId, num, pParam->tableSeq, (int64_t)taosArrayGetSize(pListInfo->pTableList), pOperator->status); + + qDebug("vgId:%d add total %d dynamic tables to scan, tableSeq:%d, exist num:%" PRId64 ", operator status:%d", + pTaskInfo->id.vgId, num, pParam->tableSeq, (int64_t)taosArrayGetSize(pListInfo->pTableList), + pOperator->status); if (pParam->tableSeq) { pListInfo->oneTableForEachGroup = true; @@ -952,8 +1034,8 @@ static int32_t createTableListInfoFromParam(SOperatorInfo* pOperator) { pListInfo->numOfOuputGroups = 1; } - STableKeyInfo info = {.groupId = 0}; - int32_t tableIdx = 0; + STableKeyInfo info = {.groupId = 0}; + int32_t tableIdx = 0; for (int32_t i = 0; i < num; ++i) { uint64_t* pUid = taosArrayGet(pParam->pUidList, i); @@ -973,15 +1055,17 @@ static int32_t createTableListInfoFromParam(SOperatorInfo* pOperator) { tableIdx++; qDebug("add dynamic table scan uid:%" PRIu64 ", %s", info.uid, GET_TASKID(pTaskInfo)); } - + return code; } static SSDataBlock* startNextGroupScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; - int32_t numOfTables = tableListGetSize(pInfo->base.pTableListInfo); + int32_t numOfTables = tableListGetSize(pInfo->base.pTableListInfo); if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pInfo->base.pTableListInfo)) { setOperatorCompleted(pOperator); if (pOperator->dynamicTask) { @@ -994,15 +1078,19 @@ static SSDataBlock* startNextGroupScan(SOperatorInfo* pOperator) { // reset value for the next group data output pOperator->status = OP_OPENED; resetLimitInfoForNextGroup(&pInfo->base.limitInfo); - + int32_t num = 0; STableKeyInfo* pList = NULL; - initNextGroupScan(pInfo, &pList, &num); + code = initNextGroupScan(pInfo, &pList, &num); + QUERY_CHECK_CODE(code, lino, _end); - pAPI->tsdReader.tsdSetQueryTableList(pInfo->base.dataReader, pList, num); - pAPI->tsdReader.tsdReaderResetStatus(pInfo->base.dataReader, &pInfo->base.cond); + code = pAPI->tsdReader.tsdSetQueryTableList(pInfo->base.dataReader, pList, num); + QUERY_CHECK_CODE(code, lino, _end); + + code = pAPI->tsdReader.tsdReaderResetStatus(pInfo->base.dataReader, &pInfo->base.cond); + QUERY_CHECK_CODE(code, lino, _end); pInfo->scanTimes = 0; - + SSDataBlock* result = doGroupedTableScan(pOperator); if (result != NULL) { if (pOperator->dynamicTask) { @@ -1010,16 +1098,24 @@ static SSDataBlock* startNextGroupScan(SOperatorInfo* pOperator) { } return result; } - + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return NULL; } static SSDataBlock* groupSeqTableScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; int32_t num = 0; STableKeyInfo* pList = NULL; + SSDataBlock* result = NULL; if (pInfo->currentGroupId == -1) { if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pInfo->base.pTableListInfo)) { @@ -1028,16 +1124,16 @@ static SSDataBlock* groupSeqTableScan(SOperatorInfo* pOperator) { } taosRLockLatch(&pTaskInfo->lock); - initNextGroupScan(pInfo, &pList, &num); + code = initNextGroupScan(pInfo, &pList, &num); + QUERY_CHECK_CODE(code, lino, _end); + taosRUnLockLatch(&pTaskInfo->lock); ASSERT(pInfo->base.dataReader == NULL); - - int32_t code = pAPI->tsdReader.tsdReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num, pInfo->pResBlock, - (void**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo), &pInfo->pIgnoreTables); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + + code = pAPI->tsdReader.tsdReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num, pInfo->pResBlock, + (void**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo), &pInfo->pIgnoreTables); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->filesetDelimited) { pAPI->tsdReader.tsdSetFilesetDelimited(pInfo->base.dataReader); } @@ -1046,7 +1142,7 @@ static SSDataBlock* groupSeqTableScan(SOperatorInfo* pOperator) { } } - SSDataBlock* result = doGroupedTableScan(pOperator); + result = doGroupedTableScan(pOperator); if (result != NULL) { if (pOperator->dynamicTask) { result->info.id.groupId = result->info.id.uid; @@ -1061,17 +1157,24 @@ static SSDataBlock* groupSeqTableScan(SOperatorInfo* pOperator) { } } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return result; } static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; if (pOperator->pOperatorGetParam) { pOperator->dynamicTask = true; - int32_t code = createTableListInfoFromParam(pOperator); + code = createTableListInfoFromParam(pOperator); freeOperatorParam(pOperator->pOperatorGetParam, OP_GET_PARAM); pOperator->pOperatorGetParam = NULL; if (code != TSDB_CODE_SUCCESS) { @@ -1118,16 +1221,25 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { tInfo = *(STableKeyInfo*)tableListGetInfo(pInfo->base.pTableListInfo, pInfo->currentTable); taosRUnLockLatch(&pTaskInfo->lock); - pAPI->tsdReader.tsdSetQueryTableList(pInfo->base.dataReader, &tInfo, 1); + code = pAPI->tsdReader.tsdSetQueryTableList(pInfo->base.dataReader, &tInfo, 1); + QUERY_CHECK_CODE(code, lino, _end); qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d/%d %s", tInfo.uid, numOfTables, pInfo->currentTable, numOfTables, GET_TASKID(pTaskInfo)); - pAPI->tsdReader.tsdReaderResetStatus(pInfo->base.dataReader, &pInfo->base.cond); + code = pAPI->tsdReader.tsdReaderResetStatus(pInfo->base.dataReader, &pInfo->base.cond); + QUERY_CHECK_CODE(code, lino, _end); pInfo->scanTimes = 0; } } else { // scan table group by group sequentially return groupSeqTableScan(pOperator); } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } + return NULL; } static int32_t getTableScannerExecInfo(struct SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -1149,7 +1261,7 @@ static void destroyTableScanBase(STableScanBase* pBase, TsdReader* pAPI) { taosArrayDestroy(pBase->matchInfo.pList); } - tableListDestroy(pBase->pTableListInfo); + (void)tableListDestroy(pBase->pTableListInfo); taosLRUCacheCleanup(pBase->metaCache.pTableMetaEntryCache); cleanupExprSupp(&pBase->pseudoSup); } @@ -1164,7 +1276,8 @@ static void destroyTableScanOperatorInfo(void* param) { SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, SReadHandle* readHandle, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { - int32_t code = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STableScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -1178,20 +1291,17 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, int32_t numOfCols = 0; code = extractColMatchInfo(pScanNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->base.matchInfo); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); initLimitInfo(pScanNode->node.pLimit, pScanNode->node.pSlimit, &pInfo->base.limitInfo); code = initQueryTableDataCond(&pInfo->base.cond, pTableScanNode, readHandle); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); if (pScanNode->pScanPseudoCols != NULL) { SExprSupp* pSup = &pInfo->base.pseudoSup; pSup->pExprInfo = createExprInfo(pScanNode->pScanPseudoCols, NULL, &pSup->numOfExprs); - pSup->pCtx = createSqlFunctionCtx(pSup->pExprInfo, pSup->numOfExprs, &pSup->rowEntryInfoOffset, &pTaskInfo->storageAPI.functionStore); + pSup->pCtx = createSqlFunctionCtx(pSup->pExprInfo, pSup->numOfExprs, &pSup->rowEntryInfoOffset, + &pTaskInfo->storageAPI.functionStore); } pInfo->scanInfo = (SScanInfo){.numOfAsc = pTableScanNode->scanSeq[0], .numOfDesc = pTableScanNode->scanSeq[1]}; @@ -1207,13 +1317,12 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, pInfo->base.readerAPI = pTaskInfo->storageAPI.tsdReader; initResultSizeInfo(&pOperator->resultInfo, 4096); pInfo->pResBlock = createDataBlockFromDescNode(pDescNode); - prepareDataBlockBuf(pInfo->pResBlock, &pInfo->base.matchInfo); + code = prepareDataBlockBuf(pInfo->pResBlock, &pInfo->base.matchInfo); + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pTableScanNode->scan.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } - + QUERY_CHECK_CODE(code, lino, _error); + pInfo->currentGroupId = -1; pInfo->tableEndIndex = -1; @@ -1230,7 +1339,7 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, pInfo->base.metaCache.pTableMetaEntryCache = taosLRUCacheInit(1024 * 128, -1, .5); if (pInfo->base.metaCache.pTableMetaEntryCache == NULL) { code = terrno; - goto _error; + QUERY_CHECK_CODE(code, lino, _error); } pInfo->filesetDelimited = pTableScanNode->filesetDelimited; @@ -1262,7 +1371,8 @@ SOperatorInfo* createTableSeqScanOperatorInfo(void* pReadHandle, SExecTaskInfo* setOperatorInfo(pOperator, "TableSeqScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTableScanImpl, NULL, NULL, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTableScanImpl, NULL, NULL, optrDefaultBufFn, NULL, + optrDefaultGetNextExtFn, NULL); return pOperator; } @@ -1297,7 +1407,8 @@ static bool isSlidingWindow(SStreamScanInfo* pInfo) { } static bool isCountSlidingWindow(SStreamScanInfo* pInfo) { - return pInfo->windowSup.pStreamAggSup && (pInfo->windowSup.pStreamAggSup->windowCount != pInfo->windowSup.pStreamAggSup->windowSliding); + return pInfo->windowSup.pStreamAggSup && + (pInfo->windowSup.pStreamAggSup->windowCount != pInfo->windowSup.pStreamAggSup->windowSliding); } static bool isCountWindow(SStreamScanInfo* pInfo) { @@ -1340,7 +1451,7 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU SSDataBlock* pBlock = pTableScanInfo->pResBlock; STsdbReader* pReader = NULL; int32_t code = pAPI->tsdReader.tsdReaderOpen(pTableScanInfo->base.readHandle.vnode, &cond, &tblInfo, 1, pBlock, - (void**)&pReader, GET_TASKID(pTaskInfo), NULL); + (void**)&pReader, GET_TASKID(pTaskInfo), NULL); if (code != TSDB_CODE_SUCCESS) { terrno = code; T_LONG_JMP(pTaskInfo->env, code); @@ -1401,9 +1512,7 @@ bool comparePrimaryKey(SColumnInfoData* pCol, int32_t rowId, void* pVal) { return false; } -bool hasPrimaryKeyCol(SStreamScanInfo* pInfo) { - return pInfo->primaryKeyIndex != -1; -} +bool hasPrimaryKeyCol(SStreamScanInfo* pInfo) { return pInfo->primaryKeyIndex != -1; } static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion, void* pVal) { SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, uid, ts, ts, maxVersion); @@ -1440,12 +1549,16 @@ static uint64_t getGroupIdByData(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, return getGroupIdByUid(pInfo, uid); } -static bool prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_t* pRowIndex) { +static void prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_t* pRowIndex, bool* pRes) { if (pBlock->info.rows == 0) { - return false; + if (pRes) { + (*pRes) = false; + } } if ((*pRowIndex) == pBlock->info.rows) { - return false; + if (pRes) { + (*pRes) = false; + } } ASSERT(taosArrayGetSize(pBlock->pDataBlock) >= 3); @@ -1495,7 +1608,9 @@ static bool prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_ resetTableScanInfo(pInfo->pTableScanOp->info, &win, pInfo->pUpdateInfo->maxDataVersion); } pInfo->pTableScanOp->status = OP_OPENED; - return true; + if (pRes) { + (*pRes) = true; + } } static STimeWindow getSlidingWindow(TSKEY* startTsCol, TSKEY* endTsCol, uint64_t* gpIdCol, SInterval* pInterval, @@ -1532,15 +1647,18 @@ static STimeWindow getSlidingWindow(TSKEY* startTsCol, TSKEY* endTsCol, uint64_t } } -static SSDataBlock* doRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pSDB, int32_t tsColIndex, int32_t* pRowIndex) { +static int32_t doRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pSDB, int32_t tsColIndex, int32_t* pRowIndex, + SSDataBlock** ppRes) { qDebug("do stream range scan. windows index:%d", *pRowIndex); - bool prepareRes = true; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + bool prepareRes = true; while (1) { SSDataBlock* pResult = NULL; pResult = doTableScan(pInfo->pTableScanOp); if (!pResult) { - prepareRes = prepareRangeScan(pInfo, pSDB, pRowIndex); + prepareRangeScan(pInfo, pSDB, pRowIndex, &prepareRes); // scan next window data pResult = doTableScan(pInfo->pTableScanOp); } @@ -1554,16 +1672,20 @@ static SSDataBlock* doRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pSDB, int32 STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info; pTableScanInfo->base.readerAPI.tsdReaderClose(pTableScanInfo->base.dataReader); pTableScanInfo->base.dataReader = NULL; - return NULL; + (*ppRes) = NULL; + goto _end; } - doFilter(pResult, pInfo->pTableScanOp->exprSupp.pFilterInfo, NULL); + code = doFilter(pResult, pInfo->pTableScanOp->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); if (pResult->info.rows == 0) { continue; } if (pInfo->partitionSup.needCalc) { SSDataBlock* tmpBlock = createOneDataBlock(pResult, true); + QUERY_CHECK_NULL(tmpBlock, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + blockDataCleanup(pResult); for (int32_t i = 0; i < tmpBlock->info.rows; i++) { if (calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, tmpBlock, i) == pInfo->groupId) { @@ -1573,7 +1695,8 @@ static SSDataBlock* doRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pSDB, int32 bool isNull = colDataIsNull(pSrcCol, tmpBlock->info.rows, i, NULL); char* pSrcData = NULL; if (!isNull) pSrcData = colDataGetData(pSrcCol, i); - colDataSetVal(pDestCol, pResult->info.rows, pSrcData, isNull); + code = colDataSetVal(pDestCol, pResult->info.rows, pSrcData, isNull); + QUERY_CHECK_CODE(code, lino, _end); } pResult->info.rows++; } @@ -1583,33 +1706,42 @@ static SSDataBlock* doRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pSDB, int32 if (pResult->info.rows > 0) { pResult->info.calWin = pInfo->updateWin; - return pResult; + (*ppRes) = pResult; + goto _end; } } else if (pResult->info.id.groupId == pInfo->groupId) { pResult->info.calWin = pInfo->updateWin; - return pResult; + (*ppRes) = pResult; + goto _end; } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t getPreSessionWindow(SStreamAggSupporter* pAggSup, TSKEY startTs, TSKEY endTs, uint64_t groupId, - SSessionKey* pKey) { +static void getPreSessionWindow(SStreamAggSupporter* pAggSup, TSKEY startTs, TSKEY endTs, uint64_t groupId, + SSessionKey* pKey) { pKey->win.skey = startTs; pKey->win.ekey = endTs; pKey->groupId = groupId; - void* pCur = pAggSup->stateStore.streamStateSessionSeekKeyCurrentPrev(pAggSup->pState, pKey); - int32_t code = pAggSup->stateStore.streamStateSessionGetKVByCur(pCur, pKey, NULL, 0); + void* pCur = pAggSup->stateStore.streamStateSessionSeekKeyCurrentPrev(pAggSup->pState, pKey); + int32_t code = pAggSup->stateStore.streamStateSessionGetKVByCur(pCur, pKey, NULL, 0); if (code != TSDB_CODE_SUCCESS) { SET_SESSION_WIN_KEY_INVALID(pKey); } taosMemoryFree(pCur); - return code; } -void appendOneRowToSpecialBlockImpl(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, TSKEY* pCalStartTs, - TSKEY* pCalEndTs, uint64_t* pUid, uint64_t* pGp, void* pTbName, void* pPkData) { +int32_t appendOneRowToSpecialBlockImpl(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, TSKEY* pCalStartTs, + TSKEY* pCalEndTs, uint64_t* pUid, uint64_t* pGp, void* pTbName, void* pPkData) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pEndTsCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX); SColumnInfoData* pUidCol = taosArrayGet(pBlock->pDataBlock, UID_COLUMN_INDEX); @@ -1617,42 +1749,63 @@ void appendOneRowToSpecialBlockImpl(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* SColumnInfoData* pCalStartCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX); SColumnInfoData* pCalEndCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX); SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX); - colDataSetVal(pStartTsCol, pBlock->info.rows, (const char*)pStartTs, false); - colDataSetVal(pEndTsCol, pBlock->info.rows, (const char*)pEndTs, false); - colDataSetVal(pUidCol, pBlock->info.rows, (const char*)pUid, false); - colDataSetVal(pGpCol, pBlock->info.rows, (const char*)pGp, false); - colDataSetVal(pCalStartCol, pBlock->info.rows, (const char*)pCalStartTs, false); - colDataSetVal(pCalEndCol, pBlock->info.rows, (const char*)pCalEndTs, false); - colDataSetVal(pTableCol, pBlock->info.rows, (const char*)pTbName, pTbName == NULL); + code = colDataSetVal(pStartTsCol, pBlock->info.rows, (const char*)pStartTs, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pEndTsCol, pBlock->info.rows, (const char*)pEndTs, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pUidCol, pBlock->info.rows, (const char*)pUid, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pGpCol, pBlock->info.rows, (const char*)pGp, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pCalStartCol, pBlock->info.rows, (const char*)pCalStartTs, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pCalEndCol, pBlock->info.rows, (const char*)pCalEndTs, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pTableCol, pBlock->info.rows, (const char*)pTbName, pTbName == NULL); + QUERY_CHECK_CODE(code, lino, _end); + if (taosArrayGetSize(pBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX) { SColumnInfoData* pPkCol = taosArrayGet(pBlock->pDataBlock, PRIMARY_KEY_COLUMN_INDEX); - colDataSetVal(pPkCol, pBlock->info.rows, (const char*)pPkData, pPkData == NULL); + code = colDataSetVal(pPkCol, pBlock->info.rows, (const char*)pPkData, pPkData == NULL); + QUERY_CHECK_CODE(code, lino, _end); } pBlock->info.rows++; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -void appendPkToSpecialBlock(SSDataBlock* pBlock, TSKEY* pTsArray, SColumnInfoData* pPkCol, int32_t rowId, - uint64_t* pUid, uint64_t* pGp, void* pTbName) { +int32_t appendPkToSpecialBlock(SSDataBlock* pBlock, TSKEY* pTsArray, SColumnInfoData* pPkCol, int32_t rowId, + uint64_t* pUid, uint64_t* pGp, void* pTbName) { void* pVal = NULL; if (pPkCol) { pVal = colDataGetData(pPkCol, rowId); } - appendOneRowToSpecialBlockImpl(pBlock, pTsArray + rowId, pTsArray + rowId, pTsArray + rowId, pTsArray + rowId, pUid, - pGp, pTbName, pVal); + return appendOneRowToSpecialBlockImpl(pBlock, pTsArray + rowId, pTsArray + rowId, pTsArray + rowId, pTsArray + rowId, + pUid, pGp, pTbName, pVal); } -static void getPreVersionDataBlock(uint64_t uid, TSKEY startTs, TSKEY endTs, int64_t version, char* taskIdStr, - SStreamScanInfo* pInfo, SSDataBlock* pBlock) { +static int32_t getPreVersionDataBlock(uint64_t uid, TSKEY startTs, TSKEY endTs, int64_t version, char* taskIdStr, + SStreamScanInfo* pInfo, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, uid, startTs, endTs, version); printDataBlock(pPreRes, "pre res", taskIdStr); blockDataCleanup(pBlock); if (!pPreRes) { - return ; - } - int32_t code = blockDataEnsureCapacity(pBlock, pPreRes->info.rows); - if (code != TSDB_CODE_SUCCESS) { - return ; + goto _end; } + code = blockDataEnsureCapacity(pBlock, pPreRes->info.rows); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pTsCol = (SColumnInfoData*)taosArrayGet(pPreRes->pDataBlock, pInfo->primaryTsIndex); SColumnInfoData* pPkCol = NULL; @@ -1661,12 +1814,22 @@ static void getPreVersionDataBlock(uint64_t uid, TSKEY startTs, TSKEY endTs, int } for (int32_t i = 0; i < pPreRes->info.rows; i++) { uint64_t groupId = calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pPreRes, i); - appendPkToSpecialBlock(pBlock, (TSKEY*)pTsCol->pData, pPkCol, i, &uid, &groupId, NULL); + code = appendPkToSpecialBlock(pBlock, (TSKEY*)pTsCol->pData, pPkCol, i, &uid, &groupId, NULL); + QUERY_CHECK_CODE(code, lino, _end); } printDataBlock(pBlock, "new delete", taskIdStr); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, EStreamType mode) { +static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, + EStreamType mode) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pSrcBlock->info.rows == 0) { return TSDB_CODE_SUCCESS; } @@ -1685,18 +1848,18 @@ static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSr } int64_t ver = pSrcBlock->info.version - 1; - if (pInfo->partitionSup.needCalc && ( startData[0] != endData[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA) )) { - getPreVersionDataBlock(uidCol[0], startData[0], endData[0], ver, GET_TASKID(pTaskInfo), pInfo, pSrcBlock); + if (pInfo->partitionSup.needCalc && + (startData[0] != endData[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA))) { + code = getPreVersionDataBlock(uidCol[0], startData[0], endData[0], ver, GET_TASKID(pTaskInfo), pInfo, pSrcBlock); + QUERY_CHECK_CODE(code, lino, _end); startData = (TSKEY*)pStartTsCol->pData; endData = (TSKEY*)pEndTsCol->pData; uidCol = (uint64_t*)pUidCol->pData; pSrcGp = (uint64_t*)pGpCol->pData; } blockDataCleanup(pDestBlock); - int32_t code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pDestStartCol = taosArrayGet(pDestBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pDestEndCol = taosArrayGet(pDestBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -1730,19 +1893,32 @@ static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSr qError("generate session scan range failed. rang start:%" PRIx64 ", end:%" PRIx64, startData[i], endData[i]); continue; } - colDataSetVal(pDestStartCol, i, (const char*)&startWin.win.skey, false); - colDataSetVal(pDestEndCol, i, (const char*)&endWin.win.ekey, false); + code = colDataSetVal(pDestStartCol, i, (const char*)&startWin.win.skey, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDestEndCol, i, (const char*)&endWin.win.ekey, false); + QUERY_CHECK_CODE(code, lino, _end); colDataSetNULL(pDestUidCol, i); - colDataSetVal(pDestGpCol, i, (const char*)&groupId, false); + code = colDataSetVal(pDestGpCol, i, (const char*)&groupId, false); + QUERY_CHECK_CODE(code, lino, _end); + colDataSetNULL(pDestCalStartTsCol, i); colDataSetNULL(pDestCalEndTsCol, i); pDestBlock->info.rows++; } - return TSDB_CODE_SUCCESS; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t generateCountScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, EStreamType mode) { +static int32_t generateCountScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, + EStreamType mode) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; blockDataCleanup(pDestBlock); if (pSrcBlock->info.rows == 0) { return TSDB_CODE_SUCCESS; @@ -1757,23 +1933,23 @@ static int32_t generateCountScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcB SColumnInfoData* pGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX); uint64_t* pSrcGp = (uint64_t*)pGpCol->pData; SColumnInfoData* pSrcPkCol = NULL; - if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX ) { + if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX) { pSrcPkCol = taosArrayGet(pSrcBlock->pDataBlock, PRIMARY_KEY_COLUMN_INDEX); } int64_t ver = pSrcBlock->info.version - 1; - if (pInfo->partitionSup.needCalc && ( startData[0] != endData[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA) )) { - getPreVersionDataBlock(uidCol[0], startData[0], endData[0], ver, GET_TASKID(pTaskInfo), pInfo, pSrcBlock); + if (pInfo->partitionSup.needCalc && + (startData[0] != endData[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA))) { + code = getPreVersionDataBlock(uidCol[0], startData[0], endData[0], ver, GET_TASKID(pTaskInfo), pInfo, pSrcBlock); + QUERY_CHECK_CODE(code, lino, _end); startData = (TSKEY*)pStartTsCol->pData; endData = (TSKEY*)pEndTsCol->pData; uidCol = (uint64_t*)pUidCol->pData; pSrcGp = (uint64_t*)pGpCol->pData; } - int32_t code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pDestStartCol = taosArrayGet(pDestBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pDestEndCol = taosArrayGet(pDestBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -1793,19 +1969,36 @@ static int32_t generateCountScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcB SSessionKey startWin = {.win.skey = startData[i], .win.ekey = endData[i], .groupId = groupId}; SSessionKey range = {0}; getCountWinRange(pInfo->windowSup.pStreamAggSup, &startWin, mode, &range); - colDataSetVal(pDestStartCol, i, (const char*)&range.win.skey, false); - colDataSetVal(pDestEndCol, i, (const char*)&range.win.ekey, false); + code = colDataSetVal(pDestStartCol, i, (const char*)&range.win.skey, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDestEndCol, i, (const char*)&range.win.ekey, false); + QUERY_CHECK_CODE(code, lino, _end); colDataSetNULL(pDestUidCol, i); - colDataSetVal(pDestGpCol, i, (const char*)&groupId, false); - colDataSetVal(pDestCalStartTsCol, i, (const char*)&range.win.skey, false); - colDataSetVal(pDestCalEndTsCol, i, (const char*)&range.win.ekey, false); + code = colDataSetVal(pDestGpCol, i, (const char*)&groupId, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDestCalStartTsCol, i, (const char*)&range.win.skey, false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDestCalEndTsCol, i, (const char*)&range.win.ekey, false); + QUERY_CHECK_CODE(code, lino, _end); + pDestBlock->info.rows++; } - return TSDB_CODE_SUCCESS; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, EStreamType mode) { +static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, + EStreamType mode) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; blockDataCleanup(pDestBlock); if (pSrcBlock->info.rows == 0) { return TSDB_CODE_SUCCESS; @@ -1816,7 +2009,7 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS SColumnInfoData* pSrcUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); SColumnInfoData* pSrcGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX); SColumnInfoData* pSrcPkCol = NULL; - if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX ) { + if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX) { pSrcPkCol = taosArrayGet(pSrcBlock->pDataBlock, PRIMARY_KEY_COLUMN_INDEX); } @@ -1826,18 +2019,20 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS TSKEY* srcEndTsCol = (TSKEY*)pSrcEndTsCol->pData; int64_t ver = pSrcBlock->info.version - 1; - if (pInfo->partitionSup.needCalc && ( srcStartTsCol[0] != srcEndTsCol[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA) )) { - getPreVersionDataBlock(srcUidData[0], srcStartTsCol[0], srcEndTsCol[0], ver, GET_TASKID(pTaskInfo), pInfo, pSrcBlock); + if (pInfo->partitionSup.needCalc && + (srcStartTsCol[0] != srcEndTsCol[0] || (hasPrimaryKeyCol(pInfo) && mode == STREAM_DELETE_DATA))) { + code = getPreVersionDataBlock(srcUidData[0], srcStartTsCol[0], srcEndTsCol[0], ver, GET_TASKID(pTaskInfo), pInfo, + pSrcBlock); + QUERY_CHECK_CODE(code, lino, _end); + srcStartTsCol = (TSKEY*)pSrcStartTsCol->pData; srcEndTsCol = (TSKEY*)pSrcEndTsCol->pData; srcUidData = (uint64_t*)pSrcUidCol->pData; } uint64_t* srcGp = (uint64_t*)pSrcGpCol->pData; - int32_t code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pStartTsCol = taosArrayGet(pDestBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pEndTsCol = taosArrayGet(pDestBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -1856,18 +2051,35 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS groupId = getGroupIdByData(pInfo, srcUid, srcStartTsCol[i], ver, pVal); } TSKEY calStartTs = srcStartTsCol[i]; - colDataSetVal(pCalStartTsCol, pDestBlock->info.rows, (const char*)(&calStartTs), false); + code = colDataSetVal(pCalStartTsCol, pDestBlock->info.rows, (const char*)(&calStartTs), false); + QUERY_CHECK_CODE(code, lino, _end); + STimeWindow win = getSlidingWindow(srcStartTsCol, srcEndTsCol, srcGp, &pInfo->interval, &pSrcBlock->info, &i, pInfo->partitionSup.needCalc); TSKEY calEndTs = srcStartTsCol[i - 1]; - colDataSetVal(pCalEndTsCol, pDestBlock->info.rows, (const char*)(&calEndTs), false); - colDataSetVal(pDeUidCol, pDestBlock->info.rows, (const char*)(&srcUid), false); - colDataSetVal(pStartTsCol, pDestBlock->info.rows, (const char*)(&win.skey), false); - colDataSetVal(pEndTsCol, pDestBlock->info.rows, (const char*)(&win.ekey), false); - colDataSetVal(pGpCol, pDestBlock->info.rows, (const char*)(&groupId), false); + code = colDataSetVal(pCalEndTsCol, pDestBlock->info.rows, (const char*)(&calEndTs), false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDeUidCol, pDestBlock->info.rows, (const char*)(&srcUid), false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pStartTsCol, pDestBlock->info.rows, (const char*)(&win.skey), false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pEndTsCol, pDestBlock->info.rows, (const char*)(&win.ekey), false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pGpCol, pDestBlock->info.rows, (const char*)(&groupId), false); + QUERY_CHECK_CODE(code, lino, _end); + pDestBlock->info.rows++; } - return TSDB_CODE_SUCCESS; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static int32_t calBlockTbName(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_t rowId) { @@ -1880,7 +2092,7 @@ static int32_t calBlockTbName(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32 code = appendCreateTableRow(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, &pInfo->tbnameCalSup, &pInfo->tagCalSup, pBlock->info.id.groupId, pBlock, rowId, pInfo->pCreateTbRes, &pInfo->stateStore); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -1909,7 +2121,8 @@ static int32_t generatePartitionDelResBlock(SStreamScanInfo* pInfo, SSDataBlock* uint64_t srcUid = srcUidData[delI]; char tbname[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN] = {0}; SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, srcUid, srcStartTsCol[delI], srcEndTsCol[delI], ver); - blockDataEnsureCapacity(pDestBlock, pDestBlock->info.rows + pPreRes->info.rows); + code = blockDataEnsureCapacity(pDestBlock, pDestBlock->info.rows + pPreRes->info.rows); + QUERY_CHECK_CODE(code, lino, _end); for (int32_t preJ = 0; preJ < pPreRes->info.rows; preJ++) { groupId = calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pPreRes, preJ); if (pInfo->pPartTbnameSup) { @@ -1917,10 +2130,11 @@ static int32_t generatePartitionDelResBlock(SStreamScanInfo* pInfo, SSDataBlock* int32_t winCode = TSDB_CODE_SUCCESS; code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { - calBlockTbName(pInfo, pPreRes, preJ); + code = calBlockTbName(pInfo, pPreRes, preJ); + QUERY_CHECK_CODE(code, lino, _end); memcpy(varDataVal(tbname), pPreRes->info.parTbName, strlen(pPreRes->info.parTbName)); } else { memcpy(varDataVal(tbname), parTbname, TSDB_TABLE_NAME_LEN); @@ -1928,8 +2142,9 @@ static int32_t generatePartitionDelResBlock(SStreamScanInfo* pInfo, SSDataBlock* varDataSetLen(tbname, strlen(varDataVal(tbname))); pInfo->stateStore.streamStateFreeVal(parTbname); } - appendDataToSpecialBlock(pDestBlock, srcStartTsCol + delI, srcEndTsCol + delI, srcUidData + delI, &groupId, - tbname[0] == 0 ? NULL : tbname); + code = appendDataToSpecialBlock(pDestBlock, srcStartTsCol + delI, srcEndTsCol + delI, srcUidData + delI, &groupId, + tbname[0] == 0 ? NULL : tbname); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -1941,8 +2156,8 @@ _end: } static int32_t generateDeleteResultBlockImpl(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock) { - int32_t code = TSDB_CODE_SUCCESS; -int32_t lino = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SColumnInfoData* pSrcStartTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pSrcEndTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, END_TS_COLUMN_INDEX); SColumnInfoData* pSrcUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); @@ -1950,7 +2165,7 @@ int32_t lino = 0; SColumnInfoData* pSrcGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX); uint64_t* srcGp = (uint64_t*)pSrcGpCol->pData; SColumnInfoData* pSrcPkCol = NULL; - if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX ) { + if (taosArrayGetSize(pSrcBlock->pDataBlock) > PRIMARY_KEY_COLUMN_INDEX) { pSrcPkCol = taosArrayGet(pSrcBlock->pDataBlock, PRIMARY_KEY_COLUMN_INDEX); } @@ -1970,15 +2185,17 @@ int32_t lino = 0; groupId = getGroupIdByData(pInfo, srcUid, srcStartTsCol[i], ver, pVal); } if (pInfo->tbnameCalSup.pExprInfo) { - void* parTbname = NULL; + void* parTbname = NULL; int32_t winCode = TSDB_CODE_SUCCESS; - code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, &parTbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + code = pInfo->stateStore.streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, groupId, + &parTbname, false, &winCode); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { SSDataBlock* pPreRes = readPreVersionData(pInfo->pTableScanOp, srcUid, srcStartTsCol[i], srcStartTsCol[i], ver); printDataBlock(pPreRes, "pre res", GET_TASKID(pInfo->pStreamScanOp->pTaskInfo)); - calBlockTbName(pInfo, pPreRes, 0); + code = calBlockTbName(pInfo, pPreRes, 0); + QUERY_CHECK_CODE(code, lino, _end); memcpy(varDataVal(tbname), pPreRes->info.parTbName, strlen(pPreRes->info.parTbName)); } else { memcpy(varDataVal(tbname), parTbname, TSDB_TABLE_NAME_LEN); @@ -1986,8 +2203,9 @@ int32_t lino = 0; varDataSetLen(tbname, strlen(varDataVal(tbname))); pInfo->stateStore.streamStateFreeVal(parTbname); } - appendDataToSpecialBlock(pDestBlock, srcStartTsCol + i, srcEndTsCol + i, srcUidData + i, &groupId, - tbname[0] == 0 ? NULL : tbname); + code = appendDataToSpecialBlock(pDestBlock, srcStartTsCol + i, srcEndTsCol + i, srcUidData + i, &groupId, + tbname[0] == 0 ? NULL : tbname); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -2013,30 +2231,43 @@ static int32_t generateDeleteResultBlock(SStreamScanInfo* pInfo, SSDataBlock* pS return generateDeleteResultBlockImpl(pInfo, pSrcBlock, pDestBlock); } -static int32_t generateScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, EStreamType type) { +static int32_t generateScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock, + EStreamType type) { int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (isIntervalWindow(pInfo)) { code = generateIntervalScanRange(pInfo, pSrcBlock, pDestBlock, type); + QUERY_CHECK_CODE(code, lino, _end); } else if (isSessionWindow(pInfo) || isStateWindow(pInfo)) { code = generateSessionScanRange(pInfo, pSrcBlock, pDestBlock, type); + QUERY_CHECK_CODE(code, lino, _end); } else if (isCountWindow(pInfo)) { code = generateCountScanRange(pInfo, pSrcBlock, pDestBlock, type); + QUERY_CHECK_CODE(code, lino, _end); } else { code = generateDeleteResultBlock(pInfo, pSrcBlock, pDestBlock); + QUERY_CHECK_CODE(code, lino, _end); } pDestBlock->info.type = STREAM_CLEAR; pDestBlock->info.version = pSrcBlock->info.version; pDestBlock->info.dataLoad = 1; - blockDataUpdateTsWindow(pDestBlock, 0); + code = blockDataUpdateTsWindow(pDestBlock, 0); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } return code; } -void appendDataToSpecialBlock(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, uint64_t* pUid, uint64_t* pGp, - void* pTbName) { - appendOneRowToSpecialBlockImpl(pBlock, pStartTs, pEndTs, pStartTs, pEndTs, pUid, pGp, pTbName, NULL); +int32_t appendDataToSpecialBlock(SSDataBlock* pBlock, TSKEY* pStartTs, TSKEY* pEndTs, uint64_t* pUid, uint64_t* pGp, + void* pTbName) { + return appendOneRowToSpecialBlockImpl(pBlock, pStartTs, pEndTs, pStartTs, pEndTs, pUid, pGp, pTbName, NULL); } -bool checkExpiredData(SStateStore* pAPI, SUpdateInfo* pUpdateInfo, STimeWindowAggSupp* pTwSup, uint64_t tableId, TSKEY ts, void* pPkVal, int32_t len) { +bool checkExpiredData(SStateStore* pAPI, SUpdateInfo* pUpdateInfo, STimeWindowAggSupp* pTwSup, uint64_t tableId, + TSKEY ts, void* pPkVal, int32_t len) { bool isExpired = false; bool isInc = pAPI->isIncrementalTimeStamp(pUpdateInfo, tableId, ts, pPkVal, len); if (!isInc) { @@ -2045,20 +2276,23 @@ bool checkExpiredData(SStateStore* pAPI, SUpdateInfo* pUpdateInfo, STimeWindowAg return isExpired; } -static void checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock* pBlock, bool out) { +static int32_t checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock* pBlock, bool out) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (out) { blockDataCleanup(pInfo->pUpdateDataRes); - blockDataEnsureCapacity(pInfo->pUpdateDataRes, pBlock->info.rows * 2); + code = blockDataEnsureCapacity(pInfo->pUpdateDataRes, pBlock->info.rows * 2); + QUERY_CHECK_CODE(code, lino, _end); } SColumnInfoData* pColDataInfo = taosArrayGet(pBlock->pDataBlock, pInfo->primaryTsIndex); ASSERT(pColDataInfo->info.type == TSDB_DATA_TYPE_TIMESTAMP); - TSKEY* tsCol = (TSKEY*)pColDataInfo->pData; + TSKEY* tsCol = (TSKEY*)pColDataInfo->pData; SColumnInfoData* pPkColDataInfo = NULL; if (hasPrimaryKeyCol(pInfo)) { pPkColDataInfo = taosArrayGet(pBlock->pDataBlock, pInfo->primaryKeyIndex); } - bool tableInserted = pInfo->stateStore.updateInfoIsTableInserted(pInfo->pUpdateInfo, pBlock->info.id.uid); + bool tableInserted = pInfo->stateStore.updateInfoIsTableInserted(pInfo->pUpdateInfo, pBlock->info.id.uid); for (int32_t rowId = 0; rowId < pBlock->info.rows; rowId++) { SResultRowInfo dumyInfo; dumyInfo.cur.pageId = -1; @@ -2074,31 +2308,44 @@ static void checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock isClosed = isCloseWindow(&win, &pInfo->twAggSup); } // must check update info first. - void* pPkVal = NULL; + void* pPkVal = NULL; int32_t pkLen = 0; if (hasPrimaryKeyCol(pInfo)) { pPkVal = colDataGetData(pPkColDataInfo, rowId); pkLen = colDataGetRowLength(pPkColDataInfo, rowId); } - bool update = pInfo->stateStore.updateInfoIsUpdated(pInfo->pUpdateInfo, pBlock->info.id.uid, tsCol[rowId], pPkVal, pkLen); - bool isDeleted = isClosed && isSignleIntervalWindow(pInfo) && - isDeletedStreamWindow(&win, pBlock->info.id.groupId, pInfo->pState, &pInfo->twAggSup, &pInfo->stateStore); + bool update = + pInfo->stateStore.updateInfoIsUpdated(pInfo->pUpdateInfo, pBlock->info.id.uid, tsCol[rowId], pPkVal, pkLen); + bool isDeleted = + isClosed && isSignleIntervalWindow(pInfo) && + isDeletedStreamWindow(&win, pBlock->info.id.groupId, pInfo->pState, &pInfo->twAggSup, &pInfo->stateStore); if ((update || isDeleted) && out) { qDebug("stream update check not pass, update %d, deleted Win %d", update, isDeleted); uint64_t gpId = 0; - appendPkToSpecialBlock(pInfo->pUpdateDataRes, tsCol, pPkColDataInfo, rowId, &pBlock->info.id.uid, &gpId, NULL); + code = appendPkToSpecialBlock(pInfo->pUpdateDataRes, tsCol, pPkColDataInfo, rowId, &pBlock->info.id.uid, &gpId, + NULL); + QUERY_CHECK_CODE(code, lino, _end); if (isDeleted && pInfo->partitionSup.needCalc) { gpId = calGroupIdByData(&pInfo->partitionSup, pInfo->pPartScalarSup, pBlock, rowId); - appendPkToSpecialBlock(pInfo->pUpdateDataRes, tsCol, pPkColDataInfo, rowId, &pBlock->info.id.uid, &gpId, NULL); + code = appendPkToSpecialBlock(pInfo->pUpdateDataRes, tsCol, pPkColDataInfo, rowId, &pBlock->info.id.uid, &gpId, + NULL); + QUERY_CHECK_CODE(code, lino, _end); } } } if (out && pInfo->pUpdateDataRes->info.rows > 0) { pInfo->pUpdateDataRes->info.version = pBlock->info.version; pInfo->pUpdateDataRes->info.dataLoad = 1; - blockDataUpdateTsWindow(pInfo->pUpdateDataRes, 0); + code = blockDataUpdateTsWindow(pInfo->pUpdateDataRes, 0); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pUpdateDataRes->info.type = pInfo->partitionSup.needCalc ? STREAM_DELETE_DATA : STREAM_CLEAR; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static void doBlockDataWindowFilter(SSDataBlock* pBlock, int32_t tsIndex, STimeWindow* pWindow, const char* id) { @@ -2140,8 +2387,8 @@ static void doBlockDataWindowFilter(SSDataBlock* pBlock, int32_t tsIndex, STimeW } } -static void doBlockDataPrimaryKeyFilter(SSDataBlock* pBlock, STqOffsetVal *offset) { - if(pBlock->info.window.skey != offset->ts || offset->primaryKey.type == 0){ +static void doBlockDataPrimaryKeyFilter(SSDataBlock* pBlock, STqOffsetVal* offset) { + if (pBlock->info.window.skey != offset->ts || offset->primaryKey.type == 0) { return; } bool* p = taosMemoryCalloc(pBlock->info.rows, sizeof(bool)); @@ -2150,20 +2397,20 @@ static void doBlockDataPrimaryKeyFilter(SSDataBlock* pBlock, STqOffsetVal *offse SColumnInfoData* pColTs = taosArrayGet(pBlock->pDataBlock, 0); SColumnInfoData* pColPk = taosArrayGet(pBlock->pDataBlock, 1); - qDebug("doBlockDataWindowFilter primary key, ts:%" PRId64 " %"PRId64, offset->ts, offset->primaryKey.val); + qDebug("doBlockDataWindowFilter primary key, ts:%" PRId64 " %" PRId64, offset->ts, offset->primaryKey.val); ASSERT(pColPk->info.type == offset->primaryKey.type); __compar_fn_t func = getComparFunc(pColPk->info.type, 0); for (int32_t i = 0; i < pBlock->info.rows; ++i) { int64_t* ts = (int64_t*)colDataGetData(pColTs, i); - void *data = colDataGetData(pColPk, i); - if(IS_VAR_DATA_TYPE(pColPk->info.type)){ - void *tmq = taosMemoryMalloc(offset->primaryKey.nData + VARSTR_HEADER_SIZE); + void* data = colDataGetData(pColPk, i); + if (IS_VAR_DATA_TYPE(pColPk->info.type)) { + void* tmq = taosMemoryMalloc(offset->primaryKey.nData + VARSTR_HEADER_SIZE); memcpy(varDataVal(tmq), offset->primaryKey.pData, offset->primaryKey.nData); varDataLen(tmq) = offset->primaryKey.nData; p[i] = (*ts > offset->ts) || (func(data, tmq) > 0); taosMemoryFree(tmq); - }else{ + } else { p[i] = (*ts > offset->ts) || (func(data, &offset->primaryKey.val) > 0); } @@ -2205,7 +2452,7 @@ static void rebuildDeleteBlockData(SSDataBlock* pBlock, STimeWindow* pWindow, co } } } else if (pWindow->ekey != INT64_MAX) { - for(int32_t i = 0; i < numOfRows; ++i) { + for (int32_t i = 0; i < numOfRows; ++i) { if (tsEndCol[i] > ekey) { tsEndCol[i] = ekey; } @@ -2220,7 +2467,8 @@ static void rebuildDeleteBlockData(SSDataBlock* pBlock, STimeWindow* pWindow, co if (hasUnqualified) { trimDataBlock(pBlock, pBlock->info.rows, p); - qDebug("%s re-build delete datablock, start key revised to:%"PRId64", rows:%"PRId64, id, skey, pBlock->info.rows); + qDebug("%s re-build delete datablock, start key revised to:%" PRId64 ", rows:%" PRId64, id, skey, + pBlock->info.rows); } else { qDebug("%s not update the delete block", id); } @@ -2228,24 +2476,28 @@ static void rebuildDeleteBlockData(SSDataBlock* pBlock, STimeWindow* pWindow, co taosMemoryFree(p); } -static int32_t colIdComparFn(const void* param1, const void * param2) { - int32_t p1 = *(int32_t*) param1; - int32_t p2 = *(int32_t*) param2; +static int32_t colIdComparFn(const void* param1, const void* param2) { + int32_t p1 = *(int32_t*)param1; + int32_t p2 = *(int32_t*)param2; if (p1 == p2) { return 0; } else { - return (p1 < p2)? -1:1; + return (p1 < p2) ? -1 : 1; } } -static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock, STimeWindow* pTimeWindow, bool filter) { +static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock, STimeWindow* pTimeWindow, + bool filter) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SDataBlockInfo* pBlockInfo = &pInfo->pRes->info; SOperatorInfo* pOperator = pInfo->pStreamScanOp; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; const char* id = GET_TASKID(pTaskInfo); - blockDataEnsureCapacity(pInfo->pRes, pBlock->info.rows); + code = blockDataEnsureCapacity(pInfo->pRes, pBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); pBlockInfo->rows = pBlock->info.rows; pBlockInfo->id.uid = pBlock->info.id.uid; @@ -2256,6 +2508,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock pBlockInfo->id.groupId = tableListGetTableGroupId(pTableScanInfo->base.pTableListInfo, pBlock->info.id.uid); SArray* pColList = taosArrayInit(4, sizeof(int32_t)); + QUERY_CHECK_NULL(pColList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); // todo extract method for (int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) { @@ -2269,9 +2522,12 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock SColumnInfoData* pResCol = bdGetColumnInfoData(pBlock, j); if (pResCol->info.colId == pColMatchInfo->colId) { SColumnInfoData* pDst = taosArrayGet(pInfo->pRes->pDataBlock, pColMatchInfo->dstSlotId); - colDataAssign(pDst, pResCol, pBlock->info.rows, &pInfo->pRes->info); + code = colDataAssign(pDst, pResCol, pBlock->info.rows, &pInfo->pRes->info); + QUERY_CHECK_CODE(code, lino, _end); + colExists = true; - taosArrayPush(pColList, &pColMatchInfo->dstSlotId); + void* tmp = taosArrayPush(pColList, &pColMatchInfo->dstSlotId); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); break; } } @@ -2280,16 +2536,17 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock if (!colExists) { SColumnInfoData* pDst = taosArrayGet(pInfo->pRes->pDataBlock, pColMatchInfo->dstSlotId); colDataSetNNULL(pDst, 0, pBlockInfo->rows); - taosArrayPush(pColList, &pColMatchInfo->dstSlotId); + void* tmp = taosArrayPush(pColList, &pColMatchInfo->dstSlotId); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } // currently only the tbname pseudo column if (pInfo->numOfPseudoExpr > 0) { - int32_t code = addTagPseudoColumnData(&pInfo->readHandle, pInfo->pPseudoExpr, pInfo->numOfPseudoExpr, pInfo->pRes, - pBlockInfo->rows, pTaskInfo, &pTableScanInfo->base.metaCache); + int32_t tmpCode = addTagPseudoColumnData(&pInfo->readHandle, pInfo->pPseudoExpr, pInfo->numOfPseudoExpr, + pInfo->pRes, pBlockInfo->rows, pTaskInfo, &pTableScanInfo->base.metaCache); // ignore the table not exists error, since this table may have been dropped during the scan procedure. - if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_PAR_TABLE_NOT_EXIST) { + if (tmpCode != TSDB_CODE_SUCCESS && tmpCode != TSDB_CODE_PAR_TABLE_NOT_EXIST) { blockDataFreeRes((SSDataBlock*)pBlock); T_LONG_JMP(pTaskInfo->env, code); } @@ -2297,15 +2554,16 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock // reset the error code. terrno = 0; - for(int32_t i = 0; i < pInfo->numOfPseudoExpr; ++i) { - taosArrayPush(pColList, &pInfo->pPseudoExpr[i].base.resSchema.slotId); + for (int32_t i = 0; i < pInfo->numOfPseudoExpr; ++i) { + void* tmp = taosArrayPush(pColList, &pInfo->pPseudoExpr[i].base.resSchema.slotId); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } taosArraySort(pColList, colIdComparFn); int32_t i = 0, j = 0; - while(i < taosArrayGetSize(pColList)) { + while (i < taosArrayGetSize(pColList)) { int32_t slot1 = *(int32_t*)taosArrayGet(pColList, i); if (slot1 > j) { SColumnInfoData* pDst = taosArrayGet(pInfo->pRes->pDataBlock, j); @@ -2317,7 +2575,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock } } - while(j < taosArrayGetSize(pInfo->pRes->pDataBlock)) { + while (j < taosArrayGetSize(pInfo->pRes->pDataBlock)) { SColumnInfoData* pDst = taosArrayGet(pInfo->pRes->pDataBlock, j); colDataSetNNULL(pDst, 0, pBlockInfo->rows); j += 1; @@ -2326,30 +2584,38 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock taosArrayDestroy(pColList); if (filter) { - doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); } // filter the block extracted from WAL files, according to the time window apply additional time window filter doBlockDataWindowFilter(pInfo->pRes, pInfo->primaryTsIndex, pTimeWindow, id); pInfo->pRes->info.dataLoad = 1; - blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + code = blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pRes->info.rows == 0) { return 0; } - calBlockTbName(pInfo, pInfo->pRes, 0); - return 0; + code = calBlockTbName(pInfo, pInfo->pRes, 0); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static void processPrimaryKey(SSDataBlock* pBlock, bool hasPrimaryKey, STqOffsetVal *offset){ +static void processPrimaryKey(SSDataBlock* pBlock, bool hasPrimaryKey, STqOffsetVal* offset) { SValue val = {0}; - if (hasPrimaryKey){ + if (hasPrimaryKey) { doBlockDataPrimaryKeyFilter(pBlock, offset); SColumnInfoData* pColPk = taosArrayGet(pBlock->pDataBlock, 1); if (pBlock->info.rows < 1) { - return ; + return; } void* tmp = colDataGetData(pColPk, pBlock->info.rows - 1); val.type = pColPk->info.type; @@ -2365,6 +2631,8 @@ static void processPrimaryKey(SSDataBlock* pBlock, bool hasPrimaryKey, STqOffset } static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; @@ -2407,11 +2675,11 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { } if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__LOG) { - while (1) { - bool hasResult = pAPI->tqReaderFn.tqReaderNextBlockInWal(pInfo->tqReader, id, pTaskInfo->streamInfo.sourceExcluded); + bool hasResult = + pAPI->tqReaderFn.tqReaderNextBlockInWal(pInfo->tqReader, id, pTaskInfo->streamInfo.sourceExcluded); - SSDataBlock* pRes = pAPI->tqReaderFn.tqGetResultBlock(pInfo->tqReader); + SSDataBlock* pRes = pAPI->tqReaderFn.tqGetResultBlock(pInfo->tqReader); struct SWalReader* pWalReader = pAPI->tqReaderFn.tqReaderGetWalReader(pInfo->tqReader); // curVersion move to next @@ -2425,7 +2693,8 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { pTaskInfo->streamInfo.currentOffset.version); blockDataCleanup(pInfo->pRes); STimeWindow defaultWindow = {.skey = INT64_MIN, .ekey = INT64_MAX}; - setBlockIntoRes(pInfo, pRes, &defaultWindow, true); + code = setBlockIntoRes(pInfo, pRes, &defaultWindow, true); + QUERY_CHECK_CODE(code, lino, _end); qDebug("doQueueScan after filter get data from log %" PRId64 " rows, version:%" PRId64, pInfo->pRes->info.rows, pTaskInfo->streamInfo.currentOffset.version); if (pInfo->pRes->info.rows > 0) { @@ -2440,12 +2709,21 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { qError("unexpected streamInfo prepare type: %d", pTaskInfo->streamInfo.currentOffset.type); return NULL; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return NULL; } static int32_t filterDelBlockByUid(SSDataBlock* pDst, const SSDataBlock* pSrc, SStreamScanInfo* pInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STqReader* pReader = pInfo->tqReader; int32_t rows = pSrc->info.rows; - blockDataEnsureCapacity(pDst, rows); + code = blockDataEnsureCapacity(pDst, rows); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pSrcStartCol = taosArrayGet(pSrc->pDataBlock, START_TS_COLUMN_INDEX); uint64_t* startCol = (uint64_t*)pSrcStartCol->pData; @@ -2461,9 +2739,14 @@ static int32_t filterDelBlockByUid(SSDataBlock* pDst, const SSDataBlock* pSrc, S int32_t j = 0; for (int32_t i = 0; i < rows; i++) { if (pInfo->readerFn.tqReaderIsQueriedTable(pReader, uidCol[i])) { - colDataSetVal(pDstStartCol, j, (const char*)&startCol[i], false); - colDataSetVal(pDstEndCol, j, (const char*)&endCol[i], false); - colDataSetVal(pDstUidCol, j, (const char*)&uidCol[i], false); + code = colDataSetVal(pDstStartCol, j, (const char*)&startCol[i], false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDstEndCol, j, (const char*)&endCol[i], false); + QUERY_CHECK_CODE(code, lino, _end); + + code = colDataSetVal(pDstUidCol, j, (const char*)&uidCol[i], false); + QUERY_CHECK_CODE(code, lino, _end); colDataSetNULL(taosArrayGet(pDst->pDataBlock, GROUPID_COLUMN_INDEX), j); colDataSetNULL(taosArrayGet(pDst->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX), j); @@ -2477,11 +2760,17 @@ static int32_t filterDelBlockByUid(SSDataBlock* pDst, const SSDataBlock* pSrc, S pDst->info.rows = j; pDst->info.capacity = cap; - return 0; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } // for partition by tag -static void setBlockGroupIdByUid(SStreamScanInfo* pInfo, SSDataBlock* pBlock) { +static int32_t setBlockGroupIdByUid(SStreamScanInfo* pInfo, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); TSKEY* startTsCol = (TSKEY*)pStartTsCol->pData; SColumnInfoData* pGpCol = taosArrayGet(pBlock->pDataBlock, GROUPID_COLUMN_INDEX); @@ -2492,17 +2781,27 @@ static void setBlockGroupIdByUid(SStreamScanInfo* pInfo, SSDataBlock* pBlock) { if (!pInfo->partitionSup.needCalc) { for (int32_t i = 0; i < rows; i++) { uint64_t groupId = getGroupIdByUid(pInfo, uidCol[i]); - colDataSetVal(pGpCol, i, (const char*)&groupId, false); + code = colDataSetVal(pGpCol, i, (const char*)&groupId, false); + QUERY_CHECK_CODE(code, lino, _end); } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static void doCheckUpdate(SStreamScanInfo* pInfo, TSKEY endKey, SSDataBlock* pBlock) { +static int32_t doCheckUpdate(SStreamScanInfo* pInfo, TSKEY endKey, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pInfo->pUpdateInfo) { pInfo->pUpdateInfo->maxDataVersion = TMAX(pInfo->pUpdateInfo->maxDataVersion, pBlock->info.version); } if (!pInfo->igCheckUpdate && pInfo->pUpdateInfo) { - checkUpdateData(pInfo, true, pBlock, true); + code = checkUpdateData(pInfo, true, pBlock, true); + QUERY_CHECK_CODE(code, lino, _end); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, endKey); if (pInfo->pUpdateDataRes->info.rows > 0) { pInfo->updateResIndex = 0; @@ -2516,6 +2815,12 @@ static void doCheckUpdate(SStreamScanInfo* pInfo, TSKEY endKey, SSDataBlock* pBl } } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } int32_t streamScanOperatorEncode(SStreamScanInfo* pInfo, void** pBuff, int32_t* pLen) { @@ -2523,19 +2828,20 @@ int32_t streamScanOperatorEncode(SStreamScanInfo* pInfo, void** pBuff, int32_t* int32_t lino = 0; int32_t len = 0; code = pInfo->stateStore.updateInfoSerialize(NULL, 0, pInfo->pUpdateInfo, &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); len += encodeSTimeWindowAggSupp(NULL, &pInfo->twAggSup); *pBuff = taosMemoryCalloc(1, len); if (!(*pBuff)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* buf = *pBuff; - encodeSTimeWindowAggSupp(&buf, &pInfo->twAggSup); + (void)encodeSTimeWindowAggSupp(&buf, &pInfo->twAggSup); + int32_t tmp = 0; code = pInfo->stateStore.updateInfoSerialize(buf, len, pInfo->pUpdateInfo, &tmp); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); *pLen = len; @@ -2553,11 +2859,12 @@ void streamScanOperatorSaveCheckpoint(SStreamScanInfo* pInfo) { return; } if (needSaveStreamOperatorInfo(&pInfo->basic)) { - void* pBuf = NULL; + void* pBuf = NULL; int32_t len = 0; code = streamScanOperatorEncode(pInfo, &pBuf, &len); - TSDB_CHECK_CODE(code, lino, _end); - pInfo->stateStore.streamStateSaveInfo(pInfo->pState, STREAM_SCAN_OP_CHECKPOINT_NAME, strlen(STREAM_SCAN_OP_CHECKPOINT_NAME), pBuf, len); + QUERY_CHECK_CODE(code, lino, _end); + pInfo->stateStore.streamStateSaveInfo(pInfo->pState, STREAM_SCAN_OP_CHECKPOINT_NAME, + strlen(STREAM_SCAN_OP_CHECKPOINT_NAME), pBuf, len); taosMemoryFree(pBuf); saveStreamOperatorStateComplete(&pInfo->basic); } @@ -2580,7 +2887,7 @@ void streamScanOperatorDecode(void* pBuff, int32_t len, SStreamScanInfo* pInfo) return; } - void* pUpInfo = taosMemoryCalloc(1, sizeof(SUpdateInfo)); + void* pUpInfo = taosMemoryCalloc(1, sizeof(SUpdateInfo)); int32_t code = pInfo->stateStore.updateInfoDeserialize(buf, tlen, pUpInfo); if (code == TSDB_CODE_SUCCESS) { pInfo->stateStore.updateInfoDestroy(pInfo->pUpdateInfo); @@ -2600,8 +2907,8 @@ static bool isStreamWindow(SStreamScanInfo* pInfo) { static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { // NOTE: this operator does never check if current status is done or not - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; const char* id = GET_TASKID(pTaskInfo); @@ -2611,7 +2918,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { qDebug("stream scan started, %s", id); - if (pStreamInfo->recoverStep == STREAM_RECOVER_STEP__PREPARE1 || pStreamInfo->recoverStep == STREAM_RECOVER_STEP__PREPARE2) { + if (pStreamInfo->recoverStep == STREAM_RECOVER_STEP__PREPARE1 || + pStreamInfo->recoverStep == STREAM_RECOVER_STEP__PREPARE2) { STableScanInfo* pTSInfo = pInfo->pTableScanOp->info; memcpy(&pTSInfo->base.cond, &pStreamInfo->tableCond, sizeof(SQueryTableDataCond)); @@ -2620,8 +2928,9 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { pTSInfo->base.cond.endVersion = pStreamInfo->fillHistoryVer.maxVer; pTSInfo->base.cond.twindows = pStreamInfo->fillHistoryWindow; - qDebug("stream scan step1, verRange:%" PRId64 "-%" PRId64 " window:%"PRId64"-%"PRId64", %s", pTSInfo->base.cond.startVersion, - pTSInfo->base.cond.endVersion, pTSInfo->base.cond.twindows.skey, pTSInfo->base.cond.twindows.ekey, id); + qDebug("stream scan step1, verRange:%" PRId64 "-%" PRId64 " window:%" PRId64 "-%" PRId64 ", %s", + pTSInfo->base.cond.startVersion, pTSInfo->base.cond.endVersion, pTSInfo->base.cond.twindows.skey, + pTSInfo->base.cond.twindows.ekey, id); pStreamInfo->recoverStep = STREAM_RECOVER_STEP__SCAN1; pStreamInfo->recoverScanFinished = false; } else { @@ -2652,7 +2961,8 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { switch (pInfo->scanMode) { case STREAM_SCAN_FROM_RES: { pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; - printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", + GET_TASKID(pTaskInfo)); return pInfo->pRecoverRes; } break; default: @@ -2661,20 +2971,25 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { pInfo->pRecoverRes = doTableScan(pInfo->pTableScanOp); if (pInfo->pRecoverRes != NULL) { - calBlockTbName(pInfo, pInfo->pRecoverRes, 0); + code = calBlockTbName(pInfo, pInfo->pRecoverRes, 0); + QUERY_CHECK_CODE(code, lino, _end); if (!pInfo->igCheckUpdate && pInfo->pUpdateInfo) { TSKEY maxTs = INT64_MIN; - pAPI->stateStore.updateInfoFillBlockData(pInfo->pUpdateInfo, pInfo->pRecoverRes, pInfo->primaryTsIndex, pInfo->primaryKeyIndex, &maxTs); + code = pAPI->stateStore.updateInfoFillBlockData(pInfo->pUpdateInfo, pInfo->pRecoverRes, pInfo->primaryTsIndex, + pInfo->primaryKeyIndex, &maxTs); + QUERY_CHECK_CODE(code, lino, _end); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, maxTs); } if (pInfo->pCreateTbRes->info.rows > 0) { pInfo->scanMode = STREAM_SCAN_FROM_RES; - printSpecDataBlock(pInfo->pCreateTbRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pInfo->pCreateTbRes, getStreamOpName(pOperator->operatorType), "recover", + GET_TASKID(pTaskInfo)); return pInfo->pCreateTbRes; } qDebug("stream recover scan get block, rows %" PRId64, pInfo->pRecoverRes->info.rows); - printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pInfo->pRecoverRes, getStreamOpName(pOperator->operatorType), "recover", + GET_TASKID(pTaskInfo)); return pInfo->pRecoverRes; } pStreamInfo->recoverStep = STREAM_RECOVER_STEP__NONE; @@ -2699,8 +3014,8 @@ FETCH_NEXT_BLOCK: return NULL; } - int32_t current = pInfo->validBlockIndex++; - qDebug("process %d/%d input data blocks, %s", current, (int32_t) total, id); + int32_t current = pInfo->validBlockIndex++; + qDebug("process %d/%d input data blocks, %s", current, (int32_t)total, id); SPackedData* pPacked = taosArrayGet(pInfo->pBlockLists, current); SSDataBlock* pBlock = pPacked->pDataBlock; @@ -2720,7 +3035,8 @@ FETCH_NEXT_BLOCK: pInfo->pUpdateInfo->maxDataVersion = TMAX(pInfo->pUpdateInfo->maxDataVersion, pBlock->info.version); } - blockDataUpdateTsWindow(pBlock, 0); + code = blockDataUpdateTsWindow(pBlock, 0); + QUERY_CHECK_CODE(code, lino, _end); switch (pBlock->info.type) { case STREAM_NORMAL: case STREAM_GET_ALL: @@ -2730,9 +3046,10 @@ FETCH_NEXT_BLOCK: case STREAM_RETRIEVE: { pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RETRIEVE; - copyDataBlock(pInfo->pUpdateRes, pBlock); + code = copyDataBlock(pInfo->pUpdateRes, pBlock); + QUERY_CHECK_CODE(code, lino, _end); pInfo->updateResIndex = 0; - prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex); + prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pAPI->stateStore.updateInfoAddCloseWindowSBF(pInfo->pUpdateInfo); } break; case STREAM_DELETE_DATA: { @@ -2740,14 +3057,17 @@ FETCH_NEXT_BLOCK: SSDataBlock* pDelBlock = NULL; if (pInfo->tqReader) { pDelBlock = createSpecialDataBlock(STREAM_DELETE_DATA); - filterDelBlockByUid(pDelBlock, pBlock, pInfo); + code = filterDelBlockByUid(pDelBlock, pBlock, pInfo); + QUERY_CHECK_CODE(code, lino, _end); } else { pDelBlock = pBlock; } - setBlockGroupIdByUid(pInfo, pDelBlock); + code = setBlockGroupIdByUid(pInfo, pDelBlock); + QUERY_CHECK_CODE(code, lino, _end); rebuildDeleteBlockData(pDelBlock, &pStreamInfo->fillHistoryWindow, id); - printSpecDataBlock(pDelBlock, getStreamOpName(pOperator->operatorType), "delete recv filtered", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pDelBlock, getStreamOpName(pOperator->operatorType), "delete recv filtered", + GET_TASKID(pTaskInfo)); if (pDelBlock->info.rows == 0) { if (pInfo->tqReader) { blockDataDestroy(pDelBlock); @@ -2756,7 +3076,8 @@ FETCH_NEXT_BLOCK: } if (!isStreamWindow(pInfo)) { - generateDeleteResultBlock(pInfo, pDelBlock, pInfo->pDeleteDataRes); + code = generateDeleteResultBlock(pInfo, pDelBlock, pInfo->pDeleteDataRes); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->partitionSup.needCalc) { pInfo->pDeleteDataRes->info.type = STREAM_DELETE_DATA; } else { @@ -2765,7 +3086,8 @@ FETCH_NEXT_BLOCK: blockDataDestroy(pDelBlock); if (pInfo->pDeleteDataRes->info.rows > 0) { - printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", + GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pInfo->pDeleteDataRes->info.type); return pInfo->pDeleteDataRes; } else { @@ -2774,16 +3096,19 @@ FETCH_NEXT_BLOCK: } else { pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; pInfo->updateResIndex = 0; - generateScanRange(pInfo, pDelBlock, pInfo->pUpdateRes, STREAM_DELETE_DATA); - prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex); - copyDataBlock(pInfo->pDeleteDataRes, pInfo->pUpdateRes); + code = generateScanRange(pInfo, pDelBlock, pInfo->pUpdateRes, STREAM_DELETE_DATA); + QUERY_CHECK_CODE(code, lino, _end); + prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); + code = copyDataBlock(pInfo->pDeleteDataRes, pInfo->pUpdateRes); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pDeleteDataRes->info.type = STREAM_DELETE_DATA; if (pInfo->tqReader) { blockDataDestroy(pDelBlock); } if (pInfo->pDeleteDataRes->info.rows > 0) { pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE; - printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", GET_TASKID(pTaskInfo)); + printSpecDataBlock(pInfo->pDeleteDataRes, getStreamOpName(pOperator->operatorType), "delete result", + GET_TASKID(pTaskInfo)); setStreamOperatorState(&pInfo->basic, pInfo->pDeleteDataRes->info.type); return pInfo->pDeleteDataRes; } else { @@ -2805,41 +3130,51 @@ FETCH_NEXT_BLOCK: switch (pInfo->scanMode) { case STREAM_SCAN_FROM_RES: { pInfo->scanMode = STREAM_SCAN_FROM_READERHANDLE; - doCheckUpdate(pInfo, pInfo->pRes->info.window.ekey, pInfo->pRes); + code = doCheckUpdate(pInfo, pInfo->pRes->info.window.ekey, pInfo->pRes); + QUERY_CHECK_CODE(code, lino, _end); setStreamOperatorState(&pInfo->basic, pInfo->pRes->info.type); - doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pRes->info.dataLoad = 1; - blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + code = blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pRes->info.rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); return pInfo->pRes; } } break; case STREAM_SCAN_FROM_DELETE_DATA: { - generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes, STREAM_PARTITION_DELETE_DATA); - prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex); + code = generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes, STREAM_PARTITION_DELETE_DATA); + QUERY_CHECK_CODE(code, lino, _end); + prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE; - copyDataBlock(pInfo->pDeleteDataRes, pInfo->pUpdateRes); + code = copyDataBlock(pInfo->pDeleteDataRes, pInfo->pUpdateRes); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pDeleteDataRes->info.type = STREAM_DELETE_DATA; return pInfo->pDeleteDataRes; } break; case STREAM_SCAN_FROM_UPDATERES: { - generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes, STREAM_CLEAR); - prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex); + code = generateScanRange(pInfo, pInfo->pUpdateDataRes, pInfo->pUpdateRes, STREAM_CLEAR); + QUERY_CHECK_CODE(code, lino, _end); + prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE; return pInfo->pUpdateRes; } break; case STREAM_SCAN_FROM_DATAREADER_RANGE: case STREAM_SCAN_FROM_DATAREADER_RETRIEVE: { - SSDataBlock* pSDB = doRangeScan(pInfo, pInfo->pUpdateRes, pInfo->primaryTsIndex, &pInfo->updateResIndex); + SSDataBlock* pSDB = NULL; + code = doRangeScan(pInfo, pInfo->pUpdateRes, pInfo->primaryTsIndex, &pInfo->updateResIndex, &pSDB); + QUERY_CHECK_CODE(code, lino, _end); if (pSDB) { STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info; pSDB->info.type = pInfo->scanMode == STREAM_SCAN_FROM_DATAREADER_RANGE ? STREAM_NORMAL : STREAM_PULL_DATA; if (!pInfo->igCheckUpdate && pInfo->pUpdateInfo) { - checkUpdateData(pInfo, true, pSDB, false); + code = checkUpdateData(pInfo, true, pSDB, false); + QUERY_CHECK_CODE(code, lino, _end); } printSpecDataBlock(pSDB, getStreamOpName(pOperator->operatorType), "update", GET_TASKID(pTaskInfo)); - calBlockTbName(pInfo, pSDB, 0); + code = calBlockTbName(pInfo, pSDB, 0); + QUERY_CHECK_CODE(code, lino, _end); return pSDB; } blockDataCleanup(pInfo->pUpdateDataRes); @@ -2853,9 +3188,10 @@ FETCH_NEXT_BLOCK: pInfo->scanMode = STREAM_SCAN_FROM_DATAREADER_RANGE; pInfo->updateResIndex = 0; SStreamAggSupporter* pSup = pInfo->windowSup.pStreamAggSup; - copyDataBlock(pInfo->pUpdateRes, pSup->pScanBlock); + code = copyDataBlock(pInfo->pUpdateRes, pSup->pScanBlock); + QUERY_CHECK_CODE(code, lino, _end); blockDataCleanup(pSup->pScanBlock); - prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex); + prepareRangeScan(pInfo, pInfo->pUpdateRes, &pInfo->updateResIndex, NULL); pInfo->pUpdateRes->info.type = STREAM_DELETE_DATA; printSpecDataBlock(pInfo->pUpdateRes, getStreamOpName(pOperator->operatorType), "rebuild", GET_TASKID(pTaskInfo)); return pInfo->pUpdateRes; @@ -2879,8 +3215,10 @@ FETCH_NEXT_BLOCK: SPackedData* pSubmit = taosArrayGet(pInfo->pBlockLists, current); qDebug("set %d/%d as the input submit block, %s", current + 1, totalBlocks, id); - if (pAPI->tqReaderFn.tqReaderSetSubmitMsg(pInfo->tqReader, pSubmit->msgStr, pSubmit->msgLen, pSubmit->ver) < 0) { - qError("submit msg messed up when initializing stream submit block %p, current %d/%d, %s", pSubmit, current, totalBlocks, id); + if (pAPI->tqReaderFn.tqReaderSetSubmitMsg(pInfo->tqReader, pSubmit->msgStr, pSubmit->msgLen, pSubmit->ver) < + 0) { + qError("submit msg messed up when initializing stream submit block %p, current %d/%d, %s", pSubmit, current, + totalBlocks, id); continue; } } @@ -2890,7 +3228,7 @@ FETCH_NEXT_BLOCK: while (pAPI->tqReaderFn.tqNextBlockImpl(pInfo->tqReader, id)) { SSDataBlock* pRes = NULL; - int32_t code = pAPI->tqReaderFn.tqRetrieveBlock(pInfo->tqReader, &pRes, id); + code = pAPI->tqReaderFn.tqRetrieveBlock(pInfo->tqReader, &pRes, id); qDebug("retrieve data from submit completed code:%s rows:%" PRId64 " %s", tstrerror(code), pRes->info.rows, id); if (code != TSDB_CODE_SUCCESS || pRes->info.rows == 0) { @@ -2898,21 +3236,27 @@ FETCH_NEXT_BLOCK: continue; } - setBlockIntoRes(pInfo, pRes, &pStreamInfo->fillHistoryWindow, false); + code = setBlockIntoRes(pInfo, pRes, &pStreamInfo->fillHistoryWindow, false); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pRes->info.rows == 0) { continue; } if (pInfo->pCreateTbRes->info.rows > 0) { pInfo->scanMode = STREAM_SCAN_FROM_RES; - qDebug("create table res exists, rows:%"PRId64" return from stream scan, %s", pInfo->pCreateTbRes->info.rows, id); + qDebug("create table res exists, rows:%" PRId64 " return from stream scan, %s", + pInfo->pCreateTbRes->info.rows, id); return pInfo->pCreateTbRes; } - doCheckUpdate(pInfo, pBlockInfo->window.ekey, pInfo->pRes); + code = doCheckUpdate(pInfo, pBlockInfo->window.ekey, pInfo->pRes); + QUERY_CHECK_CODE(code, lino, _end); setStreamOperatorState(&pInfo->basic, pInfo->pRes->info.type); - doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); - blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); + + code = blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex); + QUERY_CHECK_CODE(code, lino, _end); int64_t numOfUpdateRes = pInfo->pUpdateDataRes->info.rows; qDebug("%s %" PRId64 " rows in datablock, update res:%" PRId64, id, pBlockInfo->rows, numOfUpdateRes); @@ -2932,7 +3276,7 @@ FETCH_NEXT_BLOCK: pInfo->numOfExec++; pOperator->resultInfo.totalRows += pBlockInfo->rows; - qDebug("stream scan completed, and return source rows:%" PRId64", %s", pBlockInfo->rows, id); + qDebug("stream scan completed, and return source rows:%" PRId64 ", %s", pBlockInfo->rows, id); if (pBlockInfo->rows > 0) { printDataBlock(pInfo->pRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); return pInfo->pRes; @@ -2949,8 +3293,8 @@ FETCH_NEXT_BLOCK: return NULL; } - int32_t current = pInfo->validBlockIndex++; - qDebug("process %d/%d input data blocks, %s", current, (int32_t) total, id); + int32_t current = pInfo->validBlockIndex++; + qDebug("process %d/%d input data blocks, %s", current, (int32_t)total, id); SPackedData* pData = taosArrayGet(pInfo->pBlockLists, current); SSDataBlock* pBlock = taosArrayGet(pData->pDataBlock, 0); @@ -2962,28 +3306,42 @@ FETCH_NEXT_BLOCK: return pInfo->pCheckpointRes; } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } return NULL; } -static SArray* extractTableIdList(const STableListInfo* pTableListInfo) { +static int32_t extractTableIdList(const STableListInfo* pTableListInfo, SArray** ppArrayRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SArray* tableIdList = taosArrayInit(4, sizeof(uint64_t)); // Transfer the Array of STableKeyInfo into uid list. size_t size = tableListGetSize(pTableListInfo); for (int32_t i = 0; i < size; ++i) { STableKeyInfo* pkeyInfo = tableListGetInfo(pTableListInfo, i); - taosArrayPush(tableIdList, &pkeyInfo->uid); + void* tmp = taosArrayPush(tableIdList, &pkeyInfo->uid); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } - return tableIdList; + (*ppArrayRes) = tableIdList; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; SStreamRawScanInfo* pInfo = pOperator->info; - int32_t code = TSDB_CODE_SUCCESS; pTaskInfo->streamInfo.btMetaRsp.batchMetaReq = NULL; // use batchMetaReq != NULL to judge if data is meta pTaskInfo->streamInfo.btMetaRsp.batchMetaLen = NULL; @@ -3028,16 +3386,17 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { tqOffsetResetToData(&offset, mtInfo.uid, INT64_MIN, val); qDebug("tmqsnap change get data uid:%" PRId64 "", mtInfo.uid); } - qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); + code = qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); + QUERY_CHECK_CODE(code, lino, _end); tDeleteSchemaWrapper(mtInfo.schema); return NULL; } else if (pTaskInfo->streamInfo.currentOffset.type == TMQ_OFFSET__SNAPSHOT_META) { SSnapContext* sContext = pInfo->sContext; - for(int32_t i = 0; i < tmqRowSize; i++) { - void* data = NULL; - int32_t dataLen = 0; - int16_t type = 0; - int64_t uid = 0; + for (int32_t i = 0; i < tmqRowSize; i++) { + void* data = NULL; + int32_t dataLen = 0; + int16_t type = 0; + int64_t uid = 0; if (pAPI->snapshotFn.getTableInfoFromSnapshot(sContext, &data, &dataLen, &type, &uid) < 0) { qError("tmqsnap getTableInfoFromSnapshot error"); taosMemoryFreeClear(data); @@ -3046,9 +3405,10 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { if (!sContext->queryMeta) { // change to get data next poll request STqOffsetVal offset = {0}; - SValue val = {0}; + SValue val = {0}; tqOffsetResetToData(&offset, 0, INT64_MIN, val); - qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); + code = qStreamPrepareScan(pTaskInfo, &offset, pInfo->sContext->subType); + QUERY_CHECK_CODE(code, lino, _end); break; } else { tqOffsetResetToMeta(&pTaskInfo->streamInfo.currentOffset, uid); @@ -3058,7 +3418,10 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { tmpMetaRsp.metaRsp = data; if (!pTaskInfo->streamInfo.btMetaRsp.batchMetaReq) { pTaskInfo->streamInfo.btMetaRsp.batchMetaReq = taosArrayInit(4, POINTER_BYTES); + QUERY_CHECK_NULL(pTaskInfo->streamInfo.btMetaRsp.batchMetaReq, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + pTaskInfo->streamInfo.btMetaRsp.batchMetaLen = taosArrayInit(4, sizeof(int32_t)); + QUERY_CHECK_NULL(pTaskInfo->streamInfo.btMetaRsp.batchMetaLen, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } int32_t code = TSDB_CODE_SUCCESS; uint32_t len = 0; @@ -3069,9 +3432,9 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { break; } - int32_t tLen = sizeof(SMqRspHead) + len; - void* tBuf = taosMemoryCalloc(1, tLen); - void* metaBuff = POINTER_SHIFT(tBuf, sizeof(SMqRspHead)); + int32_t tLen = sizeof(SMqRspHead) + len; + void* tBuf = taosMemoryCalloc(1, tLen); + void* metaBuff = POINTER_SHIFT(tBuf, sizeof(SMqRspHead)); SEncoder encoder = {0}; tEncoderInit(&encoder, metaBuff, len); code = tEncodeMqMetaRsp(&encoder, &tmpMetaRsp); @@ -3083,20 +3446,29 @@ static SSDataBlock* doRawScan(SOperatorInfo* pOperator) { break; } taosMemoryFreeClear(data); - taosArrayPush(pTaskInfo->streamInfo.btMetaRsp.batchMetaReq, &tBuf); - taosArrayPush(pTaskInfo->streamInfo.btMetaRsp.batchMetaLen, &tLen); + void* tmp = taosArrayPush(pTaskInfo->streamInfo.btMetaRsp.batchMetaReq, &tBuf); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + + tmp = taosArrayPush(pTaskInfo->streamInfo.btMetaRsp.batchMetaLen, &tLen); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } return NULL; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return NULL; } static void destroyRawScanOperatorInfo(void* param) { SStreamRawScanInfo* pRawScan = (SStreamRawScanInfo*)param; pRawScan->pAPI->tsdReader.tsdReaderClose(pRawScan->dataReader); - pRawScan->pAPI->snapshotFn.destroySnapshot(pRawScan->sContext); - tableListDestroy(pRawScan->pTableListInfo); + (void)pRawScan->pAPI->snapshotFn.destroySnapshot(pRawScan->sContext); + (void)tableListDestroy(pRawScan->pTableListInfo); taosMemoryFree(pRawScan); } @@ -3126,7 +3498,8 @@ SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, SExecTaskInfo* pT setOperatorInfo(pOperator, "RawScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo); - pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, destroyRawScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + pOperator->fpSet = createOperatorFpSet(NULL, doRawScan, NULL, destroyRawScanOperatorInfo, optrDefaultBufFn, NULL, + optrDefaultGetNextExtFn, NULL); return pOperator; _end: @@ -3170,10 +3543,10 @@ static void destroyStreamScanOperatorInfo(void* param) { } void streamScanReleaseState(SOperatorInfo* pOperator) { - int32_t code = TSDB_CODE_SUCCESS; - int32_t lino = 0; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SStreamScanInfo* pInfo = pOperator->info; - void* pBuff = NULL; + void* pBuff = NULL; if (!pInfo->pState) { return; } @@ -3182,19 +3555,20 @@ void streamScanReleaseState(SOperatorInfo* pOperator) { } int32_t len = 0; code = pInfo->stateStore.updateInfoSerialize(NULL, 0, pInfo->pUpdateInfo, &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pBuff = taosMemoryCalloc(1, len); if (!pBuff) { code = TSDB_CODE_OUT_OF_MEMORY; -TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t tmp = 0; code = pInfo->stateStore.updateInfoSerialize(pBuff, len, pInfo->pUpdateInfo, &tmp); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); - pInfo->stateStore.streamStateSaveInfo(pInfo->pState, STREAM_SCAN_OP_STATE_NAME, strlen(STREAM_SCAN_OP_STATE_NAME), pBuff, len); + pInfo->stateStore.streamStateSaveInfo(pInfo->pState, STREAM_SCAN_OP_STATE_NAME, strlen(STREAM_SCAN_OP_STATE_NAME), + pBuff, len); _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); @@ -3213,12 +3587,12 @@ void streamScanReloadState(SOperatorInfo* pOperator) { int32_t len = 0; code = pInfo->stateStore.streamStateGetInfo(pInfo->pState, STREAM_SCAN_OP_STATE_NAME, strlen(STREAM_SCAN_OP_STATE_NAME), &pBuff, &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SUpdateInfo* pUpInfo = taosMemoryCalloc(1, sizeof(SUpdateInfo)); if (!pUpInfo) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t winCode = pInfo->stateStore.updateInfoDeserialize(pBuff, len, pUpInfo); @@ -3229,7 +3603,8 @@ void streamScanReloadState(SOperatorInfo* pOperator) { pInfo->pUpdateInfo = pUpInfo; } else { pInfo->stateStore.windowSBfDelete(pInfo->pUpdateInfo, 1); - pInfo->stateStore.windowSBfAdd(pInfo->pUpdateInfo, 1); + code = pInfo->stateStore.windowSBfAdd(pInfo->pUpdateInfo, 1); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(pInfo->pUpdateInfo->minTS > pUpInfo->minTS); pInfo->pUpdateInfo->maxDataVersion = TMAX(pInfo->pUpdateInfo->maxDataVersion, pUpInfo->maxDataVersion); SHashObj* curMap = pInfo->pUpdateInfo->pMap; @@ -3237,7 +3612,9 @@ void streamScanReloadState(SOperatorInfo* pOperator) { while (pIte != NULL) { size_t keySize = 0; int64_t* pUid = taosHashGetKey(pIte, &keySize); - taosHashPut(pUpInfo->pMap, pUid, sizeof(int64_t), pIte, sizeof(TSKEY)); + code = taosHashPut(pUpInfo->pMap, pUid, sizeof(int64_t), pIte, sizeof(TSKEY)); + QUERY_CHECK_CODE(code, lino, _end); + pIte = taosHashIterate(curMap, pIte); } taosHashCleanup(curMap); @@ -3255,25 +3632,36 @@ _end: } } -void addPrimaryKeyCol(SSDataBlock* pBlock, uint8_t type, int32_t bytes) { +int32_t addPrimaryKeyCol(SSDataBlock* pBlock, uint8_t type, int32_t bytes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; pBlock->info.rowSize += bytes; SColumnInfoData infoData = {0}; infoData.info.type = type; infoData.info.bytes = bytes; - taosArrayPush(pBlock->pDataBlock, &infoData); + void* tmp = taosArrayPush(pBlock->pDataBlock, &infoData); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, STableListInfo* pTableListInfo, SExecTaskInfo* pTaskInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SArray* pColIds = NULL; SStreamScanInfo* pInfo = taosMemoryCalloc(1, sizeof(SStreamScanInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); SStorageAPI* pAPI = &pTaskInfo->storageAPI; - const char* idstr = pTaskInfo->id.str; + const char* idstr = pTaskInfo->id.str; if (pInfo == NULL || pOperator == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } @@ -3284,10 +3672,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->pGroupTags = pTableScanNode->pGroupTags; int32_t numOfCols = 0; - int32_t code = - extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + code = extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); if (code != TSDB_CODE_SUCCESS) { - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } @@ -3299,7 +3686,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys SColMatchItem* id = taosArrayGet(pInfo->matchInfo.pList, i); int16_t colId = id->colId; - taosArrayPush(pColIds, &colId); + void* tmp = taosArrayPush(pColIds, &colId); + QUERY_CHECK_NULL(tmp, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + if (id->colId == PRIMARYKEY_TIMESTAMP_COL_ID) { pInfo->primaryTsIndex = id->dstSlotId; } @@ -3314,14 +3703,14 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys SExprInfo* pSubTableExpr = taosMemoryCalloc(1, sizeof(SExprInfo)); if (pSubTableExpr == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } pInfo->tbnameCalSup.pExprInfo = pSubTableExpr; createExprFromOneNode(pSubTableExpr, pTableScanNode->pSubtable, 0); if (initExprSupp(&pInfo->tbnameCalSup, pSubTableExpr, 1, &pTaskInfo->storageAPI.functionStore) != 0) { - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } } @@ -3331,12 +3720,12 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys SExprInfo* pTagExpr = createExpr(pTableScanNode->pTags, &numOfTags); if (pTagExpr == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } if (initExprSupp(&pInfo->tagCalSup, pTagExpr, numOfTags, &pTaskInfo->storageAPI.functionStore) != 0) { terrno = TSDB_CODE_OUT_OF_MEMORY; - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } } @@ -3344,12 +3733,12 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->pBlockLists = taosArrayInit(4, sizeof(SPackedData)); if (pInfo->pBlockLists == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); goto _error; } if (pHandle->vnode) { - SOperatorInfo* pTableScanOp = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo); + SOperatorInfo* pTableScanOp = createTableScanOperatorInfo(pTableScanNode, pHandle, pTableListInfo, pTaskInfo); if (pTableScanOp == NULL) { qError("createTableScanOperatorInfo error, errorcode: %d", pTaskInfo->code); goto _error; @@ -3361,7 +3750,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys STableKeyInfo* pList = NULL; int32_t num = 0; - tableListGetGroupList(pTableListInfo, 0, &pList, &num); + code = tableListGetGroupList(pTableListInfo, 0, &pList, &num); + QUERY_CHECK_CODE(code, lino, _error); if (pHandle->initTableReader) { pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER; @@ -3380,17 +3770,22 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->pUpdateInfo = NULL; pInfo->pTableScanOp = pTableScanOp; if (pInfo->pTableScanOp->pTaskInfo->streamInfo.pState) { - pAPI->stateStore.streamStateSetNumber(pInfo->pTableScanOp->pTaskInfo->streamInfo.pState, -1, pInfo->primaryTsIndex); + pAPI->stateStore.streamStateSetNumber(pInfo->pTableScanOp->pTaskInfo->streamInfo.pState, -1, + pInfo->primaryTsIndex); } pInfo->readHandle = *pHandle; pTaskInfo->streamInfo.snapshotVer = pHandle->version; pInfo->pCreateTbRes = buildCreateTableBlock(&pInfo->tbnameCalSup, &pInfo->tagCalSup); - blockDataEnsureCapacity(pInfo->pCreateTbRes, 8); + code = blockDataEnsureCapacity(pInfo->pCreateTbRes, 8); + QUERY_CHECK_CODE(code, lino, _error); // set the extract column id to streamHandle pAPI->tqReaderFn.tqReaderSetColIdList(pInfo->tqReader, pColIds); - SArray* tableIdList = extractTableIdList(((STableScanInfo*)(pInfo->pTableScanOp->info))->base.pTableListInfo); + 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); @@ -3401,7 +3796,7 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys memcpy(&pTaskInfo->streamInfo.tableCond, &pTSInfo->base.cond, sizeof(SQueryTableDataCond)); } else { taosArrayDestroy(pColIds); - tableListDestroy(pTableListInfo); + (void)tableListDestroy(pTableListInfo); pColIds = NULL; } @@ -3426,7 +3821,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->updateWin = (STimeWindow){.skey = INT64_MAX, .ekey = INT64_MAX}; pInfo->pUpdateDataRes = createSpecialDataBlock(STREAM_CLEAR); if (hasPrimaryKeyCol(pInfo)) { - addPrimaryKeyCol(pInfo->pUpdateDataRes, pkType.type, pkType.bytes); + code = addPrimaryKeyCol(pInfo->pUpdateDataRes, pkType.type, pkType.bytes); + QUERY_CHECK_CODE(code, lino, _error); + pInfo->pkColType = pkType.type; pInfo->pkColLen = pkType.bytes; } @@ -3444,7 +3841,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys if (pTaskInfo->streamInfo.pState) { void* buff = NULL; int32_t len = 0; - int32_t res = pAPI->stateStore.streamStateGetInfo(pTaskInfo->streamInfo.pState, STREAM_SCAN_OP_CHECKPOINT_NAME, strlen(STREAM_SCAN_OP_CHECKPOINT_NAME), &buff, &len); + int32_t res = pAPI->stateStore.streamStateGetInfo(pTaskInfo->streamInfo.pState, STREAM_SCAN_OP_CHECKPOINT_NAME, + strlen(STREAM_SCAN_OP_CHECKPOINT_NAME), &buff, &len); if (res == TSDB_CODE_SUCCESS) { streamScanOperatorDecode(buff, len, pInfo); taosMemoryFree(buff); @@ -3456,8 +3854,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock); __optr_fn_t nextFn = (pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM) ? doStreamScan : doQueueScan; - pOperator->fpSet = - createOperatorFpSet(optrDummyOpenFn, nextFn, NULL, destroyStreamScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, nextFn, NULL, destroyStreamScanOperatorInfo, optrDefaultBufFn, + NULL, optrDefaultGetNextExtFn, NULL); setOperatorStreamStateFn(pOperator, streamScanReleaseState, streamScanReloadState); return pOperator; @@ -3475,13 +3873,16 @@ _error: return NULL; } -static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, int32_t count, SMetaReader* mr, SStorageAPI* pAPI) { +static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, int32_t count, SMetaReader* mr, + SStorageAPI* pAPI) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - STagScanInfo* pInfo = pOperator->info; - SExprInfo* pExprInfo = &pOperator->exprSupp.pExprInfo[0]; + STagScanInfo* pInfo = pOperator->info; + SExprInfo* pExprInfo = &pOperator->exprSupp.pExprInfo[0]; STableKeyInfo* item = tableListGetInfo(pInfo->pTableListInfo, pInfo->curPos); - int32_t code = pAPI->metaReaderFn.getTableEntryByUid(mr, item->uid); + code = pAPI->metaReaderFn.getTableEntryByUid(mr, item->uid); tDecoderClear(&(*mr).coder); if (code != TSDB_CODE_SUCCESS) { qError("failed to get table meta, uid:0x%" PRIx64 ", code:%s, %s", item->uid, tstrerror(terrno), @@ -3497,11 +3898,14 @@ static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, // refactor later if (FUNCTION_TYPE_TBNAME == pExprInfo[j].pExpr->_function.functionType) { STR_TO_VARSTR(str, (*mr).me.name); - colDataSetVal(pDst, (count), str, false); + code = colDataSetVal(pDst, (count), str, false); + QUERY_CHECK_CODE(code, lino, _end); } else if (FUNCTION_TYPE_TBUID == pExprInfo[j].pExpr->_function.functionType) { - colDataSetVal(pDst, (count), (char*)&(*mr).me.uid, false); + code = colDataSetVal(pDst, (count), (char*)&(*mr).me.uid, false); + QUERY_CHECK_CODE(code, lino, _end); } else if (FUNCTION_TYPE_VGID == pExprInfo[j].pExpr->_function.functionType) { - colDataSetVal(pDst, (count), (char*)&pTaskInfo->id.vgId, false); + code = colDataSetVal(pDst, (count), (char*)&pTaskInfo->id.vgId, false); + QUERY_CHECK_CODE(code, lino, _end); } else { // it is a tag value STagVal val = {0}; val.cid = pExprInfo[j].base.pParam[0].pCol->colId; @@ -3513,8 +3917,9 @@ static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, } else { data = (char*)p; } - colDataSetVal(pDst, (count), data, - (data == NULL) || (pDst->info.type == TSDB_DATA_TYPE_JSON && tTagIsJsonNull(data))); + code = colDataSetVal(pDst, (count), data, + (data == NULL) || (pDst->info.type == TSDB_DATA_TYPE_JSON && tTagIsJsonNull(data))); + QUERY_CHECK_CODE(code, lino, _end); if (pDst->info.type != TSDB_DATA_TYPE_JSON && p != NULL && IS_VAR_DATA_TYPE(((const STagVal*)p)->type) && data != NULL) { @@ -3522,6 +3927,12 @@ static void doTagScanOneTable(SOperatorInfo* pOperator, const SSDataBlock* pRes, } } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } } static void tagScanFreeUidTag(void* p) { @@ -3556,6 +3967,8 @@ static int32_t tagScanCreateResultData(SDataType* pType, int32_t numOfRows, SSca } static EDealRes tagScanRewriteTagColumn(SNode** pNode, void* pContext) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SColumnNode* pSColumnNode = NULL; if (QUERY_NODE_COLUMN == nodeType((*pNode))) { pSColumnNode = *(SColumnNode**)pNode; @@ -3580,76 +3993,92 @@ static EDealRes tagScanRewriteTagColumn(SNode** pNode, void* pContext) { } STagScanFilterContext* pCtx = (STagScanFilterContext*)pContext; - void* data = taosHashGet(pCtx->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId)); + void* data = taosHashGet(pCtx->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId)); if (!data) { - taosHashPut(pCtx->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); + code = taosHashPut(pCtx->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode))); + QUERY_CHECK_CODE(code, lino, _end); pSColumnNode->slotId = pCtx->index++; SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes}; - taosArrayPush(pCtx->cInfoList, &cInfo); + void* tmp = taosArrayPush(pCtx->cInfoList, &cInfo); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else { SColumnNode* col = *(SColumnNode**)data; pSColumnNode->slotId = col->slotId; } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return DEAL_RES_ERROR; + } return DEAL_RES_CONTINUE; } - -static int32_t tagScanFilterByTagCond(SArray* aUidTags, SNode* pTagCond, SArray* aFilterIdxs, void* pVnode, SStorageAPI* pAPI, STagScanInfo* pInfo) { - int32_t code = 0; +static int32_t tagScanFilterByTagCond(SArray* aUidTags, SNode* pTagCond, SArray* aFilterIdxs, void* pVnode, + SStorageAPI* pAPI, STagScanInfo* pInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; int32_t numOfTables = taosArrayGetSize(aUidTags); SSDataBlock* pResBlock = createTagValBlockForFilter(pInfo->filterCtx.cInfoList, numOfTables, aUidTags, pVnode, pAPI); + QUERY_CHECK_NULL(pResBlock, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); SArray* pBlockList = taosArrayInit(1, POINTER_BYTES); - taosArrayPush(pBlockList, &pResBlock); + QUERY_CHECK_NULL(pBlockList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + + void* tmp = taosArrayPush(pBlockList, &pResBlock); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + SDataType type = {.type = TSDB_DATA_TYPE_BOOL, .bytes = sizeof(bool)}; SScalarParam output = {0}; code = tagScanCreateResultData(&type, numOfTables, &output); - if (TSDB_CODE_SUCCESS != code) { - blockDataDestroy(pResBlock); - taosArrayDestroy(pBlockList); - return code; - } + QUERY_CHECK_CODE(code, lino, _end); code = scalarCalculate(pTagCond, pBlockList, &output); - if (TSDB_CODE_SUCCESS != code) { - blockDataDestroy(pResBlock); - taosArrayDestroy(pBlockList); - return code; - } + QUERY_CHECK_CODE(code, lino, _end); bool* result = (bool*)output.columnData->pData; - for (int32_t i = 0 ; i < numOfTables; ++i) { + for (int32_t i = 0; i < numOfTables; ++i) { if (result[i]) { - taosArrayPush(aFilterIdxs, &i); + void* tmp = taosArrayPush(aFilterIdxs, &i); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } colDataDestroy(output.columnData); taosMemoryFreeClear(output.columnData); +_end: blockDataDestroy(pResBlock); taosArrayDestroy(pBlockList); - - return TSDB_CODE_SUCCESS; + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static void tagScanFillOneCellWithTag(SOperatorInfo* pOperator, const STUidTagInfo* pUidTagInfo, SExprInfo* pExprInfo, SColumnInfoData* pColInfo, int rowIndex, const SStorageAPI* pAPI, void* pVnode) { +static int32_t tagScanFillOneCellWithTag(SOperatorInfo* pOperator, const STUidTagInfo* pUidTagInfo, + SExprInfo* pExprInfo, SColumnInfoData* pColInfo, int rowIndex, + const SStorageAPI* pAPI, void* pVnode) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (QUERY_NODE_FUNCTION == pExprInfo->pExpr->nodeType) { if (FUNCTION_TYPE_TBNAME == pExprInfo->pExpr->_function.functionType) { // tbname char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0}; STR_TO_VARSTR(str, "ctbidx"); - colDataSetVal(pColInfo, rowIndex, str, false); + code = colDataSetVal(pColInfo, rowIndex, str, false); + QUERY_CHECK_CODE(code, lino, _end); } else if (FUNCTION_TYPE_TBUID == pExprInfo->pExpr->_function.functionType) { - colDataSetVal(pColInfo, rowIndex, (char*)&pUidTagInfo->uid, false); + code = colDataSetVal(pColInfo, rowIndex, (char*)&pUidTagInfo->uid, false); + QUERY_CHECK_CODE(code, lino, _end); } else if (FUNCTION_TYPE_VGID == pExprInfo->pExpr->_function.functionType) { - colDataSetVal(pColInfo, rowIndex, (char*)&pOperator->pTaskInfo->id.vgId, false); - } + code = colDataSetVal(pColInfo, rowIndex, (char*)&pOperator->pTaskInfo->id.vgId, false); + QUERY_CHECK_CODE(code, lino, _end); + } } else { STagVal tagVal = {0}; tagVal.cid = pExprInfo->base.pParam[0].pCol->colId; @@ -3661,32 +4090,45 @@ static void tagScanFillOneCellWithTag(SOperatorInfo* pOperator, const STUidTagIn if (p == NULL || (pColInfo->info.type == TSDB_DATA_TYPE_JSON && ((STag*)p)->nTag == 0)) { colDataSetNULL(pColInfo, rowIndex); } else if (pColInfo->info.type == TSDB_DATA_TYPE_JSON) { - colDataSetVal(pColInfo, rowIndex, p, false); + code = colDataSetVal(pColInfo, rowIndex, p, false); + QUERY_CHECK_CODE(code, lino, _end); } else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) { char* tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE + 1); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + varDataSetLen(tmp, tagVal.nData); memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData); - colDataSetVal(pColInfo, rowIndex, tmp, false); + code = colDataSetVal(pColInfo, rowIndex, tmp, false); taosMemoryFree(tmp); + QUERY_CHECK_CODE(code, lino, _end); } else { - colDataSetVal(pColInfo, rowIndex, (const char*)&tagVal.i64, false); + code = colDataSetVal(pColInfo, rowIndex, (const char*)&tagVal.i64, false); + QUERY_CHECK_CODE(code, lino, _end); } } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t tagScanFillResultBlock(SOperatorInfo* pOperator, SSDataBlock* pRes, SArray* aUidTags, SArray* aFilterIdxs, bool ignoreFilterIdx, - SStorageAPI* pAPI) { +static int32_t tagScanFillResultBlock(SOperatorInfo* pOperator, SSDataBlock* pRes, SArray* aUidTags, + SArray* aFilterIdxs, bool ignoreFilterIdx, SStorageAPI* pAPI) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STagScanInfo* pInfo = pOperator->info; SExprInfo* pExprInfo = &pOperator->exprSupp.pExprInfo[0]; if (!ignoreFilterIdx) { size_t szTables = taosArrayGetSize(aFilterIdxs); for (int i = 0; i < szTables; ++i) { - int32_t idx = *(int32_t*)taosArrayGet(aFilterIdxs, i); + int32_t idx = *(int32_t*)taosArrayGet(aFilterIdxs, i); STUidTagInfo* pUidTagInfo = taosArrayGet(aUidTags, idx); for (int32_t j = 0; j < pOperator->exprSupp.numOfExprs; ++j) { SColumnInfoData* pDst = taosArrayGet(pRes->pDataBlock, pExprInfo[j].base.resSchema.slotId); - tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); + code = tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); } } } else { @@ -3695,19 +4137,26 @@ static int32_t tagScanFillResultBlock(SOperatorInfo* pOperator, SSDataBlock* pRe STUidTagInfo* pUidTagInfo = taosArrayGet(aUidTags, i); for (int32_t j = 0; j < pOperator->exprSupp.numOfExprs; ++j) { SColumnInfoData* pDst = taosArrayGet(pRes->pDataBlock, pExprInfo[j].base.resSchema.slotId); - tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); + code = tagScanFillOneCellWithTag(pOperator, pUidTagInfo, &pExprInfo[j], pDst, i, pAPI, pInfo->readHandle.vnode); } } } - return 0; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { if (pOperator->status == OP_EXEC_DONE) { return NULL; } + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; STagScanInfo* pInfo = pOperator->info; SSDataBlock* pRes = pInfo->pRes; @@ -3715,14 +4164,16 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { if (pInfo->pCtbCursor == NULL) { pInfo->pCtbCursor = pAPI->metaFn.openCtbCursor(pInfo->readHandle.vnode, pInfo->suid, 1); + QUERY_CHECK_NULL(pInfo->pCtbCursor, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else { - pAPI->metaFn.resumeCtbCursor(pInfo->pCtbCursor, 0); + code = pAPI->metaFn.resumeCtbCursor(pInfo->pCtbCursor, 0); + QUERY_CHECK_CODE(code, lino, _end); } SArray* aUidTags = pInfo->aUidTags; SArray* aFilterIdxs = pInfo->aFilterIdxs; int32_t count = 0; - bool ctbCursorFinished = false; + bool ctbCursorFinished = false; while (1) { taosArrayClearEx(aUidTags, tagScanFreeUidTag); taosArrayClear(aFilterIdxs); @@ -3738,7 +4189,8 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { STUidTagInfo info = {.uid = uid, .pTagVal = pCur->pVal}; info.pTagVal = taosMemoryMalloc(pCur->vLen); memcpy(info.pTagVal, pCur->pVal, pCur->vLen); - taosArrayPush(aUidTags, &info); + void* tmp = taosArrayPush(aUidTags, &info); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); ++numTables; } @@ -3748,18 +4200,16 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { bool ignoreFilterIdx = true; if (pInfo->pTagCond != NULL) { ignoreFilterIdx = false; - int32_t code = tagScanFilterByTagCond(aUidTags, pInfo->pTagCond, aFilterIdxs, pInfo->readHandle.vnode, pAPI, pInfo); - if (TSDB_CODE_SUCCESS != code) { - pOperator->pTaskInfo->code = code; - T_LONG_JMP(pOperator->pTaskInfo->env, code); - } + code = tagScanFilterByTagCond(aUidTags, pInfo->pTagCond, aFilterIdxs, pInfo->readHandle.vnode, pAPI, pInfo); + QUERY_CHECK_CODE(code, lino, _end); } else { ignoreFilterIdx = true; } - tagScanFillResultBlock(pOperator, pRes, aUidTags, aFilterIdxs, ignoreFilterIdx, pAPI); - - count = ignoreFilterIdx ? taosArrayGetSize(aUidTags): taosArrayGetSize(aFilterIdxs); + code = tagScanFillResultBlock(pOperator, pRes, aUidTags, aFilterIdxs, ignoreFilterIdx, pAPI); + QUERY_CHECK_CODE(code, lino, _end); + + count = ignoreFilterIdx ? taosArrayGetSize(aUidTags) : taosArrayGetSize(aFilterIdxs); if (count != 0) { break; @@ -3780,6 +4230,12 @@ static SSDataBlock* doTagScanFromCtbIdx(SOperatorInfo* pOperator) { if (bLimitReached) { setOperatorCompleted(pOperator); } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } pOperator->resultInfo.totalRows += pRes->info.rows; return (pRes->info.rows == 0) ? NULL : pInfo->pRes; } @@ -3790,7 +4246,7 @@ static SSDataBlock* doTagScanFromMetaEntry(SOperatorInfo* pOperator) { } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; STagScanInfo* pInfo = pOperator->info; SExprInfo* pExprInfo = &pOperator->exprSupp.pExprInfo[0]; @@ -3850,10 +4306,13 @@ static void destroyTagScanOperatorInfo(void* param) { } SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysiNode* pTagScanNode, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, SExecTaskInfo* pTaskInfo) { + STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, + SExecTaskInfo* pTaskInfo) { + 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)); + STagScanInfo* pInfo = taosMemoryCalloc(1, sizeof(STagScanInfo)); + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { goto _error; } @@ -3862,16 +4321,12 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi int32_t numOfExprs = 0; SExprInfo* pExprInfo = createExprInfo(pPhyNode->pScanPseudoCols, NULL, &numOfExprs); - int32_t code = initExprSupp(&pOperator->exprSupp, pExprInfo, numOfExprs, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + code = initExprSupp(&pOperator->exprSupp, pExprInfo, numOfExprs, &pTaskInfo->storageAPI.functionStore); + QUERY_CHECK_CODE(code, lino, _error); int32_t num = 0; code = extractColMatchInfo(pPhyNode->pScanPseudoCols, pDescNode, &num, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); pInfo->pTagCond = pTagCond; pInfo->pTagIndexCond = pTagIndexCond; @@ -3880,6 +4335,8 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi pInfo->pTableListInfo = pTableListInfo; pInfo->pRes = createDataBlockFromDescNode(pDescNode); + QUERY_CHECK_NULL(pInfo->pRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + pInfo->readHandle = *pReadHandle; pInfo->curPos = 0; @@ -3887,20 +4344,30 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi setOperatorInfo(pOperator, "TagScanOperator", QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo); initResultSizeInfo(&pOperator->resultInfo, 4096); - blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _error); if (pTagScanNode->onlyMetaCtbIdx) { pInfo->aUidTags = taosArrayInit(pOperator->resultInfo.capacity, sizeof(STUidTagInfo)); + QUERY_CHECK_NULL(pInfo->aUidTags, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + pInfo->aFilterIdxs = taosArrayInit(pOperator->resultInfo.capacity, sizeof(int32_t)); - pInfo->filterCtx.colHash = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), false, HASH_NO_LOCK); + QUERY_CHECK_NULL(pInfo->aFilterIdxs, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + + pInfo->filterCtx.colHash = + taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), false, HASH_NO_LOCK); + QUERY_CHECK_NULL(pInfo->filterCtx.colHash, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + pInfo->filterCtx.cInfoList = taosArrayInit(4, sizeof(SColumnInfo)); + QUERY_CHECK_NULL(pInfo->pRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + if (pInfo->pTagCond != NULL) { nodesRewriteExprPostOrder(&pTagCond, tagScanRewriteTagColumn, (void*)&pInfo->filterCtx); } } __optr_fn_t tagScanNextFn = (pTagScanNode->onlyMetaCtbIdx) ? doTagScanFromCtbIdx : doTagScanFromMetaEntry; - pOperator->fpSet = - createOperatorFpSet(optrDummyOpenFn, tagScanNextFn, NULL, destroyTagScanOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, tagScanNextFn, NULL, destroyTagScanOperatorInfo, + optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); return pOperator; @@ -3914,8 +4381,8 @@ _error: // table merge scan operator static int32_t subTblRowCompareTsFn(const void* pLeft, const void* pRight, void* param) { - int32_t left = *(int32_t*)pLeft; - int32_t right = *(int32_t*)pRight; + int32_t left = *(int32_t*)pLeft; + int32_t right = *(int32_t*)pRight; STmsSubTablesMergeInfo* pInfo = (STmsSubTablesMergeInfo*)param; int32_t leftIdx = pInfo->aInputs[left].rowIdx; @@ -3929,7 +4396,7 @@ static int32_t subTblRowCompareTsFn(const void* pLeft, const void* pRight, void* int64_t leftTs = pInfo->aInputs[left].aTs[leftIdx]; int64_t rightTs = pInfo->aInputs[right].aTs[rightIdx]; - int32_t ret = leftTs>rightTs ? 1 : ((leftTs < rightTs) ? -1 : 0); + int32_t ret = leftTs > rightTs ? 1 : ((leftTs < rightTs) ? -1 : 0); if (pInfo->pTsOrderInfo->order == TSDB_ORDER_DESC) { ret = -1 * ret; } @@ -3937,8 +4404,8 @@ static int32_t subTblRowCompareTsFn(const void* pLeft, const void* pRight, void* } static int32_t subTblRowCompareTsPkFn(const void* pLeft, const void* pRight, void* param) { - int32_t left = *(int32_t*)pLeft; - int32_t right = *(int32_t*)pRight; + int32_t left = *(int32_t*)pLeft; + int32_t right = *(int32_t*)pRight; STmsSubTablesMergeInfo* pInfo = (STmsSubTablesMergeInfo*)param; int32_t leftIdx = pInfo->aInputs[left].rowIdx; @@ -3952,39 +4419,48 @@ static int32_t subTblRowCompareTsPkFn(const void* pLeft, const void* pRight, voi int64_t leftTs = pInfo->aInputs[left].aTs[leftIdx]; int64_t rightTs = pInfo->aInputs[right].aTs[rightIdx]; - int32_t ret = leftTs>rightTs ? 1 : ((leftTs < rightTs) ? -1 : 0); + int32_t ret = leftTs > rightTs ? 1 : ((leftTs < rightTs) ? -1 : 0); if (pInfo->pTsOrderInfo->order == TSDB_ORDER_DESC) { ret = -1 * ret; } - if (ret == 0 && pInfo->pPkOrderInfo) { - ret = tsortComparBlockCell(pInfo->aInputs[left].pInputBlock, pInfo->aInputs[right].pInputBlock, - leftIdx, rightIdx, pInfo->pPkOrderInfo); + if (ret == 0 && pInfo->pPkOrderInfo) { + ret = tsortComparBlockCell(pInfo->aInputs[left].pInputBlock, pInfo->aInputs[right].pInputBlock, leftIdx, rightIdx, + pInfo->pPkOrderInfo); } return ret; } int32_t dumpQueryTableCond(const SQueryTableDataCond* src, SQueryTableDataCond* dst) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; memcpy((void*)dst, (void*)src, sizeof(SQueryTableDataCond)); dst->colList = taosMemoryCalloc(src->numOfCols, sizeof(SColumnInfo)); + QUERY_CHECK_NULL(dst->colList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); for (int i = 0; i < src->numOfCols; i++) { dst->colList[i] = src->colList[i]; } - return 0; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t fetchNextSubTableBlockFromReader(SOperatorInfo* pOperator, STmsSubTableInput* pInput, bool* pSubTableHasBlock) { +static int32_t fetchNextSubTableBlockFromReader(SOperatorInfo* pOperator, STmsSubTableInput* pInput, + bool* pSubTableHasBlock) { int32_t code = 0; - STableMergeScanInfo* pInfo = pOperator->info; - SReadHandle* pHandle = &pInfo->base.readHandle; + STableMergeScanInfo* pInfo = pOperator->info; + SReadHandle* pHandle = &pInfo->base.readHandle; STmsSubTablesMergeInfo* pSubTblsInfo = pInfo->pSubTablesMergeInfo; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - const SStorageAPI* pAPI= &pTaskInfo->storageAPI; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + const SStorageAPI* pAPI = &pTaskInfo->storageAPI; blockDataCleanup(pInput->pReaderBlock); if (!pInput->bInMemReader) { code = pAPI->tsdReader.tsdReaderOpen(pHandle->vnode, &pInput->tblCond, pInput->pKeyInfo, 1, pInput->pReaderBlock, - (void**)&pInput->pReader, GET_TASKID(pTaskInfo), NULL); + (void**)&pInput->pReader, GET_TASKID(pTaskInfo), NULL); if (code != 0) { T_LONG_JMP(pTaskInfo->env, code); } @@ -3993,7 +4469,7 @@ static int32_t fetchNextSubTableBlockFromReader(SOperatorInfo* pOperator, STmsSu pInfo->base.dataReader = pInput->pReader; while (true) { - bool hasNext = false; + bool hasNext = false; int32_t code = pAPI->tsdReader.tsdNextDataBlock(pInfo->base.dataReader, &hasNext); if (code != 0) { pAPI->tsdReader.tsdReaderReleaseDataBlock(pInfo->base.dataReader); @@ -4010,7 +4486,7 @@ static int32_t fetchNextSubTableBlockFromReader(SOperatorInfo* pOperator, STmsSu break; } - if (pInput->tblCond.order == TSDB_ORDER_ASC) { + if (pInput->tblCond.order == TSDB_ORDER_ASC) { pInput->tblCond.twindows.skey = pInput->pReaderBlock->info.window.ekey + 1; } else { pInput->tblCond.twindows.ekey = pInput->pReaderBlock->info.window.skey - 1; @@ -4035,7 +4511,8 @@ static int32_t fetchNextSubTableBlockFromReader(SOperatorInfo* pOperator, STmsSu } if (*pSubTableHasBlock) { - pInput->pReaderBlock->info.id.groupId = tableListGetTableGroupId(pInfo->base.pTableListInfo, pInput->pReaderBlock->info.id.uid); + pInput->pReaderBlock->info.id.groupId = + tableListGetTableGroupId(pInfo->base.pTableListInfo, pInput->pReaderBlock->info.id.uid); pOperator->resultInfo.totalRows += pInput->pReaderBlock->info.rows; } if (!pInput->bInMemReader || !*pSubTableHasBlock) { @@ -4063,7 +4540,7 @@ static void setGroupStartEndIndex(STableMergeScanInfo* pInfo) { static int32_t openSubTablesMergeSort(STmsSubTablesMergeInfo* pSubTblsInfo) { for (int32_t i = 0; i < pSubTblsInfo->numSubTables; ++i) { - STmsSubTableInput * pInput = pSubTblsInfo->aInputs + i; + STmsSubTableInput* pInput = pSubTblsInfo->aInputs + i; if (pInput->rowIdx == -1) { continue; } @@ -4114,19 +4591,22 @@ static int32_t initSubTablesMergeInfo(STableMergeScanInfo* pInfo) { pInfo->pSubTablesMergeInfo = pSubTblsInfo; return TSDB_CODE_SUCCESS; -} +} static int32_t initSubTableInputs(SOperatorInfo* pOperator, STableMergeScanInfo* pInfo) { - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SReadHandle* pHandle = &pInfo->base.readHandle; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + SReadHandle* pHandle = &pInfo->base.readHandle; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; STmsSubTablesMergeInfo* pSubTblsInfo = pInfo->pSubTablesMergeInfo; for (int32_t i = 0; i < pSubTblsInfo->numSubTables; ++i) { - STmsSubTableInput* pInput = pSubTblsInfo->aInputs + i; + STmsSubTableInput* pInput = pSubTblsInfo->aInputs + i; pInput->type = SUB_TABLE_MEM_BLOCK; - dumpQueryTableCond(&pInfo->base.cond, &pInput->tblCond); + code = dumpQueryTableCond(&pInfo->base.cond, &pInput->tblCond); + QUERY_CHECK_CODE(code, lino, _end); pInput->pReaderBlock = createOneDataBlock(pInfo->pResBlock, false); pInput->pPageBlock = createOneDataBlock(pInfo->pResBlock, false); STableKeyInfo* keyInfo = tableListGetInfo(pInfo->base.pTableListInfo, i + pInfo->tableStartIndex); @@ -4137,15 +4617,17 @@ static int32_t initSubTableInputs(SOperatorInfo* pOperator, STableMergeScanInfo* } if (i + 1 < pSubTblsInfo->numInMemReaders) { - pAPI->tsdReader.tsdReaderOpen(pHandle->vnode, &pInput->tblCond, keyInfo, 1, pInput->pReaderBlock, - (void**)&pInput->pReader, GET_TASKID(pTaskInfo), NULL); + code = pAPI->tsdReader.tsdReaderOpen(pHandle->vnode, &pInput->tblCond, keyInfo, 1, pInput->pReaderBlock, + (void**)&pInput->pReader, GET_TASKID(pTaskInfo), NULL); + QUERY_CHECK_CODE(code, lino, _end); pInput->bInMemReader = true; } else { pInput->pReader = NULL; pInput->bInMemReader = false; } bool hasNext = true; - fetchNextSubTableBlockFromReader(pOperator, pInput, &hasNext); + code = fetchNextSubTableBlockFromReader(pOperator, pInput, &hasNext); + QUERY_CHECK_CODE(code, lino, _end); if (!hasNext) { pInput->rowIdx = -1; ++pSubTblsInfo->numSubTablesCompleted; @@ -4154,33 +4636,47 @@ static int32_t initSubTableInputs(SOperatorInfo* pOperator, STableMergeScanInfo* pInput->rowIdx = 0; pInput->pageIdx = -1; } - } - return TSDB_CODE_SUCCESS; + } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t adjustSubTableFromMemBlock(SOperatorInfo* pOperatorInfo, STmsSubTablesMergeInfo* pSubTblsInfo) { +static void adjustSubTableFromMemBlock(SOperatorInfo* pOperatorInfo, STmsSubTablesMergeInfo* pSubTblsInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperatorInfo->pTaskInfo; STableMergeScanInfo* pInfo = pOperatorInfo->info; - STmsSubTableInput* pInput = pSubTblsInfo->aInputs + tMergeTreeGetChosenIndex(pSubTblsInfo->pTree); - bool hasNext = true; - fetchNextSubTableBlockFromReader(pOperatorInfo, pInput, &hasNext); + STmsSubTableInput* pInput = pSubTblsInfo->aInputs + tMergeTreeGetChosenIndex(pSubTblsInfo->pTree); + bool hasNext = true; + code = fetchNextSubTableBlockFromReader(pOperatorInfo, pInput, &hasNext); + QUERY_CHECK_CODE(code, lino, _end); + if (!hasNext) { pInput->rowIdx = -1; ++pSubTblsInfo->numSubTablesCompleted; } else { - pInput->rowIdx = 0; + pInput->rowIdx = 0; + } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); } - - return TSDB_CODE_SUCCESS; } static int32_t adjustSubTableForNextRow(SOperatorInfo* pOperatorInfo, STmsSubTablesMergeInfo* pSubTblsInfo) { STableMergeScanInfo* pInfo = pOperatorInfo->info; - STmsSubTableInput* pInput = pSubTblsInfo->aInputs + tMergeTreeGetChosenIndex(pSubTblsInfo->pTree); + STmsSubTableInput* pInput = pSubTblsInfo->aInputs + tMergeTreeGetChosenIndex(pSubTblsInfo->pTree); SSDataBlock* pInputBlock = (pInput->type == SUB_TABLE_MEM_BLOCK) ? pInput->pReaderBlock : pInput->pPageBlock; if (pInput->rowIdx < pInputBlock->info.rows - 1) { ++pInput->rowIdx; - } else if (pInput->rowIdx == pInputBlock->info.rows -1 ) { + } else if (pInput->rowIdx == pInputBlock->info.rows - 1) { if (pInput->type == SUB_TABLE_MEM_BLOCK) { adjustSubTableFromMemBlock(pOperatorInfo, pSubTblsInfo); } @@ -4197,8 +4693,10 @@ static int32_t adjustSubTableForNextRow(SOperatorInfo* pOperatorInfo, STmsSubTab } static int32_t appendChosenRowToDataBlock(STmsSubTablesMergeInfo* pSubTblsInfo, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STmsSubTableInput* pInput = pSubTblsInfo->aInputs + tMergeTreeGetChosenIndex(pSubTblsInfo->pTree); - SSDataBlock* pInputBlock = (pInput->type == SUB_TABLE_MEM_BLOCK) ? pInput->pReaderBlock : pInput->pPageBlock; + SSDataBlock* pInputBlock = (pInput->type == SUB_TABLE_MEM_BLOCK) ? pInput->pReaderBlock : pInput->pPageBlock; for (int32_t i = 0; i < taosArrayGetSize(pBlock->pDataBlock); ++i) { SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, i); @@ -4207,23 +4705,32 @@ static int32_t appendChosenRowToDataBlock(STmsSubTablesMergeInfo* pSubTblsInfo, bool isNull = colDataIsNull(pSrcColInfo, pInputBlock->info.rows, pInput->rowIdx, NULL); if (isNull) { - colDataSetVal(pColInfo, pBlock->info.rows, NULL, true); + code = colDataSetVal(pColInfo, pBlock->info.rows, NULL, true); + QUERY_CHECK_CODE(code, lino, _end); } else { if (pSrcColInfo->pData != NULL) { char* pData = colDataGetData(pSrcColInfo, pInput->rowIdx); - colDataSetVal(pColInfo, pBlock->info.rows, pData, false); + code = colDataSetVal(pColInfo, pBlock->info.rows, pData, false); + QUERY_CHECK_CODE(code, lino, _end); } } } pBlock->info.dataLoad = 1; pBlock->info.scanFlag = pInputBlock->info.scanFlag; pBlock->info.rows += 1; - return TSDB_CODE_SUCCESS; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static SSDataBlock* getSubTablesSortedBlock(SOperatorInfo* pOperator, SSDataBlock* pResBlock, int32_t capacity) { - STableMergeScanInfo* pInfo = pOperator->info; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + STableMergeScanInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; STmsSubTablesMergeInfo* pSubTblsInfo = pInfo->pSubTablesMergeInfo; blockDataCleanup(pResBlock); @@ -4235,9 +4742,11 @@ static SSDataBlock* getSubTablesSortedBlock(SOperatorInfo* pOperator, SSDataBloc break; } - appendChosenRowToDataBlock(pSubTblsInfo, pResBlock); - adjustSubTableForNextRow(pOperator, pSubTblsInfo); - + code = appendChosenRowToDataBlock(pSubTblsInfo, pResBlock); + QUERY_CHECK_CODE(code, lino, _end); + code = adjustSubTableForNextRow(pOperator, pSubTblsInfo); + QUERY_CHECK_CODE(code, lino, _end); + if (pResBlock->info.rows >= capacity) { break; } @@ -4252,28 +4761,43 @@ static SSDataBlock* getSubTablesSortedBlock(SOperatorInfo* pOperator, SSDataBloc break; } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return (pResBlock->info.rows > 0) ? pResBlock : NULL; } static int32_t startSubTablesTableMergeScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableMergeScanInfo* pInfo = pOperator->info; - initSubTablesMergeInfo(pInfo); + code = initSubTablesMergeInfo(pInfo); + QUERY_CHECK_CODE(code, lino, _end); - initSubTableInputs(pOperator, pInfo); - - openSubTablesMergeSort(pInfo->pSubTablesMergeInfo); + code = initSubTableInputs(pOperator, pInfo); + QUERY_CHECK_CODE(code, lino, _end); - return TSDB_CODE_SUCCESS; + code = openSubTablesMergeSort(pInfo->pSubTablesMergeInfo); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static int32_t stopSubTablesTableMergeScan(STableMergeScanInfo* pInfo) { +static void stopSubTablesTableMergeScan(STableMergeScanInfo* pInfo) { STmsSubTablesMergeInfo* pSubTblsInfo = pInfo->pSubTablesMergeInfo; if (pSubTblsInfo != NULL) { tMergeTreeDestroy(&pSubTblsInfo->pTree); for (int32_t i = 0; i < pSubTblsInfo->numSubTables; ++i) { - STmsSubTableInput* pInput = pSubTblsInfo->aInputs + i; + STmsSubTableInput* pInput = pSubTblsInfo->aInputs + i; taosMemoryFree(pInput->tblCond.colList); blockDataDestroy(pInput->pReaderBlock); blockDataDestroy(pInput->pPageBlock); @@ -4288,9 +4812,8 @@ static int32_t stopSubTablesTableMergeScan(STableMergeScanInfo* pInfo) { taosMemoryFree(pSubTblsInfo); pInfo->pSubTablesMergeInfo = NULL; - //taosMemoryTrim(0); + // taosMemoryTrim(0); } - return TSDB_CODE_SUCCESS; } SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { @@ -4301,6 +4824,7 @@ SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; STableMergeScanInfo* pInfo = pOperator->info; + int32_t lino = 0; int32_t code = pOperator->fpSet._openFn(pOperator); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pTaskInfo->env, code); @@ -4318,7 +4842,8 @@ SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { } pInfo->tableStartIndex = 0; pInfo->groupId = ((STableKeyInfo*)tableListGetInfo(pInfo->base.pTableListInfo, pInfo->tableStartIndex))->groupId; - startSubTablesTableMergeScan(pOperator); + code = startSubTablesTableMergeScan(pOperator); + QUERY_CHECK_CODE(code, lino, _end); } SSDataBlock* pBlock = NULL; @@ -4347,27 +4872,45 @@ SSDataBlock* doTableMergeScanParaSubTables(SOperatorInfo* pOperator) { pInfo->tableStartIndex = pInfo->tableEndIndex + 1; pInfo->groupId = tableListGetInfo(pInfo->base.pTableListInfo, pInfo->tableStartIndex)->groupId; - startSubTablesTableMergeScan(pOperator); + code = startSubTablesTableMergeScan(pOperator); + QUERY_CHECK_CODE(code, lino, _end); resetLimitInfoForNextGroup(&pInfo->limitInfo); } } - pOperator->cost.totalCost += (taosGetTimestampUs() - st) / 1000.0;; + pOperator->cost.totalCost += (taosGetTimestampUs() - st) / 1000.0; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return pBlock; } +static void tableMergeScanDoSkipTable(uint64_t uid, void* pTableMergeOpInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SOperatorInfo* pOperator = (SOperatorInfo*)pTableMergeOpInfo; + STableMergeScanInfo* pInfo = pOperator->info; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; -static void tableMergeScanDoSkipTable(uint64_t uid, void* pTableMergeScanInfo) { - STableMergeScanInfo* pInfo = pTableMergeScanInfo; if (pInfo->mSkipTables == NULL) { - pInfo->mSkipTables = taosHashInit(pInfo->tableEndIndex - pInfo->tableStartIndex + 1, - taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK); + pInfo->mSkipTables = taosHashInit(pInfo->tableEndIndex - pInfo->tableStartIndex + 1, + taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK); + QUERY_CHECK_NULL(pInfo->mSkipTables, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } int bSkip = 1; if (pInfo->mSkipTables != NULL) { - taosHashPut(pInfo->mSkipTables, &uid, sizeof(uid), &bSkip, sizeof(bSkip)); - } + code = taosHashPut(pInfo->mSkipTables, &uid, sizeof(uid), &bSkip, sizeof(bSkip)); + QUERY_CHECK_CODE(code, lino, _end); + } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } } static void doGetBlockForTableMergeScan(SOperatorInfo* pOperator, bool* pFinished, bool* pSkipped) { @@ -4493,7 +5036,9 @@ static SSDataBlock* getBlockForTableMergeScan(void* param) { return NULL; } -SArray* generateSortByTsPkInfo(SArray* colMatchInfo, int32_t order) { +int32_t generateSortByTsPkInfo(SArray* colMatchInfo, int32_t order, SArray** ppSortArray) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SArray* pSortInfo = taosArrayInit(1, sizeof(SBlockOrderInfo)); SBlockOrderInfo biTs = {0}; SBlockOrderInfo biPk = {0}; @@ -4509,7 +5054,7 @@ SArray* generateSortByTsPkInfo(SArray* colMatchInfo, int32_t order) { biTs.nullFirst = (order == TSDB_ORDER_ASC); biTs.compFn = getKeyComparFunc(TSDB_DATA_TYPE_TIMESTAMP, order); } - //TODO: order by just ts + // TODO: order by just ts if (colInfo->isPk) { pkTargetSlotId = colInfo->dstSlotId; biPk.order = order; @@ -4519,12 +5064,20 @@ SArray* generateSortByTsPkInfo(SArray* colMatchInfo, int32_t order) { } } - taosArrayPush(pSortInfo, &biTs); + void* tmp = taosArrayPush(pSortInfo, &biTs); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); if (pkTargetSlotId != -1) { - taosArrayPush(pSortInfo, &biPk); + tmp = taosArrayPush(pSortInfo, &biPk); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } - return pSortInfo; + (*ppSortArray) = pSortInfo; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } void tableMergeScanTsdbNotifyCb(ETsdReaderNotifyType type, STsdReaderNotifyInfo* info, void* param) { @@ -4544,6 +5097,7 @@ int32_t startDurationForGroupTableMergeScan(SOperatorInfo* pOperator) { SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; int32_t numOfTable = pInfo->tableEndIndex - pInfo->tableStartIndex + 1; qDebug("%s table merge scan start duration ", GET_TASKID(pTaskInfo)); @@ -4554,40 +5108,46 @@ int32_t startDurationForGroupTableMergeScan(SOperatorInfo* pOperator) { int32_t numOfBufPage = pInfo->sortBufSize / pInfo->bufPageSize; pInfo->pSortHandle = tsortCreateSortHandle(pInfo->pSortInfo, SORT_BLOCK_TS_MERGE, pInfo->bufPageSize, numOfBufPage, - pInfo->pSortInputBlock, pTaskInfo->id.str, 0, 0, 0); + pInfo->pSortInputBlock, pTaskInfo->id.str, 0, 0, 0); if (pInfo->bSortRowId && numOfTable != 1) { int32_t memSize = 512 * 1024 * 1024; code = tsortSetSortByRowId(pInfo->pSortHandle, memSize); - if (code != TSDB_CODE_SUCCESS) { - return code; - } + QUERY_CHECK_CODE(code, lino, _end); } tsortSetMergeLimit(pInfo->pSortHandle, pInfo->mergeLimit); - tsortSetMergeLimitReachedFp(pInfo->pSortHandle, tableMergeScanDoSkipTable, pInfo); + tsortSetMergeLimitReachedFp(pInfo->pSortHandle, tableMergeScanDoSkipTable, pOperator); tsortSetAbortCheckFn(pInfo->pSortHandle, isTaskKilled, pOperator->pTaskInfo); - tsortSetFetchRawDataFp(pInfo->pSortHandle, getBlockForTableMergeScan, NULL, NULL); + code = tsortSetFetchRawDataFp(pInfo->pSortHandle, getBlockForTableMergeScan, NULL, NULL); + QUERY_CHECK_CODE(code, lino, _end); - STableMergeScanSortSourceParam *param = taosMemoryCalloc(1, sizeof(STableMergeScanSortSourceParam)); + STableMergeScanSortSourceParam* param = taosMemoryCalloc(1, sizeof(STableMergeScanSortSourceParam)); param->pOperator = pOperator; SSortSource* ps = taosMemoryCalloc(1, sizeof(SSortSource)); ps->param = param; ps->onlyRef = false; - tsortAddSource(pInfo->pSortHandle, ps); + code = tsortAddSource(pInfo->pSortHandle, ps); + QUERY_CHECK_CODE(code, lino, _end); if (numOfTable == 1) { tsortSetSingleTableMerge(pInfo->pSortHandle); } else { code = tsortOpen(pInfo->pSortHandle); + QUERY_CHECK_CODE(code, lino, _end); + } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); } return code; } void stopDurationForGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; qDebug("%s table merge scan stop duration ", GET_TASKID(pTaskInfo)); SSortExecInfo sortExecInfo = tsortGetSortExecInfo(pInfo->pSortHandle); @@ -4599,15 +5159,16 @@ void stopDurationForGroupTableMergeScan(SOperatorInfo* pOperator) { tsortDestroySortHandle(pInfo->pSortHandle); pInfo->pSortHandle = NULL; - } -int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { +void startGroupTableMergeScan(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SReadHandle* pHandle = &pInfo->base.readHandle; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; - qDebug("%s table merge scan start group %"PRIu64, GET_TASKID(pTaskInfo), pInfo->groupId); + SReadHandle* pHandle = &pInfo->base.readHandle; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; + qDebug("%s table merge scan start group %" PRIu64, GET_TASKID(pTaskInfo), pInfo->groupId); { size_t numOfTables = tableListGetSize(pInfo->base.pTableListInfo); @@ -4624,25 +5185,27 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { int32_t tableStartIdx = pInfo->tableStartIndex; int32_t tableEndIdx = pInfo->tableEndIndex; - int32_t numOfTable = tableEndIdx - tableStartIdx + 1; + int32_t numOfTable = tableEndIdx - tableStartIdx + 1; STableKeyInfo* startKeyInfo = tableListGetInfo(pInfo->base.pTableListInfo, tableStartIdx); - pAPI->tsdReader.tsdReaderOpen(pHandle->vnode, &pInfo->base.cond, startKeyInfo, numOfTable, pInfo->pReaderBlock, - (void**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo), &pInfo->mSkipTables); + code = pAPI->tsdReader.tsdReaderOpen(pHandle->vnode, &pInfo->base.cond, startKeyInfo, numOfTable, pInfo->pReaderBlock, + (void**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo), &pInfo->mSkipTables); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->filesetDelimited) { pAPI->tsdReader.tsdSetFilesetDelimited(pInfo->base.dataReader); } pAPI->tsdReader.tsdSetSetNotifyCb(pInfo->base.dataReader, tableMergeScanTsdbNotifyCb, pInfo); - int32_t code = startDurationForGroupTableMergeScan(pOperator); + code = startDurationForGroupTableMergeScan(pOperator); + QUERY_CHECK_CODE(code, lino, _end); +_end: if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, terrno); + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); } - - return TSDB_CODE_SUCCESS; } -int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { +void stopGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; @@ -4664,9 +5227,7 @@ int32_t stopGroupTableMergeScan(SOperatorInfo* pOperator) { resetLimitInfoForNextGroup(&pInfo->limitInfo); taosHashCleanup(pInfo->mSkipTables); pInfo->mSkipTables = NULL; - qDebug("%s table merge scan stop group %"PRIu64, GET_TASKID(pTaskInfo), pInfo->groupId); - - return TSDB_CODE_SUCCESS; + qDebug("%s table merge scan stop group %" PRIu64, GET_TASKID(pTaskInfo), pInfo->groupId); } // all data produced by this function only belongs to one group @@ -4694,13 +5255,13 @@ SSDataBlock* getSortedTableMergeScanBlockData(SSortHandle* pHandle, SSDataBlock* terrno = TSDB_CODE_TSC_QUERY_CANCELLED; T_LONG_JMP(pOperator->pTaskInfo->env, terrno); } - + bool limitReached = applyLimitOffset(&pInfo->limitInfo, pResBlock, pTaskInfo); qDebug("%s get sorted row block, rows:%" PRId64 ", limit:%" PRId64, GET_TASKID(pTaskInfo), pResBlock->info.rows, - pInfo->limitInfo.numOfOutputRows); + pInfo->limitInfo.numOfOutputRows); if (pTupleHandle == NULL || limitReached || pResBlock->info.rows > 0) { break; - } + } } return (pResBlock->info.rows > 0) ? pResBlock : NULL; } @@ -4773,7 +5334,8 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { } } - pOperator->cost.totalCost += (taosGetTimestampUs() - st) / 1000.0;; + pOperator->cost.totalCost += (taosGetTimestampUs() - st) / 1000.0; + ; return pBlock; } @@ -4843,6 +5405,7 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN int32_t numOfCols = 0; int32_t code = extractColMatchInfo(pTableScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->base.matchInfo); + int32_t lino = 0; if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -4856,7 +5419,8 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN if (pTableScanNode->scan.pScanPseudoCols != NULL) { SExprSupp* pSup = &pInfo->base.pseudoSup; pSup->pExprInfo = createExprInfo(pTableScanNode->scan.pScanPseudoCols, NULL, &pSup->numOfExprs); - pSup->pCtx = createSqlFunctionCtx(pSup->pExprInfo, pSup->numOfExprs, &pSup->rowEntryInfoOffset, &pTaskInfo->storageAPI.functionStore); + pSup->pCtx = createSqlFunctionCtx(pSup->pExprInfo, pSup->numOfExprs, &pSup->rowEntryInfoOffset, + &pTaskInfo->storageAPI.functionStore); } pInfo->scanInfo = (SScanInfo){.numOfAsc = pTableScanNode->scanSeq[0], .numOfDesc = pTableScanNode->scanSeq[1]}; @@ -4897,26 +5461,31 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN initResultSizeInfo(&pOperator->resultInfo, 1024); pInfo->pResBlock = createDataBlockFromDescNode(pDescNode); - blockDataEnsureCapacity(pInfo->pResBlock, pOperator->resultInfo.capacity); + QUERY_CHECK_NULL(pInfo->pResBlock, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + code = blockDataEnsureCapacity(pInfo->pResBlock, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _error); if (!hasLimit && blockDataGetRowSize(pInfo->pResBlock) >= 256 && !pTableScanNode->smallDataTsSort) { pInfo->bSortRowId = true; } else { pInfo->bSortRowId = false; } - prepareDataBlockBuf(pInfo->pResBlock, &pInfo->base.matchInfo); + code = prepareDataBlockBuf(pInfo->pResBlock, &pInfo->base.matchInfo); + QUERY_CHECK_CODE(code, lino, _error); - pInfo->pSortInfo = generateSortByTsPkInfo(pInfo->base.matchInfo.pList, pInfo->base.cond.order); + code = generateSortByTsPkInfo(pInfo->base.matchInfo.pList, pInfo->base.cond.order, &pInfo->pSortInfo); + QUERY_CHECK_CODE(code, lino, _error); pInfo->pReaderBlock = createOneDataBlock(pInfo->pResBlock, false); + QUERY_CHECK_NULL(pInfo->pReaderBlock, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); pInfo->needCountEmptyTable = tsCountAlwaysReturnValue && pTableScanNode->needCountEmptyTable; int32_t rowSize = pInfo->pResBlock->info.rowSize; uint32_t nCols = taosArrayGetSize(pInfo->pResBlock->pDataBlock); - + pInfo->bufPageSize = getProperSortPageSize(rowSize, nCols); - //start one reader variable + // start one reader variable pInfo->pSortInputBlock = createOneDataBlock(pInfo->pResBlock, false); if (!tsExperimental) { @@ -4947,9 +5516,9 @@ _error: // TableCountScanOperator static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator); static void destoryTableCountScanOperator(void* param); -static void buildVnodeGroupedStbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, +static int32_t buildVnodeGroupedStbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, char* dbName, tb_uid_t stbUid, SStorageAPI* pAPI); -static void buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, +static int32_t buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, char* dbName, SStorageAPI* pAPI); static void buildVnodeFilteredTbCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, char* dbName); @@ -5059,6 +5628,7 @@ int32_t getTableCountScanSupp(SNodeList* groupTags, SName* tableName, SNodeList* SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* readHandle, STableCountScanPhysiNode* pTblCountScanNode, SExecTaskInfo* pTaskInfo) { int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SScanPhysiNode* pScanNode = &pTblCountScanNode->scan; STableCountScanOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(STableCountScanOperatorInfo)); @@ -5073,11 +5643,15 @@ SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* readHandle, STableC SDataBlockDescNode* pDescNode = pScanNode->node.pOutputDataBlockDesc; initResultSizeInfo(&pOperator->resultInfo, 1); pInfo->pRes = createDataBlockFromDescNode(pDescNode); - blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + QUERY_CHECK_NULL(pInfo->pRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); - getTableCountScanSupp(pTblCountScanNode->pGroupTags, &pTblCountScanNode->scan.tableName, - pTblCountScanNode->scan.pScanCols, pTblCountScanNode->scan.pScanPseudoCols, &pInfo->supp, - pTaskInfo); + code = blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _error); + + code = getTableCountScanSupp(pTblCountScanNode->pGroupTags, &pTblCountScanNode->scan.tableName, + pTblCountScanNode->scan.pScanCols, pTblCountScanNode->scan.pScanPseudoCols, &pInfo->supp, + pTaskInfo); + QUERY_CHECK_CODE(code, lino, _error); setOperatorInfo(pOperator, "TableCountScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN, false, OP_NOT_OPENED, pInfo, pTaskInfo); @@ -5094,8 +5668,10 @@ _error: return NULL; } -void fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* stbName, int64_t count, - SSDataBlock* pRes) { +int32_t fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* stbName, int64_t count, + SSDataBlock* pRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pSupp->dbNameSlotId != -1) { ASSERT(strlen(dbName)); SColumnInfoData* colInfoData = taosArrayGet(pRes->pDataBlock, pSupp->dbNameSlotId); @@ -5104,7 +5680,8 @@ void fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* tstrncpy(varDataVal(varDbName), dbName, TSDB_DB_NAME_LEN); varDataSetLen(varDbName, strlen(dbName)); - colDataSetVal(colInfoData, 0, varDbName, false); + code = colDataSetVal(colInfoData, 0, varDbName, false); + QUERY_CHECK_CODE(code, lino, _end); } if (pSupp->stbNameSlotId != -1) { @@ -5113,7 +5690,8 @@ void fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* char varStbName[TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE] = {0}; strncpy(varDataVal(varStbName), stbName, TSDB_TABLE_NAME_LEN); varDataSetLen(varStbName, strlen(stbName)); - colDataSetVal(colInfoData, 0, varStbName, false); + code = colDataSetVal(colInfoData, 0, varStbName, false); + QUERY_CHECK_CODE(code, lino, _end); } else { colDataSetNULL(colInfoData, 0); } @@ -5121,9 +5699,16 @@ void fillTableCountScanDataBlock(STableCountScanSupp* pSupp, char* dbName, char* if (pSupp->tbCountSlotId != -1) { SColumnInfoData* colInfoData = taosArrayGet(pRes->pDataBlock, pSupp->tbCountSlotId); - colDataSetVal(colInfoData, 0, (char*)&count, false); + code = colDataSetVal(colInfoData, 0, (char*)&count, false); + QUERY_CHECK_CODE(code, lino, _end); } pRes->info.rows = 1; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static SSDataBlock* buildSysDbTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo) { @@ -5147,12 +5732,24 @@ static SSDataBlock* buildSysDbTableCount(SOperatorInfo* pOperator, STableCountSc static void buildSysDbFilterTableCount(SOperatorInfo* pOperator, STableCountScanSupp* pSupp, SSDataBlock* pRes, size_t infodbTableNum, size_t perfdbTableNum) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (strcmp(pSupp->dbNameFilter, TSDB_INFORMATION_SCHEMA_DB) == 0) { - fillTableCountScanDataBlock(pSupp, TSDB_INFORMATION_SCHEMA_DB, "", infodbTableNum, pRes); + code = fillTableCountScanDataBlock(pSupp, TSDB_INFORMATION_SCHEMA_DB, "", infodbTableNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); } else if (strcmp(pSupp->dbNameFilter, TSDB_PERFORMANCE_SCHEMA_DB) == 0) { - fillTableCountScanDataBlock(pSupp, TSDB_PERFORMANCE_SCHEMA_DB, "", perfdbTableNum, pRes); + code = fillTableCountScanDataBlock(pSupp, TSDB_PERFORMANCE_SCHEMA_DB, "", perfdbTableNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); } else if (strlen(pSupp->dbNameFilter) == 0) { - fillTableCountScanDataBlock(pSupp, "", "", infodbTableNum + perfdbTableNum, pRes); + code = fillTableCountScanDataBlock(pSupp, "", "", infodbTableNum + perfdbTableNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); + } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); } setOperatorCompleted(pOperator); } @@ -5160,6 +5757,9 @@ static void buildSysDbFilterTableCount(SOperatorInfo* pOperator, STableCountScan static void buildSysDbGroupedTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, size_t infodbTableNum, size_t perfdbTableNum) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (pInfo->currGrpIdx == 0) { uint64_t groupId = 0; if (pSupp->groupByDbName) { @@ -5169,7 +5769,8 @@ static void buildSysDbGroupedTableCount(SOperatorInfo* pOperator, STableCountSca } pRes->info.id.groupId = groupId; - fillTableCountScanDataBlock(pSupp, TSDB_INFORMATION_SCHEMA_DB, "", infodbTableNum, pRes); + code = fillTableCountScanDataBlock(pSupp, TSDB_INFORMATION_SCHEMA_DB, "", infodbTableNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); } else if (pInfo->currGrpIdx == 1) { uint64_t groupId = 0; if (pSupp->groupByDbName) { @@ -5179,11 +5780,18 @@ static void buildSysDbGroupedTableCount(SOperatorInfo* pOperator, STableCountSca } pRes->info.id.groupId = groupId; - fillTableCountScanDataBlock(pSupp, TSDB_PERFORMANCE_SCHEMA_DB, "", perfdbTableNum, pRes); + code = fillTableCountScanDataBlock(pSupp, TSDB_PERFORMANCE_SCHEMA_DB, "", perfdbTableNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); } else { setOperatorCompleted(pOperator); } pInfo->currGrpIdx++; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } } static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator) { @@ -5205,45 +5813,59 @@ static SSDataBlock* doTableCountScan(SOperatorInfo* pOperator) { static SSDataBlock* buildVnodeDbTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes) { - const char* db = NULL; - int32_t vgId = 0; - char dbName[TSDB_DB_NAME_LEN] = {0}; + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + const char* db = NULL; + int32_t vgId = 0; + char dbName[TSDB_DB_NAME_LEN] = {0}; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; // get dbname pAPI->metaFn.getBasicInfo(pInfo->readHandle.vnode, &db, &vgId, NULL, NULL); SName sn = {0}; - tNameFromString(&sn, db, T_NAME_ACCT | T_NAME_DB); - tNameGetDbName(&sn, dbName); + code = tNameFromString(&sn, db, T_NAME_ACCT | T_NAME_DB); + QUERY_CHECK_CODE(code, lino, _end); + code = tNameGetDbName(&sn, dbName); + QUERY_CHECK_CODE(code, lino, _end); if (pSupp->groupByDbName || pSupp->groupByStbName) { buildVnodeGroupedTableCount(pOperator, pInfo, pSupp, pRes, vgId, dbName); } else { buildVnodeFilteredTbCount(pOperator, pInfo, pSupp, pRes, dbName); } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } return pRes->info.rows > 0 ? pRes : NULL; } static void buildVnodeGroupedTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, int32_t vgId, char* dbName) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; if (pSupp->groupByStbName) { if (pInfo->stbUidList == NULL) { pInfo->stbUidList = taosArrayInit(16, sizeof(tb_uid_t)); - if (pAPI->metaFn.storeGetTableList(pInfo->readHandle.vnode, TSDB_SUPER_TABLE, pInfo->stbUidList) < 0) { - qError("vgId:%d, failed to get stb id list error: %s", vgId, terrstr()); - } + QUERY_CHECK_NULL(pInfo->stbUidList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + code = pAPI->metaFn.storeGetTableList(pInfo->readHandle.vnode, TSDB_SUPER_TABLE, pInfo->stbUidList); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->currGrpIdx < taosArrayGetSize(pInfo->stbUidList)) { tb_uid_t stbUid = *(tb_uid_t*)taosArrayGet(pInfo->stbUidList, pInfo->currGrpIdx); - buildVnodeGroupedStbTableCount(pInfo, pSupp, pRes, dbName, stbUid, pAPI); + code = buildVnodeGroupedStbTableCount(pInfo, pSupp, pRes, dbName, stbUid, pAPI); + QUERY_CHECK_CODE(code, lino, _end); pInfo->currGrpIdx++; } else if (pInfo->currGrpIdx == taosArrayGetSize(pInfo->stbUidList)) { - buildVnodeGroupedNtbTableCount(pInfo, pSupp, pRes, dbName, pAPI); + code = buildVnodeGroupedNtbTableCount(pInfo, pSupp, pRes, dbName, pAPI); + QUERY_CHECK_CODE(code, lino, _end); pInfo->currGrpIdx++; } else { @@ -5255,42 +5877,63 @@ static void buildVnodeGroupedTableCount(SOperatorInfo* pOperator, STableCountSca int64_t dbTableCount = 0; pAPI->metaFn.getBasicInfo(pInfo->readHandle.vnode, NULL, NULL, &dbTableCount, NULL); - fillTableCountScanDataBlock(pSupp, dbName, "", dbTableCount, pRes); + code = fillTableCountScanDataBlock(pSupp, dbName, "", dbTableCount, pRes); + QUERY_CHECK_CODE(code, lino, _end); setOperatorCompleted(pOperator); } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + } } static void buildVnodeFilteredTbCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, SSDataBlock* pRes, char* dbName) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SStorageAPI* pAPI = &pTaskInfo->storageAPI; + SStorageAPI* pAPI = &pTaskInfo->storageAPI; if (strlen(pSupp->dbNameFilter) != 0) { if (strlen(pSupp->stbNameFilter) != 0) { uint64_t uid = 0; - pAPI->metaFn.getTableUidByName(pInfo->readHandle.vnode, pSupp->stbNameFilter, &uid); + code = pAPI->metaFn.getTableUidByName(pInfo->readHandle.vnode, pSupp->stbNameFilter, &uid); + QUERY_CHECK_CODE(code, lino, _end); int64_t numOfChildTables = 0; - pAPI->metaFn.getNumOfChildTables(pInfo->readHandle.vnode, uid, &numOfChildTables, NULL); + code = pAPI->metaFn.getNumOfChildTables(pInfo->readHandle.vnode, uid, &numOfChildTables, NULL); + QUERY_CHECK_CODE(code, lino, _end); - fillTableCountScanDataBlock(pSupp, dbName, pSupp->stbNameFilter, numOfChildTables, pRes); + code = fillTableCountScanDataBlock(pSupp, dbName, pSupp->stbNameFilter, numOfChildTables, pRes); + QUERY_CHECK_CODE(code, lino, _end); } else { int64_t tbNumVnode = 0; pAPI->metaFn.getBasicInfo(pInfo->readHandle.vnode, NULL, NULL, &tbNumVnode, NULL); - fillTableCountScanDataBlock(pSupp, dbName, "", tbNumVnode, pRes); + code = fillTableCountScanDataBlock(pSupp, dbName, "", tbNumVnode, pRes); + QUERY_CHECK_CODE(code, lino, _end); } } else { int64_t tbNumVnode = 0; pAPI->metaFn.getBasicInfo(pInfo->readHandle.vnode, NULL, NULL, &tbNumVnode, NULL); - fillTableCountScanDataBlock(pSupp, dbName, "", tbNumVnode, pRes); + code = fillTableCountScanDataBlock(pSupp, dbName, "", tbNumVnode, pRes); + QUERY_CHECK_CODE(code, lino, _end); } +_end: + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } setOperatorCompleted(pOperator); } -static void buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, - SSDataBlock* pRes, char* dbName, SStorageAPI* pAPI) { - char fullStbName[TSDB_TABLE_FNAME_LEN] = {0}; +static int32_t buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, + SSDataBlock* pRes, char* dbName, SStorageAPI* pAPI) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + char fullStbName[TSDB_TABLE_FNAME_LEN] = {0}; if (pSupp->groupByDbName) { snprintf(fullStbName, TSDB_TABLE_FNAME_LEN, "%s.%s", dbName, ""); } @@ -5302,28 +5945,45 @@ static void buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo* pInfo, S pAPI->metaFn.getBasicInfo(pInfo->readHandle.vnode, NULL, NULL, NULL, &numOfTables); if (numOfTables != 0) { - fillTableCountScanDataBlock(pSupp, dbName, "", numOfTables, pRes); + code = fillTableCountScanDataBlock(pSupp, dbName, "", numOfTables, pRes); } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -static void buildVnodeGroupedStbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, - SSDataBlock* pRes, char* dbName, tb_uid_t stbUid, SStorageAPI* pAPI) { - char stbName[TSDB_TABLE_NAME_LEN] = {0}; - pAPI->metaFn.getTableNameByUid(pInfo->readHandle.vnode, stbUid, stbName); +static int32_t buildVnodeGroupedStbTableCount(STableCountScanOperatorInfo* pInfo, STableCountScanSupp* pSupp, + SSDataBlock* pRes, char* dbName, tb_uid_t stbUid, SStorageAPI* pAPI) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + char stbName[TSDB_TABLE_NAME_LEN] = {0}; + code = pAPI->metaFn.getTableNameByUid(pInfo->readHandle.vnode, stbUid, stbName); + QUERY_CHECK_CODE(code, lino, _end); char fullStbName[TSDB_TABLE_FNAME_LEN] = {0}; if (pSupp->groupByDbName) { - snprintf(fullStbName, TSDB_TABLE_FNAME_LEN, "%s.%s", dbName, varDataVal(stbName)); + (void)snprintf(fullStbName, TSDB_TABLE_FNAME_LEN, "%s.%s", dbName, varDataVal(stbName)); } else { - snprintf(fullStbName, TSDB_TABLE_FNAME_LEN, "%s", varDataVal(stbName)); + (void)snprintf(fullStbName, TSDB_TABLE_FNAME_LEN, "%s", varDataVal(stbName)); } uint64_t groupId = calcGroupId(fullStbName, strlen(fullStbName)); pRes->info.id.groupId = groupId; int64_t ctbNum = 0; - int32_t code = pAPI->metaFn.getNumOfChildTables(pInfo->readHandle.vnode, stbUid, &ctbNum, NULL); - fillTableCountScanDataBlock(pSupp, dbName, varDataVal(stbName), ctbNum, pRes); + code = pAPI->metaFn.getNumOfChildTables(pInfo->readHandle.vnode, stbUid, &ctbNum, NULL); + QUERY_CHECK_CODE(code, lino, _end); + code = fillTableCountScanDataBlock(pSupp, dbName, varDataVal(stbName), ctbNum, pRes); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static void destoryTableCountScanOperator(void* param) { diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index 04310276a9..3471f02bf5 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -84,7 +84,7 @@ int32_t setCountOutputBuf(SStreamAggSupporter* pAggSup, TSKEY ts, uint64_t group if (pBuffInfo->winBuffOp == CREATE_NEW_WINDOW) { code = pAggSup->stateStore.streamStateCountWinAdd(pAggSup->pState, &pCurWin->winInfo.sessionWin, (void**)&pCurWin->winInfo.pStatePos, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); winCode = TSDB_CODE_FAILED; } else if (pBuffInfo->winBuffOp == MOVE_NEXT_WINDOW) { @@ -95,7 +95,7 @@ int32_t setCountOutputBuf(SStreamAggSupporter* pAggSup, TSKEY ts, uint64_t group if (winCode == TSDB_CODE_FAILED) { code = pAggSup->stateStore.streamStateCountWinAdd(pAggSup->pState, &pCurWin->winInfo.sessionWin, (void**)&pCurWin->winInfo.pStatePos, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else { pBuffInfo->pCur = pAggSup->stateStore.streamStateCountSeekKeyPrev(pAggSup->pState, &pCurWin->winInfo.sessionWin, @@ -105,7 +105,7 @@ int32_t setCountOutputBuf(SStreamAggSupporter* pAggSup, TSKEY ts, uint64_t group if (winCode == TSDB_CODE_FAILED) { code = pAggSup->stateStore.streamStateCountWinAdd(pAggSup->pState, &pCurWin->winInfo.sessionWin, (void**)&pCurWin->winInfo.pStatePos, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } if (ts < pCurWin->winInfo.sessionWin.win.ekey) { @@ -115,7 +115,7 @@ int32_t setCountOutputBuf(SStreamAggSupporter* pAggSup, TSKEY ts, uint64_t group code = pAggSup->stateStore.streamStateCountWinAddIfNotExist(pAggSup->pState, &pCurWin->winInfo.sessionWin, pAggSup->windowCount, (void**)&pCurWin->winInfo.pStatePos, &size, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (winCode == TSDB_CODE_SUCCESS) { @@ -173,7 +173,7 @@ static int32_t updateCountWindowInfo(SStreamAggSupporter* pAggSup, SCountWindowI needDelState = true; if (pStDeleted && pWinInfo->winInfo.isOutput) { code = saveDeleteRes(pStDeleted, pWinInfo->winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pWinInfo->winInfo.sessionWin.win.skey = pTs[start]; @@ -268,11 +268,11 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SColumnInfoData* pStartTsCol = taosArrayGet(pSDataBlock->pDataBlock, pInfo->primaryTsIndex); if (!pStartTsCol) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY* startTsCols = (int64_t*)pStartTsCol->pData; code = blockDataEnsureCapacity(pAggSup->pScanBlock, rows * 2); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SStreamStateCur* pCur = NULL; COUNT_TYPE slidingRows = 0; @@ -287,7 +287,7 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SCountWindowInfo curWin = {0}; buffInfo.rebuildWindow = false; code = setCountOutputBuf(pAggSup, startTsCols[i], groupId, &curWin, &buffInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!inCountSlidingWindow(pAggSup, &curWin.winInfo.sessionWin.win, &pSDataBlock->info)) { buffInfo.winBuffOp = MOVE_NEXT_WINDOW; @@ -296,9 +296,9 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl setSessionWinOutputInfo(pStUpdated, &curWin.winInfo); slidingRows = *curWin.pWindowCount; if (!buffInfo.rebuildWindow) { - code = updateCountWindowInfo(pAggSup, &curWin, startTsCols, i, rows, pAggSup->windowCount, pStUpdated, - pStDeleted, &buffInfo.rebuildWindow, &winRows); - TSDB_CHECK_CODE(code, lino, _end); + code = updateCountWindowInfo(pAggSup, &curWin, startTsCols, i, rows, pAggSup->windowCount, pStUpdated, pStDeleted, + &buffInfo.rebuildWindow, &winRows); + QUERY_CHECK_CODE(code, lino, _end); } if (buffInfo.rebuildWindow) { SSessionKey range = {0}; @@ -310,24 +310,26 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl range.win.skey = TMIN(startTsCols[i], range.win.skey); range.win.ekey = TMAX(startTsCols[rows - 1], range.win.ekey); uint64_t uid = 0; - appendDataToSpecialBlock(pAggSup->pScanBlock, &range.win.skey, &range.win.ekey, &uid, &range.groupId, NULL); + code = + appendDataToSpecialBlock(pAggSup->pScanBlock, &range.win.skey, &range.win.ekey, &uid, &range.groupId, NULL); + QUERY_CHECK_CODE(code, lino, _end); break; } code = doOneWindowAggImpl(&pInfo->twAggSup.timeWindowData, &curWin.winInfo, &pResult, i, winRows, rows, numOfOutput, pOperator, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = saveSessionOutputBuf(pAggSup, &curWin.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && curWin.winInfo.isOutput && IS_NORMAL_COUNT_OP(pOperator)) { code = saveDeleteRes(pInfo->pPkDeleted, curWin.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE && pStUpdated) { code = saveResult(curWin.winInfo, pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { curWin.winInfo.pStatePos->beUpdated = true; @@ -335,7 +337,7 @@ static void doStreamCountAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl getSessionHashKey(&curWin.winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curWin.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (isSlidingCountWindow(pAggSup)) { @@ -425,7 +427,7 @@ int32_t doStreamCountDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera SStreamCountAggOperatorInfo* pInfo = pOperator->info; if (!pInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 4.checksum @@ -434,7 +436,7 @@ int32_t doStreamCountDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera void* pCksum = POINTER_SHIFT(buf, dataLen); if (taosCheckChecksum(buf, dataLen, *(uint32_t*)pCksum) != TSDB_CODE_SUCCESS) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -447,12 +449,12 @@ int32_t doStreamCountDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera buf = decodeSSessionKey(buf, &key); SBuffInfo buffInfo = {.rebuildWindow = false, .winBuffOp = NONE_WINDOW, .pCur = NULL}; code = setCountOutputBuf(&pInfo->streamAggSup, key.win.skey, key.groupId, &curWin, &buffInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); buf = decodeSResultWindowInfo(buf, &curWin.winInfo, pInfo->streamAggSup.resultRowSize); code = tSimpleHashPut(pInfo->streamAggSup.pResultRows, &key, sizeof(SSessionKey), &curWin.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 2.twAggSup @@ -478,7 +480,7 @@ void doStreamCountSaveCheckpoint(SOperatorInfo* pOperator) { pBuf = taosMemoryCalloc(1, len); if (!pBuf) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } len = doStreamCountEncodeOpState(&pBuf, len, pOperator, true); pInfo->streamAggSup.stateStore.streamStateSaveInfo(pInfo->streamAggSup.pState, STREAM_COUNT_OP_CHECKPOINT_NAME, @@ -556,7 +558,7 @@ int32_t doDeleteCountWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, doDeleteSessionWindow(pAggSup, &curWin); if (result) { code = saveDeleteInfo(result, curWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -575,22 +577,22 @@ int32_t deleteCountWinState(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, S SArray* pWins = taosArrayInit(16, sizeof(SSessionKey)); if (!pWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (isSlidingCountWindow(pAggSup)) { code = doDeleteCountWindows(pAggSup, pBlock, pWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else { code = doDeleteTimeWindows(pAggSup, pBlock, pWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } removeSessionResults(pAggSup, pMapUpdate, pWins); code = copyDeleteWindowInfo(pWins, pMapDelete); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (needAdd) { code = copyDeleteWindowInfo(pWins, pPkDelete); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosArrayDestroy(pWins); @@ -653,7 +655,7 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { bool add = pInfo->destHasPrimaryKey && IS_NORMAL_COUNT_OP(pOperator); code = deleteCountWinState(&pInfo->streamAggSup, pBlock, pInfo->pStUpdated, pInfo->pStDeleted, pInfo->pPkDeleted, add); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CLEAR) { doResetCountWindows(&pInfo->streamAggSup, pBlock); @@ -661,7 +663,7 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { } else if (pBlock->info.type == STREAM_GET_ALL) { pInfo->recvGetAll = true; code = getAllSessionWindow(pAggSup->pResultRows, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -669,7 +671,7 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { pAggSup->stateStore.streamStateCommit(pAggSup->pState); doStreamCountSaveCheckpoint(pOperator); code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else { ASSERTS(pBlock->info.type == STREAM_NORMAL || pBlock->info.type == STREAM_INVALID, "invalid SSDataBlock type"); @@ -678,7 +680,7 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); @@ -690,20 +692,20 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { pOperator->status = OP_RES_TO_RETURN; code = closeSessionWindow(pAggSup->pResultRows, &pInfo->twAggSup, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = copyUpdateResult(&pInfo->pStUpdated, pInfo->pUpdated, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionDeleteResults(pInfo->pStDeleted, pInfo->pUpdated); initGroupResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && IS_NORMAL_COUNT_OP(pOperator)) { code = copyDeleteSessionKey(pInfo->pPkDeleted, pInfo->pStDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SSDataBlock* opRes = buildCountResult(pOperator); @@ -727,7 +729,7 @@ void streamCountReleaseState(SOperatorInfo* pOperator) { char* pBuff = taosMemoryCalloc(1, resSize); if (pBuff) { code = terrno; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pBuff, &pInfo->twAggSup.maxTs, sizeof(TSKEY)); qDebug("===stream=== count window operator relase state. "); @@ -755,7 +757,7 @@ void streamCountReloadState(SOperatorInfo* pOperator) { code = pAggSup->stateStore.streamStateGetInfo(pAggSup->pState, STREAM_COUNT_OP_STATE_NAME, strlen(STREAM_COUNT_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); TSKEY ts = *(TSKEY*)pBuf; pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, ts); @@ -783,7 +785,7 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pOperator->pTaskInfo = pTaskInfo; @@ -793,14 +795,14 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys int32_t numOfScalar = 0; SExprInfo* pScalarExprInfo = createExprInfo(pCountNode->window.pExprs, NULL, &numOfScalar); code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SExprSupp* pExpSup = &pOperator->exprSupp; SExprInfo* pExprInfo = createExprInfo(pCountNode->window.pFuncs, NULL, &numOfCols); SSDataBlock* pResBlock = createDataBlockFromDescNode(pPhyNode->pOutputDataBlockDesc); code = initBasicInfoEx(&pInfo->binfo, pExpSup, pExprInfo, numOfCols, pResBlock, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pInfo->twAggSup = (STimeWindowAggSupp){ .waterMark = pCountNode->window.watermark, @@ -814,7 +816,7 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys code = initStreamAggSupporter(&pInfo->streamAggSup, pExpSup, numOfCols, 0, pTaskInfo->streamInfo.pState, sizeof(COUNT_TYPE), 0, &pTaskInfo->storageAPI.stateStore, pHandle, &pInfo->twAggSup, GET_TASKID(pTaskInfo), &pTaskInfo->storageAPI, pInfo->primaryTsIndex); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pInfo->streamAggSup.windowCount = pCountNode->windowCount; pInfo->streamAggSup.windowSliding = pCountNode->windowSliding; @@ -834,7 +836,7 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys pInfo->historyWins = taosArrayInit(4, sizeof(SSessionKey)); if (!pInfo->historyWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pInfo->pCheckpointRes = createSpecialDataBlock(STREAM_CHECKPOINT); @@ -853,7 +855,7 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys strlen(STREAM_COUNT_OP_CHECKPOINT_NAME), &buff, &len); if (res == TSDB_CODE_SUCCESS) { code = doStreamCountDecodeOpState(buff, len, pOperator, true); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); taosMemoryFree(buff); } pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doStreamCountAgg, NULL, destroyStreamCountAggOperatorInfo, @@ -863,10 +865,10 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys if (downstream) { code = initDownStream(downstream, &pInfo->streamAggSup, pOperator->operatorType, pInfo->primaryTsIndex, &pInfo->twAggSup, &pInfo->basic); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } return pOperator; diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 2d6f9b1fc5..807cf5a4ba 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -154,7 +154,7 @@ int32_t setEventOutputBuf(SStreamAggSupporter* pAggSup, TSKEY* pTs, uint64_t gro SSessionKey winKey = {.win.skey = ts, .win.ekey = ts, .groupId = groupId}; code = pAggSup->stateStore.streamStateSessionAllocWinBuffByNextPosition(pAggSup->pState, pCur, &winKey, &pVal, &len); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); setEventWindowInfo(pAggSup, &winKey, pVal, pCurWin); pCurWin->pWinFlag->startFlag = start; @@ -213,7 +213,7 @@ int32_t updateEventWindowInfo(SStreamAggSupporter* pAggSup, SEventWindowInfo* pW if (pWin->skey > pTsData[i]) { if (pStDeleted && pWinInfo->winInfo.isOutput) { code = saveDeleteRes(pStDeleted, pWinInfo->winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } removeSessionResult(pAggSup, pStUpdated, pResultRows, &pWinInfo->winInfo.sessionWin); pWin->skey = pTsData[i]; @@ -278,7 +278,7 @@ static int32_t compactEventWindow(SOperatorInfo* pOperator, SEventWindowInfo* pC setEventWindowFlag(pAggSup, &nextWinInfo); code = compactTimeWindow(pSup, pAggSup, &pInfo->twAggSup, pTaskInfo, &pCurWin->winInfo, &nextWinInfo.winInfo, pStUpdated, pStDeleted, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pCurWin->pWinFlag->endFlag = nextWinInfo.pWinFlag->endFlag; } @@ -321,7 +321,7 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SColumnInfoData* pColDataInfo = taosArrayGet(pSDataBlock->pDataBlock, pInfo->primaryTsIndex); if (!pColDataInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tsCols = (int64_t*)pColDataInfo->pData; } else { @@ -337,7 +337,7 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl } int32_t statusStart = 0; code = filterExecute(pInfo->pStartCondInfo, pSDataBlock, &pColStart, NULL, paramStart.numOfCols, &statusStart); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SFilterColumnParam paramEnd = {.numOfCols = taosArrayGetSize(pSDataBlock->pDataBlock), .pDataBlock = pSDataBlock->pDataBlock}; @@ -349,11 +349,11 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl int32_t statusEnd = 0; code = filterExecute(pInfo->pEndCondInfo, pSDataBlock, &pColEnd, NULL, paramEnd.numOfCols, &statusEnd); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t rows = pSDataBlock->info.rows; code = blockDataEnsureCapacity(pAggSup->pScanBlock, rows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); for (int32_t i = 0; i < rows; i += winRows) { if (pInfo->ignoreExpiredData && checkExpiredData(&pInfo->streamAggSup.stateStore, pInfo->streamAggSup.pUpdateInfo, @@ -367,48 +367,50 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SSessionKey nextWinKey = {0}; code = setEventOutputBuf(pAggSup, tsCols, groupId, (bool*)pColStart->pData, (bool*)pColEnd->pData, i, rows, &curWin, &nextWinKey); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); setSessionWinOutputInfo(pSeUpdated, &curWin.winInfo); bool rebuild = false; code = updateEventWindowInfo(pAggSup, &curWin, &nextWinKey, tsCols, (bool*)pColStart->pData, (bool*)pColEnd->pData, rows, i, pAggSup->pResultRows, pSeUpdated, pStDeleted, &rebuild, &winRows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(winRows >= 1); if (rebuild) { uint64_t uid = 0; - appendDataToSpecialBlock(pAggSup->pScanBlock, &curWin.winInfo.sessionWin.win.skey, - &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); + code = appendDataToSpecialBlock(pAggSup->pScanBlock, &curWin.winInfo.sessionWin.win.skey, + &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); + QUERY_CHECK_CODE(code, lino, _end); + code = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); doDeleteEventWindow(pAggSup, pSeUpdated, &curWin.winInfo.sessionWin); if (pInfo->destHasPrimaryKey && curWin.winInfo.isOutput && IS_NORMAL_EVENT_OP(pOperator) && !isWindowIncomplete(&curWin)) { code = saveDeleteRes(pInfo->pPkDeleted, curWin.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } releaseOutputBuf(pAggSup->pState, curWin.winInfo.pStatePos, &pAPI->stateStore); SSessionKey tmpSeInfo = {0}; getSessionHashKey(&curWin.winInfo.sessionWin, &tmpSeInfo); code = tSimpleHashPut(pStDeleted, &tmpSeInfo, sizeof(SSessionKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } code = doOneWindowAggImpl(&pInfo->twAggSup.timeWindowData, &curWin.winInfo, &pResult, i, winRows, rows, numOfOutput, pOperator, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = compactEventWindow(pOperator, &curWin, pInfo->pSeUpdated, pInfo->pSeDeleted, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = saveSessionOutputBuf(pAggSup, &curWin.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->isHistoryOp) { code = saveResult(curWin.winInfo, pInfo->pAllUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (isWindowIncomplete(&curWin)) { @@ -418,12 +420,12 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl if (pInfo->destHasPrimaryKey && curWin.winInfo.isOutput && IS_NORMAL_EVENT_OP(pOperator)) { code = saveDeleteRes(pInfo->pPkDeleted, curWin.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveResult(curWin.winInfo, pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { @@ -432,7 +434,7 @@ static void doStreamEventAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl getSessionHashKey(&curWin.winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curWin.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -490,7 +492,7 @@ int32_t doStreamEventDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera SStreamEventAggOperatorInfo* pInfo = pOperator->info; if (!pInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; @@ -500,7 +502,7 @@ int32_t doStreamEventDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera if (taosCheckChecksum(buf, dataLen, *(uint32_t*)pCksum) != TSDB_CODE_SUCCESS) { qError("stream event state is invalid"); code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 1.streamAggSup.pResultRows @@ -513,13 +515,13 @@ int32_t doStreamEventDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t winCode = TSDB_CODE_SUCCESS; code = pAggSup->stateStore.streamStateSessionAddIfNotExist( pAggSup->pState, &winfo.sessionWin, pAggSup->gap, (void**)&winfo.pStatePos, &pAggSup->resultRowSize, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(winCode == TSDB_CODE_SUCCESS); buf = decodeSResultWindowInfo(buf, &winfo, pInfo->streamAggSup.resultRowSize); code = tSimpleHashPut(pInfo->streamAggSup.pResultRows, &key, sizeof(SSessionKey), &winfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 2.twAggSup @@ -622,12 +624,12 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { bool add = pInfo->destHasPrimaryKey && IS_NORMAL_EVENT_OP(pOperator); code = deleteSessionWinState(&pInfo->streamAggSup, pBlock, pInfo->pSeUpdated, pInfo->pSeDeleted, pInfo->pPkDeleted, add); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_GET_ALL) { pInfo->recvGetAll = true; code = getAllSessionWindow(pInfo->streamAggSup.pResultRows, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -636,7 +638,7 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { doStreamEventSaveCheckpoint(pOperator); pInfo->reCkBlock = true; code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else { ASSERTS(pBlock->info.type == STREAM_NORMAL || pBlock->info.type == STREAM_INVALID, "invalid SSDataBlock type"); @@ -645,7 +647,7 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); @@ -656,10 +658,10 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { pOperator->status = OP_RES_TO_RETURN; code = closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = copyUpdateResult(&pInfo->pSeUpdated, pInfo->pUpdated, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionDeleteResults(pInfo->pSeDeleted, pInfo->pUpdated); @@ -667,26 +669,26 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { SArray* pHisWins = taosArrayInit(16, sizeof(SEventWindowInfo)); if (!pHisWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = copyUpdateResult(&pInfo->pAllUpdated, pHisWins, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = getMaxTsWins(pHisWins, pInfo->historyWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); taosArrayDestroy(pHisWins); } if (pInfo->destHasPrimaryKey && IS_NORMAL_EVENT_OP(pOperator)) { code = copyDeleteSessionKey(pInfo->pPkDeleted, pInfo->pSeDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } initGroupResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* resBlock = buildEventResult(pOperator); if (resBlock != NULL) { @@ -733,7 +735,7 @@ void streamEventReloadState(SOperatorInfo* pOperator) { void* pBuf = NULL; code = pAggSup->stateStore.streamStateGetInfo(pAggSup->pState, STREAM_EVENT_OP_STATE_NAME, strlen(STREAM_EVENT_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t num = (size - sizeof(TSKEY)) / sizeof(SSessionKey); qDebug("===stream=== event window operator reload state. get result count:%d", num); @@ -757,7 +759,7 @@ void streamEventReloadState(SOperatorInfo* pOperator) { qDebug("===stream=== reload state. try process result %" PRId64 ", %" PRIu64 ", index:%d", pSeKeyBuf[i].win.skey, pSeKeyBuf[i].groupId, i); code = getSessionWindowInfoByKey(pAggSup, pSeKeyBuf + i, &curInfo.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // event window has been deleted if (!IS_VALID_SESSION_WIN(curInfo.winInfo)) { @@ -766,18 +768,18 @@ void streamEventReloadState(SOperatorInfo* pOperator) { setEventWindowFlag(pAggSup, &curInfo); if (!curInfo.pWinFlag->startFlag || curInfo.pWinFlag->endFlag) { code = saveSessionOutputBuf(pAggSup, &curInfo.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } code = compactEventWindow(pOperator, &curInfo, pInfo->pSeUpdated, pInfo->pSeDeleted, false); qDebug("===stream=== reload state. save result %" PRId64 ", %" PRIu64, curInfo.winInfo.sessionWin.win.skey, curInfo.winInfo.sessionWin.groupId); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (IS_VALID_SESSION_WIN(curInfo.winInfo)) { code = saveSessionOutputBuf(pAggSup, &curInfo.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (!curInfo.pWinFlag->endFlag) { @@ -786,17 +788,17 @@ void streamEventReloadState(SOperatorInfo* pOperator) { if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveResult(curInfo.winInfo, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { if (!isCloseWindow(&curInfo.winInfo.sessionWin.win, &pInfo->twAggSup)) { code = saveDeleteRes(pInfo->pSeDeleted, curInfo.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SSessionKey key = {0}; getSessionHashKey(&curInfo.winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curInfo.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } taosMemoryFree(pBuf); @@ -904,7 +906,7 @@ SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhys if (res == TSDB_CODE_SUCCESS) { code = doStreamEventDecodeOpState(buff, len, pOperator); taosMemoryFree(buff); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doStreamEventAgg, NULL, destroyStreamEventOperatorInfo, @@ -912,16 +914,16 @@ SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhys setOperatorStreamStateFn(pOperator, streamEventReleaseState, streamEventReloadState); code = initDownStream(downstream, &pInfo->streamAggSup, pOperator->operatorType, pInfo->primaryTsIndex, &pInfo->twAggSup, &pInfo->basic); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pEventNode->pStartCond, &pInfo->pStartCondInfo, 0); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pEventNode->pEndCond, &pInfo->pEndCondInfo, 0); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); return pOperator; diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index 314a226b5d..a9cc270f7a 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -472,7 +472,7 @@ static int32_t checkResult(SStreamFillSupporter* pFillSup, TSKEY ts, uint64_t gr (*pRes) = false; } code = tSimpleHashPut(pFillSup->pResMap, &key, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pRes) = true; _end: @@ -493,7 +493,7 @@ static int32_t buildFillResult(SResultRowData* pResRow, SStreamFillSupporter* pF uint64_t groupId = pBlock->info.id.groupId; bool ckRes = true; code = checkResult(pFillSup, ts, groupId, &ckRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pFillSup->hasDelete && !ckRes) { (*pRes) = true; @@ -512,7 +512,7 @@ static int32_t buildFillResult(SResultRowData* pResRow, SStreamFillSupporter* pF if (!filled) { SResultCellData* pCell = getResultCell(pResRow, slotId); code = setRowCell(pColData, pBlock->info.rows, pCell); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } pBlock->info.rows++; @@ -540,7 +540,7 @@ static void doStreamFillNormal(SStreamFillSupporter* pFillSup, SStreamFillInfo* if (inWinRange(&pFillSup->winRange, &st)) { bool res = true; code = buildFillResult(pFillInfo->pResRow, pFillSup, pFillInfo->current, pBlock, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->current = taosTimeAdd(pFillInfo->current, pFillSup->interval.sliding, pFillSup->interval.slidingUnit, pFillSup->interval.precision); @@ -561,7 +561,7 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo* STimeWindow st = {.skey = pFillInfo->current, .ekey = pFillInfo->current}; bool ckRes = true; code = checkResult(pFillSup, pFillInfo->current, groupId, &ckRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if ((pFillSup->hasDelete && !ckRes) || !inWinRange(&pFillSup->winRange, &st)) { @@ -588,7 +588,7 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo* bool filled = fillIfWindowPseudoColumn(&tmp, pFillCol, pColData, index); if (!filled) { code = setRowCell(pColData, index, pCell); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else { if (IS_VAR_DATA_TYPE(type) || type == TSDB_DATA_TYPE_BOOL || pCell->isNull) { @@ -606,7 +606,7 @@ static void doStreamFillLinear(SStreamFillSupporter* pFillSup, SStreamFillInfo* cur.val = taosMemoryCalloc(1, pCell->bytes); taosGetLinearInterpolationVal(&cur, pCell->type, &start, pEnd, pCell->type); code = colDataSetVal(pColData, index, (const char*)cur.val, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); destroySPoint(&cur); } } @@ -636,13 +636,13 @@ static void doStreamFillRange(SStreamFillInfo* pFillInfo, SStreamFillSupporter* bool res = false; if (pFillInfo->needFill == false) { code = buildFillResult(&pFillSup->cur, pFillSup, pFillSup->cur.key, pRes, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); return; } if (pFillInfo->pos == FILL_POS_START) { code = buildFillResult(&pFillSup->cur, pFillSup, pFillSup->cur.key, pRes, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (res) { pFillInfo->pos = FILL_POS_INVALID; } @@ -654,7 +654,7 @@ static void doStreamFillRange(SStreamFillInfo* pFillInfo, SStreamFillSupporter* if (pFillInfo->pos == FILL_POS_MID) { code = buildFillResult(&pFillSup->cur, pFillSup, pFillSup->cur.key, pRes, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (res) { pFillInfo->pos = FILL_POS_INVALID; } @@ -671,7 +671,7 @@ static void doStreamFillRange(SStreamFillInfo* pFillInfo, SStreamFillSupporter* } if (pFillInfo->pos == FILL_POS_END) { code = buildFillResult(&pFillSup->cur, pFillSup, pFillSup->cur.key, pRes, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (res) { pFillInfo->pos = FILL_POS_INVALID; } @@ -731,14 +731,14 @@ static void doStreamFillImpl(SOperatorInfo* pOperator) { doFillResults(pOperator, pFillSup, pFillInfo, pBlock, tsCol, pInfo->srcRowIndex - 1, pRes); if (pInfo->pRes->info.rows == pInfo->pRes->info.capacity) { code = blockDataUpdateTsWindow(pRes, pInfo->primaryTsCol); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); return; } pInfo->srcRowIndex++; } doFillResults(pOperator, pFillSup, pFillInfo, pBlock, tsCol, pInfo->srcRowIndex - 1, pRes); code = blockDataUpdateTsWindow(pRes, pInfo->primaryTsCol); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); blockDataCleanup(pInfo->pSrcBlock); _end: @@ -761,14 +761,14 @@ static int32_t buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint SColumnInfoData* pCalEndCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX); SColumnInfoData* pTbNameCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX); code = colDataSetVal(pStartCol, pBlock->info.rows, (const char*)&start, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = colDataSetVal(pEndCol, pBlock->info.rows, (const char*)&end, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); colDataSetNULL(pUidCol, pBlock->info.rows); code = colDataSetVal(pGroupCol, pBlock->info.rows, (const char*)&groupId, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); colDataSetNULL(pCalStartCol, pBlock->info.rows); colDataSetNULL(pCalEndCol, pBlock->info.rows); @@ -778,7 +778,7 @@ static int32_t buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint void* tbname = NULL; int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { colDataSetNULL(pTableCol, pBlock->info.rows); } else { @@ -786,7 +786,7 @@ static int32_t buildDeleteRange(SOperatorInfo* pOp, TSKEY start, TSKEY end, uint char parTbName[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN]; STR_WITH_MAXSIZE_TO_VARSTR(parTbName, tbname, sizeof(parTbName)); code = colDataSetVal(pTableCol, pBlock->info.rows, (const char*)parTbName, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pAPI->stateStore.streamStateFreeVal(tbname); } @@ -808,14 +808,14 @@ static int32_t buildDeleteResult(SOperatorInfo* pOperator, TSKEY startTs, TSKEY if (hasPrevWindow(pFillSup)) { TSKEY start = getNextWindowTs(pFillSup->prev.key, &pFillSup->interval); code = buildDeleteRange(pOperator, start, endTs, groupId, delRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else if (hasNextWindow(pFillSup)) { TSKEY end = getPrevWindowTs(pFillSup->next.key, &pFillSup->interval); code = buildDeleteRange(pOperator, startTs, end, groupId, delRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else { code = buildDeleteRange(pOperator, startTs, endTs, groupId, delRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -836,7 +836,7 @@ static int32_t doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, T pAPI->stateStore.streamStateFillDel(pOperator->pTaskInfo->streamInfo.pState, &key); if (!pInfo->pFillInfo->needFill) { code = buildDeleteResult(pOperator, startTs, endTs, groupId, pInfo->pDelRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else { STimeRange tw = { .skey = startTs, @@ -846,7 +846,7 @@ static int32_t doDeleteFillResultImpl(SOperatorInfo* pOperator, TSKEY startTs, T void* tmp = taosArrayPush(pInfo->pFillInfo->delRanges, &tw); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -960,7 +960,7 @@ static int32_t doDeleteFillResult(SOperatorInfo* pOperator) { pAPI->stateStore.streamStateFreeCur(pCur); code = doDeleteFillResultImpl(pOperator, ts, endTs, groupId); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->current = pFillInfo->end + 1; @@ -988,17 +988,17 @@ static int32_t doApplyStreamScalarCalculation(SOperatorInfo* pOperator, SSDataBl blockDataCleanup(pDstBlock); code = blockDataEnsureCapacity(pDstBlock, pSrcBlock->info.rows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); code = projectApplyFunctions(pSup->pExprInfo, pDstBlock, pSrcBlock, pSup->pCtx, pSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pDstBlock->info.rows = 0; pSup = &pInfo->pFillSup->notFillExprSup; setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); code = projectApplyFunctions(pSup->pExprInfo, pDstBlock, pSrcBlock, pSup->pCtx, pSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pDstBlock->info.id.groupId = pSrcBlock->info.id.groupId; @@ -1076,7 +1076,7 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { blockDataCleanup(pInfo->pDelRes); pInfo->pFillSup->hasDelete = true; code = doDeleteFillResult(pOperator); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->pDelRes->info.rows > 0) { printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); @@ -1088,7 +1088,7 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { case STREAM_INVALID: case STREAM_PULL_DATA: { code = doApplyStreamScalarCalculation(pOperator, pBlock, pInfo->pSrcBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); memcpy(pInfo->pSrcBlock->info.parTbName, pBlock->info.parTbName, TSDB_TABLE_NAME_LEN); pInfo->srcRowIndex = -1; @@ -1104,7 +1104,7 @@ static SSDataBlock* doStreamFill(SOperatorInfo* pOperator) { doStreamFillImpl(pOperator); code = doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); memcpy(pInfo->pRes->info.parTbName, pInfo->pSrcBlock->info.parTbName, TSDB_TABLE_NAME_LEN); pOperator->resultInfo.totalRows += pInfo->pRes->info.rows; @@ -1161,7 +1161,7 @@ static SStreamFillSupporter* initStreamFillSup(SStreamFillPhysiNode* pPhyFillNod SStreamFillSupporter* pFillSup = taosMemoryCalloc(1, sizeof(SStreamFillSupporter)); if (!pFillSup) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillSup->numOfFillCols = numOfFillCols; int32_t numOfNotFillCols = 0; @@ -1174,11 +1174,11 @@ static SStreamFillSupporter* initStreamFillSup(SStreamFillPhysiNode* pPhyFillNod pFillSup->pAPI = pAPI; code = initResultBuf(pFillSup); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SExprInfo* noFillExpr = createExprInfo(pPhyFillNode->pNotFillExprs, NULL, &numOfNotFillCols); code = initExprSupp(&pFillSup->notFillExprSup, noFillExpr, numOfNotFillCols, &pAPI->functionStore); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); pFillSup->pResMap = tSimpleHashInit(16, hashFn); @@ -1199,7 +1199,7 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* SStreamFillInfo* pFillInfo = taosMemoryCalloc(1, sizeof(SStreamFillInfo)); if (!pFillInfo) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->start = INT64_MIN; @@ -1210,7 +1210,7 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* pFillInfo->pLinearInfo = taosMemoryCalloc(1, sizeof(SStreamFillLinearInfo)); if (!pFillInfo) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->pLinearInfo->hasNext = false; @@ -1221,13 +1221,13 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* pFillInfo->pLinearInfo->pEndPoints = taosArrayInit(pFillSup->numOfAllCols, sizeof(SPoint)); if (!pFillInfo->pLinearInfo->pEndPoints) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->pLinearInfo->pNextEndPoints = taosArrayInit(pFillSup->numOfAllCols, sizeof(SPoint)); if (!pFillInfo->pLinearInfo->pNextEndPoints) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } for (int32_t i = 0; i < pFillSup->numOfAllCols; i++) { @@ -1236,25 +1236,25 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* value.val = taosMemoryCalloc(1, pColData->info.bytes); if (!value.val) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* tmpRes = taosArrayPush(pFillInfo->pLinearInfo->pEndPoints, &value); if (!tmpRes) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } value.val = taosMemoryCalloc(1, pColData->info.bytes); if (!value.val) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tmpRes = taosArrayPush(pFillInfo->pLinearInfo->pNextEndPoints, &value); if (!tmpRes) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -1266,14 +1266,14 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* pFillInfo->pResRow = taosMemoryCalloc(1, sizeof(SResultRowData)); if (!pFillInfo->pResRow) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->pResRow->key = INT64_MIN; pFillInfo->pResRow->pRowVal = taosMemoryCalloc(1, pFillSup->rowSize); if (!pFillInfo->pResRow->pRowVal) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } for (int32_t i = 0; i < pFillSup->numOfAllCols; ++i) { @@ -1288,7 +1288,7 @@ SStreamFillInfo* initStreamFillInfo(SStreamFillSupporter* pFillSup, SSDataBlock* pFillInfo->delRanges = taosArrayInit(16, sizeof(STimeRange)); if (!pFillInfo->delRanges) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFillInfo->delIndex = 0; @@ -1311,7 +1311,7 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SInterval* pInterval = &((SStreamIntervalOperatorInfo*)downstream->info)->interval; @@ -1320,17 +1320,17 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi pInfo->pFillSup = initStreamFillSup(pPhyFillNode, pInterval, pFillExprInfo, numOfFillCols, &pTaskInfo->storageAPI); if (!pInfo->pFillSup) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } initResultSizeInfo(&pOperator->resultInfo, 4096); pInfo->pRes = createDataBlockFromDescNode(pPhyFillNode->node.pOutputDataBlockDesc); pInfo->pSrcBlock = createDataBlockFromDescNode(pPhyFillNode->node.pOutputDataBlockDesc); code = blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = blockDataEnsureCapacity(pInfo->pSrcBlock, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pInfo->pFillInfo = initStreamFillInfo(pInfo->pFillSup, pInfo->pRes); if (!pInfo->pFillInfo) { @@ -1371,11 +1371,11 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi pInfo->pDelRes = createSpecialDataBlock(STREAM_DELETE_RESULT); if (!pInfo->pDelRes) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } code = blockDataEnsureCapacity(pInfo->pDelRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pInfo->primaryTsCol = ((STargetNode*)pPhyFillNode->pWStartTs)->slotId; pInfo->primarySrcSlotId = ((SColumnNode*)((STargetNode*)pPhyFillNode->pWStartTs)->pExpr)->slotId; @@ -1383,13 +1383,13 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi int32_t numOfOutputCols = 0; code = extractColMatchInfo(pPhyFillNode->pFillExprs, pPhyFillNode->node.pOutputDataBlockDesc, &numOfOutputCols, COL_MATCH_FROM_SLOT_ID, &pInfo->matchInfo); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pPhyFillNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = initExprSupp(&pOperator->exprSupp, pFillExprInfo, numOfFillCols, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pInfo->srcRowIndex = -1; setOperatorInfo(pOperator, "StreamFillOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL, false, OP_NOT_OPENED, pInfo, @@ -1399,7 +1399,7 @@ SOperatorInfo* createStreamFillOperatorInfo(SOperatorInfo* downstream, SStreamFi setOperatorStreamStateFn(pOperator, streamOpReleaseState, streamOpReloadState); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); return pOperator; _error: diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 50b20344d6..b2af12aab9 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -272,7 +272,7 @@ static int32_t doDeleteWindows(SOperatorInfo* pOperator, SInterval* pInterval, S qDebug("===stream===save invalid delete window:%" PRId64 ",groupId:%" PRId64 ",chId:%d", winRes.ts, winRes.groupId, childId); code = taosHashPut(pInvalidWins, &winRes, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SArray* chArray = *(void**)chIds; @@ -289,7 +289,7 @@ static int32_t doDeleteWindows(SOperatorInfo* pOperator, SInterval* pInterval, S void* tmp = taosArrayPush(pUpWins, &winRes); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } if (pUpdatedMap) { @@ -367,7 +367,7 @@ static int32_t closeStreamIntervalWindow(SSHashObj* pHashMap, STimeWindowAggSupp if (pTwSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { code = saveWinResult(pWinKey, *(SRowBuffPos**)pIte, closeWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t tmpRes = tSimpleHashIterateRemove(pHashMap, pWinKey, sizeof(SWinKey), &pIte, &iter); qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); @@ -399,7 +399,7 @@ static void doBuildDeleteResult(SStreamIntervalOperatorInfo* pInfo, SArray* pWin goto _end; } code = blockDataEnsureCapacity(pBlock, size - *index); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); uint64_t uid = 0; for (int32_t i = *index; i < size; i++) { @@ -407,15 +407,17 @@ static void doBuildDeleteResult(SStreamIntervalOperatorInfo* pInfo, SArray* pWin void* tbname = NULL; int32_t winCode = TSDB_CODE_SUCCESS; code = pInfo->stateStore.streamStateGetParName(pInfo->pState, pWin->groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { - appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, NULL); + code = appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, NULL); + QUERY_CHECK_CODE(code, lino, _end); } else { ASSERT(tbname); char parTbName[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN]; STR_WITH_MAXSIZE_TO_VARSTR(parTbName, tbname, sizeof(parTbName)); - appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, parTbName); + code = appendDataToSpecialBlock(pBlock, &pWin->ts, &pWin->ts, &uid, &pWin->groupId, parTbName); + QUERY_CHECK_CODE(code, lino, _end); } pInfo->stateStore.streamStateFreeVal(tbname); (*index)++; @@ -529,7 +531,7 @@ int32_t initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SStream if (!pScanInfo->pUpdateInfo) { code = pAPI->updateInfoInitP(&pInfo->interval, pInfo->twAggSup.waterMark, pScanInfo->igCheckUpdate, pScanInfo->pkColType, pScanInfo->pkColLen, &pScanInfo->pUpdateInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pScanInfo->interval = pInfo->interval; @@ -565,18 +567,18 @@ int32_t compactFunctions(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx, i SScalarParam out = {.columnData = &idata}; SScalarParam tw = {.numOfRows = 5, .columnData = pTimeWindowData}; code = pDestCtx[k].sfp.process(&tw, 1, &out); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pEntryInfo->numOfRes = 1; } else if (functionNeedToExecute(&pDestCtx[k]) && pDestCtx[k].fpSet.combine != NULL) { code = pDestCtx[k].fpSet.combine(&pDestCtx[k], &pSourceCtx[k]); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else if (pDestCtx[k].fpSet.combine == NULL) { char* funName = fmGetFuncName(pDestCtx[k].functionId); qError("%s error, combine funcion for %s is not implemented", GET_TASKID(pTaskInfo), funName); taosMemoryFreeClear(funName); code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -601,7 +603,7 @@ int32_t setIntervalOutputBuf(void* pState, STimeWindow* win, SRowBuffPos** pResu int32_t size = pAggSup->resultRowSize; code = pStore->streamStateAddIfNotExist(pState, &key, (void**)&value, &size, pWinCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); *pResult = (SRowBuffPos*)value; SResultRow* res = (SResultRow*)((*pResult)->pRowBuff); @@ -609,7 +611,7 @@ int32_t setIntervalOutputBuf(void* pState, STimeWindow* win, SRowBuffPos** pResu // set time window for current result res->win = (*win); code = setResultRowInitCtx(res, pCtx, numOfOutput, rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { @@ -646,11 +648,11 @@ int32_t addPullWindow(SHashObj* pMap, SWinKey* pWinRes, int32_t size) { void* tmp = taosArrayPush(childIds, &i); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } code = taosHashPut(pMap, pWinRes, sizeof(SWinKey), &childIds, sizeof(void*)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); @@ -682,7 +684,7 @@ static void doBuildPullDataBlock(SArray* array, int32_t* pIndex, SSDataBlock* pB goto _end; } code = blockDataEnsureCapacity(pBlock, size - (*pIndex)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pStartTs = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); SColumnInfoData* pEndTs = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX); @@ -692,19 +694,19 @@ static void doBuildPullDataBlock(SArray* array, int32_t* pIndex, SSDataBlock* pB for (; (*pIndex) < size; (*pIndex)++) { SPullWindowInfo* pWin = taosArrayGet(array, (*pIndex)); code = colDataSetVal(pStartTs, pBlock->info.rows, (const char*)&pWin->window.skey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = colDataSetVal(pEndTs, pBlock->info.rows, (const char*)&pWin->window.ekey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = colDataSetVal(pGroupId, pBlock->info.rows, (const char*)&pWin->groupId, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = colDataSetVal(pCalStartTs, pBlock->info.rows, (const char*)&pWin->calWin.skey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = colDataSetVal(pCalEndTs, pBlock->info.rows, (const char*)&pWin->calWin.ekey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pBlock->info.rows++; } @@ -713,7 +715,7 @@ static void doBuildPullDataBlock(SArray* array, int32_t* pIndex, SSDataBlock* pB taosArrayClear(array); } code = blockDataUpdateTsWindow(pBlock, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { @@ -772,21 +774,21 @@ static int32_t processPullOver(SSDataBlock* pBlock, SHashObj* pMap, SHashObj* pF void* tmp = taosArrayPush(pInfo->pMidPullDatas, &winRes); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else if (savePullWindow(&pull, pPullWins) == TSDB_CODE_SUCCESS) { void* tmp = taosArrayPush(pInfo->pDelWins, &winRes); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = addPullWindow(pMap, &winRes, numOfCh); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey) { code = tSimpleHashPut(pInfo->pDeletedMap, &winRes, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } qDebug("===stream===prepare final retrive for delete %" PRId64 ", size:%d", winRes.ts, numOfCh); } @@ -822,11 +824,11 @@ static int32_t addRetriveWindow(SArray* wins, SStreamIntervalOperatorInfo* pInfo // add pull data request if (savePullWindow(&pull, pInfo->pPullWins) == TSDB_CODE_SUCCESS) { code = addPullWindow(pInfo->pPullDataMap, winKey, pInfo->numOfChild); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey) { code = tSimpleHashPut(pInfo->pDeletedMap, winKey, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } qDebug("===stream===prepare retrive for delete %" PRId64 ", size:%d", winKey->ts, pInfo->numOfChild); } @@ -837,7 +839,7 @@ static int32_t addRetriveWindow(SArray* wins, SStreamIntervalOperatorInfo* pInfo if (index == -1) { qDebug("===stream===add final retrive %" PRId64, winKey->ts); code = taosHashPut(pInfo->pFinalPullDataMap, winKey, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -876,7 +878,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl SRowBuffPos* pPos = *(SRowBuffPos**)taosArrayGet(pGroupResInfo->pRows, i); SResultRow* pRow = NULL; code = getOutputBuf(pState, pPos, &pRow, &pAPI->stateStore); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); uint64_t groupId = ((SWinKey*)pPos->pKey)->groupId; doUpdateNumOfRows(pCtx, pRow, numOfExprs, rowEntryOffset); // no results, continue to check the next one @@ -890,7 +892,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->stateStore.streamStateGetParName(pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { pBlock->info.parTbName[0] = 0; } else { @@ -919,7 +921,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl int32_t tmpRes = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); if (TAOS_FAILED(tmpRes)) { qError("%s build result data block error, code %s", GET_TASKID(pTaskInfo), tstrerror(tmpRes)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_select_value") == 0) { // do nothing, todo refactor @@ -930,7 +932,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl char* in = GET_ROWCELL_INTERBUF(pCtx[j].resultInfo); for (int32_t k = 0; k < pRow->numOfRows; ++k) { code = colDataSetVal(pColInfoData, pBlock->info.rows + k, in, pCtx[j].resultInfo->isNullRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -940,7 +942,7 @@ void buildDataBlockFromGroupRes(SOperatorInfo* pOperator, void* pState, SSDataBl pBlock->info.dataLoad = 1; code = blockDataUpdateTsWindow(pBlock, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { @@ -1009,7 +1011,7 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat qError("table uid %" PRIu64 " data block timestamp range may not be calculated! minKey %" PRId64 ",maxKey %" PRId64, pSDataBlock->info.id.uid, pSDataBlock->info.window.skey, pSDataBlock->info.window.ekey); code = blockDataUpdateTsWindow(pSDataBlock, pInfo->primaryTsIndex); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // timestamp of the data is incorrect if (pSDataBlock->info.window.skey <= 0 || pSDataBlock->info.window.ekey <= 0) { @@ -1061,11 +1063,11 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat // add pull data request if (savePullWindow(&pull, pInfo->pPullWins) == TSDB_CODE_SUCCESS) { code = addPullWindow(pInfo->pPullDataMap, &winRes, pInfo->numOfChild); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey) { code = tSimpleHashPut(pInfo->pDeletedMap, &winRes, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } else { @@ -1094,7 +1096,7 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat int32_t winCode = TSDB_CODE_SUCCESS; code = setIntervalOutputBuf(pInfo->pState, &nextWin, &pResPos, groupId, pSup->pCtx, numOfOutput, pSup->rowEntryInfoOffset, &pInfo->aggSup, &pInfo->stateStore, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pResult = (SResultRow*)pResPos->pRowBuff; @@ -1112,18 +1114,18 @@ static void doStreamIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDat if (pInfo->destHasPrimaryKey && winCode == TSDB_CODE_SUCCESS && IS_NORMAL_INTERVAL_OP(pOperator)) { code = tSimpleHashPut(pDeletedMap, &key, sizeof(SWinKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE && pUpdatedMap) { code = saveWinResult(&key, pResPos, pUpdatedMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { pResPos->beUpdated = true; code = tSimpleHashPut(pInfo->aggSup.pResultRowHashTable, &key, sizeof(SWinKey), &pResPos, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } updateTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &nextWin, 1); @@ -1257,7 +1259,7 @@ int32_t decodeSPullWindowInfoArray(void* buf, SArray* pPullInfos, void** ppBuf) void* tmp = taosArrayPush(pPullInfos, &item); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } (*ppBuf) = buf; @@ -1332,7 +1334,7 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera SStreamIntervalOperatorInfo* pInfo = pOperator->info; if (!pInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 6.checksum @@ -1340,7 +1342,7 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera void* pCksum = POINTER_SHIFT(buf, dataLen); if (taosCheckChecksum(buf, dataLen, *(uint32_t*)pCksum) != TSDB_CODE_SUCCESS) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 1.pResultRowHashTable @@ -1353,11 +1355,11 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera int32_t resSize = pInfo->aggSup.resultRowSize; int32_t winCode = TSDB_CODE_SUCCESS; code = pInfo->stateStore.streamStateAddIfNotExist(pInfo->pState, &key, (void**)&pPos, &resSize, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(winCode == TSDB_CODE_SUCCESS); code = tSimpleHashPut(pInfo->aggSup.pResultRowHashTable, &key, sizeof(SWinKey), &pPos, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 2.twAggSup @@ -1371,7 +1373,7 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera SArray* pArray = taosArrayInit(0, sizeof(int32_t)); if (!pArray) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } buf = decodeSWinKey(buf, &key); @@ -1383,16 +1385,16 @@ void doStreamIntervalDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera void* tmp = taosArrayPush(pArray, &chId); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } code = taosHashPut(pInfo->pPullDataMap, &key, sizeof(SWinKey), &pArray, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 4.pPullWins code = decodeSPullWindowInfoArray(buf, pInfo->pPullWins, &buf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // 5.dataVersion buf = taosDecodeFixedI64(buf, &pInfo->dataVersion); @@ -1427,7 +1429,7 @@ static int32_t copyIntervalDeleteKey(SSHashObj* pMap, SArray* pWins) { void* tmp = taosArrayPush(pWins, pKey); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } tSimpleHashClear(pMap); @@ -1484,7 +1486,7 @@ int32_t copyUpdateResult(SSHashObj** ppWinUpdated, SArray* pUpdated, __compar_fn void* tmp = taosArrayPush(pUpdated, pIte); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } taosArraySort(pUpdated, compar); @@ -1585,18 +1587,18 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { SArray* delWins = taosArrayInit(8, sizeof(SWinKey)); SHashObj* finalMap = IS_FINAL_INTERVAL_OP(pOperator) ? pInfo->pFinalPullDataMap : NULL; code = doDeleteWindows(pOperator, &pInfo->interval, pBlock, delWins, pInfo->pUpdatedMap, finalMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (IS_FINAL_INTERVAL_OP(pOperator)) { int32_t chId = getChildIndex(pBlock); code = addRetriveWindow(delWins, pInfo, chId); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pBlock->info.type != STREAM_CLEAR) { void* tmp = taosArrayAddAll(pInfo->pDelWins, delWins); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } taosArrayDestroy(delWins); @@ -1606,7 +1608,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { void* tmp = taosArrayAddAll(pInfo->pDelWins, delWins); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosArrayDestroy(delWins); @@ -1626,24 +1628,24 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { } else if (pBlock->info.type == STREAM_GET_ALL && IS_FINAL_INTERVAL_OP(pOperator)) { pInfo->recvGetAll = true; code = getAllIntervalWindow(pInfo->aggSup.pResultRowHashTable, pInfo->pUpdatedMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_RETRIEVE) { if (!IS_FINAL_INTERVAL_OP(pOperator)) { pInfo->recvRetrive = true; code = copyDataBlock(pInfo->pMidRetriveRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pMidRetriveRes->info.type = STREAM_MID_RETRIEVE; code = doDeleteWindows(pOperator, &pInfo->interval, pBlock, NULL, pInfo->pUpdatedMap, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); break; } continue; } else if (pBlock->info.type == STREAM_PULL_OVER && IS_FINAL_INTERVAL_OP(pOperator)) { code = processPullOver(pBlock, pInfo->pPullDataMap, pInfo->pFinalPullDataMap, &pInfo->interval, pInfo->pPullWins, pInfo->numOfChild, pOperator, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -1651,7 +1653,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { pAPI->stateStore.streamStateCommit(pInfo->pState); doStreamIntervalSaveCheckpoint(pOperator); code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (IS_FINAL_INTERVAL_OP(pOperator) && pBlock->info.type == STREAM_MID_RETRIEVE) { @@ -1663,7 +1665,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.id.groupId, pInfo->pUpdatedMap, pInfo->pDeletedMap); @@ -1678,22 +1680,22 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { if (IS_FINAL_INTERVAL_OP(pOperator)) { code = closeStreamIntervalWindow(pInfo->aggSup.pResultRowHashTable, &pInfo->twAggSup, &pInfo->interval, pInfo->pPullDataMap, pInfo->pUpdatedMap, pInfo->pDelWins, pOperator); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey) { code = copyIntervalDeleteKey(pInfo->pDeletedMap, pInfo->pDelWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } pInfo->binfo.pRes->info.watermark = pInfo->twAggSup.maxTs; code = copyUpdateResult(&pInfo->pUpdatedMap, pInfo->pUpdated, winPosCmprImpl); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); initMultiResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { @@ -1778,7 +1780,7 @@ void streamIntervalReloadState(SOperatorInfo* pOperator) { void* pBuf = NULL; code = pInfo->stateStore.streamStateGetInfo(pInfo->pState, STREAM_INTERVAL_OP_STATE_NAME, strlen(STREAM_INTERVAL_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); TSKEY ts = *(TSKEY*)pBuf; taosMemoryFree(pBuf); @@ -1807,7 +1809,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pOperator->exprSupp.hasWindowOrGroup = true; @@ -1837,7 +1839,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, int32_t numOfScalar = 0; SExprInfo* pScalarExprInfo = createExprInfo(pIntervalPhyNode->window.pExprs, NULL, &numOfScalar); code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } int32_t numOfCols = 0; @@ -1855,7 +1857,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, pAPI->stateStore.streamStateSetNumber(pInfo->pState, -1, pInfo->primaryTsIndex); code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str, pInfo->pState, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); initResultRowInfo(&pInfo->binfo.resultRowInfo); @@ -1916,10 +1918,10 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, if (pPhyNode->type == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL || pPhyNode->type == QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL) { code = initIntervalDownStream(downstream, pPhyNode->type, pInfo); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); // for stream void* buff = NULL; @@ -2026,7 +2028,7 @@ int32_t initDownStream(SOperatorInfo* downstream, SStreamAggSupporter* pAggSup, code = pAggSup->stateStore.updateInfoInit(60000, TSDB_TIME_PRECISION_MILLI, pTwSup->waterMark, pScanInfo->igCheckUpdate, pScanInfo->pkColType, pScanInfo->pkColLen, &pScanInfo->pUpdateInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pScanInfo->twAggSup = *pTwSup; pAggSup->pUpdateInfo = pScanInfo->pUpdateInfo; @@ -2125,7 +2127,7 @@ int32_t setSessionOutputBuf(SStreamAggSupporter* pAggSup, TSKEY startTs, TSKEY e int32_t winCode = TSDB_CODE_SUCCESS; code = pAggSup->stateStore.streamStateSessionAddIfNotExist(pAggSup->pState, &pCurWin->sessionWin, pAggSup->gap, (void**)&pCurWin->pStatePos, &size, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode == TSDB_CODE_SUCCESS && !inWinRange(&pAggSup->winRange, &pCurWin->sessionWin.win)) { winCode = TSDB_CODE_FAILED; @@ -2169,7 +2171,7 @@ int32_t saveDeleteInfo(SArray* pWins, SSessionKey key) { void* res = taosArrayPush(pWins, &key); if (!res) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -2260,7 +2262,7 @@ int32_t updateSessionWindowInfo(SStreamAggSupporter* pAggSup, SResultWindowInfo* if (pWinInfo->sessionWin.win.skey > pStartTs[i]) { if (pStDeleted && pWinInfo->isOutput) { code = saveDeleteRes(pStDeleted, pWinInfo->sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } removeSessionResult(pAggSup, pStUpdated, pResultRows, &pWinInfo->sessionWin); pWinInfo->sessionWin.win.skey = pStartTs[i]; @@ -2297,7 +2299,7 @@ int32_t doOneWindowAggImpl(SColumnInfoData* pTimeWindowData, SResultWindowInfo* SExprSupp* pSup = &pOperator->exprSupp; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; code = initSessionOutputBuf(pCurWin, pResult, pSup->pCtx, numOutput, pSup->rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); updateTimeWindowInfo(pTimeWindowData, &pCurWin->sessionWin.win, winDelta); applyAggFunctionOnPartialTuples(pTaskInfo, pSup->pCtx, pTimeWindowData, startIndex, winRows, rows, numOutput); @@ -2350,11 +2352,11 @@ int32_t compactTimeWindow(SExprSupp* pSup, SStreamAggSupporter* pAggSup, STimeWi SResultRow* pCurResult = NULL; int32_t numOfOutput = pSup->numOfExprs; code = initSessionOutputBuf(pCurWin, &pCurResult, pSup->pCtx, numOfOutput, pSup->rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SResultRow* pWinResult = NULL; code = initSessionOutputBuf(pNextWin, &pWinResult, pAggSup->pDummyCtx, numOfOutput, pSup->rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pCurWin->sessionWin.win.ekey = TMAX(pCurWin->sessionWin.win.ekey, pNextWin->sessionWin.win.ekey); memcpy(pCurWin->pStatePos->pKey, &pCurWin->sessionWin, sizeof(SSessionKey)); @@ -2365,7 +2367,7 @@ int32_t compactTimeWindow(SExprSupp* pSup, SStreamAggSupporter* pAggSup, STimeWi } updateTimeWindowInfo(&pTwAggSup->timeWindowData, &pCurWin->sessionWin.win, winDelta); code = compactFunctions(pSup->pCtx, pAggSup->pDummyCtx, numOfOutput, pTaskInfo, &pTwAggSup->timeWindowData); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t tmpRes = tSimpleHashRemove(pStUpdated, &pNextWin->sessionWin, sizeof(SSessionKey)); qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); @@ -2374,7 +2376,7 @@ int32_t compactTimeWindow(SExprSupp* pSup, SStreamAggSupporter* pAggSup, STimeWi qDebug("===stream=== save delete window info %" PRId64 ", %" PRIu64, pNextWin->sessionWin.win.skey, pNextWin->sessionWin.groupId); code = saveDeleteRes(pStDeleted, pNextWin->sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } removeSessionResult(pAggSup, pStUpdated, pAggSup->pResultRows, &pNextWin->sessionWin); doDeleteSessionWindow(pAggSup, &pNextWin->sessionWin); @@ -2411,7 +2413,7 @@ static int32_t compactSessionWindow(SOperatorInfo* pOperator, SResultWindowInfo* } code = compactTimeWindow(pSup, pAggSup, &pInfo->twAggSup, pTaskInfo, pCurWin, &winInfo, pStUpdated, pStDeleted, true); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); winNum++; } if (pWinNum) { @@ -2506,7 +2508,7 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData } SResultWindowInfo winInfo = {0}; code = setSessionOutputBuf(pAggSup, startTsCols[i], endTsCols[i], groupId, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // coverity scan error if (!winInfo.pStatePos) { @@ -2515,7 +2517,7 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData setSessionWinOutputInfo(pStUpdated, &winInfo); code = updateSessionWindowInfo(pAggSup, &winInfo, startTsCols, endTsCols, groupId, rows, i, pAggSup->gap, pAggSup->pResultRows, pStUpdated, pStDeleted, &winRows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int64_t winDelta = 0; if (addGap) { @@ -2523,28 +2525,28 @@ static void doStreamSessionAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSData } code = doOneWindowAggImpl(&pInfo->twAggSup.timeWindowData, &winInfo, &pResult, i, winRows, rows, numOfOutput, pOperator, winDelta); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = compactSessionWindow(pOperator, &winInfo, pStUpdated, pStDeleted, addGap, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = saveSessionOutputBuf(pAggSup, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && winInfo.isOutput && IS_NORMAL_SESSION_OP(pOperator)) { code = saveDeleteRes(pInfo->pPkDeleted, winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE && pStUpdated) { code = saveResult(winInfo, pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { winInfo.pStatePos->beUpdated = true; SSessionKey key = {0}; getSessionHashKey(&winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } i += winRows; @@ -2575,7 +2577,7 @@ int32_t doDeleteTimeWindows(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, S doDeleteSessionWindow(pAggSup, &curWin); if (result) { code = saveDeleteInfo(result, curWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -2619,7 +2621,7 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo return; } code = blockDataEnsureCapacity(pBlock, size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t iter = 0; while (((*Ite) = tSimpleHashIterate(pStDeleted, *Ite, &iter)) != NULL) { @@ -2629,18 +2631,18 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo SSessionKey* res = tSimpleHashGetKey(*Ite, NULL); SColumnInfoData* pStartTsCol = taosArrayGet(pBlock->pDataBlock, START_TS_COLUMN_INDEX); code = colDataSetVal(pStartTsCol, pBlock->info.rows, (const char*)&res->win.skey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pEndTsCol = taosArrayGet(pBlock->pDataBlock, END_TS_COLUMN_INDEX); code = colDataSetVal(pEndTsCol, pBlock->info.rows, (const char*)&res->win.skey, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pUidCol = taosArrayGet(pBlock->pDataBlock, UID_COLUMN_INDEX); colDataSetNULL(pUidCol, pBlock->info.rows); SColumnInfoData* pGpCol = taosArrayGet(pBlock->pDataBlock, GROUPID_COLUMN_INDEX); code = colDataSetVal(pGpCol, pBlock->info.rows, (const char*)&res->groupId, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pCalStCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX); colDataSetNULL(pCalStCol, pBlock->info.rows); @@ -2650,14 +2652,14 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX); if (!pTableCol) { - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* tbname = NULL; int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->stateStore.streamStateGetParName(pOp->pTaskInfo->streamInfo.pState, res->groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { colDataSetNULL(pTableCol, pBlock->info.rows); @@ -2665,7 +2667,7 @@ void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlo char parTbName[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN]; STR_WITH_MAXSIZE_TO_VARSTR(parTbName, tbname, sizeof(parTbName)); code = colDataSetVal(pTableCol, pBlock->info.rows, (const char*)parTbName, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pAPI->stateStore.streamStateFreeVal(tbname); } pBlock->info.rows += 1; @@ -2721,12 +2723,12 @@ static int32_t rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, if (winCode == TSDB_CODE_SUCCESS && inWinRange(&pWinKey->win, &childWin.sessionWin.win)) { if (num == 0) { code = setSessionOutputBuf(pAggSup, pWinKey->win.skey, pWinKey->win.ekey, pWinKey->groupId, &parentWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); parentWin.sessionWin = childWin.sessionWin; memcpy(parentWin.pStatePos->pKey, &parentWin.sessionWin, sizeof(SSessionKey)); code = initSessionOutputBuf(&parentWin, &pResult, pSup->pCtx, numOfOutput, pSup->rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } num++; parentWin.sessionWin.win.skey = TMIN(parentWin.sessionWin.win.skey, childWin.sessionWin.win.skey); @@ -2736,14 +2738,14 @@ static int32_t rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, updateTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &parentWin.sessionWin.win, pAggSup->gap); code = initSessionOutputBuf(&childWin, &pChResult, pChild->exprSupp.pCtx, numOfOutput, pChild->exprSupp.rowEntryInfoOffset); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = compactFunctions(pSup->pCtx, pChild->exprSupp.pCtx, numOfOutput, pTaskInfo, &pInfo->twAggSup.timeWindowData); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = compactSessionWindow(pOperator, &parentWin, pStUpdated, NULL, true, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); releaseOutputBuf(pAggSup->pState, childWin.pStatePos, &pAggSup->stateStore); } else { @@ -2755,10 +2757,10 @@ static int32_t rebuildSessionWindow(SOperatorInfo* pOperator, SArray* pWinArray, } if (num > 0) { code = saveResult(parentWin, pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = saveSessionOutputBuf(pAggSup, &parentWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -2779,11 +2781,11 @@ int32_t closeSessionWindow(SSHashObj* pHashMap, STimeWindowAggSupp* pTwSup, SSHa if (isCloseWindow(&pWinInfo->sessionWin.win, pTwSup)) { if (pTwSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE && pClosed) { code = saveResult(*pWinInfo, pClosed); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SSessionKey* pKey = tSimpleHashGetKey(pIte, NULL); code = tSimpleHashIterateRemove(pHashMap, pKey, sizeof(SSessionKey), &pIte, &iter); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } _end: @@ -2803,7 +2805,7 @@ static int32_t closeChildSessionWindow(SArray* pChildren, TSKEY maxTs) { SStreamSessionAggOperatorInfo* pChInfo = pChildOp->info; pChInfo->twAggSup.maxTs = TMAX(pChInfo->twAggSup.maxTs, maxTs); code = closeSessionWindow(pChInfo->streamAggSup.pResultRows, &pChInfo->twAggSup, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: if (code != TSDB_CODE_SUCCESS) { @@ -2824,7 +2826,7 @@ int32_t getAllSessionWindow(SSHashObj* pHashMap, SSHashObj* pStUpdated) { } pWinInfo->pStatePos->beUpdated = false; code = saveResult(*pWinInfo, pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -2844,7 +2846,7 @@ int32_t copyDeleteWindowInfo(SArray* pResWins, SSHashObj* pStDeleted) { SSessionKey winInfo = {0}; getSessionHashKey(pWinKey, &winInfo); code = tSimpleHashPut(pStDeleted, &winInfo, sizeof(SSessionKey), NULL, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -2888,7 +2890,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa int32_t winCode = TSDB_CODE_SUCCESS; code = pAPI->stateStore.streamStateGetParName((void*)pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname, false, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode != TSDB_CODE_SUCCESS) { pBlock->info.parTbName[0] = 0; @@ -2904,7 +2906,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa } code = pAPI->stateStore.streamStateGetByPos(pState, pPos, (void**)&pRow); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); doUpdateNumOfRows(pCtx, pRow, numOfExprs, rowEntryOffset); // no results, continue to check the next one @@ -2928,7 +2930,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa int32_t tmpRes = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); if (TAOS_FAILED(tmpRes)) { qError("%s build result data block error, code %s", GET_TASKID(pTaskInfo), tstrerror(tmpRes)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_select_value") == 0) { // do nothing, todo refactor @@ -2939,7 +2941,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa char* in = GET_ROWCELL_INTERBUF(pCtx[j].resultInfo); for (int32_t k = 0; k < pRow->numOfRows; ++k) { code = colDataSetVal(pColInfoData, pBlock->info.rows + k, in, pCtx[j].resultInfo->isNullRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } } @@ -2948,7 +2950,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, void* pState, SSDa pBlock->info.rows += pRow->numOfRows; } code = blockDataUpdateTsWindow(pBlock, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { @@ -2973,7 +2975,7 @@ void doBuildSessionResult(SOperatorInfo* pOperator, void* pState, SGroupResInfo* // clear the existed group id pBlock->info.id.groupId = 0; code = buildSessionResultDataBlock(pOperator, pState, pBlock, &pOperator->exprSupp, pGroupResInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pBlock->info.rows == 0) { cleanupGroupResInfo(pGroupResInfo); @@ -3016,7 +3018,7 @@ int32_t getMaxTsWins(const SArray* pAllWins, SArray* pMaxWins) { void* tmp = taosArrayPush(pMaxWins, pSeKey); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pSeKey->groupId == 0) { @@ -3030,7 +3032,7 @@ int32_t getMaxTsWins(const SArray* pAllWins, SArray* pMaxWins) { void* tmp = taosArrayPush(pMaxWins, pSeKey); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } preGpId = pSeKey->groupId; } @@ -3123,7 +3125,7 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe SStreamSessionAggOperatorInfo* pInfo = pOperator->info; if (!pInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; @@ -3134,7 +3136,7 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe if (taosCheckChecksum(buf, dataLen, *(uint32_t*)pCksum) != TSDB_CODE_SUCCESS) { qError("stream session state is invalid"); code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -3148,13 +3150,13 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe int32_t winCode = TSDB_CODE_SUCCESS; code = pAggSup->stateStore.streamStateSessionAddIfNotExist( pAggSup->pState, &winfo.sessionWin, pAggSup->gap, (void**)&winfo.pStatePos, &pAggSup->resultRowSize, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(winCode == TSDB_CODE_SUCCESS); buf = decodeSResultWindowInfo(buf, &winfo, pInfo->streamAggSup.resultRowSize); code = tSimpleHashPut(pInfo->streamAggSup.pResultRows, &key, sizeof(SSessionKey), &winfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 2.twAggSup @@ -3167,7 +3169,7 @@ int32_t doStreamSessionDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpe for (int32_t i = 0; i < size; i++) { SOperatorInfo* pChOp = taosArrayGetP(pInfo->pChildren, i); code = doStreamSessionDecodeOpState(buf, 0, pChOp, false, &buf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 4.dataVersion @@ -3218,7 +3220,7 @@ int32_t copyDeleteSessionKey(SSHashObj* source, SSHashObj* dest) { while ((pIte = tSimpleHashIterate(source, pIte, &iter)) != NULL) { SSessionKey* pKey = tSimpleHashGetKey(pIte, &keyLen); code = saveDeleteRes(dest, *pKey); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tSimpleHashClear(source); @@ -3282,7 +3284,7 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { SArray* pWins = taosArrayInit(16, sizeof(SSessionKey)); // gap must be 0 code = doDeleteTimeWindows(pAggSup, pBlock, pWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionResults(pAggSup, pInfo->pStUpdated, pWins); if (IS_FINAL_SESSION_OP(pOperator)) { @@ -3291,24 +3293,24 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { SStreamSessionAggOperatorInfo* pChildInfo = pChildOp->info; // gap must be 0 code = doDeleteTimeWindows(&pChildInfo->streamAggSup, pBlock, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = rebuildSessionWindow(pOperator, pWins, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = copyDeleteWindowInfo(pWins, pInfo->pStDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && IS_NORMAL_SESSION_OP(pOperator)) { code = copyDeleteWindowInfo(pWins, pInfo->pPkDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosArrayDestroy(pWins); continue; } else if (pBlock->info.type == STREAM_GET_ALL) { pInfo->recvGetAll = true; code = getAllSessionWindow(pAggSup->pResultRows, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -3316,7 +3318,7 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { pAggSup->stateStore.streamStateCommit(pAggSup->pState); doStreamSessionSaveCheckpoint(pOperator); code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else { @@ -3326,7 +3328,7 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); @@ -3342,12 +3344,12 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { if (!pChildOp) { qError("%s create stream child of final session error", GET_TASKID(pTaskInfo)); code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* tmp = taosArrayPush(pInfo->pChildren, &pChildOp); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } SOperatorInfo* pChildOp = taosArrayGetP(pInfo->pChildren, chIndex); @@ -3361,29 +3363,29 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { pOperator->status = OP_RES_TO_RETURN; code = closeSessionWindow(pAggSup->pResultRows, &pInfo->twAggSup, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = closeChildSessionWindow(pInfo->pChildren, pInfo->twAggSup.maxTs); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = copyUpdateResult(&pInfo->pStUpdated, pInfo->pUpdated, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!pInfo->destHasPrimaryKey) { removeSessionDeleteResults(pInfo->pStDeleted, pInfo->pUpdated); } if (pInfo->isHistoryOp) { code = getMaxTsWins(pInfo->pUpdated, pInfo->historyWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->destHasPrimaryKey && IS_NORMAL_SESSION_OP(pOperator)) { code = copyDeleteSessionKey(pInfo->pPkDeleted, pInfo->pStDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } initGroupResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { @@ -3427,7 +3429,7 @@ int32_t getSessionWindowInfoByKey(SStreamAggSupporter* pAggSup, SSessionKey* pKe int32_t winCode = TSDB_CODE_SUCCESS; code = pAggSup->stateStore.streamStateSessionGet(pAggSup->pState, pKey, (void**)&pWinInfo->pStatePos, &rowSize, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winCode == TSDB_CODE_SUCCESS) { pWinInfo->sessionWin = *pKey; @@ -3470,7 +3472,7 @@ void streamSessionSemiReloadState(SOperatorInfo* pOperator) { void* pBuf = NULL; code = pAggSup->stateStore.streamStateGetInfo(pAggSup->pState, STREAM_SESSION_OP_STATE_NAME, strlen(STREAM_SESSION_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t num = (size - sizeof(TSKEY)) / sizeof(SSessionKey); SSessionKey* pSeKeyBuf = (SSessionKey*)pBuf; @@ -3478,13 +3480,13 @@ void streamSessionSemiReloadState(SOperatorInfo* pOperator) { for (int32_t i = 0; i < num; i++) { SResultWindowInfo winInfo = {0}; code = getSessionWindowInfoByKey(pAggSup, pSeKeyBuf + i, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!IS_VALID_SESSION_WIN(winInfo)) { continue; } compactSessionSemiWindow(pOperator, &winInfo); code = saveSessionOutputBuf(pAggSup, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY ts = *(TSKEY*)((char*)pBuf + size - sizeof(TSKEY)); taosMemoryFree(pBuf); @@ -3515,7 +3517,7 @@ void streamSessionReloadState(SOperatorInfo* pOperator) { code = pAggSup->stateStore.streamStateGetInfo(pAggSup->pState, STREAM_SESSION_OP_STATE_NAME, strlen(STREAM_SESSION_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t num = (size - sizeof(TSKEY)) / sizeof(SSessionKey); SSessionKey* pSeKeyBuf = (SSessionKey*)pBuf; @@ -3532,34 +3534,34 @@ void streamSessionReloadState(SOperatorInfo* pOperator) { for (int32_t i = 0; i < num; i++) { SResultWindowInfo winInfo = {0}; code = getSessionWindowInfoByKey(pAggSup, pSeKeyBuf + i, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!IS_VALID_SESSION_WIN(winInfo)) { continue; } int32_t winNum = 0; code = compactSessionWindow(pOperator, &winInfo, pInfo->pStUpdated, pInfo->pStDeleted, true, &winNum); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (winNum > 0) { qDebug("===stream=== reload state. save result %" PRId64 ", %" PRIu64, winInfo.sessionWin.win.skey, winInfo.sessionWin.groupId); if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveResult(winInfo, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { if (!isCloseWindow(&winInfo.sessionWin.win, &pInfo->twAggSup)) { code = saveDeleteRes(pInfo->pStDeleted, winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SSessionKey key = {0}; getSessionHashKey(&winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } code = saveSessionOutputBuf(pAggSup, &winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosMemoryFree(pBuf); @@ -3668,7 +3670,7 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh if (res == TSDB_CODE_SUCCESS) { code = doStreamSessionDecodeOpState(buff, len, pOperator, true, NULL); taosMemoryFree(buff); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doStreamSessionAgg, NULL, destroyStreamSessionAggOperatorInfo, @@ -3678,10 +3680,10 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh if (downstream) { code = initDownStream(downstream, &pInfo->streamAggSup, pOperator->operatorType, pInfo->primaryTsIndex, &pInfo->twAggSup, &pInfo->basic); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } return pOperator; @@ -3709,18 +3711,18 @@ int32_t deleteSessionWinState(SStreamAggSupporter* pAggSup, SSDataBlock* pBlock, SArray* pWins = taosArrayInit(16, sizeof(SSessionKey)); if (!pWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = doDeleteTimeWindows(pAggSup, pBlock, pWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionResults(pAggSup, pMapUpdate, pWins); code = copyDeleteWindowInfo(pWins, pMapDelete); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (needAdd) { code = copyDeleteWindowInfo(pWins, pPkDelete); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosArrayDestroy(pWins); @@ -3793,12 +3795,12 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { pBlock->info.type == STREAM_CLEAR) { // gap must be 0 code = deleteSessionWinState(pAggSup, pBlock, pInfo->pStUpdated, pInfo->pStDeleted, NULL, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->clearState = true; break; } else if (pBlock->info.type == STREAM_GET_ALL) { code = getAllSessionWindow(pInfo->streamAggSup.pResultRows, pInfo->pStUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -3813,7 +3815,7 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); @@ -3825,19 +3827,19 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { pBInfo->pRes->info.watermark = pInfo->twAggSup.maxTs; code = copyUpdateResult(&pInfo->pStUpdated, pInfo->pUpdated, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionDeleteResults(pInfo->pStDeleted, pInfo->pUpdated); if (pInfo->isHistoryOp) { code = getMaxTsWins(pInfo->pUpdated, pInfo->historyWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } initGroupResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pBInfo->pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* opRes = buildSessionResult(pOperator); if (opRes) { @@ -3864,7 +3866,7 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream SOperatorInfo* pOperator = createStreamSessionAggOperatorInfo(downstream, pPhyNode, pTaskInfo, pHandle); if (pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SStorageAPI* pAPI = &pTaskInfo->storageAPI; @@ -3886,7 +3888,7 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream SOperatorInfo* pChildOp = createStreamFinalSessionAggOperatorInfo(NULL, pPhyNode, pTaskInfo, 0, pHandle); if (pChildOp == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SStreamSessionAggOperatorInfo* pChInfo = pChildOp->info; pChInfo->twAggSup.calTrigger = STREAM_TRIGGER_AT_ONCE; @@ -3894,7 +3896,7 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream void* tmp = taosArrayPush(pInfo->pChildren, &pChildOp); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } @@ -3906,7 +3908,7 @@ SOperatorInfo* createStreamFinalSessionAggOperatorInfo(SOperatorInfo* downstream if (res == TSDB_CODE_SUCCESS) { code = doStreamSessionDecodeOpState(buff, len, pOperator, true, NULL); taosMemoryFree(buff); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } @@ -3995,7 +3997,7 @@ int32_t getStateWindowInfoByKey(SStreamAggSupporter* pAggSup, SSessionKey* pKey, pCurWin->winInfo.sessionWin.win.skey = pKey->win.skey; pCurWin->winInfo.sessionWin.win.ekey = pKey->win.ekey; code = getSessionWindowInfoByKey(pAggSup, pKey, &pCurWin->winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); ASSERT(IS_VALID_SESSION_WIN(pCurWin->winInfo)); pCurWin->pStateKey = @@ -4052,7 +4054,7 @@ int32_t setStateOutputBuf(SStreamAggSupporter* pAggSup, TSKEY ts, uint64_t group code = pAggSup->stateStore.streamStateStateAddIfNotExist(pAggSup->pState, &pCurWin->winInfo.sessionWin, pKeyData, pAggSup->stateKeySize, compareStateKey, (void**)&pCurWin->winInfo.pStatePos, &size, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pCurWin->pStateKey = (SStateKeys*)((char*)pCurWin->winInfo.pStatePos->pRowBuff + (pAggSup->resultRowSize - pAggSup->stateKeySize)); @@ -4146,7 +4148,7 @@ int32_t updateStateWindowInfo(SStreamAggSupporter* pAggSup, SStateWindowInfo* pW if (pWinInfo->winInfo.sessionWin.win.skey > pTs[i]) { if (pSeDeleted && pWinInfo->winInfo.isOutput) { code = saveDeleteRes(pSeDeleted, pWinInfo->winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } removeSessionResult(pAggSup, pSeUpdated, pResultRows, &pWinInfo->winInfo.sessionWin); pWinInfo->winInfo.sessionWin.win.skey = pTs[i]; @@ -4191,7 +4193,7 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SColumnInfoData* pColDataInfo = taosArrayGet(pSDataBlock->pDataBlock, pInfo->primaryTsIndex); if (!pColDataInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tsCols = (int64_t*)pColDataInfo->pData; } else { @@ -4200,7 +4202,7 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl int32_t rows = pSDataBlock->info.rows; code = blockDataEnsureCapacity(pAggSup->pScanBlock, rows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pKeyColInfo = taosArrayGet(pSDataBlock->pDataBlock, pInfo->stateCol.slotId); for (int32_t i = 0; i < rows; i += winRows) { @@ -4216,21 +4218,22 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl SStateWindowInfo curWin = {0}; SStateWindowInfo nextWin = {0}; code = setStateOutputBuf(pAggSup, tsCols[i], groupId, pKeyData, &curWin, &nextWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); releaseOutputBuf(pAggSup->pState, nextWin.winInfo.pStatePos, &pAPI->stateStore); setSessionWinOutputInfo(pSeUpdated, &curWin.winInfo); code = updateStateWindowInfo(pAggSup, &curWin, &nextWin, tsCols, groupId, pKeyColInfo, rows, i, &allEqual, pAggSup->pResultRows, pSeUpdated, pStDeleted, &winRows); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!allEqual) { uint64_t uid = 0; - appendDataToSpecialBlock(pAggSup->pScanBlock, &curWin.winInfo.sessionWin.win.skey, - &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); + code = appendDataToSpecialBlock(pAggSup->pScanBlock, &curWin.winInfo.sessionWin.win.skey, + &curWin.winInfo.sessionWin.win.ekey, &uid, &groupId, NULL); + QUERY_CHECK_CODE(code, lino, _end); code = tSimpleHashRemove(pSeUpdated, &curWin.winInfo.sessionWin, sizeof(SSessionKey)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); doDeleteSessionWindow(pAggSup, &curWin.winInfo.sessionWin); releaseOutputBuf(pAggSup->pState, curWin.winInfo.pStatePos, &pAPI->stateStore); @@ -4239,19 +4242,19 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl code = doOneWindowAggImpl(&pInfo->twAggSup.timeWindowData, &curWin.winInfo, &pResult, i, winRows, rows, numOfOutput, pOperator, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = saveSessionOutputBuf(pAggSup, &curWin.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && curWin.winInfo.isOutput && IS_NORMAL_STATE_OP(pOperator)) { code = saveDeleteRes(pInfo->pPkDeleted, curWin.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveResult(curWin.winInfo, pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { @@ -4260,7 +4263,7 @@ static void doStreamStateAggImpl(SOperatorInfo* pOperator, SSDataBlock* pSDataBl getSessionHashKey(&curWin.winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curWin.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -4325,7 +4328,7 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera SStreamAggSupporter* pAggSup = &pInfo->streamAggSup; if (!pInfo) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 5.checksum @@ -4335,7 +4338,7 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera if (taosCheckChecksum(buf, dataLen, *(uint32_t*)pCksum) != TSDB_CODE_SUCCESS) { qError("stream state_window state is invalid"); code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -4350,12 +4353,12 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera code = pAggSup->stateStore.streamStateStateAddIfNotExist( pAggSup->pState, &winfo.sessionWin, NULL, pAggSup->stateKeySize, compareStateKey, (void**)&winfo.pStatePos, &pAggSup->resultRowSize, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); buf = decodeSResultWindowInfo(buf, &winfo, pInfo->streamAggSup.resultRowSize); code = tSimpleHashPut(pInfo->streamAggSup.pResultRows, &key, sizeof(SSessionKey), &winfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 2.twAggSup @@ -4368,7 +4371,7 @@ int32_t doStreamStateDecodeOpState(void* buf, int32_t len, SOperatorInfo* pOpera for (int32_t i = 0; i < size; i++) { SOperatorInfo* pChOp = taosArrayGetP(pInfo->pChildren, i); code = doStreamStateDecodeOpState(buf, 0, pChOp, false, &buf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // 4.dataVersion @@ -4472,12 +4475,12 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { bool add = pInfo->destHasPrimaryKey && IS_NORMAL_STATE_OP(pOperator); code = deleteSessionWinState(&pInfo->streamAggSup, pBlock, pInfo->pSeUpdated, pInfo->pSeDeleted, pInfo->pPkDeleted, add); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_GET_ALL) { pInfo->recvGetAll = true; code = getAllSessionWindow(pInfo->streamAggSup.pResultRows, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { return pBlock; @@ -4485,7 +4488,7 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { pInfo->streamAggSup.stateStore.streamStateCommit(pInfo->streamAggSup.pState); doStreamStateSaveCheckpoint(pOperator); code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else { @@ -4495,7 +4498,7 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); @@ -4506,26 +4509,26 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { pOperator->status = OP_RES_TO_RETURN; code = closeSessionWindow(pInfo->streamAggSup.pResultRows, &pInfo->twAggSup, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = copyUpdateResult(&pInfo->pSeUpdated, pInfo->pUpdated, sessionKeyCompareAsc); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeSessionDeleteResults(pInfo->pSeDeleted, pInfo->pUpdated); if (pInfo->isHistoryOp) { code = getMaxTsWins(pInfo->pUpdated, pInfo->historyWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->destHasPrimaryKey && IS_NORMAL_STATE_OP(pOperator)) { code = copyDeleteSessionKey(pInfo->pPkDeleted, pInfo->pSeDeleted); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } initGroupResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* resBlock = buildStateResult(pOperator); if (resBlock != NULL) { @@ -4580,7 +4583,7 @@ void streamStateReloadState(SOperatorInfo* pOperator) { void* pBuf = NULL; code = pAggSup->stateStore.streamStateGetInfo(pAggSup->pState, STREAM_STATE_OP_STATE_NAME, strlen(STREAM_STATE_OP_STATE_NAME), &pBuf, &size); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t num = (size - sizeof(TSKEY)) / sizeof(SSessionKey); qDebug("===stream=== reload state. get result count:%d", num); @@ -4605,7 +4608,7 @@ void streamStateReloadState(SOperatorInfo* pOperator) { qDebug("===stream=== reload state. try process result %" PRId64 ", %" PRIu64 ", index:%d", pSeKeyBuf[i].win.skey, pSeKeyBuf[i].groupId, i); code = getStateWindowInfoByKey(pAggSup, pSeKeyBuf + i, &curInfo, &nextInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); bool cpRes = compareWinStateKey(curInfo.pStateKey, nextInfo.pStateKey); qDebug("===stream=== reload state. next window info %" PRId64 ", %" PRIu64 ", compare:%d", @@ -4614,21 +4617,21 @@ void streamStateReloadState(SOperatorInfo* pOperator) { code = compactStateWindow(pOperator, &curInfo.winInfo, &nextInfo.winInfo, pInfo->pSeUpdated, pInfo->pSeDeleted); qDebug("===stream=== reload state. save result %" PRId64 ", %" PRIu64, curInfo.winInfo.sessionWin.win.skey, curInfo.winInfo.sessionWin.groupId); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveResult(curInfo.winInfo, pInfo->pSeUpdated); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { if (!isCloseWindow(&curInfo.winInfo.sessionWin.win, &pInfo->twAggSup)) { code = saveDeleteRes(pInfo->pSeDeleted, curInfo.winInfo.sessionWin); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SSessionKey key = {0}; getSessionHashKey(&curInfo.winInfo.sessionWin, &key); code = tSimpleHashPut(pAggSup->pResultRows, &key, sizeof(SSessionKey), &curInfo.winInfo, sizeof(SResultWindowInfo)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else if (IS_VALID_SESSION_WIN(nextInfo.winInfo)) { releaseOutputBuf(pAggSup->pState, nextInfo.winInfo.pStatePos, &pAggSup->pSessionAPI->stateStore); @@ -4636,7 +4639,7 @@ void streamStateReloadState(SOperatorInfo* pOperator) { if (IS_VALID_SESSION_WIN(curInfo.winInfo)) { code = saveSessionOutputBuf(pAggSup, &curInfo.winInfo); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } taosMemoryFree(pBuf); @@ -4665,7 +4668,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pInfo->stateCol = extractColumnFromColumnNode(pColNode); @@ -4674,7 +4677,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys int32_t numOfScalar = 0; SExprInfo* pScalarExprInfo = createExprInfo(pStateNode->window.pExprs, NULL, &numOfScalar); code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pInfo->twAggSup = (STimeWindowAggSupp){ @@ -4701,7 +4704,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys code = initStreamAggSupporter(&pInfo->streamAggSup, pExpSup, numOfCols, 0, pTaskInfo->streamInfo.pState, keySize, type, &pTaskInfo->storageAPI.stateStore, pHandle, &pInfo->twAggSup, GET_TASKID(pTaskInfo), &pTaskInfo->storageAPI, pInfo->primaryTsIndex); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); pInfo->pSeDeleted = tSimpleHashInit(64, hashFn); @@ -4716,7 +4719,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys pInfo->historyWins = taosArrayInit(4, sizeof(SSessionKey)); if (!pInfo->historyWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (pHandle) { pInfo->isHistoryOp = pHandle->fillHistory; @@ -4738,7 +4741,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys if (res == TSDB_CODE_SUCCESS) { code = doStreamStateDecodeOpState(buff, len, pOperator, true, NULL); taosMemoryFree(buff); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doStreamStateAgg, NULL, destroyStreamStateOperatorInfo, @@ -4746,10 +4749,10 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys setOperatorStreamStateFn(pOperator, streamStateReleaseState, streamStateReloadState); code = initDownStream(downstream, &pInfo->streamAggSup, pOperator->operatorType, pInfo->primaryTsIndex, &pInfo->twAggSup, &pInfo->basic); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); return pOperator; @@ -4835,12 +4838,12 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { if (pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_DELETE_RESULT || pBlock->info.type == STREAM_CLEAR) { code = doDeleteWindows(pOperator, &pInfo->interval, pBlock, pInfo->pDelWins, pInfo->pUpdatedMap, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_GET_ALL) { pInfo->recvGetAll = true; code = getAllIntervalWindow(pInfo->aggSup.pResultRowHashTable, pInfo->pUpdatedMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_CREATE_CHILD_TABLE) { printDataBlock(pBlock, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); @@ -4850,7 +4853,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { doStreamIntervalSaveCheckpoint(pOperator); pInfo->reCkBlock = true; code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else { @@ -4865,7 +4868,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } // The timewindow that overlaps the timestamps of the input pBlock need to be recalculated and return to the @@ -4888,11 +4891,11 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { } code = closeStreamIntervalWindow(pInfo->aggSup.pResultRowHashTable, &pInfo->twAggSup, &pInfo->interval, NULL, pInfo->pUpdatedMap, pInfo->pDelWins, pOperator); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->destHasPrimaryKey && IS_NORMAL_INTERVAL_OP(pOperator)) { code = copyIntervalDeleteKey(pInfo->pDeletedMap, pInfo->pDelWins); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* pIte = NULL; @@ -4901,7 +4904,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { void* tmp = taosArrayPush(pInfo->pUpdated, pIte); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } taosArraySort(pInfo->pUpdated, winPosCmprImpl); @@ -4909,7 +4912,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { initMultiResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); tSimpleHashCleanup(pInfo->pUpdatedMap); pInfo->pUpdatedMap = NULL; @@ -4932,7 +4935,7 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SStreamIntervalPhysiNode* pIntervalPhyNode = (SStreamIntervalPhysiNode*)pPhyNode; int32_t numOfCols = 0; @@ -4979,13 +4982,13 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES; code = initAggSup(pSup, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str, pInfo->pState, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); if (pIntervalPhyNode->window.pExprs != NULL) { int32_t numOfScalar = 0; SExprInfo* pScalarExprInfo = createExprInfo(pIntervalPhyNode->window.pExprs, NULL, &numOfScalar); code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar, &pTaskInfo->storageAPI.functionStore); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pInfo->invertible = false; @@ -5038,10 +5041,10 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys } code = initIntervalDownStream(downstream, pPhyNode->type, pInfo); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); code = appendDownstream(pOperator, &downstream, 1); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); return pOperator; @@ -5107,18 +5110,18 @@ static void doStreamMidIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pS int32_t winCode = TSDB_CODE_SUCCESS; code = setIntervalOutputBuf(pInfo->pState, &nextWin, &pResPos, groupId, pSup->pCtx, numOfOutput, pSup->rowEntryInfoOffset, &pInfo->aggSup, &pInfo->stateStore, &winCode); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pResult = (SResultRow*)pResPos->pRowBuff; if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE) { code = saveWinResult(&key, pResPos, pUpdatedMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_WINDOW_CLOSE) { code = tSimpleHashPut(pInfo->aggSup.pResultRowHashTable, &key, sizeof(SWinKey), &pResPos, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } updateTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &nextWin, 1); @@ -5135,7 +5138,7 @@ static void doStreamMidIntervalAggImpl(SOperatorInfo* pOperator, SSDataBlock* pS ",maxKey %" PRId64, pSDataBlock->info.id.uid, pSDataBlock->info.window.skey, pSDataBlock->info.window.ekey); code = blockDataUpdateTsWindow(pSDataBlock, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // timestamp of the data is incorrect if (pSDataBlock->info.window.skey <= 0 || pSDataBlock->info.window.ekey <= 0) { @@ -5165,7 +5168,7 @@ static int32_t addMidRetriveWindow(SArray* wins, SHashObj* pMidPullMap, int32_t if (!chIds) { code = addPullWindow(pMidPullMap, winKey, numOfChild); qDebug("===stream===prepare mid operator retrive for delete %" PRId64 ", size:%d", winKey->ts, numOfChild); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } _end: @@ -5278,17 +5281,17 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { SArray* delWins = taosArrayInit(8, sizeof(SWinKey)); if (!delWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = doDeleteWindows(pOperator, &pInfo->interval, pBlock, delWins, pInfo->pUpdatedMap, pInfo->pFinalPullDataMap); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); removeResults(delWins, pInfo->pUpdatedMap); void* tmp = taosArrayAddAll(pInfo->pDelWins, delWins); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } taosArrayDestroy(delWins); @@ -5310,11 +5313,11 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { } else if (pBlock->info.type == STREAM_PULL_OVER) { code = processPullOver(pBlock, pInfo->pPullDataMap, pInfo->pFinalPullDataMap, &pInfo->interval, pInfo->pPullWins, pInfo->numOfChild, pOperator, &pInfo->recvPullover); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pInfo->recvPullover) { code = copyDataBlock(pInfo->pMidPulloverRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->clearState = true; break; @@ -5324,25 +5327,25 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { pAPI->stateStore.streamStateCommit(pInfo->pState); doStreamIntervalSaveCheckpoint(pOperator); code = copyDataBlock(pInfo->pCheckpointRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); continue; } else if (pBlock->info.type == STREAM_MID_RETRIEVE) { SArray* delWins = taosArrayInit(8, sizeof(SWinKey)); if (!delWins) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = doDeleteWindows(pOperator, &pInfo->interval, pBlock, delWins, pInfo->pUpdatedMap, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = addMidRetriveWindow(delWins, pInfo->pPullDataMap, pInfo->numOfChild); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); taosArrayDestroy(delWins); pInfo->recvRetrive = true; code = copyDataBlock(pInfo->pMidRetriveRes, pBlock); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pMidRetriveRes->info.type = STREAM_MID_RETRIEVE; pInfo->clearState = true; @@ -5354,7 +5357,7 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); doStreamMidIntervalAggImpl(pOperator, pBlock, pInfo->pUpdatedMap); @@ -5372,7 +5375,7 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { void* tmp = taosArrayPush(pInfo->pUpdated, pIte); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -5383,7 +5386,7 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { initMultiResInfoFromArrayList(&pInfo->groupResInfo, pInfo->pUpdated); pInfo->pUpdated = NULL; code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SSDataBlock* resBlock = buildIntervalResult(pOperator); if (resBlock != NULL) { diff --git a/source/libs/stream/src/streamSessionState.c b/source/libs/stream/src/streamSessionState.c index c20f6b0577..66915b7cfa 100644 --- a/source/libs/stream/src/streamSessionState.c +++ b/source/libs/stream/src/streamSessionState.c @@ -88,14 +88,14 @@ static int32_t addNewSessionWindow(SStreamFileState* pFileState, SArray* pWinInf SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pNewPos->pKey, pKey, sizeof(SSessionKey)); void* tmp = taosArrayPush(pWinInfos, &pNewPos); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*ppPos) = pNewPos; @@ -113,14 +113,14 @@ static int32_t insertNewSessionWindow(SStreamFileState* pFileState, SArray* pWin SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pNewPos->pKey, pKey, sizeof(SSessionKey)); void* tmp = taosArrayInsert(pWinInfos, index, &pNewPos); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } *ppPos = pNewPos; @@ -138,7 +138,7 @@ SRowBuffPos* createSessionWinBuff(SStreamFileState* pFileState, SSessionKey* pKe SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pNewPos->pKey, pKey, sizeof(SSessionKey)); @@ -174,10 +174,10 @@ int32_t getSessionWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, pWinStates = taosArrayInit(16, POINTER_BYTES); if (!pWinStates) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = tSimpleHashPut(pSessionBuff, &pKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY startTs = pKey->win.skey; @@ -192,7 +192,7 @@ int32_t getSessionWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, (*pVal) = createSessionWinBuff(pFileState, pKey, p, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pWinCode) = code_file; @@ -201,7 +201,7 @@ int32_t getSessionWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, code = addNewSessionWindow(pFileState, pWinStates, pKey, (SRowBuffPos**)pVal); (*pWinCode) = TSDB_CODE_FAILED; taosMemoryFree(p); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } goto _end; } @@ -243,7 +243,7 @@ int32_t getSessionWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, (*pVal) = createSessionWinBuff(pFileState, pKey, p, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pWinCode) = code_file; @@ -257,14 +257,14 @@ int32_t getSessionWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, if (index == size - 1) { code = addNewSessionWindow(pFileState, pWinStates, pKey, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCode) = TSDB_CODE_FAILED; goto _end; } code = insertNewSessionWindow(pFileState, pWinStates, pKey, index + 1, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCode) = TSDB_CODE_FAILED; @@ -296,11 +296,11 @@ int32_t putSessionWinResultBuff(SStreamFileState* pFileState, SRowBuffPos* pPos) pWinStates = taosArrayInit(16, POINTER_BYTES); if (!pWinStates) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = tSimpleHashPut(pSessionBuff, &pKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t size = taosArrayGetSize(pWinStates); @@ -308,7 +308,7 @@ int32_t putSessionWinResultBuff(SStreamFileState* pFileState, SRowBuffPos* pPos) void* tmp = taosArrayPush(pWinStates, &pPos); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } goto _end; } @@ -319,13 +319,13 @@ int32_t putSessionWinResultBuff(SStreamFileState* pFileState, SRowBuffPos* pPos) void* tmp = taosArrayInsert(pWinStates, index, &pPos); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else { void* tmp = taosArrayInsert(pWinStates, 0, &pPos); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -343,7 +343,7 @@ int32_t getSessionFlushedBuff(SStreamFileState* pFileState, SSessionKey* pKey, v SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pNewPos->needFree = true; pNewPos->beFlushed = true; @@ -416,17 +416,17 @@ int32_t allocSessioncWinBuffByNextPosition(SStreamFileState* pFileState, SStream pWinStates = taosArrayInit(16, POINTER_BYTES); if (!pWinStates) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = tSimpleHashPut(pSessionBuff, &pWinKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else { pWinStates = (SArray*)(*ppBuff); } if (!pCur) { code = addNewSessionWindow(pFileState, pWinStates, pWinKey, &pNewPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); goto _end; } @@ -435,12 +435,12 @@ int32_t allocSessioncWinBuffByNextPosition(SStreamFileState* pFileState, SStream if (pCur->buffIndex >= 0) { if (pCur->buffIndex >= size) { code = addNewSessionWindow(pFileState, pWinStates, pWinKey, &pNewPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); goto _end; } code = insertNewSessionWindow(pFileState, pWinStates, pWinKey, pCur->buffIndex, &pNewPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); goto _end; } else { @@ -452,14 +452,14 @@ int32_t allocSessioncWinBuffByNextPosition(SStreamFileState* pFileState, SStream int32_t winCode = TSDB_CODE_SUCCESS; code = getSessionWinResultBuff(pFileState, &pTmpKey, 0, (void**)&pNewPos, pVLen, &winCode); ASSERT(winCode == TSDB_CODE_FAILED); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); goto _end; } } pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pNewPos->pKey, pWinKey, sizeof(SSessionKey)); @@ -793,11 +793,11 @@ int32_t getStateWinResultBuff(SStreamFileState* pFileState, SSessionKey* key, ch pWinStates = taosArrayInit(16, POINTER_BYTES); if (!pWinStates) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = tSimpleHashPut(pSessionBuff, &pWinKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY startTs = pWinKey->win.skey; @@ -812,7 +812,7 @@ int32_t getStateWinResultBuff(SStreamFileState* pFileState, SSessionKey* key, ch (*pVal) = createSessionWinBuff(pFileState, pWinKey, p, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pWinCode) = code_file; @@ -822,7 +822,7 @@ int32_t getStateWinResultBuff(SStreamFileState* pFileState, SSessionKey* key, ch code = addNewSessionWindow(pFileState, pWinStates, key, (SRowBuffPos**)pVal); (*pWinCode) = TSDB_CODE_FAILED; taosMemoryFree(p); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } goto _end; } @@ -869,7 +869,7 @@ int32_t getStateWinResultBuff(SStreamFileState* pFileState, SSessionKey* key, ch (*pVal) = createSessionWinBuff(pFileState, pWinKey, p, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pWinCode) = code_file; @@ -884,13 +884,13 @@ int32_t getStateWinResultBuff(SStreamFileState* pFileState, SSessionKey* key, ch if (index == size - 1) { code = addNewSessionWindow(pFileState, pWinStates, key, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCode) = TSDB_CODE_FAILED; goto _end; } code = insertNewSessionWindow(pFileState, pWinStates, key, index + 1, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCode) = TSDB_CODE_FAILED; @@ -933,11 +933,11 @@ int32_t getCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, C pWinStates = taosArrayInit(16, POINTER_BYTES); if (!pWinStates) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = tSimpleHashPut(pSessionBuff, &pWinKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY startTs = pWinKey->win.skey; @@ -958,7 +958,7 @@ int32_t getCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, C (*pVal) = createSessionWinBuff(pFileState, pWinKey, pRockVal, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } goto _end; @@ -970,11 +970,11 @@ int32_t getCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, C taosMemoryFree(pRockVal); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else { code = addNewSessionWindow(pFileState, pWinStates, pWinKey, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCount) = TSDB_CODE_FAILED; } @@ -1013,7 +1013,7 @@ int32_t getCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, C (*pVal) = createSessionWinBuff(pFileState, pWinKey, pRockVal, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pWinCount) = code_file; @@ -1037,7 +1037,7 @@ int32_t getCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey, C } code = addNewSessionWindow(pFileState, pWinStates, pWinKey, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pWinCount) = TSDB_CODE_FAILED; @@ -1061,7 +1061,7 @@ int32_t createCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey } else { pWinStates = taosArrayInit(16, POINTER_BYTES); code = tSimpleHashPut(pSessionBuff, &pWinKey->groupId, sizeof(uint64_t), &pWinStates, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY startTs = pWinKey->win.skey; @@ -1077,7 +1077,7 @@ int32_t createCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey (*pVal) = createSessionWinBuff(pFileState, pWinKey, p, pVLen); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } qDebug("===stream===0 get state win:%" PRId64 ",%" PRId64 " from disc, res %d", pWinKey->win.skey, @@ -1085,11 +1085,11 @@ int32_t createCountWinResultBuff(SStreamFileState* pFileState, SSessionKey* pKey } else { code = addNewSessionWindow(pFileState, pWinStates, pWinKey, (SRowBuffPos**)pVal); taosMemoryFree(p); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } else { code = addNewSessionWindow(pFileState, pWinStates, pWinKey, (SRowBuffPos**)pVal); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: diff --git a/source/libs/stream/src/streamState.c b/source/libs/stream/src/streamState.c index 56a74e149d..c6ecaf9c2b 100644 --- a/source/libs/stream/src/streamState.c +++ b/source/libs/stream/src/streamState.c @@ -105,14 +105,14 @@ SStreamState* streamStateOpen(const char* path, void* pTask, int64_t streamId, i stDebug("open stream state %p, %s", pState, path); if (pState == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pState->pTdbState = taosMemoryCalloc(1, sizeof(STdbState)); if (pState->pTdbState == NULL) { streamStateDestroy(pState, true); code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } SStreamTask* pStreamTask = pTask; @@ -121,7 +121,7 @@ SStreamState* streamStateOpen(const char* path, void* pTask, int64_t streamId, i sprintf(pState->pTdbState->idstr, "0x%" PRIx64 "-0x%x", pState->streamId, pState->taskId); code = streamTaskSetDb(pStreamTask->pMeta, pTask, pState->pTdbState->idstr); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); SStreamMeta* pMeta = pStreamTask->pMeta; pState->pTdbState->pOwner = pTask; @@ -130,7 +130,7 @@ SStreamState* streamStateOpen(const char* path, void* pTask, int64_t streamId, i pState->parNameMap = tSimpleHashInit(1024, hashFn); if (!pState->parNameMap) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } stInfo("open state %p on backend %p 0x%" PRIx64 "-%d succ", pState, pMeta->streamBackend, pState->streamId, pState->taskId); @@ -169,7 +169,7 @@ int32_t streamStateFuncPut(SStreamState* pState, const SWinKey* key, const void* void* pVal = NULL; int32_t len = getRowStateRowSize(pState->pFileState); code = getFunctionRowBuff(pState->pFileState, (void*)key, sizeof(SWinKey), &pVal, &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); char* buf = ((SRowBuffPos*)pVal)->pRowBuff; uint32_t rowSize = streamFileStateGetSelectRowSize(pState->pFileState); @@ -187,7 +187,7 @@ int32_t streamStateFuncGet(SStreamState* pState, const SWinKey* key, void** ppVa void* pVal = NULL; int32_t len = getRowStateRowSize(pState->pFileState); code = getFunctionRowBuff(pState->pFileState, (void*)key, sizeof(SWinKey), (void**)(&pVal), &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); char* buf = ((SRowBuffPos*)pVal)->pRowBuff; uint32_t rowSize = streamFileStateGetSelectRowSize(pState->pFileState); @@ -256,10 +256,10 @@ void streamStateSaveInfo(SStreamState* pState, void* pKey, int32_t keyLen, void* char* cfName = "default"; void* batch = streamStateCreateBatch(); code = streamStatePutBatch(pState, cfName, batch, pKey, pVal, vLen, 0); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = streamStatePutBatch_rocksdb(pState, batch); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); _end: if (code != TSDB_CODE_SUCCESS) { @@ -361,18 +361,18 @@ int32_t streamStateSessionPut(SStreamState* pState, const SSessionKey* key, void goto _end; } code = streamStateSessionPut_rocksdb(pState, key, pos->pRowBuff, vLen); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); streamStateReleaseBuf(pState, pos, true); code = putFreeBuff(pState->pFileState, pos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); stDebug("===stream===save skey:%" PRId64 ", ekey:%" PRId64 ", groupId:%" PRIu64 ".code:%d", key->win.skey, key->win.ekey, key->groupId, code); } else { pos->beFlushed = false; code = putSessionWinResultBuff(pState->pFileState, value); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -453,10 +453,10 @@ int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char if (tSimpleHashGet(pState->parNameMap, &groupId, sizeof(int64_t)) == NULL) { if (tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) { code = tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = streamStatePutParName_rocksdb(pState, groupId, tbname); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -477,14 +477,14 @@ int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal (*pWinCode) = streamStateGetParName_rocksdb(pState, groupId, pVal); if ((*pWinCode) == TSDB_CODE_SUCCESS && tSimpleHashGetSize(pState->parNameMap) < MAX_TABLE_NAME_NUM) { code = tSimpleHashPut(pState->parNameMap, &groupId, sizeof(int64_t), *pVal, TSDB_TABLE_NAME_LEN); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } goto _end; } *pVal = taosMemoryCalloc(1, TSDB_TABLE_NAME_LEN); if (!(*pVal)) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(*pVal, pStr, TSDB_TABLE_NAME_LEN); diff --git a/source/libs/stream/src/streamUpdate.c b/source/libs/stream/src/streamUpdate.c index e395b3066b..ea3b923f98 100644 --- a/source/libs/stream/src/streamUpdate.c +++ b/source/libs/stream/src/streamUpdate.c @@ -78,11 +78,11 @@ int32_t windowSBfAdd(SUpdateInfo* pInfo, uint64_t count) { int64_t rows = adjustExpEntries(pInfo->interval * ROWS_PER_MILLISECOND); SScalableBf* tsSBF = NULL; code = tScalableBfInit(rows, DEFAULT_FALSE_POSITIVE, &tsSBF); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); void* res = taosArrayPush(pInfo->pTsSBFs, &tsSBF); if (!res) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } @@ -152,7 +152,7 @@ int32_t updateInfoInit(int64_t interval, int32_t precision, int64_t watermark, b SUpdateInfo* pInfo = taosMemoryCalloc(1, sizeof(SUpdateInfo)); if (pInfo == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pInfo->pTsBuckets = NULL; pInfo->pTsSBFs = NULL; @@ -170,16 +170,16 @@ int32_t updateInfoInit(int64_t interval, int32_t precision, int64_t watermark, b if (pInfo->pTsSBFs == NULL) { updateInfoDestroy(pInfo); code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = windowSBfAdd(pInfo, bfSize); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pTsBuckets = taosArrayInit(DEFAULT_BUCKET_SIZE, sizeof(TSKEY)); if (pInfo->pTsBuckets == NULL) { updateInfoDestroy(pInfo); code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } TSKEY dumy = 0; @@ -187,7 +187,7 @@ int32_t updateInfoInit(int64_t interval, int32_t precision, int64_t watermark, b void* tmp = taosArrayPush(pInfo->pTsBuckets, &dumy); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } pInfo->numBuckets = DEFAULT_BUCKET_SIZE; @@ -197,7 +197,7 @@ int32_t updateInfoInit(int64_t interval, int32_t precision, int64_t watermark, b pInfo->pMap = taosHashInit(DEFAULT_MAP_CAPACITY, hashFn, true, HASH_NO_LOCK); if (!pInfo->pMap) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pInfo->maxDataVersion = 0; pInfo->pkColLen = pkLen; @@ -205,12 +205,12 @@ int32_t updateInfoInit(int64_t interval, int32_t precision, int64_t watermark, b pInfo->pKeyBuff = taosMemoryCalloc(1, sizeof(TSKEY) + sizeof(int64_t) + pkLen); if (!pInfo->pKeyBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pInfo->pValueBuff = taosMemoryCalloc(1, sizeof(TSKEY) + pkLen); if (!pInfo->pValueBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pkLen != 0) { pInfo->comparePkRowFn = compareKeyTsAndPk; @@ -234,7 +234,7 @@ static int32_t getSBf(SUpdateInfo* pInfo, TSKEY ts, SScalableBf** ppSBf) { int32_t lino = 0; if (ts <= 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (pInfo->minTS < 0) { pInfo->minTS = (TSKEY)(ts / pInfo->interval * pInfo->interval); @@ -242,13 +242,13 @@ static int32_t getSBf(SUpdateInfo* pInfo, TSKEY ts, SScalableBf** ppSBf) { int64_t index = (int64_t)((ts - pInfo->minTS) / pInfo->interval); if (index < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (index >= pInfo->numSBFs) { uint64_t count = index + 1 - pInfo->numSBFs; windowSBfDelete(pInfo, count); code = windowSBfAdd(pInfo, count); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); index = pInfo->numSBFs - 1; } @@ -256,12 +256,12 @@ static int32_t getSBf(SUpdateInfo* pInfo, TSKEY ts, SScalableBf** ppSBf) { if (res == NULL) { int64_t rows = adjustExpEntries(pInfo->interval * ROWS_PER_MILLISECOND); code = tScalableBfInit(rows, DEFAULT_FALSE_POSITIVE, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); void* tmp = taosArrayPush(pInfo->pTsSBFs, &res); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } (*ppSBf) = res; @@ -311,7 +311,7 @@ int32_t updateInfoFillBlockData(SUpdateInfo* pInfo, SSDataBlock* pBlock, int32_t } SScalableBf* pSBf = NULL; code = getSBf(pInfo, ts, &pSBf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pSBf) { if (primaryKeyCol >= 0) { @@ -322,14 +322,14 @@ int32_t updateInfoFillBlockData(SUpdateInfo* pInfo, SSDataBlock* pBlock, int32_t // we don't care whether the data is updated or not int32_t winRes = 0; code = tScalableBfPut(pSBf, pInfo->pKeyBuff, buffLen, &winRes); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } void* pMaxTs = taosHashGet(pInfo->pMap, &tbUid, sizeof(int64_t)); if (pMaxTs == NULL || pInfo->comparePkRowFn(pMaxTs, &maxTs, pMaxPkVal, pInfo->comparePkCol) == -1) { int32_t valueLen = getValueBuff(maxTs, pMaxPkVal, maxLen, pInfo->pValueBuff); code = taosHashPut(pInfo->pMap, &tbUid, sizeof(int64_t), pInfo->pValueBuff, valueLen); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pMaxResTs) = maxTs; @@ -354,7 +354,7 @@ bool updateInfoIsUpdated(SUpdateInfo* pInfo, uint64_t tableId, TSKEY ts, void* p // this window has been closed. if (pInfo->pCloseWinSBF) { code = tScalableBfPut(pInfo->pCloseWinSBF, pInfo->pKeyBuff, buffLen, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (res == TSDB_CODE_SUCCESS) { return false; } else { @@ -366,14 +366,14 @@ bool updateInfoIsUpdated(SUpdateInfo* pInfo, uint64_t tableId, TSKEY ts, void* p SScalableBf* pSBf = NULL; code = getSBf(pInfo, ts, &pSBf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); int32_t size = taosHashGetSize(pInfo->pMap); if ((!pMapMaxTs && size < DEFAULT_MAP_SIZE) || (pMapMaxTs && pInfo->comparePkRowFn(pMapMaxTs, &ts, pPkVal, pInfo->comparePkCol) == -1)) { int32_t valueLen = getValueBuff(ts, pPkVal, len, pInfo->pValueBuff); code = taosHashPut(pInfo->pMap, &tableId, sizeof(uint64_t), pInfo->pValueBuff, valueLen); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // pSBf may be a null pointer if (pSBf) { @@ -385,7 +385,7 @@ bool updateInfoIsUpdated(SUpdateInfo* pInfo, uint64_t tableId, TSKEY ts, void* p // pSBf may be a null pointer if (pSBf) { code = tScalableBfPut(pSBf, pInfo->pKeyBuff, buffLen, &res); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (!pMapMaxTs && maxTs < ts) { @@ -458,67 +458,67 @@ int32_t updateInfoSerialize(void* buf, int32_t bufLen, const SUpdateInfo* pInfo, tEncoderInit(&encoder, buf, bufLen); if (tStartEncode(&encoder) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t size = taosArrayGetSize(pInfo->pTsBuckets); if (tEncodeI32(&encoder, size) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } for (int32_t i = 0; i < size; i++) { TSKEY* pTs = (TSKEY*)taosArrayGet(pInfo->pTsBuckets, i); if (tEncodeI64(&encoder, *pTs) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } if (tEncodeU64(&encoder, pInfo->numBuckets) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t sBfSize = taosArrayGetSize(pInfo->pTsSBFs); if (tEncodeI32(&encoder, sBfSize) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } for (int32_t i = 0; i < sBfSize; i++) { SScalableBf* pSBf = taosArrayGetP(pInfo->pTsSBFs, i); if (tScalableBfEncode(pSBf, &encoder) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } if (tEncodeU64(&encoder, pInfo->numSBFs) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tEncodeI64(&encoder, pInfo->interval) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tEncodeI64(&encoder, pInfo->watermark) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tEncodeI64(&encoder, pInfo->minTS) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tScalableBfEncode(pInfo->pCloseWinSBF, &encoder) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t mapSize = taosHashGetSize(pInfo->pMap); if (tEncodeI32(&encoder, mapSize) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* pIte = NULL; size_t keyLen = 0; @@ -526,27 +526,27 @@ int32_t updateInfoSerialize(void* buf, int32_t bufLen, const SUpdateInfo* pInfo, void* key = taosHashGetKey(pIte, &keyLen); if (tEncodeU64(&encoder, *(uint64_t*)key) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } int32_t valueSize = taosHashGetValueSize(pIte); if (tEncodeBinary(&encoder, (const uint8_t*)pIte, valueSize) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } if (tEncodeU64(&encoder, pInfo->maxDataVersion) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tEncodeI32(&encoder, pInfo->pkColLen) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } if (tEncodeI8(&encoder, pInfo->pkColType) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tEndEncode(&encoder); @@ -579,7 +579,7 @@ int32_t updateInfoDeserialize(void* buf, int32_t bufLen, SUpdateInfo* pInfo) { void* tmp = taosArrayPush(pInfo->pTsBuckets, &ts); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } @@ -591,12 +591,12 @@ int32_t updateInfoDeserialize(void* buf, int32_t bufLen, SUpdateInfo* pInfo) { for (int32_t i = 0; i < sBfSize; i++) { SScalableBf* pSBf = NULL; code = tScalableBfDecode(&decoder, &pSBf); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); void* tmp = taosArrayPush(pInfo->pTsSBFs, &pSBf); if (!tmp) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } @@ -622,7 +622,7 @@ int32_t updateInfoDeserialize(void* buf, int32_t bufLen, SUpdateInfo* pInfo) { if (tDecodeU64(&decoder, &uid) < 0) return -1; if (tDecodeBinary(&decoder, (uint8_t**)&pVal, &valSize) < 0) return -1; code = taosHashPut(pInfo->pMap, &uid, sizeof(uint64_t), pVal, valSize); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } ASSERT(mapSize == taosHashGetSize(pInfo->pMap)); if (tDecodeU64(&decoder, &pInfo->maxDataVersion) < 0) return -1; @@ -662,7 +662,7 @@ bool isIncrementalTimeStamp(SUpdateInfo* pInfo, uint64_t tableId, TSKEY ts, void } else { int32_t valueLen = getValueBuff(ts, pPkVal, len, pInfo->pValueBuff); code = taosHashPut(pInfo->pMap, &tableId, sizeof(uint64_t), pInfo->pValueBuff, valueLen); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } return res; diff --git a/source/libs/stream/src/tstreamFileState.c b/source/libs/stream/src/tstreamFileState.c index 2f656d9b41..b16e137dc9 100644 --- a/source/libs/stream/src/tstreamFileState.c +++ b/source/libs/stream/src/tstreamFileState.c @@ -261,7 +261,7 @@ int32_t putFreeBuff(SStreamFileState* pFileState, SRowBuffPos* pPos) { int32_t lino = 0; if (pPos->pRowBuff) { code = tdListAppend(pFileState->freeBuffs, &(pPos->pRowBuff)); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pPos->pRowBuff = NULL; } @@ -283,7 +283,7 @@ void clearExpiredRowBuff(SStreamFileState* pFileState, TSKEY ts, bool all) { SRowBuffPos* pPos = *(SRowBuffPos**)(pNode->data); if (all || (pFileState->getTs(pPos->pKey) < ts && !pPos->beUsed)) { code = putFreeBuff(pFileState, pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (!all) { pFileState->stateBuffRemoveByPosFn(pFileState, pPos); @@ -312,7 +312,7 @@ int32_t clearFlushedRowBuff(SStreamFileState* pFileState, SStreamSnapshot* pFlus SRowBuffPos* pPos = *(SRowBuffPos**)pNode->data; if (isFlushedState(pFileState, pFileState->getTs(pPos->pKey), 0) && !pPos->beUsed) { code = tdListAppend(pFlushList, &pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pFileState->flushMark = TMAX(pFileState->flushMark, pFileState->getTs(pPos->pKey)); pFileState->stateBuffRemoveByPosFn(pFileState, pPos); @@ -358,7 +358,7 @@ int32_t popUsedBuffs(SStreamFileState* pFileState, SStreamSnapshot* pFlushList, continue; } code = tdListAppend(pFlushList, &pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pFileState->flushMark = TMAX(pFileState->flushMark, pFileState->getTs(pPos->pKey)); pFileState->stateBuffRemoveByPosFn(pFileState, pPos); @@ -385,21 +385,21 @@ int32_t flushRowBuff(SStreamFileState* pFileState) { SStreamSnapshot* pFlushList = tdListNew(POINTER_BYTES); if (!pFlushList) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } uint64_t num = (uint64_t)(pFileState->curRowCount * FLUSH_RATIO); num = TMAX(num, FLUSH_NUM); code = clearFlushedRowBuff(pFileState, pFlushList, num); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (isListEmpty(pFlushList)) { code = popUsedBuffs(pFileState, pFlushList, num, false); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (isListEmpty(pFlushList)) { code = popUsedBuffs(pFileState, pFlushList, num, true); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } @@ -411,7 +411,7 @@ int32_t flushRowBuff(SStreamFileState* pFileState) { while ((pNode = tdListNext(&fIter)) != NULL) { SRowBuffPos* pPos = *(SRowBuffPos**)pNode->data; code = putFreeBuff(pFileState, pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } tdListFreeP(pFlushList, destroyRowBuffPosPtr); @@ -456,13 +456,13 @@ SRowBuffPos* getNewRowPos(SStreamFileState* pFileState) { SRowBuffPos* pPos = taosMemoryCalloc(1, sizeof(SRowBuffPos)); if (!pPos) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pPos->pKey = taosMemoryCalloc(1, pFileState->keyLen); if (!pPos->pKey) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } void* pBuff = getFreeBuff(pFileState); @@ -481,13 +481,13 @@ SRowBuffPos* getNewRowPos(SStreamFileState* pFileState) { } code = clearRowBuff(pFileState); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); pPos->pRowBuff = getFreeBuff(pFileState); _end: code = tdListAppend(pFileState->usedBuffs, &pPos); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); _error: if (code != TSDB_CODE_SUCCESS) { @@ -505,7 +505,7 @@ SRowBuffPos* getNewRowPosForWrite(SStreamFileState* pFileState) { SRowBuffPos* newPos = getNewRowPos(pFileState); if (!newPos) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } newPos->beUsed = true; newPos->beFlushed = false; @@ -537,7 +537,7 @@ int32_t getRowBuff(SStreamFileState* pFileState, void* pKey, int32_t keyLen, voi SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } memcpy(pNewPos->pKey, pKey, keyLen); @@ -556,7 +556,7 @@ int32_t getRowBuff(SStreamFileState* pFileState, void* pKey, int32_t keyLen, voi } code = tSimpleHashPut(pFileState->rowStateBuff, pKey, keyLen, &pNewPos, POINTER_BYTES); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); if (pVal) { *pVLen = pFileState->rowSize; @@ -592,7 +592,7 @@ static int32_t recoverSessionRowBuff(SStreamFileState* pFileState, SRowBuffPos* int32_t len = 0; void* pBuff = NULL; code = pFileState->stateFileGetFn(pFileState, pPos->pKey, &pBuff, &len); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); memcpy(pPos->pRowBuff, pBuff, len); taosMemoryFree(pBuff); @@ -609,7 +609,7 @@ int32_t getRowBuffByPos(SStreamFileState* pFileState, SRowBuffPos* pPos, void** if (pPos->pRowBuff) { if (pPos->needFree) { code = recoverSessionRowBuff(pFileState, pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } (*pVal) = pPos->pRowBuff; goto _end; @@ -621,19 +621,19 @@ int32_t getRowBuffByPos(SStreamFileState* pFileState, SRowBuffPos* pPos, void** pPos->pRowBuff = taosMemoryCalloc(1, pFileState->rowSize); if (!pPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } pFileState->curRowCount++; } else { code = clearRowBuff(pFileState); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); pPos->pRowBuff = getFreeBuff(pFileState); } ASSERT(pPos->pRowBuff); } code = recoverSessionRowBuff(pFileState, pPos); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); (*pVal) = pPos->pRowBuff; if (!pPos->needFree) { @@ -680,13 +680,13 @@ void flushSnapshot(SStreamFileState* pFileState, SStreamSnapshot* pSnapshot, boo char* buf = taosMemoryCalloc(1, len); if (!buf) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* batch = streamStateCreateBatch(); if (!batch) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } while ((pNode = tdListNext(&iter)) != NULL && code == TSDB_CODE_SUCCESS) { @@ -701,14 +701,14 @@ void flushSnapshot(SStreamFileState* pFileState, SStreamSnapshot* pSnapshot, boo if (streamStateGetBatchSize(batch) >= BATCH_LIMIT) { code = streamStatePutBatch_rocksdb(pFileState->pFileStore, batch); streamStateClearBatch(batch); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } void* pSKey = pFileState->stateBuffCreateStateKeyFn(pPos, ((SStreamState*)pFileState->pFileStore)->number); code = streamStatePutBatchOptimize(pFileState->pFileStore, idx, batch, pSKey, pPos->pRowBuff, pFileState->rowSize, 0, buf); taosMemoryFreeClear(pSKey); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); // todo handle failure memset(buf, 0, len); } @@ -717,7 +717,7 @@ void flushSnapshot(SStreamFileState* pFileState, SStreamSnapshot* pSnapshot, boo int32_t numOfElems = streamStateGetBatchSize(batch); if (numOfElems > 0) { code = streamStatePutBatch_rocksdb(pFileState->pFileStore, batch); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } else { goto _end; } @@ -735,10 +735,10 @@ void flushSnapshot(SStreamFileState* pFileState, SStreamSnapshot* pSnapshot, boo qDebug("===stream===flushMark write:%" PRId64, pFileState->flushMark); code = streamStatePutBatch(pFileState->pFileStore, "default", batch, STREAM_STATE_INFO_NAME, valBuf, len, 0); taosMemoryFree(valBuf); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); code = streamStatePutBatch_rocksdb(pFileState->pFileStore, batch); - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } _end: @@ -858,7 +858,7 @@ void recoverSnapshot(SStreamFileState* pFileState, int64_t ckId) { SRowBuffPos* pNewPos = getNewRowPosForWrite(pFileState); if (!pNewPos || !pNewPos->pRowBuff) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } code = streamStateGetKVByCur_rocksdb(pCur, pNewPos->pKey, (const void**)&pVal, &vlen); diff --git a/source/util/src/tbloomfilter.c b/source/util/src/tbloomfilter.c index 1cf4ecf72e..cf9d5cd79c 100644 --- a/source/util/src/tbloomfilter.c +++ b/source/util/src/tbloomfilter.c @@ -40,12 +40,12 @@ int32_t tBloomFilterInit(uint64_t expectedEntries, double errorRate, SBloomFilte int32_t lino = 0; if (expectedEntries < 1 || errorRate <= 0 || errorRate >= 1.0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SBloomFilter* pBF = taosMemoryCalloc(1, sizeof(SBloomFilter)); if (pBF == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pBF->expectedEntries = expectedEntries; pBF->errorRate = errorRate; @@ -66,7 +66,7 @@ int32_t tBloomFilterInit(uint64_t expectedEntries, double errorRate, SBloomFilte if (pBF->buffer == NULL) { tBloomFilterDestroy(pBF); code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } (*ppBF) = pBF; @@ -150,40 +150,40 @@ int32_t tBloomFilterDecode(SDecoder* pDecoder, SBloomFilter** ppBF) { SBloomFilter* pBF = taosMemoryCalloc(1, sizeof(SBloomFilter)); if (!pBF) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pBF->buffer = NULL; if (tDecodeU32(pDecoder, &pBF->hashFunctions) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU64(pDecoder, &pBF->expectedEntries) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU64(pDecoder, &pBF->numUnits) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU64(pDecoder, &pBF->numBits) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU64(pDecoder, &pBF->size) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pBF->buffer = taosMemoryCalloc(pBF->numUnits, sizeof(uint64_t)); for (int32_t i = 0; i < pBF->numUnits; i++) { uint64_t* pUnits = (uint64_t*)pBF->buffer; if (tDecodeU64(pDecoder, pUnits + i) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } if (tDecodeDouble(pDecoder, &pBF->errorRate) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pBF->hashFn1 = HASH_FUNCTION_1; pBF->hashFn2 = HASH_FUNCTION_2; diff --git a/source/util/src/tscalablebf.c b/source/util/src/tscalablebf.c index 95f67d364a..5b018ba677 100644 --- a/source/util/src/tscalablebf.c +++ b/source/util/src/tscalablebf.c @@ -34,12 +34,12 @@ int32_t tScalableBfInit(uint64_t expectedEntries, double errorRate, SScalableBf* const uint32_t defaultSize = 8; if (expectedEntries < 1 || errorRate <= 0 || errorRate >= 1.0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SScalableBf* pSBf = taosMemoryCalloc(1, sizeof(SScalableBf)); if (pSBf == NULL) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pSBf->maxBloomFilters = DEFAULT_MAX_BLOOMFILTERS; pSBf->status = SBF_VALID; @@ -47,14 +47,14 @@ int32_t tScalableBfInit(uint64_t expectedEntries, double errorRate, SScalableBf* pSBf->bfArray = taosArrayInit(defaultSize, sizeof(void*)); if (!pSBf->bfArray) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SBloomFilter* pNormalBf = NULL; code = tScalableBfAddFilter(pSBf, expectedEntries, errorRate * DEFAULT_TIGHTENING_RATIO, &pNormalBf); if (code != TSDB_CODE_SUCCESS) { tScalableBfDestroy(pSBf); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pSBf->growth = DEFAULT_GROWTH; pSBf->hashFn1 = HASH_FUNCTION_1; @@ -72,20 +72,20 @@ int32_t tScalableBfPutNoCheck(SScalableBf* pSBf, const void* keyBuf, uint32_t le int32_t lino = 0; if (pSBf->status == SBF_INVALID) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } int32_t size = taosArrayGetSize(pSBf->bfArray); SBloomFilter* pNormalBf = taosArrayGetP(pSBf->bfArray, size - 1); if (!pNormalBf) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tBloomFilterIsFull(pNormalBf)) { code = tScalableBfAddFilter(pSBf, pNormalBf->expectedEntries * pSBf->growth, pNormalBf->errorRate * DEFAULT_TIGHTENING_RATIO, &pNormalBf); if (code != TSDB_CODE_SUCCESS) { pSBf->status = SBF_INVALID; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } return tBloomFilterPut(pNormalBf, keyBuf, len); @@ -102,7 +102,7 @@ int32_t tScalableBfPut(SScalableBf* pSBf, const void* keyBuf, uint32_t len, int3 int32_t lino = 0; if (pSBf->status == SBF_INVALID) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } uint64_t h1 = (uint64_t)pSBf->hashFn1(keyBuf, len); uint64_t h2 = (uint64_t)pSBf->hashFn2(keyBuf, len); @@ -121,7 +121,7 @@ int32_t tScalableBfPut(SScalableBf* pSBf, const void* keyBuf, uint32_t len, int3 pNormalBf->errorRate * DEFAULT_TIGHTENING_RATIO, &pNormalBf); if (code != TSDB_CODE_SUCCESS) { pSBf->status = SBF_INVALID; - TSDB_CHECK_CODE(code, lino, _end); + QUERY_CHECK_CODE(code, lino, _end); } } (*winRes) = tBloomFilterPutHash(pNormalBf, h1, h2); @@ -154,17 +154,17 @@ static int32_t tScalableBfAddFilter(SScalableBf* pSBf, uint64_t expectedEntries, int32_t lino = 0; if (taosArrayGetSize(pSBf->bfArray) >= pSBf->maxBloomFilters) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } SBloomFilter* pNormalBf = NULL; code = tBloomFilterInit(expectedEntries, errorRate, &pNormalBf); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); if (taosArrayPush(pSBf->bfArray, &pNormalBf) == NULL) { tBloomFilterDestroy(pNormalBf); code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pSBf->numBits += pNormalBf->numBits; (*ppNormalBf) = pNormalBf; @@ -210,7 +210,7 @@ int32_t tScalableBfDecode(SDecoder* pDecoder, SScalableBf** ppSBf) { SScalableBf* pSBf = taosMemoryCalloc(1, sizeof(SScalableBf)); if (!pSBf) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pSBf->hashFn1 = HASH_FUNCTION_1; pSBf->hashFn2 = HASH_FUNCTION_2; @@ -218,43 +218,43 @@ int32_t tScalableBfDecode(SDecoder* pDecoder, SScalableBf** ppSBf) { int32_t size = 0; if (tDecodeI32(pDecoder, &size) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (size == 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } pSBf->bfArray = taosArrayInit(size * 2, POINTER_BYTES); if (!pSBf->bfArray) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } for (int32_t i = 0; i < size; i++) { SBloomFilter* pBF = NULL; code = tBloomFilterDecode(pDecoder, &pBF); - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); void* tmpRes = taosArrayPush(pSBf->bfArray, &pBF); if (!tmpRes) { code = TSDB_CODE_OUT_OF_MEMORY; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } } if (tDecodeU32(pDecoder, &pSBf->growth) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU64(pDecoder, &pSBf->numBits) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeU32(pDecoder, &pSBf->maxBloomFilters) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } if (tDecodeI8(pDecoder, &pSBf->status) < 0) { code = TSDB_CODE_FAILED; - TSDB_CHECK_CODE(code, lino, _error); + QUERY_CHECK_CODE(code, lino, _error); } (*ppSBf) = pSBf; From 21c30fe6ffabe34d1ec1cde8d070aff2d911473a Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 16:19:12 +0800 Subject: [PATCH 20/64] opti:[TS-4593] transform offset from file to tdb in tmq --- source/dnode/vnode/src/tq/tqMeta.c | 33 ++++++++++++++-------------- source/dnode/vnode/src/tq/tqOffset.c | 1 + 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/source/dnode/vnode/src/tq/tqMeta.c b/source/dnode/vnode/src/tq/tqMeta.c index a985b804be..687c69bcca 100644 --- a/source/dnode/vnode/src/tq/tqMeta.c +++ b/source/dnode/vnode/src/tq/tqMeta.c @@ -123,14 +123,6 @@ int32_t tqMetaDeleteInfo(STQ* pTq, TTB* ttb, const void* key, int32_t kLen) { return 0; } -static int32_t tqMetaTransformOffsetInfo(STQ* pTq, char* path) { - int32_t code = TDB_CODE_SUCCESS; - TQ_ERR_RETURN(tqOffsetRestoreFromFile(pTq, path)); - -END: - return code; -} - void* tqMetaGetOffset(STQ* pTq, const char* subkey){ void* data = taosHashGet(pTq->pOffset, subkey, strlen(subkey)); if (data == NULL) { @@ -408,7 +400,8 @@ END: } int32_t tqMetaOpen(STQ* pTq) { - char* maindb = NULL; + char* maindb = NULL; + char* offsetNew = NULL; int32_t code = TDB_CODE_SUCCESS; TQ_ERR_GO_TO_END(tqBuildFName(&maindb, pTq->path, TDB_MAINDB_NAME)); if(!taosCheckExistFile(maindb)){ @@ -416,12 +409,20 @@ int32_t tqMetaOpen(STQ* pTq) { TQ_ERR_GO_TO_END(tqMetaOpenTdb(pTq)); }else{ TQ_ERR_GO_TO_END(tqMetaTransform(pTq)); - taosRemoveFile(maindb); + (void)taosRemoveFile(maindb); } + + TQ_ERR_GO_TO_END(tqBuildFName(&offsetNew, pTq->path, TQ_OFFSET_NAME)); + if(taosCheckExistFile(offsetNew)){ + TQ_ERR_GO_TO_END(tqOffsetRestoreFromFile(pTq, offsetNew)); + (void)taosRemoveFile(offsetNew); + } + TQ_ERR_GO_TO_END(tqMetaRestoreCheckInfo(pTq)); END: taosMemoryFree(maindb); + taosMemoryFree(offsetNew); return code; } @@ -445,14 +446,14 @@ int32_t tqMetaTransform(STQ* pTq) { TQ_ERR_GO_TO_END(tqMetaTransformInfo(pTq->pMetaDB, pCheckStore, pTq->pCheckStore)); TQ_ERR_GO_TO_END(tqBuildFName(&offsetNew, pTq->path, TQ_OFFSET_NAME)); - if(taosCheckExistFile(offset) && taosCopyFile(offset, offsetNew) < 0){ - tqError("copy offset file error"); + if(taosCheckExistFile(offset)) { + if (taosCopyFile(offset, offsetNew) < 0) { + tqError("copy offset file error"); + } else { + (void)taosRemoveFile(offset); + } } - TQ_ERR_GO_TO_END(tqMetaTransformOffsetInfo(pTq, offsetNew)); - (void)taosRemoveFile(offset); - (void)taosRemoveFile(offsetNew); - END: taosMemoryFree(offset); taosMemoryFree(offsetNew); diff --git a/source/dnode/vnode/src/tq/tqOffset.c b/source/dnode/vnode/src/tq/tqOffset.c index f9faf611e1..63257d7fab 100644 --- a/source/dnode/vnode/src/tq/tqOffset.c +++ b/source/dnode/vnode/src/tq/tqOffset.c @@ -73,6 +73,7 @@ int32_t tqOffsetRestoreFromFile(STQ* pTq, char* name) { } TQ_ERR_GO_TO_END(tqMetaSaveInfo(pTq, pTq->pOffsetStore, offset.subKey, strlen(offset.subKey), pMemBuf, size)); + tqInfo("tq: offset restore from file to tdb, subkey:%s", offset.subKey); taosMemoryFree(pMemBuf); pMemBuf = NULL; } From a618667a5e63d29cf4330e38ccf87af416b98b2f Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 16:23:52 +0800 Subject: [PATCH 21/64] adj stream op result --- source/libs/executor/src/scanoperator.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index a878af8762..2c5f09e394 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1553,11 +1553,13 @@ static void prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_ if (pBlock->info.rows == 0) { if (pRes) { (*pRes) = false; + goto _end; } } if ((*pRowIndex) == pBlock->info.rows) { if (pRes) { (*pRes) = false; + goto _end; } } @@ -1611,6 +1613,9 @@ static void prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_ if (pRes) { (*pRes) = true; } + +_end: + qTrace("%s success", __func__); } static STimeWindow getSlidingWindow(TSKEY* startTsCol, TSKEY* endTsCol, uint64_t* gpIdCol, SInterval* pInterval, From c7475094acb56924cd3606414a8cfb15192cbe95 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 17:13:16 +0800 Subject: [PATCH 22/64] fix:remove time cleanup to avoid unexpected error --- source/libs/scheduler/src/scheduler.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/libs/scheduler/src/scheduler.c b/source/libs/scheduler/src/scheduler.c index 45e0ecf738..3ce5cd5714 100644 --- a/source/libs/scheduler/src/scheduler.c +++ b/source/libs/scheduler/src/scheduler.c @@ -214,7 +214,6 @@ void schedulerDestroy(void) { } SCH_UNLOCK(SCH_WRITE, &schMgmt.hbLock); - taosTmrCleanUp(schMgmt.timer); qWorkerDestroy(&schMgmt.queryMgmt); schMgmt.queryMgmt = NULL; } From e5fde30635d998a6264e06c296c251615a68813a Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 19 Jul 2024 17:37:48 +0800 Subject: [PATCH 23/64] fix: function return code validation --- include/os/osString.h | 1 + source/libs/executor/src/groupcacheoperator.c | 201 ++++++++++++------ 2 files changed, 140 insertions(+), 62 deletions(-) diff --git a/include/os/osString.h b/include/os/osString.h index e53aceb83a..05492763c2 100644 --- a/include/os/osString.h +++ b/include/os/osString.h @@ -61,6 +61,7 @@ typedef enum { M2C = 0, C2M } ConvType; #define TAOS_STRCPY(_dst, _src) ((void)strcpy(_dst, _src)) #define TAOS_STRNCPY(_dst, _src, _size) ((void)strncpy(_dst, _src, _size)) +#define TAOS_STRCAT(_dst, _src) ((void)strcat(_dst, _src)) char *tstrdup(const char *src); int32_t taosUcs4len(TdUcs4 *ucs4); diff --git a/source/libs/executor/src/groupcacheoperator.c b/source/libs/executor/src/groupcacheoperator.c index 28bccaedff..379cceeb03 100755 --- a/source/libs/executor/src/groupcacheoperator.c +++ b/source/libs/executor/src/groupcacheoperator.c @@ -30,9 +30,9 @@ static void removeGroupCacheFile(SGroupCacheFileInfo* pFileInfo) { if (pFileInfo->fd.fd) { - taosCloseFile(&pFileInfo->fd.fd); + (void)taosCloseFile(&pFileInfo->fd.fd); pFileInfo->fd.fd = NULL; - taosThreadMutexDestroy(&pFileInfo->fd.mutex); + (void)taosThreadMutexDestroy(&pFileInfo->fd.mutex); } pFileInfo->deleted = true; } @@ -88,7 +88,7 @@ static void logGroupCacheExecInfo(SGroupCacheOperatorInfo* pGrpCacheOperator) { static void freeSGcSessionCtx(void* p) { SGcSessionCtx* pSession = p; if (pSession->semInit) { - tsem_destroy(&pSession->waitSem); + (void)tsem_destroy(&pSession->waitSem); } } @@ -148,6 +148,10 @@ void blockDataDeepCleanup(SSDataBlock* pDataBlock) { size_t numOfCols = taosArrayGetSize(pDataBlock->pDataBlock); for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i); + if (NULL == p) { + qError("fail to get %dth col in dataBlock, numOfCols:%d", i, numOfCols); + continue; + } taosMemoryFreeClear(p->pData); if (IS_VAR_DATA_TYPE(p->info.type)) { taosMemoryFreeClear(p->varmeta.offset); @@ -196,10 +200,14 @@ static FORCE_INLINE int32_t initOpenCacheFile(SGroupCacheFileFd* pFileFd, char* TdFilePtr newFd = taosOpenFile(filename, TD_FILE_CREATE|TD_FILE_READ|TD_FILE_WRITE|TD_FILE_AUTO_DEL); //TdFilePtr newFd = taosOpenFile(filename, TD_FILE_CREATE|TD_FILE_READ|TD_FILE_WRITE); if (NULL == newFd) { - return TAOS_SYSTEM_ERROR(errno); + QRY_ERR_RET(TAOS_SYSTEM_ERROR(errno)); } pFileFd->fd = newFd; - taosThreadMutexInit(&pFileFd->mutex, NULL); + int32_t code = taosThreadMutexInit(&pFileFd->mutex, NULL); + if (code) { + qError("taosThreadMutexInit failed, code:%x", code); + QRY_ERR_RET(code); + } qTrace("file path %s created", filename); @@ -218,13 +226,16 @@ static int32_t acquireFdFromFileCtx(SGcFileCacheCtx* pFileCtx, int32_t fileId, S SGroupCacheFileInfo* pTmp = taosHashGet(pFileCtx->pCacheFile, &fileId, sizeof(fileId)); if (NULL == pTmp) { - sprintf(&pFileCtx->baseFilename[pFileCtx->baseNameLen], "_%d", fileId); + (void)sprintf(&pFileCtx->baseFilename[pFileCtx->baseNameLen], "_%d", fileId); SGroupCacheFileInfo newFile = {0}; - taosHashPut(pFileCtx->pCacheFile, &fileId, sizeof(fileId), &newFile, sizeof(newFile)); + if (taosHashPut(pFileCtx->pCacheFile, &fileId, sizeof(fileId), &newFile, sizeof(newFile))) { + QRY_ERR_RET(terrno); + } pTmp = taosHashGet(pFileCtx->pCacheFile, &fileId, sizeof(fileId)); if (NULL == pTmp) { - return TSDB_CODE_OUT_OF_MEMORY; + qError("fail to get file %d from pCacheFile", fileId); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } } @@ -240,14 +251,14 @@ static int32_t acquireFdFromFileCtx(SGcFileCacheCtx* pFileCtx, int32_t fileId, S } } - taosThreadMutexLock(&pTmp->fd.mutex); + (void)taosThreadMutexLock(&pTmp->fd.mutex); *ppFd = &pTmp->fd; return TSDB_CODE_SUCCESS; } static FORCE_INLINE void releaseFdToFileCtx(SGroupCacheFileFd* pFd) { - taosThreadMutexUnlock(&pFd->mutex); + (void)taosThreadMutexUnlock(&pFd->mutex); } static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamCtx* pCtx, SGcBlkBufInfo* pHead) { @@ -275,7 +286,7 @@ static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamC int64_t blkId = pHead->basic.blkId; pHead = pHead->next; - taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); + (void)taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); continue; } @@ -295,7 +306,7 @@ static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamC int64_t blkId = pHead->basic.blkId; pHead = pHead->next; - taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); + (void)taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); continue; } @@ -321,7 +332,7 @@ static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamC int64_t blkId = pHead->basic.blkId; pHead = pHead->next; - taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); + (void)taosHashRemove(pGCache->blkCache.pDirtyBlk, &blkId, sizeof(blkId)); } _return: @@ -330,7 +341,7 @@ _return: taosHashRelease(pGrpHash, pGroup); } - atomic_val_compare_exchange_32(&pGCache->blkCache.writeDownstreamId, pCtx->id, -1); + (void)atomic_val_compare_exchange_32(&pGCache->blkCache.writeDownstreamId, pCtx->id, -1); return code; } @@ -341,7 +352,8 @@ static int32_t addBlkToDirtyBufList(SGroupCacheOperatorInfo* pGCache, SGcDownstr } pBufInfo = taosHashGet(pCache->pDirtyBlk, &pBufInfo->basic.blkId, sizeof(pBufInfo->basic.blkId)); if (NULL == pBufInfo) { - return TSDB_CODE_OUT_OF_MEMORY; + qError("fail to get blk %d from pCache->pDirtyBlk", pBufInfo->basic.blkId); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } int32_t code = TSDB_CODE_SUCCESS; SGcBlkBufInfo* pWriteHead = NULL; @@ -424,7 +436,7 @@ static int32_t addBlkToBufCache(struct SOperatorInfo* pOperator, SSDataBlock* pB qError("group cache add block to cache failed, size:%" PRId64, bufSize); return TSDB_CODE_OUT_OF_MEMORY; } - blockDataToBuf(pBufInfo->pBuf, pBlock); + QRY_ERR_RET(blockDataToBuf(pBufInfo->pBuf, pBlock)); SGcFileCacheCtx* pFileCtx = pGCache->batchFetch ? &pCtx->fileCtx : &pGroup->pVgCtx->fileCtx; @@ -449,6 +461,10 @@ void blockDataDeepClear(SSDataBlock* pDataBlock) { size_t numOfCols = taosArrayGetSize(pDataBlock->pDataBlock); for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i); + if (NULL == p) { + qError("fail to get %d col from pDataBlock, numOfCols:%d", i, numOfCols); + continue; + } p->pData = NULL; if (IS_VAR_DATA_TYPE(p->info.type)) { p->varmeta.offset = NULL; @@ -473,8 +489,9 @@ static int32_t buildGroupCacheBaseBlock(SSDataBlock** ppDst, SSDataBlock* pSrc) taosMemoryFree(*ppDst); return TSDB_CODE_OUT_OF_MEMORY; } - memcpy(&(*ppDst)->info, &pSrc->info, sizeof(pSrc->info)); + TAOS_MEMCPY(&(*ppDst)->info, &pSrc->info, sizeof(pSrc->info)); blockDataDeepClear(*ppDst); + return TSDB_CODE_SUCCESS; } @@ -490,11 +507,17 @@ static int32_t acquireBaseBlockFromList(SGcDownstreamCtx* pCtx, SSDataBlock** pp return TSDB_CODE_SUCCESS; } -static void releaseBaseBlockToList(SGcDownstreamCtx* pCtx, SSDataBlock* pBlock) { +static int32_t releaseBaseBlockToList(SGcDownstreamCtx* pCtx, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + blockDataDeepCleanup(pBlock); taosWLockLatch(&pCtx->blkLock); - taosArrayPush(pCtx->pFreeBlock, &pBlock); + if (NULL == taosArrayPush(pCtx->pFreeBlock, &pBlock)) { + code = terrno; + } taosWUnLockLatch(&pCtx->blkLock); + + return code; } @@ -573,14 +596,15 @@ static int32_t retrieveBlkFromBufCache(SGroupCacheOperatorInfo* pGCache, SGroupC return code; } - taosHashPut(pCache->pReadBlk, &sessionId, sizeof(sessionId), ppRes, POINTER_BYTES); + QRY_ERR_RET(taosHashPut(pCache->pReadBlk, &sessionId, sizeof(sessionId), ppRes, POINTER_BYTES)); + return TSDB_CODE_SUCCESS; } static FORCE_INLINE void initGcVgroupCtx(SOperatorInfo* pOperator, SGcVgroupCtx* pVgCtx, int32_t downstreamId, int32_t vgId, SArray* pTbList) { pVgCtx->pTbList = pTbList; pVgCtx->id = vgId; - snprintf(pVgCtx->fileCtx.baseFilename, sizeof(pVgCtx->fileCtx.baseFilename) - 1, "%s/gc_%d_%" PRIx64 "_%" PRIu64 "_%d_%d", + (void)snprintf(pVgCtx->fileCtx.baseFilename, sizeof(pVgCtx->fileCtx.baseFilename) - 1, "%s/gc_%d_%" PRIx64 "_%" PRIu64 "_%d_%d", tsTempDir, getpid(), pOperator->pTaskInfo->id.queryId, pOperator->pTaskInfo->id.taskId, downstreamId, vgId); pVgCtx->fileCtx.baseFilename[sizeof(pVgCtx->fileCtx.baseFilename) - 1] = 0; @@ -594,15 +618,27 @@ static int32_t addNewGroupToVgHash(SOperatorInfo* pOperator, SSHashObj* pHash, S if (NULL == pList) { return TSDB_CODE_OUT_OF_MEMORY; } - taosArrayPush(pList, pNew); + if (NULL == taosArrayPush(pList, pNew)) { + QRY_ERR_RET(terrno); + } + SGcVgroupCtx vgCtx = {0}; initGcVgroupCtx(pOperator, &vgCtx, pNew->pGroup->downstreamIdx, pNew->vgId, pList); - tSimpleHashPut(pHash, &pNew->vgId, sizeof(pNew->vgId), &vgCtx, sizeof(vgCtx)); + QRY_ERR_RET(tSimpleHashPut(pHash, &pNew->vgId, sizeof(pNew->vgId), &vgCtx, sizeof(vgCtx))); + pNew->pGroup->pVgCtx = tSimpleHashGet(pHash, &pNew->vgId, sizeof(pNew->vgId)); + if (NULL == pNew->pGroup->pVgCtx) { + qError("fail to get vg %d ctx from vgHash", pNew->vgId); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + return TSDB_CODE_SUCCESS; } - taosArrayPush(pVgCtx->pTbList, pNew); + if (NULL == taosArrayPush(pVgCtx->pTbList, pNew)) { + QRY_ERR_RET(terrno); + } + return TSDB_CODE_SUCCESS; } @@ -620,6 +656,11 @@ static FORCE_INLINE int32_t appendNewGroupToDownstream(struct SOperatorInfo* pOp for (int32_t i = 0; i < num; ++i) { SGcNewGroupInfo* pNew = taosArrayGet(pCtx->pNewGrpList, i); + if (NULL == pNew) { + qError("fail to get vg %d SGcNewGroupInfo from pNewGrpList", i); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (!pGCache->batchFetch) { code = addNewGroupToVgHash(pOperator, pCtx->pVgTbHash, pNew); if (code) { @@ -672,7 +713,9 @@ static FORCE_INLINE int32_t getBlkFromDownstreamOperator(struct SOperatorInfo* p if (code) { return code; } - taosArrayPush(pGCache->pDownstreams[downstreamIdx].pFreeBlock, &pGCache->pDownstreams[downstreamIdx].pBaseBlock); + if (NULL == taosArrayPush(pGCache->pDownstreams[downstreamIdx].pFreeBlock, &pGCache->pDownstreams[downstreamIdx].pBaseBlock)) { + QRY_ERR_RET(terrno); + } } } @@ -681,26 +724,36 @@ static FORCE_INLINE int32_t getBlkFromDownstreamOperator(struct SOperatorInfo* p return code; } -static void notifyWaitingSessions(SArray* pWaitQueue) { +static int32_t notifyWaitingSessions(SArray* pWaitQueue) { if (NULL == pWaitQueue || taosArrayGetSize(pWaitQueue) <= 0) { - return; + return TSDB_CODE_SUCCESS; } int32_t n = taosArrayGetSize(pWaitQueue); for (int32_t i = 0; i < n; ++i) { SGcSessionCtx* pSession = taosArrayGetP(pWaitQueue, i); - tsem_post(&pSession->waitSem); + if (NULL == pSession) { + qError("fail to get %d SGcSessionCtx in pWaitQueue, total:%d", i, n); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + + QRY_ERR_RET(tsem_post(&pSession->waitSem)); } + + return TSDB_CODE_SUCCESS; } -static FORCE_INLINE void handleGroupFetchDone(SGroupCacheData* pGroup) { +static FORCE_INLINE int32_t handleGroupFetchDone(SGroupCacheData* pGroup) { + int32_t code = TSDB_CODE_SUCCESS; pGroup->pBlock = NULL; atomic_store_8((int8_t*)&pGroup->fetchDone, true); - taosThreadMutexLock(&pGroup->mutex); - notifyWaitingSessions(pGroup->waitQueue); + (void)taosThreadMutexLock(&pGroup->mutex); + code = notifyWaitingSessions(pGroup->waitQueue); taosArrayClear(pGroup->waitQueue); - taosThreadMutexUnlock(&pGroup->mutex); + (void)taosThreadMutexUnlock(&pGroup->mutex); + + return code; } static int32_t addFileRefTableNum(SGcFileCacheCtx* pFileCtx, int32_t fileId, int32_t downstreamId, int32_t vgId) { @@ -714,14 +767,15 @@ static int32_t addFileRefTableNum(SGcFileCacheCtx* pFileCtx, int32_t fileId, int SGroupCacheFileInfo* pTmp = taosHashGet(pFileCtx->pCacheFile, &fileId, sizeof(fileId)); if (NULL == pTmp) { - sprintf(&pFileCtx->baseFilename[pFileCtx->baseNameLen], "_%u", fileId); + (void)sprintf(&pFileCtx->baseFilename[pFileCtx->baseNameLen], "_%u", fileId); SGroupCacheFileInfo newFile = {0}; newFile.groupNum = 1; - taosHashPut(pFileCtx->pCacheFile, &fileId, sizeof(fileId), &newFile, sizeof(newFile)); + QRY_ERR_RET(taosHashPut(pFileCtx->pCacheFile, &fileId, sizeof(fileId), &newFile, sizeof(newFile))); pTmp = taosHashGet(pFileCtx->pCacheFile, &fileId, sizeof(fileId)); if (NULL == pTmp) { - return TSDB_CODE_OUT_OF_MEMORY; + qError("fail to get file %d in pCacheFile", fileId); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } } else { pTmp->groupNum++; @@ -746,7 +800,7 @@ static int32_t handleVgroupTableFetchDone(SGcDownstreamCtx* pCtx, SGroupCacheDat if (NULL == pNew || pNew->uid == uid) { break; } - handleGroupFetchDone(pNew->pGroup); + QRY_ERR_RET(handleGroupFetchDone(pNew->pGroup)); } groupCacheSwitchNewFile(&pGroup->pVgCtx->fileCtx, pGroup->downstreamIdx, pGroup->vgId, true); @@ -764,15 +818,21 @@ static int32_t handleVgroupTableFetchDone(SGcDownstreamCtx* pCtx, SGroupCacheDat } -static FORCE_INLINE void initNewGroupData(SGcDownstreamCtx* pCtx, SGroupCacheData* pGroup, int32_t downstreamIdx, int32_t vgId, bool batchFetch, bool needCache) { - taosThreadMutexInit(&pGroup->mutex, NULL); +static FORCE_INLINE int32_t initNewGroupData(SGcDownstreamCtx* pCtx, SGroupCacheData* pGroup, int32_t downstreamIdx, int32_t vgId, bool batchFetch, bool needCache) { + QRY_ERR_RET(taosThreadMutexInit(&pGroup->mutex, NULL)); + pGroup->downstreamIdx = downstreamIdx; pGroup->vgId = vgId; pGroup->fileId = -1; pGroup->blkList.pList = taosArrayInit(10, sizeof(SGcBlkBufBasic)); + if (NULL == pGroup->blkList.pList) { + QRY_ERR_RET(terrno); + } pGroup->startOffset = -1; pGroup->needCache = needCache; pGroup->pVgCtx = tSimpleHashGet(pCtx->pVgTbHash, &pGroup->vgId, sizeof(pGroup->vgId)); + + return TSDB_CODE_SUCCESS; } static int32_t addNewGroupData(struct SOperatorInfo* pOperator, SOperatorParam* pParam, SGroupCacheData** ppGrp, int32_t vgId, int64_t uid) { @@ -801,7 +861,7 @@ static int32_t addNewGroupData(struct SOperatorInfo* pOperator, SOperatorParam* if (NULL == *ppGrp) { return TSDB_CODE_OUT_OF_MEMORY; } - initNewGroupData(pCtx, *ppGrp, pParam->downstreamIdx, vgId, pGCache->batchFetch, pGcParam->needCache); + QRY_ERR_RET(initNewGroupData(pCtx, *ppGrp, pParam->downstreamIdx, vgId, pGCache->batchFetch, pGcParam->needCache)); qDebug("new group %" PRIu64 " initialized, downstreamIdx:%d, vgId:%d, needCache:%d", uid, pParam->downstreamIdx, vgId, pGcParam->needCache); @@ -829,7 +889,9 @@ static int32_t addNewGroupData(struct SOperatorInfo* pOperator, SOperatorParam* static int32_t addBlkToGroupCache(bool batchFetch, SGroupCacheData* pGroup, SGcBlkBufInfo* pNewBlk, int64_t* pIdx) { taosWLockLatch(&pGroup->blkList.lock); - taosArrayPush(pGroup->blkList.pList, &pNewBlk->basic); + if (NULL == taosArrayPush(pGroup->blkList.pList, &pNewBlk->basic)) { + QRY_ERR_RET(terrno); + } *pIdx = taosArrayGetSize(pGroup->blkList.pList) - 1; taosWUnLockLatch(&pGroup->blkList.lock); @@ -889,7 +951,7 @@ static int32_t handleGroupCacheRetrievedBlk(struct SOperatorInfo* pOperator, SSD pGroup->pBlock = pBlock; } - notifyWaitingSessions(pGroup->waitQueue); + QRY_ERR_RET(notifyWaitingSessions(pGroup->waitQueue)); if (pGroup == pSession->pGroupData) { if (pGroup->needCache) { pSession->lastBlkId = newBlkIdx; @@ -909,7 +971,7 @@ static int32_t handleDownstreamFetchDone(struct SOperatorInfo* pOperator, SGcSes SHashObj* pGrpHash = pGCache->globalGrp ? pGCache->pGrpHash : pCtx->pGrpHash; SGroupCacheData* pGroup = NULL; while (NULL != (pGroup = taosHashIterate(pGrpHash, pGroup))) { - handleGroupFetchDone(pGroup); + QRY_ERR_RET(handleGroupFetchDone(pGroup)); } pCtx->fetchDone = true; } else { @@ -920,7 +982,7 @@ static int32_t handleDownstreamFetchDone(struct SOperatorInfo* pOperator, SGcSes uidNum = taosArrayGetSize(pVgCtx->pTbList); for (int32_t i = 0; i < uidNum; ++i) { SGcNewGroupInfo* pNew = taosArrayGet(pVgCtx->pTbList, i); - handleGroupFetchDone(pNew->pGroup); + QRY_ERR_RET(handleGroupFetchDone(pNew->pGroup)); } taosArrayClear(pVgCtx->pTbList); } @@ -961,8 +1023,8 @@ static int32_t getCacheBlkFromDownstreamOperator(struct SOperatorInfo* pOperator } SGcSessionCtx* pWaitCtx = *ppWaitCtx; pWaitCtx->newFetch = true; - taosHashRemove(pCtx->pWaitSessions, pSessionId, sizeof(*pSessionId)); - tsem_post(&pWaitCtx->waitSem); + (void)taosHashRemove(pCtx->pWaitSessions, pSessionId, sizeof(*pSessionId)); + QRY_ERR_RET(tsem_post(&pWaitCtx->waitSem)); return code; } @@ -1028,36 +1090,47 @@ static int32_t groupCacheSessionWait(struct SOperatorInfo* pOperator, SGcDownstr SGroupCacheOperatorInfo* pGCache = pOperator->info; SGroupCacheData* pGroup = pSession->pGroupData; int32_t code = TSDB_CODE_SUCCESS; + bool inLock = true; if (NULL == pGroup->waitQueue) { pGroup->waitQueue = taosArrayInit(1, POINTER_BYTES); if (NULL == pGroup->waitQueue) { - taosThreadMutexUnlock(&pSession->pGroupData->mutex); - return TSDB_CODE_OUT_OF_MEMORY; + QRY_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } } - taosArrayPush(pGroup->waitQueue, &pSession); + if (NULL == taosArrayPush(pGroup->waitQueue, &pSession)) { + QRY_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); + } if (!pSession->semInit) { - tsem_init(&pSession->waitSem, 0, 0); + QRY_ERR_JRET(tsem_init(&pSession->waitSem, 0, 0)); pSession->semInit = true; } - taosThreadMutexUnlock(&pSession->pGroupData->mutex); + (void)taosThreadMutexUnlock(&pSession->pGroupData->mutex); + inLock = false; - taosHashPut(pCtx->pWaitSessions, &sessionId, sizeof(sessionId), &pSession, POINTER_BYTES); + QRY_ERR_JRET(taosHashPut(pCtx->pWaitSessions, &sessionId, sizeof(sessionId), &pSession, POINTER_BYTES)); - tsem_wait(&pSession->waitSem); + (void)tsem_wait(&pSession->waitSem); if (pSession->newFetch) { pSession->newFetch = false; return getCacheBlkFromDownstreamOperator(pOperator, pCtx, sessionId, pSession, ppRes); } - taosHashRemove(pCtx->pWaitSessions, &sessionId, sizeof(sessionId)); + (void)taosHashRemove(pCtx->pWaitSessions, &sessionId, sizeof(sessionId)); bool got = false; return getBlkFromSessionCacheImpl(pOperator, sessionId, pSession, ppRes, &got); + +_return: + + if (inLock) { + (void)taosThreadMutexUnlock(&pSession->pGroupData->mutex); + } + + return code; } @@ -1077,7 +1150,7 @@ static int32_t getBlkFromSessionCache(struct SOperatorInfo* pOperator, int64_t s if ((atomic_load_64(&pCtx->fetchSessionId) == sessionId) || (-1 == atomic_val_compare_exchange_64(&pCtx->fetchSessionId, -1, sessionId))) { if (locked) { - taosThreadMutexUnlock(&pSession->pGroupData->mutex); + (void)taosThreadMutexUnlock(&pSession->pGroupData->mutex); locked = false; } @@ -1095,7 +1168,7 @@ static int32_t getBlkFromSessionCache(struct SOperatorInfo* pOperator, int64_t s break; } - taosThreadMutexLock(&pSession->pGroupData->mutex); + (void)taosThreadMutexLock(&pSession->pGroupData->mutex); locked = true; }; @@ -1103,7 +1176,7 @@ static int32_t getBlkFromSessionCache(struct SOperatorInfo* pOperator, int64_t s _return: if (locked) { - taosThreadMutexUnlock(&pSession->pGroupData->mutex); + (void)taosThreadMutexUnlock(&pSession->pGroupData->mutex); } return code; @@ -1165,6 +1238,10 @@ static int32_t initGroupCacheSession(struct SOperatorInfo* pOperator, SOperatorP } *ppSession = taosHashGet(pCtx->pSessions, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); + if (NULL == *ppSession) { + qError("fail to get session %d from pSessions", pGcParam->sessionId); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } return TSDB_CODE_SUCCESS; } @@ -1187,15 +1264,15 @@ static int32_t getBlkFromGroupCache(struct SOperatorInfo* pOperator, SSDataBlock } else if (pSession->pGroupData->needCache) { SSDataBlock** ppBlock = taosHashGet(pGCache->blkCache.pReadBlk, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); if (ppBlock) { - releaseBaseBlockToList(pCtx, *ppBlock); - taosHashRemove(pGCache->blkCache.pReadBlk, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); + QRY_ERR_RET(releaseBaseBlockToList(pCtx, *ppBlock)); + (void)taosHashRemove(pGCache->blkCache.pReadBlk, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); } } code = getBlkFromSessionCache(pOperator, pGcParam->sessionId, pSession, ppRes); if (NULL == *ppRes) { qDebug("session %" PRId64 " in downstream %d total got %" PRId64 " rows", pGcParam->sessionId, pCtx->id, pSession->resRows); - taosHashRemove(pCtx->pSessions, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); + (void)taosHashRemove(pCtx->pSessions, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); } else { pSession->resRows += (*ppRes)->info.rows; qDebug("session %" PRId64 " in downstream %d got %" PRId64 " rows in one block", pGcParam->sessionId, pCtx->id, (*ppRes)->info.rows); @@ -1241,7 +1318,7 @@ static void freeRemoveGroupCacheData(void* p) { taosArrayDestroy(pGroup->waitQueue); taosArrayDestroy(pGroup->blkList.pList); - taosThreadMutexDestroy(&pGroup->mutex); + (void)taosThreadMutexDestroy(&pGroup->mutex); qTrace("group removed"); } @@ -1271,7 +1348,7 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) { int32_t defaultVg = 0; SGcVgroupCtx vgCtx = {0}; initGcVgroupCtx(pOperator, &vgCtx, pCtx->id, defaultVg, NULL); - tSimpleHashPut(pCtx->pVgTbHash, &defaultVg, sizeof(defaultVg), &vgCtx, sizeof(vgCtx)); + QRY_ERR_RET(tSimpleHashPut(pCtx->pVgTbHash, &defaultVg, sizeof(defaultVg), &vgCtx, sizeof(vgCtx))); } pCtx->pNewGrpList = taosArrayInit(10, sizeof(SGcNewGroupInfo)); @@ -1302,7 +1379,7 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) { return TSDB_CODE_OUT_OF_MEMORY; } - snprintf(pCtx->fileCtx.baseFilename, sizeof(pCtx->fileCtx.baseFilename) - 1, "%s/gc_%d_%" PRIx64 "_%" PRIu64 "_%d", + (void)snprintf(pCtx->fileCtx.baseFilename, sizeof(pCtx->fileCtx.baseFilename) - 1, "%s/gc_%d_%" PRIx64 "_%" PRIu64 "_%d", tsTempDir, getpid(), pOperator->pTaskInfo->id.queryId, pOperator->pTaskInfo->id.taskId, pCtx->id); pCtx->fileCtx.baseFilename[sizeof(pCtx->fileCtx.baseFilename) - 1] = 0; pCtx->fileCtx.baseNameLen = strlen(pCtx->fileCtx.baseFilename); From 60699c7895515d025a8314f67d38a5bd320bcb1a Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 17:53:56 +0800 Subject: [PATCH 24/64] adj operator result --- source/libs/executor/src/scanoperator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 2c5f09e394..207c81fcb9 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1553,14 +1553,14 @@ static void prepareRangeScan(SStreamScanInfo* pInfo, SSDataBlock* pBlock, int32_ if (pBlock->info.rows == 0) { if (pRes) { (*pRes) = false; - goto _end; } + goto _end; } if ((*pRowIndex) == pBlock->info.rows) { if (pRes) { (*pRes) = false; - goto _end; } + goto _end; } ASSERT(taosArrayGetSize(pBlock->pDataBlock) >= 3); From 558d22dff449f1bb7194070a2e4288cc2670a126 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Fri, 19 Jul 2024 18:27:49 +0800 Subject: [PATCH 25/64] fix: function return code validation --- source/libs/executor/src/hashjoin.c | 4 +- source/libs/executor/src/hashjoinoperator.c | 84 +++++++++++++++----- source/libs/executor/src/mergejoin.c | 74 +++++++++++------ source/libs/executor/src/mergejoinoperator.c | 8 +- 4 files changed, 124 insertions(+), 46 deletions(-) diff --git a/source/libs/executor/src/hashjoin.c b/source/libs/executor/src/hashjoin.c index c22b331a16..d4a84afea2 100755 --- a/source/libs/executor/src/hashjoin.c +++ b/source/libs/executor/src/hashjoin.c @@ -90,7 +90,7 @@ int32_t hLeftJoinHandleSeqRowRemains(struct SOperatorInfo* pOperator, SHJoinOper while (!allFetched) { hJoinAppendResToBlock(pOperator, pJoin->midBlk, &allFetched); if (pJoin->midBlk->info.rows > 0) { - doFilter(pJoin->midBlk, pJoin->pPreFilter, NULL); + HJ_ERR_RET(doFilter(pJoin->midBlk, pJoin->pPreFilter, NULL)); if (pJoin->midBlk->info.rows > 0) { pCtx->readMatch = true; HJ_ERR_RET(hJoinCopyMergeMidBlk(pCtx, &pJoin->midBlk, &pJoin->finBlk)); @@ -170,7 +170,7 @@ int32_t hLeftJoinHandleSeqProbeRows(struct SOperatorInfo* pOperator, SHJoinOpera while (!allFetched) { hJoinAppendResToBlock(pOperator, pJoin->midBlk, &allFetched); if (pJoin->midBlk->info.rows > 0) { - doFilter(pJoin->midBlk, pJoin->pPreFilter, NULL); + HJ_ERR_RET(doFilter(pJoin->midBlk, pJoin->pPreFilter, NULL)); if (pJoin->midBlk->info.rows > 0) { pCtx->readMatch = true; HJ_ERR_RET(hJoinCopyMergeMidBlk(pCtx, &pJoin->midBlk, &pJoin->finBlk)); diff --git a/source/libs/executor/src/hashjoinoperator.c b/source/libs/executor/src/hashjoinoperator.c index 2fe2ccc56f..bbbdff6c17 100755 --- a/source/libs/executor/src/hashjoinoperator.c +++ b/source/libs/executor/src/hashjoinoperator.c @@ -238,10 +238,12 @@ static int32_t hJoinInitValColsInfo(SHJoinTableCtx* pTable, SNodeList* pList) { if (NULL == pTable->valVarCols) { pTable->valVarCols = taosArrayInit(pTable->valNum, sizeof(int32_t)); if (NULL == pTable->valVarCols) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } - taosArrayPush(pTable->valVarCols, &i); + if (NULL == taosArrayPush(pTable->valVarCols, &i)) { + return terrno; + } } pTable->valCols[i].bytes = pColNode->node.resType.bytes; if (!pTable->valCols[i].keyCol && !pTable->valCols[i].vardata) { @@ -332,7 +334,7 @@ static int32_t hJoinInitTableInfo(SHJoinOperatorInfo* pJoin, SHashJoinPhysiNode* return code; } - memcpy(&pTable->inputStat, pStat, sizeof(*pStat)); + TAOS_MEMCPY(&pTable->inputStat, pStat, sizeof(*pStat)); HJ_ERR_RET(hJoinInitPrimExprCtx(pTable->primExpr, &pTable->primCtx, pTable)); @@ -416,7 +418,9 @@ static FORCE_INLINE int32_t hJoinAddPageToBufs(SArray* pRowBufs) { return TSDB_CODE_OUT_OF_MEMORY; } - taosArrayPush(pRowBufs, &page); + if (NULL == taosArrayPush(pRowBufs, &page)) { + return terrno; + } return TSDB_CODE_SUCCESS; } @@ -464,12 +468,21 @@ static void hJoinDestroyKeyHash(SSHashObj** ppHash) { *ppHash = NULL; } -static FORCE_INLINE char* hJoinRetrieveColDataFromRowBufs(SArray* pRowBufs, SBufRowInfo* pRow) { +static FORCE_INLINE int32_t hJoinRetrieveColDataFromRowBufs(SArray* pRowBufs, SBufRowInfo* pRow, char** ppData) { + *ppData = NULL; + if ((uint16_t)-1 == pRow->pageId) { - return NULL; + return TSDB_CODE_SUCCESS; } SBufPageInfo *pPage = taosArrayGet(pRowBufs, pRow->pageId); - return pPage->data + pRow->offset; + if (NULL == pPage) { + qError("fail to get %d page, total:%d", pRow->pageId, (int32_t)taosArrayGetSize(pRowBufs)); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + + *ppData = pPage->data + pRow->offset; + + return TSDB_CODE_SUCCESS; } static int32_t hJoinCopyResRowsToBlock(SHJoinOperatorInfo* pJoin, int32_t rowNum, SBufRowInfo* pStart, SSDataBlock* pRes) { @@ -479,9 +492,11 @@ static int32_t hJoinCopyResRowsToBlock(SHJoinOperatorInfo* pJoin, int32_t rowNum int32_t probeIdx = 0; SBufRowInfo* pRow = pStart; int32_t code = 0; + char* pData = NULL; for (int32_t r = 0; r < rowNum; ++r) { - char* pData = hJoinRetrieveColDataFromRowBufs(pJoin->pRowBufs, pRow); + HJ_ERR_RET(hJoinRetrieveColDataFromRowBufs(pJoin->pRowBufs, pRow, &pData)); + char* pValData = pData + pBuild->valBitMapSize; char* pKeyData = pProbe->keyData; buildIdx = buildValIdx = probeIdx = 0; @@ -544,7 +559,7 @@ int32_t hJoinCopyNMatchRowsToBlock(SHJoinOperatorInfo* pJoin, SSDataBlock* pRes, SColumnInfoData* pSrc = taosArrayGet(pJoin->ctx.pProbeData->pDataBlock, pProbe->valCols[probeIdx].srcSlot); SColumnInfoData* pDst = taosArrayGet(pRes->pDataBlock, pProbe->valCols[probeIdx].dstSlot); - colDataAssignNRows(pDst, pRes->info.rows, pSrc, startIdx, rows); + QRY_ERR_RET(colDataAssignNRows(pDst, pRes->info.rows, pSrc, startIdx, rows)); probeIdx++; } @@ -606,11 +621,11 @@ bool hJoinCopyKeyColsDataToBuf(SHJoinTableCtx* pTable, int32_t rowIdx, size_t *p } if (pTable->keyCols[i].vardata) { pData = pTable->keyCols[i].data + pTable->keyCols[i].offset[rowIdx]; - memcpy(pTable->keyBuf + bufLen, pData, varDataTLen(pData)); + TAOS_MEMCPY(pTable->keyBuf + bufLen, pData, varDataTLen(pData)); bufLen += varDataTLen(pData); } else { pData = pTable->keyCols[i].data + pTable->keyCols[i].bytes * rowIdx; - memcpy(pTable->keyBuf + bufLen, pData, pTable->keyCols[i].bytes); + TAOS_MEMCPY(pTable->keyBuf + bufLen, pData, pTable->keyCols[i].bytes); bufLen += pTable->keyCols[i].bytes; } } @@ -627,6 +642,10 @@ bool hJoinCopyKeyColsDataToBuf(SHJoinTableCtx* pTable, int32_t rowIdx, size_t *p static int32_t hJoinSetKeyColsData(SSDataBlock* pBlock, SHJoinTableCtx* pTable) { for (int32_t i = 0; i < pTable->keyNum; ++i) { SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, pTable->keyCols[i].srcSlot); + if (NULL == pCol) { + qError("fail to get %d col, total:%d", pTable->keyCols[i].srcSlot, (int32_t)taosArrayGetSize(pBlock->pDataBlock)); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (pTable->keyCols[i].vardata != IS_VAR_DATA_TYPE(pCol->info.type)) { qError("column type mismatch, idx:%d, slotId:%d, type:%d, vardata:%d", i, pTable->keyCols[i].srcSlot, pCol->info.type, pTable->keyCols[i].vardata); return TSDB_CODE_INVALID_PARA; @@ -654,6 +673,10 @@ static int32_t hJoinSetValColsData(SSDataBlock* pBlock, SHJoinTableCtx* pTable) continue; } SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, pTable->valCols[i].srcSlot); + if (NULL == pCol) { + qError("fail to get %d col, total:%d", pTable->valCols[i].srcSlot, (int32_t)taosArrayGetSize(pBlock->pDataBlock)); + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (pTable->valCols[i].vardata != IS_VAR_DATA_TYPE(pCol->info.type)) { qError("column type mismatch, idx:%d, slotId:%d, type:%d, vardata:%d", i, pTable->valCols[i].srcSlot, pCol->info.type, pTable->valCols[i].vardata); return TSDB_CODE_INVALID_PARA; @@ -683,7 +706,7 @@ static FORCE_INLINE void hJoinCopyValColsDataToBuf(SHJoinTableCtx* pTable, int32 char *pData = NULL; size_t bufLen = pTable->valBitMapSize; - memset(pTable->valData, 0, pTable->valBitMapSize); + TAOS_MEMSET(pTable->valData, 0, pTable->valBitMapSize); for (int32_t i = 0, m = 0; i < pTable->valNum; ++i) { if (pTable->valCols[i].keyCol) { continue; @@ -693,7 +716,7 @@ static FORCE_INLINE void hJoinCopyValColsDataToBuf(SHJoinTableCtx* pTable, int32 colDataSetNull_f(pTable->valData, m); } else { pData = pTable->valCols[i].data + pTable->valCols[i].offset[rowIdx]; - memcpy(pTable->valData + bufLen, pData, varDataTLen(pData)); + TAOS_MEMCPY(pTable->valData + bufLen, pData, varDataTLen(pData)); bufLen += varDataTLen(pData); } } else { @@ -701,7 +724,7 @@ static FORCE_INLINE void hJoinCopyValColsDataToBuf(SHJoinTableCtx* pTable, int32 colDataSetNull_f(pTable->valData, m); } else { pData = pTable->valCols[i].data + pTable->valCols[i].bytes * rowIdx; - memcpy(pTable->valData + bufLen, pData, pTable->valCols[i].bytes); + TAOS_MEMCPY(pTable->valData + bufLen, pData, pTable->valCols[i].bytes); bufLen += pTable->valCols[i].bytes; } } @@ -1009,7 +1032,11 @@ static SSDataBlock* hJoinMainProcess(struct SOperatorInfo* pOperator) { } if (pRes->info.rows > 0 && pJoin->pFinFilter != NULL) { - doFilter(pRes, pJoin->pFinFilter, NULL); + code = doFilter(pRes, pJoin->pFinFilter, NULL); + if (code) { + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } } if (pRes->info.rows > 0) { return pRes; @@ -1037,7 +1064,11 @@ static SSDataBlock* hJoinMainProcess(struct SOperatorInfo* pOperator) { } if (pRes->info.rows > 0 && pJoin->pFinFilter != NULL) { - doFilter(pRes, pJoin->pFinFilter, NULL); + code = doFilter(pRes, pJoin->pFinFilter, NULL); + if (code) { + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } } if (pRes->info.rows > 0) { @@ -1118,13 +1149,25 @@ static uint32_t hJoinGetFinBlkCapacity(SHJoinOperatorInfo* pJoin, SHashJoinPhysi int32_t hJoinInitResBlocks(SHJoinOperatorInfo* pJoin, SHashJoinPhysiNode* pJoinNode) { pJoin->finBlk = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc); + if (NULL == pJoin->finBlk) { + QRY_ERR_RET(terrno); + } ASSERT(pJoinNode->node.pOutputDataBlockDesc->totalRowSize > 0); - blockDataEnsureCapacity(pJoin->finBlk, hJoinGetFinBlkCapacity(pJoin, pJoinNode)); + int32_t code = blockDataEnsureCapacity(pJoin->finBlk, hJoinGetFinBlkCapacity(pJoin, pJoinNode)); + if (TSDB_CODE_SUCCESS != code) { + QRY_ERR_RET(terrno); + } if (NULL != pJoin->pPreFilter) { pJoin->midBlk = createOneDataBlock(pJoin->finBlk, false); - blockDataEnsureCapacity(pJoin->midBlk, pJoin->finBlk->info.capacity); + if (NULL == pJoin->finBlk) { + QRY_ERR_RET(terrno); + } + code = blockDataEnsureCapacity(pJoin->midBlk, pJoin->finBlk->info.capacity); + if (TSDB_CODE_SUCCESS != code) { + QRY_ERR_RET(terrno); + } } pJoin->blkThreshold = pJoin->finBlk->info.capacity * HJOIN_BLK_THRESHOLD_RATIO; @@ -1151,8 +1194,8 @@ SOperatorInfo* createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t n setOperatorInfo(pOperator, "HashJoinOperator", QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN, false, OP_NOT_OPENED, pInfo, pTaskInfo); - hJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 0, &pJoinNode->inputStat[0]); - hJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 1, &pJoinNode->inputStat[1]); + HJ_ERR_JRET(hJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 0, &pJoinNode->inputStat[0])); + HJ_ERR_JRET(hJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 1, &pJoinNode->inputStat[1])); hJoinSetBuildAndProbeTable(pInfo, pJoinNode); @@ -1182,6 +1225,7 @@ SOperatorInfo* createHashJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t n return pOperator; _return: + if (pInfo != NULL) { destroyHashJoinOperator(pInfo); } diff --git a/source/libs/executor/src/mergejoin.c b/source/libs/executor/src/mergejoin.c index 5f0a2eadfb..1c625df52f 100755 --- a/source/libs/executor/src/mergejoin.c +++ b/source/libs/executor/src/mergejoin.c @@ -357,7 +357,7 @@ static int32_t mOuterJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, bool* contLoop) do { startRowIdx = build->grpRowIdx; - mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); if (pCtx->midBlk->info.rows > 0) { if (build->rowBitmapSize > 0) { @@ -1283,7 +1283,7 @@ static int32_t mSemiJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, SMJoinGrpRows* p do { blockDataCleanup(pCtx->midBlk); - mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); if (pCtx->midBlk->info.rows > 0) { MJ_ERR_RET(mJoinFilterAndKeepSingleRow(pCtx->midBlk, pCtx->pJoin->pPreFilter)); @@ -1358,7 +1358,7 @@ static int32_t mSemiJoinHashFullCart(SMJoinMergeCtx* pCtx) { build->pHashCurGrp = *(SArray**)pGrp; ASSERT(1 == taosArrayGetSize(build->pHashCurGrp)); build->grpRowIdx = 0; - mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + (void)mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); ASSERT(build->grpRowIdx < 0); } @@ -1616,7 +1616,7 @@ static int32_t mAntiJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, SMJoinGrpRows* p do { blockDataCleanup(pCtx->midBlk); - mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); if (pCtx->midBlk->info.rows > 0) { MJ_ERR_RET(mJoinFilterAndNoKeepRows(pCtx->midBlk, pCtx->pJoin->pPreFilter)); @@ -2102,7 +2102,9 @@ int32_t mAsofBackwardHandleGrpRemains(SMJoinWindowCtx* pCtx) { return (pCtx->lastEqGrp) ? mAsofBackwardDumpUpdateEqRows(pCtx, pCtx->pJoin, false, true) : mAsofBackwardDumpGrpCache(pCtx); } -static bool mAsofBackwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx) { +static int32_t mAsofBackwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx, bool* newBlock) { + *newBlock = false; + bool probeGot = mJoinRetrieveBlk(pJoin, &pJoin->probe->blkRowIdx, &pJoin->probe->blk, pJoin->probe); bool buildGot = false; @@ -2116,7 +2118,7 @@ static bool mAsofBackwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* mJoinSetDone(pOperator); } - return false; + return TSDB_CODE_SUCCESS; } break; @@ -2124,13 +2126,18 @@ static bool mAsofBackwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* if (buildGot && NULL == pCtx->cache.outBlk) { pCtx->cache.outBlk = createOneDataBlock(pJoin->build->blk, false); - blockDataEnsureCapacity(pCtx->cache.outBlk, pCtx->jLimit); + if (NULL == pCtx->cache.outBlk) { + MJ_ERR_RET(terrno); + } + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->cache.outBlk, pCtx->jLimit)); } pCtx->probeGrp.blk = pJoin->probe->blk; pCtx->buildGrp.blk = pJoin->build->blk; - return true; + *newBlock = true; + + return TSDB_CODE_SUCCESS; } @@ -2142,6 +2149,7 @@ SSDataBlock* mAsofBackwardJoinDo(struct SOperatorInfo* pOperator) { int64_t buildTs = 0; SColumnInfoData* pBuildCol = NULL; SColumnInfoData* pProbeCol = NULL; + bool newBlock = false; blockDataCleanup(pCtx->finBlk); @@ -2154,7 +2162,8 @@ SSDataBlock* mAsofBackwardJoinDo(struct SOperatorInfo* pOperator) { } do { - if (!mAsofBackwardRetrieve(pOperator, pJoin, pCtx)) { + MJ_ERR_JRET(mAsofBackwardRetrieve(pOperator, pJoin, pCtx, &newBlock)); + if (!newBlock) { if (pCtx->groupJoin && pCtx->finBlk->info.rows <= 0 && !mJoinIsDone(pOperator)) { continue; } @@ -2271,7 +2280,7 @@ int32_t mAsofForwardChkFillGrpCache(SMJoinWindowCtx* pCtx) { pGrp->readIdx = 0; //pGrp->endIdx = pGrp->blk->info.rows - 1; } else { - taosArrayPop(pCache->grps); + (void)taosArrayPop(pCache->grps); pGrp = taosArrayGet(pCache->grps, 0); ASSERT(pGrp->blk == pCache->outBlk); //pGrp->endIdx = pGrp->blk->info.rows - pGrp->beginIdx; @@ -2479,7 +2488,9 @@ int32_t mAsofForwardSkipBuildGrp(SMJoinWindowCtx* pCtx, SMJoinOperatorInfo* pJoi return TSDB_CODE_SUCCESS; } -static bool mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx) { +static int32_t mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx, bool* newBlock) { + *newBlock = false; + bool probeGot = mJoinRetrieveBlk(pJoin, &pJoin->probe->blkRowIdx, &pJoin->probe->blk, pJoin->probe); bool buildGot = false; @@ -2516,7 +2527,10 @@ static bool mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* p if (buildGot && pJoin->build->newBlk) { if (NULL == pCtx->cache.outBlk) { pCtx->cache.outBlk = createOneDataBlock(pJoin->build->blk, false); - blockDataEnsureCapacity(pCtx->cache.outBlk, pCtx->jLimit); + if (NULL == pCtx->cache.outBlk) { + MJ_ERR_RET(terrno); + } + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->cache.outBlk, pCtx->jLimit)); } MJOIN_PUSH_BLK_TO_CACHE(&pCtx->cache, pJoin->build->blk); @@ -2537,6 +2551,7 @@ SSDataBlock* mAsofForwardJoinDo(struct SOperatorInfo* pOperator) { int64_t buildTs = 0; SColumnInfoData* pBuildCol = NULL; SColumnInfoData* pProbeCol = NULL; + bool newBlock = false; blockDataCleanup(pCtx->finBlk); @@ -2549,7 +2564,8 @@ SSDataBlock* mAsofForwardJoinDo(struct SOperatorInfo* pOperator) { } do { - if (!mAsofForwardRetrieve(pOperator, pJoin, pCtx)) { + MJ_ERR_JRET(mAsofForwardRetrieve(pOperator, pJoin, pCtx, &newBlock)); + if (!newBlock) { if (pCtx->groupJoin && pCtx->finBlk->info.rows <= 0 && !mJoinIsDone(pOperator)) { continue; } @@ -2643,7 +2659,7 @@ static FORCE_INLINE void mWinJoinPopFrontGroup(SMJoinWindowCtx* pCtx, SMJoinGrpR if (pGrp->blk == pCtx->cache.outBlk) { blockDataCleanup(pGrp->blk); } else if (pGrp->clonedBlk) { - blockDataDestroy(pGrp->blk); + (void)blockDataDestroy(pGrp->blk); } taosArrayPopFrontBatch(pCtx->cache.grps, 1); @@ -2667,6 +2683,10 @@ static int32_t mWinJoinCloneCacheBlk(SMJoinWindowCtx* pCtx) { pGrp->beginIdx = 0; pGrp->readIdx = 0; } + + if (NULL == pGrp->blk) { + MJ_ERR_RET(terrno); + } pGrp->clonedBlk = true; } @@ -2674,14 +2694,16 @@ static int32_t mWinJoinCloneCacheBlk(SMJoinWindowCtx* pCtx) { return TSDB_CODE_SUCCESS; } -static bool mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx) { +static int32_t mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin, SMJoinWindowCtx* pCtx, bool* newBlock) { + *newBlock = false; + bool probeGot = mJoinRetrieveBlk(pJoin, &pJoin->probe->blkRowIdx, &pJoin->probe->blk, pJoin->probe); bool buildGot = false; do { if (probeGot || MJOIN_DS_NEED_INIT(pOperator, pJoin->build)) { if (NULL == pJoin->build->blk) { - mWinJoinCloneCacheBlk(pCtx); + MJ_ERR_RET(mWinJoinCloneCacheBlk(pCtx)); } buildGot = mJoinRetrieveBlk(pJoin, &pJoin->build->blkRowIdx, &pJoin->build->blk, pJoin->build); @@ -2692,7 +2714,7 @@ static bool mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin mJoinSetDone(pOperator); } - return false; + return TSDB_CODE_SUCCESS; } if (buildGot && pCtx->forwardRowsAcq) { @@ -2709,8 +2731,9 @@ static bool mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoin } while (true); pCtx->probeGrp.blk = pJoin->probe->blk; - - return true; + *newBlock = true; + + return TSDB_CODE_SUCCESS; } int32_t mWinJoinTryAddWinBeginBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, SMJoinTableCtx* build, bool* winEnd) { @@ -3220,6 +3243,7 @@ SSDataBlock* mWinJoinDo(struct SOperatorInfo* pOperator) { int32_t code = TSDB_CODE_SUCCESS; int64_t probeTs = 0; SColumnInfoData* pProbeCol = NULL; + bool newBlock = false; blockDataCleanup(pCtx->finBlk); @@ -3232,7 +3256,8 @@ SSDataBlock* mWinJoinDo(struct SOperatorInfo* pOperator) { } do { - if (!mWinJoinRetrieve(pOperator, pJoin, pCtx)) { + MJ_ERR_JRET(mWinJoinRetrieve(pOperator, pJoin, pCtx, &newBlock)); + if (!newBlock) { if (pCtx->groupJoin && pCtx->finBlk->info.rows <= 0 && !mJoinIsDone(pOperator)) { continue; } @@ -3367,7 +3392,7 @@ int32_t mJoinInitWindowCtx(SMJoinOperatorInfo* pJoin, SSortMergeJoinPhysiNode* p } pCtx->finBlk = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc); - blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode)); + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode))); pCtx->blkThreshold = pCtx->finBlk->info.capacity * MJOIN_BLK_THRESHOLD_RATIO; @@ -3407,11 +3432,14 @@ int32_t mJoinInitMergeCtx(SMJoinOperatorInfo* pJoin, SSortMergeJoinPhysiNode* pJ pCtx->finBlk = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc); ASSERT(pJoinNode->node.pOutputDataBlockDesc->totalRowSize > 0); - blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode)); + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode))); if (pJoin->pFPreFilter) { pCtx->midBlk = createOneDataBlock(pCtx->finBlk, false); - blockDataEnsureCapacity(pCtx->midBlk, pCtx->finBlk->info.capacity); + if (NULL == pCtx->midBlk) { + MJ_ERR_RET(terrno); + } + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->midBlk, pCtx->finBlk->info.capacity)); } pCtx->blkThreshold = pCtx->finBlk->info.capacity * MJOIN_BLK_THRESHOLD_RATIO; diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index 2e2101231b..9db2c7d300 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -1147,6 +1147,7 @@ void mJoinResetForBuildTable(SMJoinTableCtx* pTable) { int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* wholeBlk, bool restart) { SColumnInfoData* pCol = taosArrayGet(pTable->blk->pDataBlock, pTable->primCtx.targetSlotId); SMJoinGrpRows* pGrp = NULL; + int32_t code = TSDB_CODE_SUCCESS; if (*(int64_t*)colDataGetNumData(pCol, pTable->blkRowIdx) != timestamp) { return TSDB_CODE_SUCCESS; @@ -1207,7 +1208,12 @@ int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* whol if (0 == pGrp->beginIdx && pTable->multiEqGrpRows && 0 == pTable->eqRowLimit) { pGrp->blk = createOneDataBlock(pTable->blk, true); - taosArrayPush(pTable->createdBlks, &pGrp->blk); + if (NULL == pGrp->blk) { + MJ_ERR_JRET(terrno); + } + if (NULL == taosArrayPush(pTable->createdBlks, &pGrp->blk)) { + MJ_ERR_JRET(terrno); + } } else { if (!pTable->multiEqGrpRows) { pGrp->endIdx = pGrp->beginIdx; From 3f2abe8b00e1e1db50e71a454f3f0ad9ddb7eedc Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 18:36:03 +0800 Subject: [PATCH 26/64] adj operator result --- source/libs/stream/src/tstreamFileState.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/libs/stream/src/tstreamFileState.c b/source/libs/stream/src/tstreamFileState.c index b16e137dc9..5dacd4c80c 100644 --- a/source/libs/stream/src/tstreamFileState.c +++ b/source/libs/stream/src/tstreamFileState.c @@ -838,6 +838,7 @@ void recoverSesssion(SStreamFileState* pFileState, int64_t ckId) { void recoverSnapshot(SStreamFileState* pFileState, int64_t ckId) { int32_t code = TSDB_CODE_SUCCESS; int32_t lino = 0; + int32_t winCode = TSDB_CODE_SUCCESS; if (pFileState->maxTs != INT64_MIN) { int64_t mark = (INT64_MIN + pFileState->deleteMark >= pFileState->maxTs) ? INT64_MIN @@ -848,7 +849,7 @@ void recoverSnapshot(SStreamFileState* pFileState, int64_t ckId) { SStreamStateCur* pCur = streamStateSeekToLast_rocksdb(pFileState->pFileStore); int32_t recoverNum = TMIN(MIN_NUM_OF_RECOVER_ROW_BUFF, pFileState->maxRowCount); - while (code == TSDB_CODE_SUCCESS) { + while (winCode == TSDB_CODE_SUCCESS) { if (pFileState->curRowCount >= recoverNum) { break; } @@ -861,8 +862,8 @@ void recoverSnapshot(SStreamFileState* pFileState, int64_t ckId) { QUERY_CHECK_CODE(code, lino, _end); } - code = streamStateGetKVByCur_rocksdb(pCur, pNewPos->pKey, (const void**)&pVal, &vlen); - if (code != TSDB_CODE_SUCCESS || pFileState->getTs(pNewPos->pKey) < pFileState->flushMark) { + winCode = streamStateGetKVByCur_rocksdb(pCur, pNewPos->pKey, (const void**)&pVal, &vlen); + if (winCode != TSDB_CODE_SUCCESS || pFileState->getTs(pNewPos->pKey) < pFileState->flushMark) { destroyRowBuffPos(pNewPos); SListNode* pNode = tdListPopTail(pFileState->usedBuffs); taosMemoryFreeClear(pNode); From 08440d1ab751ab28170cd9ad8f99edbbf137dfef Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 18:36:51 +0800 Subject: [PATCH 27/64] fix:[TD-31017]process return value in clientRawBlockWrite.c --- source/client/src/clientRawBlockWrite.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index dd8a01981f..2fabf01ef4 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -41,7 +41,7 @@ #define RAW_RETURN_CHECK(c) \ do { \ - code == c; \ + code = c; \ if (code != 0) { \ goto end; \ } \ @@ -1949,12 +1949,13 @@ static void processBatchMetaToJson(SMqBatchMetaRsp* pMsgRsp, char** string) { SDecoder coder; SMqBatchMetaRsp rsp = {0}; int32_t code = 0; + cJSON* pJson = NULL; tDecoderInit(&coder, pMsgRsp->pMetaBuff, pMsgRsp->metaBuffLen); if (tDecodeMqBatchMetaRsp(&coder, &rsp) < 0) { goto end; } - cJSON* pJson = cJSON_CreateObject(); + pJson = cJSON_CreateObject(); RAW_NULL_CHECK(pJson); RAW_FALSE_CHECK(cJSON_AddStringToObject(pJson, "tmq_meta_version", TMQ_META_VERSION)); cJSON* pMetaArr = cJSON_CreateArray(); @@ -1982,6 +1983,7 @@ static void processBatchMetaToJson(SMqBatchMetaRsp* pMsgRsp, char** string) { char* fullStr = cJSON_PrintUnformatted(pJson); cJSON_Delete(pJson); *string = fullStr; + return; end: cJSON_Delete(pJson); From ccbbdce462331a77777c57b0799cb8454e4cbb76 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Fri, 19 Jul 2024 19:46:40 +0800 Subject: [PATCH 28/64] fix:[TD-31017]process return value in clientRawBlockWrite.c --- utils/test/c/write_raw_block_test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/test/c/write_raw_block_test.c b/utils/test/c/write_raw_block_test.c index 0f123fb560..8ed997bc92 100644 --- a/utils/test/c/write_raw_block_test.c +++ b/utils/test/c/write_raw_block_test.c @@ -171,7 +171,7 @@ int32_t init_env() { } // pass NULL return last error code describe - const char* err = taos_errstr(NULL); + const char* err = tmq_err2str(error_code); printf("write_raw_block return code =0x%x err=%s\n", error_code, err); if(strcmp(err, "success") == 0) { printf("expect failed , but error string is success! err=%s\n", err); @@ -185,7 +185,7 @@ int32_t init_env() { goto END; } - err = taos_errstr(NULL); + err = tmq_err2str(error_code); printf("write_raw_block no exist table return code =0x%x err=%s\n", error_code, err); if(strcmp(err, "success") == 0) { printf("expect failed write no exist table, but error string is success! err=%s\n", err); From 5172d3cd8adf694c712b0e9ff65b6a38995d9e5f Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 19 Jul 2024 21:41:40 +0800 Subject: [PATCH 29/64] change msg define --- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index d0459eb838..7f895a37ae 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -45,7 +45,7 @@ static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) { SRetrieveIpWhiteReq req = {.ipWhiteVer = oldVer}; int32_t contLen = tSerializeRetrieveIpWhite(NULL, 0, &req); - void *pHead = rpcMallocCont(contLen); + void * pHead = rpcMallocCont(contLen); tSerializeRetrieveIpWhite(pHead, contLen, &req); SRpcMsg rpcMsg = {.pCont = pHead, @@ -146,7 +146,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.ipWhiteVer = pMgmt->pData->ipWhiteVer; int32_t contLen = tSerializeSStatusReq(NULL, 0, &req); - void *pHead = rpcMallocCont(contLen); + void * pHead = rpcMallocCont(contLen); tSerializeSStatusReq(pHead, contLen, &req); tFreeSStatusReq(&req); @@ -180,7 +180,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { void dmSendNotifyReq(SDnodeMgmt *pMgmt, SNotifyReq *pReq) { int32_t contLen = tSerializeSNotifyReq(NULL, 0, pReq); - void *pHead = rpcMallocCont(contLen); + void * pHead = rpcMallocCont(contLen); tSerializeSNotifyReq(pHead, contLen, pReq); SRpcMsg rpcMsg = {.pCont = pHead, @@ -285,24 +285,27 @@ int32_t dmProcessServerRunStatus(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { SServerStatusRsp statusRsp = {0}; dmGetServerRunStatus(pMgmt, &statusRsp); + pMsg->info.rsp = NULL; + pMsg->info.rspLen = 0; + SRpcMsg rspMsg = {.info = pMsg->info}; int32_t rspLen = tSerializeSServerStatusRsp(NULL, 0, &statusRsp); if (rspLen < 0) { - rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; - return rspMsg.code; + return TSDB_CODE_OUT_OF_MEMORY; + // rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; + // return rspMsg.code; } void *pRsp = rpcMallocCont(rspLen); if (pRsp == NULL) { - rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; - return rspMsg.code; + return TSDB_CODE_OUT_OF_MEMORY; + // rspMsg.code = TSDB_CODE_OUT_OF_MEMORY; + // return rspMsg.code; } - code = tSerializeSServerStatusRsp(pRsp, rspLen, &statusRsp); - if (code != 0) { - rpcFreeCont(pRsp); - rspMsg.code = code; - return code; + rspLen = tSerializeSServerStatusRsp(pRsp, rspLen, &statusRsp); + if (rspLen < 0) { + return TSDB_CODE_INVALID_MSG; } pMsg->info.rsp = pRsp; From 379f285ab070af4cb767ff9f45d0672c92aaea63 Mon Sep 17 00:00:00 2001 From: dmchen Date: Sat, 20 Jul 2024 01:23:01 +0000 Subject: [PATCH 30/64] fix case --- source/dnode/mnode/impl/src/mndDb.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 6b5f7ff425..1e3fe909ae 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -911,6 +911,7 @@ _exit: static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; int32_t code = -1; + int32_t lino = 0; SDbObj *pDb = NULL; SUserObj *pUser = NULL; SCreateDbReq createReq = {0}; @@ -947,15 +948,15 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { } } - TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_DB, NULL), NULL, _OVER); + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_DB, NULL), &lino, _OVER); - TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DB), NULL, _OVER); + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DB), &lino, _OVER); if (createReq.replications == 2) { - TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DUAL_REPLICA_HA), NULL, _OVER); + TAOS_CHECK_GOTO(grantCheck(TSDB_GRANT_DUAL_REPLICA_HA), &lino, _OVER); } - TAOS_CHECK_GOTO(mndCheckDbEncryptKey(pMnode, &createReq), NULL, _OVER); + TAOS_CHECK_GOTO(mndCheckDbEncryptKey(pMnode, &createReq), &lino, _OVER); pUser = mndAcquireUser(pMnode, pReq->info.conn.user); if (pUser == NULL) { @@ -974,7 +975,7 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { _OVER: if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("db:%s, failed to create since %s", createReq.db, terrstr()); + mError("db:%s, failed to create at line:%d since %s", createReq.db, lino, tstrerror(code)); } mndReleaseDb(pMnode, pDb); @@ -1620,6 +1621,8 @@ static int32_t mndProcessDropDbReq(SRpcMsg *pReq) { pDb = mndAcquireDb(pMnode, dropReq.db); if (pDb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; if (dropReq.ignoreNotExists) { code = mndBuildDropDbRsp(pDb, &pReq->info.rspLen, &pReq->info.rsp, true); } From 0b71f18e3c482c14318c89d68ce9b76a168d3539 Mon Sep 17 00:00:00 2001 From: dmchen Date: Sat, 20 Jul 2024 02:51:05 +0000 Subject: [PATCH 31/64] fix/TD-30989 --- source/dnode/mnode/impl/src/mndIndex.c | 263 ++++++++++++-------- source/dnode/mnode/impl/src/mndIndexCom.c | 12 +- source/dnode/mnode/impl/src/mndInfoSchema.c | 55 ++-- source/dnode/mnode/impl/src/mndMain.c | 168 +++++++------ 4 files changed, 278 insertions(+), 220 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndIndex.c b/source/dnode/mnode/impl/src/mndIndex.c index bb77f6c69b..910665e450 100644 --- a/source/dnode/mnode/impl/src/mndIndex.c +++ b/source/dnode/mnode/impl/src/mndIndex.c @@ -93,6 +93,7 @@ static int32_t mndFindSuperTableTagId(const SStbObj *pStb, const char *tagName, } int mndSetCreateIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbObj *pStb, SIdxObj *pIdx) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; SVgObj *pVgroup = NULL; void *pIter = NULL; @@ -110,18 +111,20 @@ int mndSetCreateIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStb if (pReq == NULL) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } STransAction action = {0}; action.epSet = mndGetVgroupEpset(pMnode, pVgroup); action.pCont = pReq; action.contLen = contLen; action.msgType = TDMT_VND_CREATE_INDEX; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); - return -1; + TAOS_RETURN(code); } sdbRelease(pSdb, pVgroup); } @@ -164,6 +167,7 @@ _err: return NULL; } int mndSetDropIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbObj *pStb, SIdxObj *pIdx) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; SVgObj *pVgroup = NULL; void *pIter = NULL; @@ -182,6 +186,8 @@ int mndSetDropIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbOb if (pReq == NULL) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; return -1; } STransAction action = {0}; @@ -189,7 +195,7 @@ int mndSetDropIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbOb action.pCont = pReq; action.contLen = len; action.msgType = TDMT_VND_DROP_INDEX; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pVgroup); @@ -198,7 +204,7 @@ int mndSetDropIdxRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbOb sdbRelease(pSdb, pVgroup); } - return 0; + TAOS_RETURN(code); } void mndCleanupIdx(SMnode *pMnode) { @@ -332,61 +338,91 @@ SDbObj *mndAcquireDbByIdx(SMnode *pMnode, const char *idxName) { } int32_t mndSetCreateIdxPrepareLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndIdxActionEncode(pIdx); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendPrepareLog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING) != 0) return -1; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + TAOS_CHECK_RETURN(mndTransAppendPrepareLog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING)); - return 0; + TAOS_RETURN(code); } int32_t mndSetCreateIdxCommitLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndIdxActionEncode(pIdx); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY)); - return 0; + TAOS_RETURN(code); } int32_t mndSetAlterIdxPrepareLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndIdxActionEncode(pIdx); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendPrepareLog(pTrans, pRedoRaw) != 0) { + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } + if ((code = mndTransAppendPrepareLog(pTrans, pRedoRaw)) != 0) { sdbFreeRaw(pRedoRaw); return -1; } - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY) != 0) return -1; + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY)); - return 0; + TAOS_RETURN(code); } int32_t mndSetAlterIdxCommitLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndIdxActionEncode(pIdx); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) { - sdbFreeRaw(pCommitRaw); - return -1; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1; + if ((code = mndTransAppendCommitlog(pTrans, pCommitRaw)) != 0) { + sdbFreeRaw(pCommitRaw); + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY)); - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateIdxVgroupRedoLogs(SMnode *pMnode, STrans *pTrans, SVgObj *pVgroup) { + int32_t code = 0; SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroup); - if (pVgRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pVgRaw) != 0) return -1; - if (sdbSetRawStatus(pVgRaw, SDB_STATUS_CREATING) != 0) return -1; - return 0; + if (pVgRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pVgRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pVgRaw, SDB_STATUS_CREATING)); + TAOS_RETURN(code); } static int32_t mndSetCreateIdxVgroupCommitLogs(SMnode *pMnode, STrans *pTrans, SVgObj *pVgroup) { + int32_t code = 0; SSdbRaw *pVgRaw = mndVgroupActionEncode(pVgroup); - if (pVgRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pVgRaw) != 0) return -1; - if (sdbSetRawStatus(pVgRaw, SDB_STATUS_READY) != 0) return -1; - return 0; + if (pVgRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pVgRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pVgRaw, SDB_STATUS_READY)); + TAOS_RETURN(code); } // static int32_t mndSetUpdateIdxStbCommitLogs(SMnode *pMnode, STrans *pTrans, SStbObj *pStb) { @@ -427,10 +463,7 @@ static int32_t mndProcessCreateIdxReq(SRpcMsg *pReq) { SDbObj *pDb = NULL; SCreateTagIndexReq createReq = {0}; - if (tDeserializeSCreateTagIdxReq(pReq->pCont, pReq->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateTagIdxReq(pReq->pCont, pReq->contLen, &createReq), NULL, _OVER); mInfo("idx:%s start to create", createReq.idxName); // if (mndCheckCreateIdxReq(&createReq) != 0) { @@ -439,29 +472,30 @@ static int32_t mndProcessCreateIdxReq(SRpcMsg *pReq) { pDb = mndAcquireDbByStb(pMnode, createReq.stbName); if (pDb == NULL) { - terrno = TSDB_CODE_MND_DB_NOT_EXIST; + code = TSDB_CODE_MND_DB_NOT_EXIST; + if (terrno != 0) code = terrno; goto _OVER; } pStb = mndAcquireStb(pMnode, createReq.stbName); if (pStb == NULL) { mError("idx:%s, failed to create since stb:%s not exist", createReq.idxName, createReq.stbName); + code = TSDB_CODE_MND_DB_NOT_EXIST; + if (terrno != 0) code = terrno; goto _OVER; } SSIdx idx = {0}; - if (mndAcquireGlobalIdx(pMnode, createReq.idxName, SDB_IDX, &idx) == 0) { + if ((code = mndAcquireGlobalIdx(pMnode, createReq.idxName, SDB_IDX, &idx)) == 0) { pIdx = idx.pIdx; } else { goto _OVER; } if (pIdx != NULL) { - terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; + code = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_WRITE_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_WRITE_DB, pDb), NULL, _OVER); code = mndAddIndex(pMnode, pReq, &createReq, pDb, pStb); if (terrno == TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST || terrno == TSDB_CODE_MND_TAG_NOT_EXIST) { @@ -479,25 +513,35 @@ _OVER: mndReleaseIdx(pMnode, pIdx); mndReleaseDb(pMnode, pDb); - return code; + TAOS_RETURN(code); } int32_t mndSetDropIdxPrepareLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndIdxActionEncode(pIdx); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendPrepareLog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING) != 0) return -1; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendPrepareLog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING)); - return 0; + TAOS_RETURN(code); } int32_t mndSetDropIdxCommitLogs(SMnode *pMnode, STrans *pTrans, SIdxObj *pIdx) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndIdxActionEncode(pIdx); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) != 0) return -1; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED)); - return 0; + TAOS_RETURN(code); } static int32_t mndProcessGetTbIdxReq(SRpcMsg *pReq) { @@ -592,6 +636,7 @@ static int32_t mndCheckIndexReq(SCreateTagIndexReq *pReq) { static int32_t mndSetUpdateIdxStbCommitLogs(SMnode *pMnode, STrans *pTrans, SStbObj *pOld, SStbObj *pNew, char *tagName, int on) { + int32_t code = 0; taosRLockLatch(&pOld->lock); memcpy(pNew, pOld, sizeof(SStbObj)); taosRUnLockLatch(&pOld->lock); @@ -604,28 +649,24 @@ static int32_t mndSetUpdateIdxStbCommitLogs(SMnode *pMnode, STrans *pTrans, SStb int8_t hasIdx = 0; int32_t tag = mndFindSuperTableTagId(pOld, tagName, &hasIdx); if (tag < 0) { - terrno = TSDB_CODE_MND_TAG_NOT_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_NOT_EXIST; + TAOS_RETURN(code); } col_id_t colId = pOld->pTags[tag].colId; - if (mndCheckColAndTagModifiable(pMnode, pOld->name, pOld->uid, colId) != 0) { - return -1; - } - if (mndAllocStbSchemas(pOld, pNew) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndCheckColAndTagModifiable(pMnode, pOld->name, pOld->uid, colId)); + TAOS_CHECK_RETURN(mndAllocStbSchemas(pOld, pNew)); SSchema *pTag = pNew->pTags + tag; if (on == 1) { if (hasIdx && tag != 0) { - terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; + TAOS_RETURN(code); } else { SSCHMEA_SET_IDX_ON(pTag); } } else { if (hasIdx == 0) { - terrno = TSDB_CODE_MND_SMA_NOT_EXIST; + code = TSDB_CODE_MND_SMA_NOT_EXIST; } else { SSCHMEA_SET_IDX_OFF(pTag); pTag->flags = 0; @@ -634,11 +675,15 @@ static int32_t mndSetUpdateIdxStbCommitLogs(SMnode *pMnode, STrans *pTrans, SStb pNew->tagVer++; SSdbRaw *pCommitRaw = mndStbActionEncode(pNew); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY)); - return 0; + TAOS_RETURN(code); } int32_t mndAddIndexImpl(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SStbObj *pStb, SIdxObj *pIdx) { // impl later @@ -649,17 +694,17 @@ int32_t mndAddIndexImpl(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SStbObj *pSt // mInfo("trans:%d, used to add index to stb:%s", pTrans->id, pStb->name); mndTransSetDbName(pTrans, pDb->name, pStb->name); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); mndTransSetSerial(pTrans); - if (mndSetCreateIdxPrepareLogs(pMnode, pTrans, pIdx) != 0) goto _OVER; - if (mndSetCreateIdxCommitLogs(pMnode, pTrans, pIdx) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetCreateIdxPrepareLogs(pMnode, pTrans, pIdx), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateIdxCommitLogs(pMnode, pTrans, pIdx), NULL, _OVER); - if (mndSetUpdateIdxStbCommitLogs(pMnode, pTrans, pStb, &newStb, pIdx->colName, 1) != 0) goto _OVER; - if (mndSetCreateIdxRedoActions(pMnode, pTrans, pDb, &newStb, pIdx) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetUpdateIdxStbCommitLogs(pMnode, pTrans, pStb, &newStb, pIdx->colName, 1), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateIdxRedoActions(pMnode, pTrans, pDb, &newStb, pIdx), NULL, _OVER); - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; @@ -671,7 +716,7 @@ _OVER: taosMemoryFree(newStb.pCmpr); } mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } int8_t mndCheckIndexNameByTagName(SMnode *pMnode, SIdxObj *pIdxObj) { // build index on first tag, and no index name; @@ -725,25 +770,23 @@ static int32_t mndAddIndex(SMnode *pMnode, SRpcMsg *pReq, SCreateTagIndexReq *re int8_t hasIdx = 0; int32_t tag = mndFindSuperTableTagId(pStb, req->colName, &hasIdx); if (tag < 0) { - terrno = TSDB_CODE_MND_TAG_NOT_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_NOT_EXIST; + TAOS_RETURN(code); } int8_t exist = 0; if (tag == 0 && hasIdx == 1) { exist = mndCheckIndexNameByTagName(pMnode, &idxObj); if (exist) { - terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; + TAOS_RETURN(code); } } else if (hasIdx == 1) { - terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; + TAOS_RETURN(code); } col_id_t colId = pStb->pTags[tag].colId; - if (mndCheckColAndTagModifiable(pMnode, pStb->name, pStb->uid, colId) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndCheckColAndTagModifiable(pMnode, pStb->name, pStb->uid, colId)); // SSchema *pTag = pStb->pTags + tag; // if (IS_IDX_ON(pTag)) { @@ -752,7 +795,7 @@ static int32_t mndAddIndex(SMnode *pMnode, SRpcMsg *pReq, SCreateTagIndexReq *re // } code = mndAddIndexImpl(pMnode, pReq, pDb, pStb, &idxObj); - return code; + TAOS_RETURN(code); } static int32_t mndDropIdx(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SIdxObj *pIdx) { @@ -763,22 +806,30 @@ static int32_t mndDropIdx(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pDb, SIdxObj *p SStbObj newObj = {0}; pStb = mndAcquireStb(pMnode, pIdx->stb); - if (pStb == NULL) goto _OVER; + if (pStb == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_DB, pReq, "drop-index"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } mInfo("trans:%d, used to drop idx:%s", pTrans->id, pIdx->name); mndTransSetDbName(pTrans, pDb->name, NULL); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); mndTransSetSerial(pTrans); - if (mndSetDropIdxPrepareLogs(pMnode, pTrans, pIdx) != 0) goto _OVER; - if (mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetDropIdxPrepareLogs(pMnode, pTrans, pIdx), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx), NULL, _OVER); - if (mndSetUpdateIdxStbCommitLogs(pMnode, pTrans, pStb, &newObj, pIdx->colName, 0) != 0) goto _OVER; - if (mndSetDropIdxRedoActions(pMnode, pTrans, pDb, &newObj, pIdx) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetUpdateIdxStbCommitLogs(pMnode, pTrans, pStb, &newObj, pIdx->colName, 0), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetDropIdxRedoActions(pMnode, pTrans, pDb, &newObj, pIdx), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; @@ -789,7 +840,7 @@ _OVER: mndTransDrop(pTrans); mndReleaseStb(pMnode, pStb); - return code; + TAOS_RETURN(code); } int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; @@ -798,13 +849,10 @@ int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) { SIdxObj *pIdx = NULL; SDropTagIndexReq req = {0}; - if (tDeserializeSDropTagIdxReq(pReq->pCont, pReq->contLen, &req) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSDropTagIdxReq(pReq->pCont, pReq->contLen, &req), NULL, _OVER); mInfo("idx:%s, start to drop", req.name); SSIdx idx = {0}; - if (mndAcquireGlobalIdx(pMnode, req.name, SDB_IDX, &idx) == 0) { + if ((code = mndAcquireGlobalIdx(pMnode, req.name, SDB_IDX, &idx)) == 0) { pIdx = idx.pIdx; } else { goto _OVER; @@ -815,7 +863,7 @@ int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) { code = 0; goto _OVER; } else { - terrno = TSDB_CODE_MND_TAG_INDEX_NOT_EXIST; + code = TSDB_CODE_MND_TAG_INDEX_NOT_EXIST; goto _OVER; } } @@ -823,12 +871,11 @@ int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) { pDb = mndAcquireDbByIdx(pMnode, req.name); if (pDb == NULL) { terrno = TSDB_CODE_MND_DB_NOT_SELECTED; + if (terrno != 0) code = terrno; goto _OVER; } - if (mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_WRITE_DB, pDb) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckDbPrivilege(pMnode, pReq->info.conn.user, MND_OPER_WRITE_DB, pDb), NULL, _OVER); code = mndDropIdx(pMnode, pReq, pDb, pIdx); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; @@ -839,7 +886,7 @@ _OVER: } mndReleaseIdx(pMnode, pIdx); mndReleaseDb(pMnode, pDb); - return code; + TAOS_RETURN(code); } static int32_t mndProcessGetIdxReq(SRpcMsg *pReq) { // do nothing @@ -847,6 +894,7 @@ static int32_t mndProcessGetIdxReq(SRpcMsg *pReq) { } int32_t mndDropIdxsByStb(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbObj *pStb) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; @@ -856,17 +904,17 @@ int32_t mndDropIdxsByStb(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SStbObj *p if (pIter == NULL) break; if (pIdx->stbUid == pStb->uid) { - if (mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx) != 0) { + if ((code = mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx)) != 0) { sdbCancelFetch(pSdb, pIter); sdbRelease(pSdb, pIdx); - return -1; + TAOS_RETURN(code); } } sdbRelease(pSdb, pIdx); } - return 0; + TAOS_RETURN(code); } int32_t mndGetIdxsByTagName(SMnode *pMnode, SStbObj *pStb, char *tagName, SIdxObj *idx) { @@ -891,6 +939,7 @@ int32_t mndGetIdxsByTagName(SMnode *pMnode, SStbObj *pStb, char *tagName, SIdxOb return -1; } int32_t mndDropIdxsByDb(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; @@ -900,15 +949,15 @@ int32_t mndDropIdxsByDb(SMnode *pMnode, STrans *pTrans, SDbObj *pDb) { if (pIter == NULL) break; if (pIdx->dbUid == pDb->uid) { - if (mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx) != 0) { + if ((code = mndSetDropIdxCommitLogs(pMnode, pTrans, pIdx)) != 0) { sdbRelease(pSdb, pIdx); sdbCancelFetch(pSdb, pIter); - return -1; + TAOS_RETURN(code); } } sdbRelease(pSdb, pIdx); } - return 0; + TAOS_RETURN(code); } diff --git a/source/dnode/mnode/impl/src/mndIndexCom.c b/source/dnode/mnode/impl/src/mndIndexCom.c index 2858d7548e..9ec2e2bb08 100644 --- a/source/dnode/mnode/impl/src/mndIndexCom.c +++ b/source/dnode/mnode/impl/src/mndIndexCom.c @@ -30,7 +30,7 @@ int mndAcquireGlobalIdx(SMnode *pMnode, char *name, int type, SSIdx *idx) { SSmaObj *pSma = mndGetIdx(pMnode, name, SDB_SMA); SIdxObj *pIdx = mndGetIdx(pMnode, name, SDB_IDX); - terrno = 0; + int32_t code = 0; if (pSma == NULL && pIdx == NULL) return 0; @@ -40,8 +40,8 @@ int mndAcquireGlobalIdx(SMnode *pMnode, char *name, int type, SSIdx *idx) { idx->pIdx = pSma; } else { mndReleaseSma(pMnode, pSma); - terrno = TSDB_CODE_MND_SMA_ALREADY_EXIST; - return -1; + code = TSDB_CODE_MND_SMA_ALREADY_EXIST; + TAOS_RETURN(code); } } else { if (type == SDB_IDX) { @@ -49,9 +49,9 @@ int mndAcquireGlobalIdx(SMnode *pMnode, char *name, int type, SSIdx *idx) { idx->pIdx = pIdx; } else { mndReleaseIdx(pMnode, pIdx); - terrno = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; - return -1; + code = TSDB_CODE_MND_TAG_INDEX_ALREADY_EXIST; + TAOS_RETURN(code); } } - return 0; + TAOS_RETURN(code); } diff --git a/source/dnode/mnode/impl/src/mndInfoSchema.c b/source/dnode/mnode/impl/src/mndInfoSchema.c index 0a98a01b22..c811a74782 100644 --- a/source/dnode/mnode/impl/src/mndInfoSchema.c +++ b/source/dnode/mnode/impl/src/mndInfoSchema.c @@ -18,10 +18,11 @@ #include "systable.h" static int32_t mndInitInfosTableSchema(const SSysDbTableSchema *pSrc, int32_t colNum, SSchema **pDst) { + int32_t code = 0; SSchema *schema = taosMemoryCalloc(colNum, sizeof(SSchema)); if (NULL == schema) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } for (int32_t i = 0; i < colNum; ++i) { @@ -35,10 +36,11 @@ static int32_t mndInitInfosTableSchema(const SSysDbTableSchema *pSrc, int32_t co } *pDst = schema; - return 0; + TAOS_RETURN(code); } static int32_t mndInsInitMeta(SHashObj *hash) { + int32_t code = 0; STableMetaRsp meta = {0}; tstrncpy(meta.dbFName, TSDB_INFORMATION_SCHEMA_DB, sizeof(meta.dbFName)); @@ -55,24 +57,23 @@ static int32_t mndInsInitMeta(SHashObj *hash) { meta.numOfColumns = pInfosTableMeta[i].colNum; meta.sysInfo = pInfosTableMeta[i].sysInfo; - if (mndInitInfosTableSchema(pInfosTableMeta[i].schema, pInfosTableMeta[i].colNum, &meta.pSchemas)) { - return -1; - } + TAOS_CHECK_RETURN(mndInitInfosTableSchema(pInfosTableMeta[i].schema, pInfosTableMeta[i].colNum, &meta.pSchemas)); if (taosHashPut(hash, meta.tbName, strlen(meta.tbName), &meta, sizeof(meta))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } } - return 0; + TAOS_RETURN(code); } int32_t mndBuildInsTableSchema(SMnode *pMnode, const char *dbFName, const char *tbName, bool sysinfo, STableMetaRsp *pRsp) { + int32_t code = 0; if (NULL == pMnode->infosMeta) { - terrno = TSDB_CODE_APP_ERROR; - return -1; + code = TSDB_CODE_APP_ERROR; + TAOS_RETURN(code); } STableMetaRsp *pMeta = NULL; @@ -84,40 +85,41 @@ int32_t mndBuildInsTableSchema(SMnode *pMnode, const char *dbFName, const char * if (NULL == pMeta) { mError("invalid information schema table name:%s", tbName); - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + code = TSDB_CODE_PAR_TABLE_NOT_EXIST; + TAOS_RETURN(code); } if (!sysinfo && pMeta->sysInfo) { mError("no permission to get schema of table name:%s", tbName); - terrno = TSDB_CODE_PAR_PERMISSION_DENIED; - return -1; + code = TSDB_CODE_PAR_PERMISSION_DENIED; + TAOS_RETURN(code); } *pRsp = *pMeta; pRsp->pSchemas = taosMemoryCalloc(pMeta->numOfColumns, sizeof(SSchema)); if (pRsp->pSchemas == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; pRsp->pSchemas = NULL; - return -1; + TAOS_RETURN(code); } memcpy(pRsp->pSchemas, pMeta->pSchemas, pMeta->numOfColumns * sizeof(SSchema)); - return 0; + TAOS_RETURN(code); } int32_t mndBuildInsTableCfg(SMnode *pMnode, const char *dbFName, const char *tbName, STableCfgRsp *pRsp) { + int32_t code = 0; if (NULL == pMnode->infosMeta) { - terrno = TSDB_CODE_APP_ERROR; - return -1; + code = TSDB_CODE_APP_ERROR; + TAOS_RETURN(code); } STableMetaRsp *pMeta = taosHashGet(pMnode->infosMeta, tbName, strlen(tbName)); if (NULL == pMeta) { mError("invalid information schema table name:%s", tbName); - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + code = TSDB_CODE_PAR_TABLE_NOT_EXIST; + TAOS_RETURN(code); } strcpy(pRsp->tbName, pMeta->tbName); @@ -129,22 +131,21 @@ int32_t mndBuildInsTableCfg(SMnode *pMnode, const char *dbFName, const char *tbN pRsp->pSchemas = taosMemoryCalloc(pMeta->numOfColumns, sizeof(SSchema)); if (pRsp->pSchemas == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; pRsp->pSchemas = NULL; - return -1; + TAOS_RETURN(code); } memcpy(pRsp->pSchemas, pMeta->pSchemas, pMeta->numOfColumns * sizeof(SSchema)); pRsp->pSchemaExt = taosMemoryCalloc(pMeta->numOfColumns, sizeof(SSchemaExt)); - return 0; + TAOS_RETURN(code); } int32_t mndInitInfos(SMnode *pMnode) { pMnode->infosMeta = taosHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_VARCHAR), false, HASH_NO_LOCK); if (pMnode->infosMeta == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } return mndInsInitMeta(pMnode->infosMeta); diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 723e3701a1..8930f2786f 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -50,8 +50,7 @@ static inline int32_t mndAcquireRpc(SMnode *pMnode) { int32_t code = 0; taosThreadRwlockRdlock(&pMnode->lock); if (pMnode->stopped) { - terrno = TSDB_CODE_APP_IS_STOPPING; - code = -1; + code = TSDB_CODE_APP_IS_STOPPING; } else if (!mndIsLeader(pMnode)) { code = -1; } else { @@ -63,7 +62,7 @@ static inline int32_t mndAcquireRpc(SMnode *pMnode) { #endif } taosThreadRwlockUnlock(&pMnode->lock); - return code; + TAOS_RETURN(code); } static inline void mndReleaseRpc(SMnode *pMnode) { @@ -78,6 +77,7 @@ static inline void mndReleaseRpc(SMnode *pMnode) { } static void *mndBuildTimerMsg(int32_t *pContLen) { + terrno = 0; SMTimerReq timerReq = {0}; int32_t contLen = tSerializeSMTimerMsg(NULL, 0, &timerReq); @@ -426,17 +426,18 @@ static void *mndThreadFp(void *param) { } static int32_t mndInitTimer(SMnode *pMnode) { + int32_t code = 0; TdThreadAttr thAttr; taosThreadAttrInit(&thAttr); taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE); - if (taosThreadCreate(&pMnode->thread, &thAttr, mndThreadFp, pMnode) != 0) { + if ((code = taosThreadCreate(&pMnode->thread, &thAttr, mndThreadFp, pMnode)) != 0) { mError("failed to create timer thread since %s", strerror(errno)); - return -1; + TAOS_RETURN(code); } taosThreadAttrDestroy(&thAttr); tmsgReportStartup("mnode-timer", "initialized"); - return 0; + TAOS_RETURN(code); } static void mndCleanupTimer(SMnode *pMnode) { @@ -447,21 +448,23 @@ static void mndCleanupTimer(SMnode *pMnode) { } static int32_t mndCreateDir(SMnode *pMnode, const char *path) { + int32_t code = 0; pMnode->path = taosStrdup(path); if (pMnode->path == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } if (taosMkDir(pMnode->path) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + code = TAOS_SYSTEM_ERROR(errno); + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndInitWal(SMnode *pMnode) { + int32_t code = 0; char path[PATH_MAX + 20] = {0}; snprintf(path, sizeof(path), "%s%swal", pMnode->path, TD_DIRSEP); SWalCfg cfg = { @@ -480,8 +483,8 @@ static int32_t mndInitWal(SMnode *pMnode) { if(tsiEncryptAlgorithm == DND_CA_SM4 && (tsiEncryptScope & DND_CS_MNODE_WAL) == DND_CS_MNODE_WAL){ cfg.encryptAlgorithm = (tsiEncryptScope & DND_CS_MNODE_WAL)? tsiEncryptAlgorithm : 0; if(tsEncryptKey[0] == '\0'){ - terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; - return -1; + code = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; + TAOS_RETURN(code); } else{ strncpy(cfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN); @@ -492,10 +495,12 @@ static int32_t mndInitWal(SMnode *pMnode) { pMnode->pWal = walOpen(path, &cfg); if (pMnode->pWal == NULL) { mError("failed to open wal since %s. wal:%s", terrstr(), path); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static void mndCloseWal(SMnode *pMnode) { @@ -506,6 +511,7 @@ static void mndCloseWal(SMnode *pMnode) { } static int32_t mndInitSdb(SMnode *pMnode) { + int32_t code = 0; SSdbOpt opt = {0}; opt.path = pMnode->path; opt.pMnode = pMnode; @@ -513,10 +519,12 @@ static int32_t mndInitSdb(SMnode *pMnode) { pMnode->pSdb = sdbInit(&opt); if (pMnode->pSdb == NULL) { - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndOpenSdb(SMnode *pMnode) { @@ -542,48 +550,47 @@ static int32_t mndAllocStep(SMnode *pMnode, char *name, MndInitFp initFp, MndCle step.initFp = initFp; step.cleanupFp = cleanupFp; if (taosArrayPush(pMnode->pSteps, &step) == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + TAOS_RETURN(TSDB_CODE_OUT_OF_MEMORY); } - return 0; + TAOS_RETURN(0); } static int32_t mndInitSteps(SMnode *pMnode) { - if (mndAllocStep(pMnode, "mnode-wal", mndInitWal, mndCloseWal) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-sdb", mndInitSdb, mndCleanupSdb) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-trans", mndInitTrans, mndCleanupTrans) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-cluster", mndInitCluster, mndCleanupCluster) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-mnode", mndInitMnode, mndCleanupMnode) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-qnode", mndInitQnode, mndCleanupQnode) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-snode", mndInitSnode, mndCleanupSnode) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-arbgroup", mndInitArbGroup, mndCleanupArbGroup) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-dnode", mndInitDnode, mndCleanupDnode) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-user", mndInitUser, mndCleanupUser) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-grant", mndInitGrant, mndCleanupGrant) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-privilege", mndInitPrivilege, mndCleanupPrivilege) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-acct", mndInitAcct, mndCleanupAcct) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-stream", mndInitStream, mndCleanupStream) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-topic", mndInitTopic, mndCleanupTopic) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-consumer", mndInitConsumer, mndCleanupConsumer) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-subscribe", mndInitSubscribe, mndCleanupSubscribe) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-vgroup", mndInitVgroup, mndCleanupVgroup) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-stb", mndInitStb, mndCleanupStb) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-sma", mndInitSma, mndCleanupSma) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-idx", mndInitIdx, mndCleanupIdx) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-infos", mndInitInfos, mndCleanupInfos) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-perfs", mndInitPerfs, mndCleanupPerfs) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-db", mndInitDb, mndCleanupDb) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-func", mndInitFunc, mndCleanupFunc) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-view", mndInitView, mndCleanupView) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-compact", mndInitCompact, mndCleanupCompact) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-compact-detail", mndInitCompactDetail, mndCleanupCompactDetail) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-sdb", mndOpenSdb, NULL) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-profile", mndInitProfile, mndCleanupProfile) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-show", mndInitShow, mndCleanupShow) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-query", mndInitQuery, mndCleanupQuery) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-sync", mndInitSync, mndCleanupSync) != 0) return -1; - if (mndAllocStep(pMnode, "mnode-telem", mndInitTelem, mndCleanupTelem) != 0) return -1; + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-wal", mndInitWal, mndCloseWal)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sdb", mndInitSdb, mndCleanupSdb)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-trans", mndInitTrans, mndCleanupTrans)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-cluster", mndInitCluster, mndCleanupCluster)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-mnode", mndInitMnode, mndCleanupMnode)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-qnode", mndInitQnode, mndCleanupQnode)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-snode", mndInitSnode, mndCleanupSnode)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-arbgroup", mndInitArbGroup, mndCleanupArbGroup)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-dnode", mndInitDnode, mndCleanupDnode)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-user", mndInitUser, mndCleanupUser)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-grant", mndInitGrant, mndCleanupGrant)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-privilege", mndInitPrivilege, mndCleanupPrivilege)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-acct", mndInitAcct, mndCleanupAcct)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-stream", mndInitStream, mndCleanupStream)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-topic", mndInitTopic, mndCleanupTopic)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-consumer", mndInitConsumer, mndCleanupConsumer)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-subscribe", mndInitSubscribe, mndCleanupSubscribe)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-vgroup", mndInitVgroup, mndCleanupVgroup)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-stb", mndInitStb, mndCleanupStb)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sma", mndInitSma, mndCleanupSma)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-idx", mndInitIdx, mndCleanupIdx)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-infos", mndInitInfos, mndCleanupInfos)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-perfs", mndInitPerfs, mndCleanupPerfs)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-db", mndInitDb, mndCleanupDb)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-func", mndInitFunc, mndCleanupFunc)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-view", mndInitView, mndCleanupView)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-compact", mndInitCompact, mndCleanupCompact)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-compact-detail", mndInitCompactDetail, mndCleanupCompactDetail)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sdb", mndOpenSdb, NULL)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-profile", mndInitProfile, mndCleanupProfile)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-show", mndInitShow, mndCleanupShow)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-query", mndInitQuery, mndCleanupQuery)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-sync", mndInitSync, mndCleanupSync)); + TAOS_CHECK_RETURN(mndAllocStep(pMnode, "mnode-telem", mndInitTelem, mndCleanupTelem)); return 0; } @@ -618,8 +625,7 @@ static int32_t mndExecSteps(SMnode *pMnode) { int32_t code = terrno; mError("%s exec failed since %s, start to cleanup", pStep->name, terrstr()); mndCleanupSteps(pMnode, pos); - terrno = code; - return -1; + TAOS_RETURN(code); } else { mInfo("%s is initialized", pStep->name); tmsgReportStartup(pStep->name, "initialized"); @@ -627,7 +633,7 @@ static int32_t mndExecSteps(SMnode *pMnode) { } pMnode->clusterId = mndGetClusterId(pMnode); - return 0; + TAOS_RETURN(0); } static void mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) { @@ -642,6 +648,7 @@ static void mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) { } SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { + terrno = 0; mInfo("start to open mnode in %s", path); SMnode *pMnode = taosMemoryCalloc(1, sizeof(SMnode)); @@ -769,38 +776,40 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { } static int32_t mndCheckMnodeState(SRpcMsg *pMsg) { - if (!IsReq(pMsg)) return 0; + int32_t code = 0; + if (!IsReq(pMsg)) TAOS_RETURN(code); if (pMsg->msgType == TDMT_SCH_QUERY || pMsg->msgType == TDMT_SCH_MERGE_QUERY || pMsg->msgType == TDMT_SCH_QUERY_CONTINUE || pMsg->msgType == TDMT_SCH_QUERY_HEARTBEAT || pMsg->msgType == TDMT_SCH_FETCH || pMsg->msgType == TDMT_SCH_MERGE_FETCH || pMsg->msgType == TDMT_SCH_DROP_TASK || pMsg->msgType == TDMT_SCH_TASK_NOTIFY) { - return 0; + TAOS_RETURN(code); } SMnode *pMnode = pMsg->info.node; taosThreadRwlockRdlock(&pMnode->lock); if (pMnode->stopped) { taosThreadRwlockUnlock(&pMnode->lock); - terrno = TSDB_CODE_APP_IS_STOPPING; - return -1; + code = TSDB_CODE_APP_IS_STOPPING; + TAOS_RETURN(code); } terrno = 0; SSyncState state = syncGetState(pMnode->syncMgmt.sync); if (terrno != 0) { taosThreadRwlockUnlock(&pMnode->lock); - return -1; + code = terrno; + TAOS_RETURN(code); } if (state.state != TAOS_SYNC_STATE_LEADER) { taosThreadRwlockUnlock(&pMnode->lock); - terrno = TSDB_CODE_SYN_NOT_LEADER; + code = TSDB_CODE_SYN_NOT_LEADER; goto _OVER; } if (!state.restored || !pMnode->restored) { taosThreadRwlockUnlock(&pMnode->lock); - terrno = TSDB_CODE_SYN_RESTORING; + code = TSDB_CODE_SYN_RESTORING; goto _OVER; } @@ -812,7 +821,7 @@ static int32_t mndCheckMnodeState(SRpcMsg *pMsg) { #endif taosThreadRwlockUnlock(&pMnode->lock); - return 0; + TAOS_RETURN(code); _OVER: if (pMsg->msgType == TDMT_MND_TMQ_TIMER || pMsg->msgType == TDMT_MND_TELEM_TIMER || @@ -824,19 +833,17 @@ _OVER: pMsg->msgType == TDMT_MND_ARB_CHECK_SYNC_TIMER) { mTrace("timer not process since mnode restored:%d stopped:%d, sync restored:%d role:%s ", pMnode->restored, pMnode->stopped, state.restored, syncStr(state.state)); - return -1; + TAOS_RETURN(code); } const STraceId *trace = &pMsg->info.traceId; SEpSet epSet = {0}; - int32_t tmpCode = terrno; mndGetMnodeEpSet(pMnode, &epSet); - terrno = tmpCode; mGDebug( "msg:%p, type:%s failed to process since %s, mnode restored:%d stopped:%d, sync restored:%d " "role:%s, redirect numOfEps:%d inUse:%d, type:%s", - pMsg, TMSG_INFO(pMsg->msgType), terrstr(), pMnode->restored, pMnode->stopped, state.restored, + pMsg, TMSG_INFO(pMsg->msgType), tstrerror(code), pMnode->restored, pMnode->stopped, state.restored, syncStr(state.state), epSet.numOfEps, epSet.inUse, TMSG_INFO(pMsg->msgType)); if (epSet.numOfEps <= 0) return -1; @@ -853,7 +860,7 @@ _OVER: pMsg->info.rspLen = contLen; } - return -1; + TAOS_RETURN(code); } int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo* pQueueInfo) { @@ -867,12 +874,12 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo* pQueueInfo) { fpExt = pMnode->msgFpExt[TMSG_INDEX(pMsg->msgType)]; if (fpExt == NULL) { mGError("msg:%p, failed to get msg handle, app:%p type:%s", pMsg, pMsg->info.ahandle, TMSG_INFO(pMsg->msgType)); - terrno = TSDB_CODE_MSG_NOT_PROCESSED; - return -1; + code = TSDB_CODE_MSG_NOT_PROCESSED; + TAOS_RETURN(code); } } - if (mndCheckMnodeState(pMsg) != 0) return -1; + TAOS_CHECK_RETURN(mndCheckMnodeState(pMsg)); mGTrace("msg:%p, start to process in mnode, app:%p type:%s", pMsg, pMsg->info.ahandle, TMSG_INFO(pMsg->msgType)); if (fp) @@ -886,14 +893,12 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo* pQueueInfo) { } else if (code == 0) { mGTrace("msg:%p, successfully processed", pMsg); } else { - if (code == -1) { - code = terrno; - } + if (terrno != 0) code = terrno; mGError("msg:%p, failed to process since %s, app:%p type:%s", pMsg, tstrerror(code), pMsg->info.ahandle, TMSG_INFO(pMsg->msgType)); } - return code; + TAOS_RETURN(code); } void mndSetMsgHandle(SMnode *pMnode, tmsg_t msgType, MndMsgFp fp) { @@ -925,7 +930,8 @@ int64_t mndGenerateUid(const char *name, int32_t len) { int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgroupInfo *pVgroupInfo, SMonStbInfo *pStbInfo, SMonGrantInfo *pGrantInfo) { - if (mndAcquireRpc(pMnode) != 0) return -1; + int32_t code = 0; + TAOS_CHECK_RETURN(mndAcquireRpc(pMnode)); SSdb *pSdb = pMnode->pSdb; int64_t ms = taosGetTimestampMs(); @@ -937,7 +943,9 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr if (pClusterInfo->dnodes == NULL || pClusterInfo->mnodes == NULL || pVgroupInfo->vgroups == NULL || pStbInfo->stbs == NULL) { mndReleaseRpc(pMnode); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } // cluster info @@ -1063,7 +1071,7 @@ int32_t mndGetMonitorInfo(SMnode *pMnode, SMonClusterInfo *pClusterInfo, SMonVgr } mndReleaseRpc(pMnode); - return 0; + TAOS_RETURN(code); } int32_t mndGetLoad(SMnode *pMnode, SMnodeLoad *pLoad) { From 9d506d20f1b18711d0ca873bfe068afa4827bebf Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Sat, 20 Jul 2024 07:43:22 +0000 Subject: [PATCH 32/64] refactor error code --- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 7f895a37ae..16965cd89c 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -45,7 +45,7 @@ static void dmMayShouldUpdateIpWhiteList(SDnodeMgmt *pMgmt, int64_t ver) { SRetrieveIpWhiteReq req = {.ipWhiteVer = oldVer}; int32_t contLen = tSerializeRetrieveIpWhite(NULL, 0, &req); - void * pHead = rpcMallocCont(contLen); + void *pHead = rpcMallocCont(contLen); tSerializeRetrieveIpWhite(pHead, contLen, &req); SRpcMsg rpcMsg = {.pCont = pHead, @@ -146,7 +146,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { req.ipWhiteVer = pMgmt->pData->ipWhiteVer; int32_t contLen = tSerializeSStatusReq(NULL, 0, &req); - void * pHead = rpcMallocCont(contLen); + void *pHead = rpcMallocCont(contLen); tSerializeSStatusReq(pHead, contLen, &req); tFreeSStatusReq(&req); @@ -180,7 +180,7 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { void dmSendNotifyReq(SDnodeMgmt *pMgmt, SNotifyReq *pReq) { int32_t contLen = tSerializeSNotifyReq(NULL, 0, pReq); - void * pHead = rpcMallocCont(contLen); + void *pHead = rpcMallocCont(contLen); tSerializeSNotifyReq(pHead, contLen, pReq); SRpcMsg rpcMsg = {.pCont = pHead, @@ -218,9 +218,10 @@ int32_t dmProcessConfigReq(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { SConfig *pCfg = taosGetCfg(); code = cfgSetItem(pCfg, cfgReq.config, cfgReq.value, CFG_STYPE_ALTER_CMD, true); - if (code != 0) { - return code; - } + // not care succ or not + // if (code != 0) { + // return code; + // } return taosCfgDynamicOptions(pCfg, cfgReq.config, true); } From f80d67acbb7e742069f7cc8919112e56ac8c2d93 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Sat, 20 Jul 2024 09:50:11 +0000 Subject: [PATCH 33/64] refactor error code --- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 16965cd89c..f50754992c 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -218,10 +218,13 @@ int32_t dmProcessConfigReq(SDnodeMgmt *pMgmt, SRpcMsg *pMsg) { SConfig *pCfg = taosGetCfg(); code = cfgSetItem(pCfg, cfgReq.config, cfgReq.value, CFG_STYPE_ALTER_CMD, true); - // not care succ or not - // if (code != 0) { - // return code; - // } + if (code != 0) { + if (strncasecmp(cfgReq.config, "resetlog", strlen("resetlog")) == 0) { + code = 0; + } else { + return code; + } + } return taosCfgDynamicOptions(pCfg, cfgReq.config, true); } From 1c12a16b0095bf5817b0c374bcae53cfd2323877 Mon Sep 17 00:00:00 2001 From: dmchen Date: Sun, 21 Jul 2024 00:58:07 +0000 Subject: [PATCH 34/64] fix/TD-30989 --- source/dnode/mnode/impl/src/mndMnode.c | 256 ++++++++++++-------- source/dnode/mnode/impl/src/mndPerfSchema.c | 53 ++-- source/dnode/mnode/impl/src/mndProfile.c | 77 +++--- source/dnode/mnode/impl/src/mndQnode.c | 190 ++++++++------- source/dnode/mnode/impl/src/mndQuery.c | 6 +- source/dnode/mnode/impl/src/mndScheduler.c | 82 ++++--- 6 files changed, 373 insertions(+), 291 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index af6ae8c5a0..7b1ca9c625 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -69,6 +69,7 @@ int32_t mndInitMnode(SMnode *pMnode) { void mndCleanupMnode(SMnode *pMnode) {} SMnodeObj *mndAcquireMnode(SMnode *pMnode, int32_t mnodeId) { + terrno = 0; SMnodeObj *pObj = sdbAcquire(pMnode->pSdb, SDB_MNODE, &mnodeId); if (pObj == NULL && terrno == TSDB_CODE_SDB_OBJ_NOT_THERE) { terrno = TSDB_CODE_MND_MNODE_NOT_EXIST; @@ -82,13 +83,18 @@ void mndReleaseMnode(SMnode *pMnode, SMnodeObj *pObj) { } static int32_t mndCreateDefaultMnode(SMnode *pMnode) { + int32_t code = 0; SMnodeObj mnodeObj = {0}; mnodeObj.id = 1; mnodeObj.createdTime = taosGetTimestampMs(); mnodeObj.updateTime = mnodeObj.createdTime; SSdbRaw *pRaw = mndMnodeActionEncode(&mnodeObj); - if (pRaw == NULL) return -1; + if (pRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + return -1; + } (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); mInfo("mnode:%d, will be created when deploying, raw:%p", mnodeObj.id, pRaw); @@ -97,25 +103,27 @@ static int32_t mndCreateDefaultMnode(SMnode *pMnode) { if (pTrans == NULL) { sdbFreeRaw(pRaw); mError("mnode:%d, failed to create since %s", mnodeObj.id, terrstr()); + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; return -1; } mInfo("trans:%d, used to create mnode:%d", pTrans->id, mnodeObj.id); - if (mndTransAppendCommitlog(pTrans, pRaw) != 0) { + if ((code = mndTransAppendCommitlog(pTrans, pRaw)) != 0) { mError("trans:%d, failed to append commit log since %s", pTrans->id, terrstr()); mndTransDrop(pTrans); - return -1; + TAOS_RETURN(code); } (void)sdbSetRawStatus(pRaw, SDB_STATUS_READY); - if (mndTransPrepare(pMnode, pTrans) != 0) { + if ((code = mndTransPrepare(pMnode, pTrans)) != 0) { mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr()); mndTransDrop(pTrans); return -1; } mndTransDrop(pTrans); - return 0; + TAOS_RETURN(code); } static SSdbRaw *mndMnodeActionEncode(SMnodeObj *pObj) { @@ -188,16 +196,19 @@ _OVER: } static int32_t mndMnodeActionInsert(SSdb *pSdb, SMnodeObj *pObj) { + int32_t code = 0; mTrace("mnode:%d, perform insert action, row:%p", pObj->id, pObj); pObj->pDnode = sdbAcquireNotReadyObj(pSdb, SDB_DNODE, &pObj->id); if (pObj->pDnode == NULL) { mError("mnode:%d, failed to perform insert action since %s", pObj->id, terrstr()); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + int32_t code = 0; } pObj->syncState = TAOS_SYNC_STATE_OFFLINE; mndReloadSyncConfig(pSdb->pMnode); - return 0; + TAOS_RETURN(code); } static int32_t mndMnodeActionDelete(SSdb *pSdb, SMnodeObj *pObj) { @@ -271,38 +282,59 @@ void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet) { } static int32_t mndSetCreateMnodeRedoLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndMnodeActionEncode(pObj); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING) != 0) return -1; - return 0; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING)); + TAOS_RETURN(code); } int32_t mndSetRestoreCreateMnodeRedoLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndMnodeActionEncode(pObj); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY) != 0) return -1; - return 0; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_READY)); + TAOS_RETURN(code); } static int32_t mndSetCreateMnodeUndoLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pUndoRaw = mndMnodeActionEncode(pObj); - if (pUndoRaw == NULL) return -1; - if (mndTransAppendUndolog(pTrans, pUndoRaw) != 0) return -1; - if (sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED) != 0) return -1; - return 0; + if (pUndoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendUndolog(pTrans, pUndoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED)); + TAOS_RETURN(code); } int32_t mndSetCreateMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndMnodeActionEncode(pObj); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1; - return 0; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY)); + TAOS_RETURN(code); } static int32_t mndBuildCreateMnodeRedoAction(STrans *pTrans, SDCreateMnodeReq *pCreateReq, SEpSet *pCreateEpSet) { + int32_t code = 0; int32_t contLen = tSerializeSDCreateMnodeReq(NULL, 0, pCreateReq); void *pReq = taosMemoryMalloc(contLen); tSerializeSDCreateMnodeReq(pReq, contLen, pCreateReq); @@ -315,15 +347,16 @@ static int32_t mndBuildCreateMnodeRedoAction(STrans *pTrans, SDCreateMnodeReq *p .acceptableCode = TSDB_CODE_MNODE_ALREADY_DEPLOYED, }; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndBuildAlterMnodeTypeRedoAction(STrans *pTrans, SDAlterMnodeTypeReq *pAlterMnodeTypeReq, SEpSet *pAlterMnodeTypeEpSet) { + int32_t code = 0; int32_t contLen = tSerializeSDCreateMnodeReq(NULL, 0, pAlterMnodeTypeReq); void *pReq = taosMemoryMalloc(contLen); tSerializeSDCreateMnodeReq(pReq, contLen, pAlterMnodeTypeReq); @@ -337,14 +370,15 @@ static int32_t mndBuildAlterMnodeTypeRedoAction(STrans *pTrans, SDAlterMnodeType .acceptableCode = TSDB_CODE_MNODE_ALREADY_IS_VOTER, }; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndBuildAlterMnodeRedoAction(STrans *pTrans, SDCreateMnodeReq *pAlterReq, SEpSet *pAlterEpSet) { + int32_t code = 0; int32_t contLen = tSerializeSDCreateMnodeReq(NULL, 0, pAlterReq); void *pReq = taosMemoryMalloc(contLen); tSerializeSDCreateMnodeReq(pReq, contLen, pAlterReq); @@ -357,15 +391,16 @@ static int32_t mndBuildAlterMnodeRedoAction(STrans *pTrans, SDCreateMnodeReq *pA .acceptableCode = 0, }; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndBuildDropMnodeRedoAction(STrans *pTrans, SDDropMnodeReq *pDropReq, SEpSet *pDroprEpSet) { + int32_t code = 0; int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, pDropReq); void *pReq = taosMemoryMalloc(contLen); tSerializeSCreateDropMQSNodeReq(pReq, contLen, pDropReq); @@ -378,11 +413,11 @@ static int32_t mndBuildDropMnodeRedoAction(STrans *pTrans, SDDropMnodeReq *pDrop .acceptableCode = TSDB_CODE_MNODE_NOT_DEPLOYED, }; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { @@ -426,9 +461,9 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno createEpset.eps[0].port = pDnode->port; memcpy(createEpset.eps[0].fqdn, pDnode->fqdn, TSDB_FQDN_LEN); - if (mndBuildCreateMnodeRedoAction(pTrans, &createReq, &createEpset) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildCreateMnodeRedoAction(pTrans, &createReq, &createEpset)); - return 0; + TAOS_RETURN(0); } int32_t mndSetRestoreCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { @@ -474,9 +509,9 @@ int32_t mndSetRestoreCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno createEpset.eps[0].port = pDnode->port; memcpy(createEpset.eps[0].fqdn, pDnode->fqdn, TSDB_FQDN_LEN); - if (mndBuildCreateMnodeRedoAction(pTrans, &createReq, &createEpset) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildCreateMnodeRedoAction(pTrans, &createReq, &createEpset)); - return 0; + TAOS_RETURN(0); } static int32_t mndSetAlterMnodeTypeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { @@ -517,9 +552,9 @@ static int32_t mndSetAlterMnodeTypeRedoActions(SMnode *pMnode, STrans *pTrans, S createEpset.eps[0].port = pDnode->port; memcpy(createEpset.eps[0].fqdn, pDnode->fqdn, TSDB_FQDN_LEN); - if (mndBuildAlterMnodeTypeRedoAction(pTrans, &alterReq, &createEpset) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildAlterMnodeTypeRedoAction(pTrans, &alterReq, &createEpset)); - return 0; + TAOS_RETURN(0); } int32_t mndSetRestoreAlterMnodeTypeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { @@ -565,19 +600,23 @@ int32_t mndSetRestoreAlterMnodeTypeRedoActions(SMnode *pMnode, STrans *pTrans, S createEpset.eps[0].port = pDnode->port; memcpy(createEpset.eps[0].fqdn, pDnode->fqdn, TSDB_FQDN_LEN); - if (mndBuildAlterMnodeTypeRedoAction(pTrans, &alterReq, &createEpset) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildAlterMnodeTypeRedoAction(pTrans, &alterReq, &createEpset)); - return 0; + TAOS_RETURN(0); } static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMCreateMnodeReq *pCreate) { int32_t code = -1; STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, pReq, "create-mnode"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } mndTransSetSerial(pTrans); mInfo("trans:%d, used to create mnode:%d", pTrans->id, pCreate->dnodeId); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); SMnodeObj mnodeObj = {0}; mnodeObj.id = pDnode->id; @@ -586,8 +625,8 @@ static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, mnodeObj.role = TAOS_SYNC_ROLE_LEARNER; mnodeObj.lastIndex = pMnode->applied; - if (mndSetCreateMnodeRedoActions(pMnode, pTrans, pDnode, &mnodeObj) != 0) goto _OVER; - if (mndSetCreateMnodeRedoLogs(pMnode, pTrans, &mnodeObj) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetCreateMnodeRedoActions(pMnode, pTrans, pDnode, &mnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateMnodeRedoLogs(pMnode, pTrans, &mnodeObj), NULL, _OVER); SMnodeObj mnodeLeaderObj = {0}; mnodeLeaderObj.id = pDnode->id; @@ -596,15 +635,15 @@ static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, mnodeLeaderObj.role = TAOS_SYNC_ROLE_VOTER; mnodeLeaderObj.lastIndex = pMnode->applied + 1; - if (mndSetAlterMnodeTypeRedoActions(pMnode, pTrans, pDnode, &mnodeLeaderObj) != 0) goto _OVER; - if (mndSetCreateMnodeCommitLogs(pMnode, pTrans, &mnodeLeaderObj) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetAlterMnodeTypeRedoActions(pMnode, pTrans, pDnode, &mnodeLeaderObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateMnodeCommitLogs(pMnode, pTrans, &mnodeLeaderObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; _OVER: mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndProcessCreateMnodeReq(SRpcMsg *pReq) { @@ -614,19 +653,14 @@ static int32_t mndProcessCreateMnodeReq(SRpcMsg *pReq) { SDnodeObj *pDnode = NULL; SMCreateMnodeReq createReq = {0}; - if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq), NULL, _OVER); mInfo("mnode:%d, start to create", createReq.dnodeId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_MNODE) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_MNODE), NULL, _OVER); pObj = mndAcquireMnode(pMnode, createReq.dnodeId); if (pObj != NULL) { - terrno = TSDB_CODE_MND_MNODE_ALREADY_EXIST; + code = TSDB_CODE_MND_MNODE_ALREADY_EXIST; goto _OVER; } else if (terrno != TSDB_CODE_MND_MNODE_NOT_EXIST) { goto _OVER; @@ -634,17 +668,17 @@ static int32_t mndProcessCreateMnodeReq(SRpcMsg *pReq) { pDnode = mndAcquireDnode(pMnode, createReq.dnodeId); if (pDnode == NULL) { - terrno = TSDB_CODE_MND_DNODE_NOT_EXIST; + code = TSDB_CODE_MND_DNODE_NOT_EXIST; goto _OVER; } if (sdbGetSize(pMnode->pSdb, SDB_MNODE) >= 3) { - terrno = TSDB_CODE_MND_TOO_MANY_MNODES; + code = TSDB_CODE_MND_TOO_MANY_MNODES; goto _OVER; } if (!mndIsDnodeOnline(pDnode, taosGetTimestampMs())) { - terrno = TSDB_CODE_DNODE_OFFLINE; + code = TSDB_CODE_DNODE_OFFLINE; goto _OVER; } @@ -665,27 +699,38 @@ _OVER: mndReleaseDnode(pMnode, pDnode); tFreeSMCreateQnodeReq(&createReq); - return code; + TAOS_RETURN(code); } static int32_t mndSetDropMnodeRedoLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndMnodeActionEncode(pObj); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING) != 0) return -1; - return 0; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING)); + TAOS_RETURN(code); } static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndMnodeActionEncode(pObj); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) != 0) return -1; - return 0; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED)); + TAOS_RETURN(code); } static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj, bool force) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SDDropMnodeReq dropReq = {0}; @@ -700,32 +745,32 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode if (totalMnodes == 2) { if (force) { mError("cant't force drop dnode, since a mnode on it and replica is 2"); - terrno = TSDB_CODE_MNODE_ONLY_TWO_MNODE; - return -1; + code = TSDB_CODE_MNODE_ONLY_TWO_MNODE; + TAOS_RETURN(code); } mInfo("vgId:1, has %d mnodes, exec redo log first", totalMnodes); - if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; + TAOS_CHECK_RETURN(mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj)); if (!force) { - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet)); } } else if (totalMnodes == 3) { mInfo("vgId:1, has %d mnodes, exec redo action first", totalMnodes); if (!force) { - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + TAOS_CHECK_RETURN(mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet)); } - if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; + TAOS_CHECK_RETURN(mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj)); } else { - return -1; + TAOS_RETURN(-1); } - return 0; + TAOS_RETURN(code); } int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj, bool force) { if (pObj == NULL) return 0; pObj->lastIndex = pMnode->applied; - if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj, force) != 0) return -1; - if (mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj) != 0) return -1; + TAOS_CHECK_RETURN(mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj, force)); + TAOS_CHECK_RETURN(mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj)); return 0; } @@ -734,19 +779,23 @@ static int32_t mndDropMnode(SMnode *pMnode, SRpcMsg *pReq, SMnodeObj *pObj) { STrans *pTrans = NULL; pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, pReq, "drop-mnode"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } mndTransSetSerial(pTrans); mInfo("trans:%d, used to drop mnode:%d", pTrans->id, pObj->id); - if (mndTransCheckConflict(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndTransCheckConflict(pMnode, pTrans), NULL, _OVER); - if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj, false), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; _OVER: mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndProcessDropMnodeReq(SRpcMsg *pReq) { @@ -755,38 +804,35 @@ static int32_t mndProcessDropMnodeReq(SRpcMsg *pReq) { SMnodeObj *pObj = NULL; SMDropMnodeReq dropReq = {0}; - if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq), NULL, _OVER); mInfo("mnode:%d, start to drop", dropReq.dnodeId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_MNODE) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_MNODE), NULL, _OVER); if (dropReq.dnodeId <= 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto _OVER; } pObj = mndAcquireMnode(pMnode, dropReq.dnodeId); if (pObj == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } if (pMnode->selfDnodeId == dropReq.dnodeId) { - terrno = TSDB_CODE_MND_CANT_DROP_LEADER; + code = TSDB_CODE_MND_CANT_DROP_LEADER; goto _OVER; } if (sdbGetSize(pMnode->pSdb, SDB_MNODE) <= 1) { - terrno = TSDB_CODE_MND_TOO_FEW_MNODES; + code = TSDB_CODE_MND_TOO_FEW_MNODES; goto _OVER; } if (!mndIsDnodeOnline(pObj->pDnode, taosGetTimestampMs())) { - terrno = TSDB_CODE_DNODE_OFFLINE; + code = TSDB_CODE_DNODE_OFFLINE; goto _OVER; } @@ -805,7 +851,7 @@ _OVER: mndReleaseMnode(pMnode, pObj); tFreeSMCreateQnodeReq(&dropReq); - return code; + TAOS_RETURN(code); } static int32_t mndRetrieveMnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { @@ -892,13 +938,11 @@ static int32_t mndProcessAlterMnodeReq(SRpcMsg *pReq) { #if 1 return 0; #else + int32_t code = 0; SMnode *pMnode = pReq->info.node; SDAlterMnodeReq alterReq = {0}; - if (tDeserializeSDCreateMnodeReq(pReq->pCont, pReq->contLen, &alterReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; - } + TAOS_CHECK_RETURN(tDeserializeSDCreateMnodeReq(pReq->pCont, pReq->contLen, &alterReq)); SMnodeOpt option = {.deploy = true, .numOfReplicas = alterReq.replica, .selfIndex = -1}; memcpy(option.replicas, alterReq.replicas, sizeof(alterReq.replicas)); @@ -913,9 +957,9 @@ static int32_t mndProcessAlterMnodeReq(SRpcMsg *pReq) { return 0; } - if (mndWriteFile(pMnode->path, &option) != 0) { + if ((code = mndWriteFile(pMnode->path, &option)) != 0) { mError("failed to write mnode file since %s", terrstr()); - return -1; + TAOS_RETURN(code); } SSyncCfg cfg = {.replicaNum = alterReq.replica, .myIndex = -1}; @@ -939,14 +983,14 @@ static int32_t mndProcessAlterMnodeReq(SRpcMsg *pReq) { } } - int32_t code = syncReconfig(pMnode->syncMgmt.sync, &cfg); + code = syncReconfig(pMnode->syncMgmt.sync, &cfg); if (code != 0) { mError("failed to sync reconfig since %s", terrstr()); } else { mInfo("alter mnode sync success"); } - return code; + TAOS_RETURN(code); #endif } diff --git a/source/dnode/mnode/impl/src/mndPerfSchema.c b/source/dnode/mnode/impl/src/mndPerfSchema.c index 33dc63bdf4..d54c27ce30 100644 --- a/source/dnode/mnode/impl/src/mndPerfSchema.c +++ b/source/dnode/mnode/impl/src/mndPerfSchema.c @@ -19,10 +19,11 @@ // connection/application/ int32_t mndInitPerfsTableSchema(const SSysDbTableSchema *pSrc, int32_t colNum, SSchema **pDst) { + int32_t code = 0; SSchema *schema = taosMemoryCalloc(colNum, sizeof(SSchema)); if (NULL == schema) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } for (int32_t i = 0; i < colNum; ++i) { @@ -34,10 +35,11 @@ int32_t mndInitPerfsTableSchema(const SSysDbTableSchema *pSrc, int32_t colNum, S } *pDst = schema; - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } int32_t mndPerfsInitMeta(SHashObj *hash) { + int32_t code = 0; STableMetaRsp meta = {0}; tstrncpy(meta.dbFName, TSDB_INFORMATION_SCHEMA_DB, sizeof(meta.dbFName)); @@ -53,56 +55,56 @@ int32_t mndPerfsInitMeta(SHashObj *hash) { tstrncpy(meta.tbName, pSysDbTableMeta[i].name, sizeof(meta.tbName)); meta.numOfColumns = pSysDbTableMeta[i].colNum; - if (mndInitPerfsTableSchema(pSysDbTableMeta[i].schema, pSysDbTableMeta[i].colNum, &meta.pSchemas)) { - return -1; - } + TAOS_CHECK_RETURN(mndInitPerfsTableSchema(pSysDbTableMeta[i].schema, pSysDbTableMeta[i].colNum, &meta.pSchemas)); if (taosHashPut(hash, meta.tbName, strlen(meta.tbName), &meta, sizeof(meta))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } } - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } int32_t mndBuildPerfsTableSchema(SMnode *pMnode, const char *dbFName, const char *tbName, STableMetaRsp *pRsp) { + int32_t code = 0; if (NULL == pMnode->perfsMeta) { - terrno = TSDB_CODE_APP_ERROR; - return -1; + code = TSDB_CODE_APP_ERROR; + TAOS_RETURN(code); } STableMetaRsp *meta = (STableMetaRsp *)taosHashGet(pMnode->perfsMeta, tbName, strlen(tbName)); if (NULL == meta) { mError("invalid performance schema table name:%s", tbName); - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + code = TSDB_CODE_PAR_TABLE_NOT_EXIST; + TAOS_RETURN(code); } *pRsp = *meta; pRsp->pSchemas = taosMemoryCalloc(meta->numOfColumns, sizeof(SSchema)); if (pRsp->pSchemas == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; pRsp->pSchemas = NULL; - return -1; + TAOS_RETURN(code); } memcpy(pRsp->pSchemas, meta->pSchemas, meta->numOfColumns * sizeof(SSchema)); - return 0; + TAOS_RETURN(code); } int32_t mndBuildPerfsTableCfg(SMnode *pMnode, const char *dbFName, const char *tbName, STableCfgRsp *pRsp) { + int32_t code = 0; if (NULL == pMnode->perfsMeta) { - terrno = TSDB_CODE_APP_ERROR; - return -1; + code = TSDB_CODE_APP_ERROR; + TAOS_RETURN(code); } STableMetaRsp *pMeta = taosHashGet(pMnode->perfsMeta, tbName, strlen(tbName)); if (NULL == pMeta) { mError("invalid performance schema table name:%s", tbName); - terrno = TSDB_CODE_PAR_TABLE_NOT_EXIST; - return -1; + code = TSDB_CODE_PAR_TABLE_NOT_EXIST; + TAOS_RETURN(code); } strcpy(pRsp->tbName, pMeta->tbName); @@ -114,20 +116,21 @@ int32_t mndBuildPerfsTableCfg(SMnode *pMnode, const char *dbFName, const char *t pRsp->pSchemas = taosMemoryCalloc(pMeta->numOfColumns, sizeof(SSchema)); if (pRsp->pSchemas == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; pRsp->pSchemas = NULL; - return -1; + TAOS_RETURN(code); } memcpy(pRsp->pSchemas, pMeta->pSchemas, pMeta->numOfColumns * sizeof(SSchema)); - return 0; + TAOS_RETURN(code); } int32_t mndInitPerfs(SMnode *pMnode) { + int32_t code = 0; pMnode->perfsMeta = taosHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK); if (pMnode->perfsMeta == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } return mndPerfsInitMeta(pMnode->perfsMeta); diff --git a/source/dnode/mnode/impl/src/mndProfile.c b/source/dnode/mnode/impl/src/mndProfile.c index 4224d79391..3921f2281a 100644 --- a/source/dnode/mnode/impl/src/mndProfile.c +++ b/source/dnode/mnode/impl/src/mndProfile.c @@ -85,22 +85,23 @@ static void mndCancelGetNextApp(SMnode *pMnode, void *pIter); static int32_t mndProcessSvrVerReq(SRpcMsg *pReq); int32_t mndInitProfile(SMnode *pMnode) { + int32_t code = 0; SProfileMgmt *pMgmt = &pMnode->profileMgmt; // in ms int32_t checkTime = tsShellActivityTimer * 2 * 1000; pMgmt->connCache = taosCacheInit(TSDB_DATA_TYPE_UINT, checkTime, false, (__cache_free_fn_t)mndFreeConn, "conn"); if (pMgmt->connCache == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; mError("failed to alloc profile cache since %s", terrstr()); - return -1; + TAOS_RETURN(code); } pMgmt->appCache = taosCacheInit(TSDB_DATA_TYPE_BIGINT, checkTime, true, (__cache_free_fn_t)mndFreeApp, "app"); if (pMgmt->appCache == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; mError("failed to alloc profile cache since %s", terrstr()); - return -1; + TAOS_RETURN(code); } mndSetMsgHandle(pMnode, TDMT_MND_HEARTBEAT, mndProcessHeartBeatReq); @@ -116,7 +117,7 @@ int32_t mndInitProfile(SMnode *pMnode) { mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_APPS, mndRetrieveApps); mndAddShowFreeIterHandle(pMnode, TSDB_MGMT_TABLE_APPS, mndCancelGetNextApp); - return 0; + TAOS_RETURN(code); } void mndCleanupProfile(SMnode *pMnode) { @@ -384,6 +385,7 @@ static SAppObj *mndCreateApp(SMnode *pMnode, uint32_t clientIp, SAppHbReq *pReq) static void mndFreeApp(SAppObj *pApp) { mTrace("app %" PRIx64 " is destroyed", pApp->appId); } static SAppObj *mndAcquireApp(SMnode *pMnode, int64_t appId) { + terrno = 0; SProfileMgmt *pMgmt = &pMnode->profileMgmt; SAppObj *pApp = taosCacheAcquireByKey(pMgmt->appCache, &appId, sizeof(appId)); @@ -431,13 +433,16 @@ static SClientHbRsp *mndMqHbBuildRsp(SMnode *pMnode, SClientHbReq *pReq) { } static int32_t mndUpdateAppInfo(SMnode *pMnode, SClientHbReq *pHbReq, SRpcConnInfo *connInfo) { + int32_t code = 0; SAppHbReq *pReq = &pHbReq->app; SAppObj *pApp = mndAcquireApp(pMnode, pReq->appId); if (pApp == NULL) { pApp = mndCreateApp(pMnode, connInfo->clientIp, pReq); if (pApp == NULL) { mError("failed to create new app %" PRIx64 " since %s", pReq->appId, terrstr()); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } else { mDebug("a new app %" PRIx64 " is created", pReq->appId); mndReleaseApp(pMnode, pApp); @@ -475,6 +480,7 @@ static int32_t mndGetOnlineDnodeNum(SMnode *pMnode, int32_t *num) { static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHbReq *pHbReq, SClientHbBatchRsp *pBatchRsp, SConnPreparedObj *pObj) { + int32_t code = 0; SProfileMgmt *pMgmt = &pMnode->profileMgmt; SClientHbRsp hbRsp = {.connKey = pHbReq->connKey, .status = 0, .info = NULL, .query = NULL}; SRpcConnInfo connInfo = pMsg->info.conn; @@ -492,7 +498,9 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb pHbReq->app.pid, pHbReq->app.name, 0); if (pConn == NULL) { mError("user:%s, conn:%u is freed and failed to create new since %s", connInfo.user, pBasic->connId, terrstr()); - return -1; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } else { mDebug("user:%s, conn:%u is freed, will create a new conn:%u", connInfo.user, pBasic->connId, pConn->id); } @@ -501,9 +509,9 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb SQueryHbRspBasic *rspBasic = taosMemoryCalloc(1, sizeof(SQueryHbRspBasic)); if (rspBasic == NULL) { mndReleaseConn(pMnode, pConn, true); - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; mError("user:%s, conn:%u failed to process hb while since %s", pConn->user, pBasic->connId, terrstr()); - return -1; + TAOS_RETURN(code); } mndSaveQueryList(pConn, pBasic); @@ -539,9 +547,9 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb hbRsp.info = taosArrayInit(kvNum, sizeof(SKv)); if (NULL == hbRsp.info) { mError("taosArrayInit %d rsp kv failed", kvNum); - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; tFreeClientHbRsp(&hbRsp); - return -1; + TAOS_RETURN(code); } #ifdef TD_ENTERPRISE @@ -554,8 +562,8 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb mTrace("recv view dyn ver, bootTs:%" PRId64 ", ver:%" PRIu64, pDynViewVer->svrBootTs, pDynViewVer->dynViewVer); SDynViewVersion *pRspVer = NULL; - if (0 != mndValidateDynViewVersion(pMnode, pDynViewVer, &needCheck, &pRspVer)) { - return -1; + if (0 != (code = mndValidateDynViewVersion(pMnode, pDynViewVer, &needCheck, &pRspVer))) { + TAOS_RETURN(code); } if (needCheck) { @@ -647,13 +655,14 @@ static int32_t mndProcessQueryHeartBeat(SMnode *pMnode, SRpcMsg *pMsg, SClientHb } static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { + int32_t code = 0; SMnode *pMnode = pReq->info.node; SClientHbBatchReq batchReq = {0}; if (tDeserializeSClientHbBatchReq(pReq->pCont, pReq->contLen, &batchReq) != 0) { taosArrayDestroyEx(batchReq.reqs, tFreeClientHbReq); - terrno = TSDB_CODE_INVALID_MSG; - return -1; + code = TSDB_CODE_INVALID_MSG; + TAOS_RETURN(code); } SConnPreparedObj obj = {0}; @@ -699,31 +708,27 @@ static int32_t mndProcessHeartBeatReq(SRpcMsg *pReq) { taosArrayDestroy(obj.pQnodeList); - return 0; + TAOS_RETURN(code); } static int32_t mndProcessKillQueryReq(SRpcMsg *pReq) { + int32_t code = 0; SMnode *pMnode = pReq->info.node; SProfileMgmt *pMgmt = &pMnode->profileMgmt; SKillQueryReq killReq = {0}; - if (tDeserializeSKillQueryReq(pReq->pCont, pReq->contLen, &killReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; - } + TAOS_CHECK_RETURN(tDeserializeSKillQueryReq(pReq->pCont, pReq->contLen, &killReq)); mInfo("kill query msg is received, queryId:%s", killReq.queryStrId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_QUERY) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_QUERY)); int32_t connId = 0; uint64_t queryId = 0; char *p = strchr(killReq.queryStrId, ':'); if (NULL == p) { mError("invalid query id %s", killReq.queryStrId); - terrno = TSDB_CODE_MND_INVALID_QUERY_ID; - return -1; + code = TSDB_CODE_MND_INVALID_QUERY_ID; + TAOS_RETURN(code); } *p = 0; connId = taosStr2Int32(killReq.queryStrId, NULL, 16); @@ -732,40 +737,36 @@ static int32_t mndProcessKillQueryReq(SRpcMsg *pReq) { SConnObj *pConn = taosCacheAcquireByKey(pMgmt->connCache, &connId, sizeof(int32_t)); if (pConn == NULL) { mError("connId:%x, failed to kill queryId:%" PRIx64 ", conn not exist", connId, queryId); - terrno = TSDB_CODE_MND_INVALID_CONN_ID; - return -1; + code = TSDB_CODE_MND_INVALID_CONN_ID; + TAOS_RETURN(code); } else { mInfo("connId:%x, queryId:%" PRIx64 " is killed by user:%s", connId, queryId, pReq->info.conn.user); pConn->killId = queryId; taosCacheRelease(pMgmt->connCache, (void **)&pConn, false); - return 0; + TAOS_RETURN(code); } } static int32_t mndProcessKillConnReq(SRpcMsg *pReq) { + int32_t code = 0; SMnode *pMnode = pReq->info.node; SProfileMgmt *pMgmt = &pMnode->profileMgmt; SKillConnReq killReq = {0}; - if (tDeserializeSKillConnReq(pReq->pCont, pReq->contLen, &killReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - return -1; - } + TAOS_CHECK_RETURN(tDeserializeSKillConnReq(pReq->pCont, pReq->contLen, &killReq)); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_CONN) != 0) { - return -1; - } + TAOS_CHECK_RETURN(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_KILL_CONN)); SConnObj *pConn = taosCacheAcquireByKey(pMgmt->connCache, &killReq.connId, sizeof(uint32_t)); if (pConn == NULL) { mError("connId:%u, failed to kill connection, conn not exist", killReq.connId); - terrno = TSDB_CODE_MND_INVALID_CONN_ID; - return -1; + code = TSDB_CODE_MND_INVALID_CONN_ID; + TAOS_RETURN(code); } else { mInfo("connId:%u, is killed by user:%s", killReq.connId, pReq->info.conn.user); pConn->killed = 1; taosCacheRelease(pMgmt->connCache, (void **)&pConn, false); - return TSDB_CODE_SUCCESS; + TAOS_RETURN(code); } } diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index b86f14e698..6cf0fbd387 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -138,15 +138,16 @@ _OVER: } static int32_t mndQnodeActionInsert(SSdb *pSdb, SQnodeObj *pObj) { + int32_t code = 0; mTrace("qnode:%d, perform insert action, row:%p", pObj->id, pObj); pObj->pDnode = sdbAcquire(pSdb, SDB_DNODE, &pObj->id); if (pObj->pDnode == NULL) { - terrno = TSDB_CODE_MND_DNODE_NOT_EXIST; + code = TSDB_CODE_MND_DNODE_NOT_EXIST; mError("qnode:%d, failed to perform insert action since %s", pObj->id, terrstr()); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndQnodeActionDelete(SSdb *pSdb, SQnodeObj *pObj) { @@ -166,27 +167,42 @@ static int32_t mndQnodeActionUpdate(SSdb *pSdb, SQnodeObj *pOld, SQnodeObj *pNew } static int32_t mndSetCreateQnodeRedoLogs(STrans *pTrans, SQnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndQnodeActionEncode(pObj); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING) != 0) return -1; - return 0; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_CREATING)); + TAOS_RETURN(code); } static int32_t mndSetCreateQnodeUndoLogs(STrans *pTrans, SQnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pUndoRaw = mndQnodeActionEncode(pObj); - if (pUndoRaw == NULL) return -1; - if (mndTransAppendUndolog(pTrans, pUndoRaw) != 0) return -1; - if (sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED) != 0) return -1; - return 0; + if (pUndoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendUndolog(pTrans, pUndoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED)); + TAOS_RETURN(code); } int32_t mndSetCreateQnodeCommitLogs(STrans *pTrans, SQnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndQnodeActionEncode(pObj); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY) != 0) return -1; - return 0; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendCommitlog(pTrans, pCommitRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pCommitRaw, SDB_STATUS_READY)); + TAOS_RETURN(code); } bool mndQnodeInDnode(SQnodeObj *pQnode, int32_t dnodeId) { @@ -194,6 +210,7 @@ bool mndQnodeInDnode(SQnodeObj *pQnode, int32_t dnodeId) { } int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeObj *pObj) { + int32_t code = 0; SDCreateQnodeReq createReq = {0}; createReq.dnodeId = pDnode->id; @@ -212,23 +229,24 @@ int32_t mndSetCreateQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeOb action.msgType = TDMT_DND_CREATE_QNODE; action.acceptableCode = TSDB_CODE_QNODE_ALREADY_DEPLOYED; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndSetCreateQnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeObj *pObj) { + int32_t code = 0; SDDropQnodeReq dropReq = {0}; dropReq.dnodeId = pDnode->id; int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq); void *pReq = taosMemoryMalloc(contLen); if (pReq == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); @@ -239,12 +257,12 @@ static int32_t mndSetCreateQnodeUndoActions(STrans *pTrans, SDnodeObj *pDnode, S action.msgType = TDMT_DND_DROP_QNODE; action.acceptableCode = TSDB_CODE_QNODE_NOT_DEPLOYED; - if (mndTransAppendUndoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendUndoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } static int32_t mndCreateQnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMCreateQnodeReq *pCreate) { @@ -256,22 +274,26 @@ static int32_t mndCreateQnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, qnodeObj.updateTime = qnodeObj.createdTime; STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_NOTHING, pReq, "create-qnode"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } mndTransSetSerial(pTrans); mInfo("trans:%d, used to create qnode:%d", pTrans->id, pCreate->dnodeId); - if (mndSetCreateQnodeRedoLogs(pTrans, &qnodeObj) != 0) goto _OVER; - if (mndSetCreateQnodeUndoLogs(pTrans, &qnodeObj) != 0) goto _OVER; - if (mndSetCreateQnodeCommitLogs(pTrans, &qnodeObj) != 0) goto _OVER; - if (mndSetCreateQnodeRedoActions(pTrans, pDnode, &qnodeObj) != 0) goto _OVER; - if (mndSetCreateQnodeUndoActions(pTrans, pDnode, &qnodeObj) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetCreateQnodeRedoLogs(pTrans, &qnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateQnodeUndoLogs(pTrans, &qnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateQnodeCommitLogs(pTrans, &qnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateQnodeRedoActions(pTrans, pDnode, &qnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndSetCreateQnodeUndoActions(pTrans, pDnode, &qnodeObj), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; _OVER: mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndProcessCreateQnodeReq(SRpcMsg *pReq) { @@ -281,19 +303,14 @@ static int32_t mndProcessCreateQnodeReq(SRpcMsg *pReq) { SDnodeObj *pDnode = NULL; SMCreateQnodeReq createReq = {0}; - if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &createReq), NULL, _OVER); mInfo("qnode:%d, start to create", createReq.dnodeId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_QNODE) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_CREATE_QNODE), NULL, _OVER); pObj = mndAcquireQnode(pMnode, createReq.dnodeId); if (pObj != NULL) { - terrno = TSDB_CODE_MND_QNODE_ALREADY_EXIST; + code = TSDB_CODE_MND_QNODE_ALREADY_EXIST; goto _OVER; } else if (terrno != TSDB_CODE_MND_QNODE_NOT_EXIST) { goto _OVER; @@ -301,7 +318,7 @@ static int32_t mndProcessCreateQnodeReq(SRpcMsg *pReq) { pDnode = mndAcquireDnode(pMnode, createReq.dnodeId); if (pDnode == NULL) { - terrno = TSDB_CODE_MND_DNODE_NOT_EXIST; + code = TSDB_CODE_MND_DNODE_NOT_EXIST; goto _OVER; } @@ -320,34 +337,47 @@ _OVER: mndReleaseQnode(pMnode, pObj); mndReleaseDnode(pMnode, pDnode); tFreeSMCreateQnodeReq(&createReq); - return code; + TAOS_RETURN(code); } static int32_t mndSetDropQnodeRedoLogs(STrans *pTrans, SQnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pRedoRaw = mndQnodeActionEncode(pObj); - if (pRedoRaw == NULL) return -1; - if (mndTransAppendRedolog(pTrans, pRedoRaw) != 0) return -1; - if (sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING) != 0) return -1; - return 0; + if (pRedoRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + TAOS_CHECK_RETURN(mndTransAppendRedolog(pTrans, pRedoRaw)); + TAOS_CHECK_RETURN(sdbSetRawStatus(pRedoRaw, SDB_STATUS_DROPPING)); + TAOS_RETURN(code); } static int32_t mndSetDropQnodeCommitLogs(STrans *pTrans, SQnodeObj *pObj) { + int32_t code = 0; SSdbRaw *pCommitRaw = mndQnodeActionEncode(pObj); - if (pCommitRaw == NULL) return -1; - if (mndTransAppendCommitlog(pTrans, pCommitRaw) != 0) return -1; - if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED) != 0) return -1; - return 0; + if (pCommitRaw == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); + } + if (mndTransAppendCommitlog(pTrans, pCommitRaw)) + ; + if (sdbSetRawStatus(pCommitRaw, SDB_STATUS_DROPPED)) + ; + TAOS_RETURN(code); } static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQnodeObj *pObj) { + int32_t code = 0; SDDropQnodeReq dropReq = {0}; dropReq.dnodeId = pDnode->id; int32_t contLen = tSerializeSCreateDropMQSNodeReq(NULL, 0, &dropReq); void *pReq = taosMemoryMalloc(contLen); if (pReq == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } tSerializeSCreateDropMQSNodeReq(pReq, contLen, &dropReq); @@ -358,20 +388,20 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn action.msgType = TDMT_DND_DROP_QNODE; action.acceptableCode = TSDB_CODE_QNODE_NOT_DEPLOYED; - if (mndTransAppendRedoAction(pTrans, &action) != 0) { + if ((code = mndTransAppendRedoAction(pTrans, &action)) != 0) { taosMemoryFree(pReq); - return -1; + TAOS_RETURN(code); } - return 0; + TAOS_RETURN(code); } int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj, bool force) { if (pObj == NULL) return 0; - if (mndSetDropQnodeRedoLogs(pTrans, pObj) != 0) return -1; - if (mndSetDropQnodeCommitLogs(pTrans, pObj) != 0) return -1; + TAOS_CHECK_RETURN(mndSetDropQnodeRedoLogs(pTrans, pObj)); + TAOS_CHECK_RETURN(mndSetDropQnodeCommitLogs(pTrans, pObj)); if (!force) { - if (mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + TAOS_CHECK_RETURN(mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj)); } return 0; } @@ -380,18 +410,22 @@ static int32_t mndDropQnode(SMnode *pMnode, SRpcMsg *pReq, SQnodeObj *pObj) { int32_t code = -1; STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_NOTHING, pReq, "drop-qnode"); - if (pTrans == NULL) goto _OVER; + if (pTrans == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + goto _OVER; + } mndTransSetSerial(pTrans); mInfo("trans:%d, used to drop qnode:%d", pTrans->id, pObj->id); - if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; - if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; + TAOS_CHECK_GOTO(mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj, false), NULL, _OVER); + TAOS_CHECK_GOTO(mndTransPrepare(pMnode, pTrans), NULL, _OVER); code = 0; _OVER: mndTransDrop(pTrans); - return code; + TAOS_RETURN(code); } static int32_t mndProcessDropQnodeReq(SRpcMsg *pReq) { @@ -400,23 +434,20 @@ static int32_t mndProcessDropQnodeReq(SRpcMsg *pReq) { SQnodeObj *pObj = NULL; SMDropQnodeReq dropReq = {0}; - if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq), NULL, _OVER); mInfo("qnode:%d, start to drop", dropReq.dnodeId); - if (mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_QNODE) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCheckOperPrivilege(pMnode, pReq->info.conn.user, MND_OPER_DROP_QNODE), NULL, _OVER); if (dropReq.dnodeId <= 0) { - terrno = TSDB_CODE_INVALID_MSG; + code = TSDB_CODE_INVALID_MSG; goto _OVER; } pObj = mndAcquireQnode(pMnode, dropReq.dnodeId); if (pObj == NULL) { + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; goto _OVER; } @@ -435,10 +466,11 @@ _OVER: mndReleaseQnode(pMnode, pObj); tFreeSDDropQnodeReq(&dropReq); - return code; + TAOS_RETURN(code); } int32_t mndCreateQnodeList(SMnode *pMnode, SArray **pList, int32_t limit) { + int32_t code = 0; SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SQnodeObj *pObj = NULL; @@ -447,8 +479,8 @@ int32_t mndCreateQnodeList(SMnode *pMnode, SArray **pList, int32_t limit) { SArray *qnodeList = taosArrayInit(5, sizeof(SQueryNodeLoad)); if (NULL == qnodeList) { mError("failed to alloc epSet while process qnode list req"); - terrno = TSDB_CODE_OUT_OF_MEMORY; - return terrno; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_RETURN(code); } while (1) { @@ -484,20 +516,14 @@ static int32_t mndProcessQnodeListReq(SRpcMsg *pReq) { SQnodeListReq qlistReq = {0}; SQnodeListRsp qlistRsp = {0}; - if (tDeserializeSQnodeListReq(pReq->pCont, pReq->contLen, &qlistReq) != 0) { - mError("failed to parse qnode list req"); - terrno = TSDB_CODE_INVALID_MSG; - goto _OVER; - } + TAOS_CHECK_GOTO(tDeserializeSQnodeListReq(pReq->pCont, pReq->contLen, &qlistReq), NULL, _OVER); - if (mndCreateQnodeList(pMnode, &qlistRsp.qnodeList, qlistReq.rowNum) != 0) { - goto _OVER; - } + TAOS_CHECK_GOTO(mndCreateQnodeList(pMnode, &qlistRsp.qnodeList, qlistReq.rowNum), NULL, _OVER); int32_t rspLen = tSerializeSQnodeListRsp(NULL, 0, &qlistRsp); void *pRsp = rpcMallocCont(rspLen); if (pRsp == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = TSDB_CODE_OUT_OF_MEMORY; goto _OVER; } @@ -509,7 +535,7 @@ static int32_t mndProcessQnodeListReq(SRpcMsg *pReq) { _OVER: tFreeSQnodeListRsp(&qlistRsp); - return code; + TAOS_RETURN(code); } static int32_t mndRetrieveQnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) { diff --git a/source/dnode/mnode/impl/src/mndQuery.c b/source/dnode/mnode/impl/src/mndQuery.c index ae930f0d96..7c86b9aa74 100644 --- a/source/dnode/mnode/impl/src/mndQuery.c +++ b/source/dnode/mnode/impl/src/mndQuery.c @@ -88,7 +88,7 @@ int32_t mndProcessBatchMetaMsg(SRpcMsg *pMsg) { void *pRsp = NULL; SMnode *pMnode = pMsg->info.node; - if (tDeserializeSBatchReq(pMsg->pCont, pMsg->contLen, &batchReq)) { + if ((code = tDeserializeSBatchReq(pMsg->pCont, pMsg->contLen, &batchReq)) != 0) { code = TSDB_CODE_OUT_OF_MEMORY; mError("tDeserializeSBatchReq failed"); goto _exit; @@ -119,7 +119,7 @@ int32_t mndProcessBatchMetaMsg(SRpcMsg *pMsg) { MndMsgFp fp = pMnode->msgFp[TMSG_INDEX(req->msgType)]; if (fp == NULL) { mError("msg:%p, failed to get msg handle, app:%p type:%s", pMsg, pMsg->info.ahandle, TMSG_INFO(pMsg->msgType)); - terrno = TSDB_CODE_MSG_NOT_PROCESSED; + code = TSDB_CODE_MSG_NOT_PROCESSED; taosArrayDestroy(batchRsp.pRsps); return -1; } @@ -164,7 +164,7 @@ _exit: taosArrayDestroyEx(batchReq.pMsgs, tFreeSBatchReqMsg); taosArrayDestroyEx(batchRsp.pRsps, mnodeFreeSBatchRspMsg); - return code; + TAOS_RETURN(code); } int32_t mndInitQuery(SMnode *pMnode) { diff --git a/source/dnode/mnode/impl/src/mndScheduler.c b/source/dnode/mnode/impl/src/mndScheduler.c index db8c08e2e3..155975d580 100644 --- a/source/dnode/mnode/impl/src/mndScheduler.c +++ b/source/dnode/mnode/impl/src/mndScheduler.c @@ -50,17 +50,17 @@ static bool isCountWindowStreamTask(SSubplan* pPlan) { int32_t mndConvertRsmaTask(char** pDst, int32_t* pDstLen, const char* ast, int64_t uid, int8_t triggerType, int64_t watermark, int64_t deleteMark) { + int32_t code = 0; SNode* pAst = NULL; SQueryPlan* pPlan = NULL; - terrno = TSDB_CODE_SUCCESS; if (nodesStringToNode(ast, &pAst) < 0) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } if (qSetSTableIdForRsma(pAst, uid) < 0) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } @@ -75,33 +75,33 @@ int32_t mndConvertRsmaTask(char** pDst, int32_t* pDstLen, const char* ast, int64 }; if (qCreateQueryPlan(&cxt, &pPlan, NULL) < 0) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } int32_t levelNum = LIST_LENGTH(pPlan->pSubplans); if (levelNum != 1) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } SNodeListNode* inner = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 0); int32_t opNum = LIST_LENGTH(inner->pNodeList); if (opNum != 1) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } SSubplan* plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0); if (qSubPlanToString(plan, pDst, pDstLen) < 0) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; + code = TSDB_CODE_QRY_INVALID_INPUT; goto END; } END: if (pAst) nodesDestroyNode(pAst); if (pPlan) nodesDestroyNode((SNode*)pPlan); - return terrno; + TAOS_RETURN(code); } int32_t mndSetSinkTaskInfo(SStreamObj* pStream, SStreamTask* pTask) { @@ -127,6 +127,7 @@ int32_t mndSetSinkTaskInfo(SStreamObj* pStream, SStreamTask* pTask) { int32_t mndAddDispatcherForInternalTask(SMnode* pMnode, SStreamObj* pStream, SArray* pSinkNodeList, SStreamTask* pTask) { + int32_t code = 0; bool isShuffle = false; if (pStream->fixedSinkVgId == 0) { @@ -135,9 +136,7 @@ int32_t mndAddDispatcherForInternalTask(SMnode* pMnode, SStreamObj* pStream, SAr isShuffle = true; pTask->outputInfo.type = TASK_OUTPUT__SHUFFLE_DISPATCH; pTask->msgInfo.msgType = TDMT_STREAM_TASK_DISPATCH; - if (mndExtractDbInfo(pMnode, pDb, &pTask->outputInfo.shuffleDispatcher.dbInfo, NULL) < 0) { - return -1; - } + TAOS_CHECK_RETURN(mndExtractDbInfo(pMnode, pDb, &pTask->outputInfo.shuffleDispatcher.dbInfo, NULL)); } sdbRelease(pMnode->pSdb, pDb); @@ -166,7 +165,7 @@ int32_t mndAddDispatcherForInternalTask(SMnode* pMnode, SStreamObj* pStream, SAr streamTaskSetFixedDownstreamInfo(pTask, pOneSinkTask); } - return 0; + TAOS_RETURN(code); } int32_t mndAssignStreamTaskToVgroup(SMnode* pMnode, SStreamTask* pTask, SSubplan* plan, const SVgObj* pVgroup) { @@ -639,14 +638,15 @@ static void bindTwoLevel(SArray* tasks, int32_t begin, int32_t end) { static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* pPlan, SEpSet* pEpset, int64_t skey, SArray* pVerList) { + int32_t code = 0; SSdb* pSdb = pMnode->pSdb; int32_t numOfPlanLevel = LIST_LENGTH(pPlan->pSubplans); bool hasExtraSink = false; bool externalTargetDB = strcmp(pStream->sourceDb, pStream->targetDb) != 0; SDbObj* pDbObj = mndAcquireDb(pMnode, pStream->targetDb); if (pDbObj == NULL) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; - return -1; + code = TSDB_CODE_QRY_INVALID_INPUT; + TAOS_RETURN(code); } bool multiTarget = (pDbObj->cfg.numOfVgroups > 1); @@ -670,9 +670,11 @@ static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* SSubplan* plan = getScanSubPlan(pPlan); // source plan if (plan == NULL) { - return terrno; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } - int32_t code = addSourceTask(pMnode, plan, pStream, pEpset, skey, pVerList, numOfPlanLevel == 1); + code = addSourceTask(pMnode, plan, pStream, pEpset, skey, pVerList, numOfPlanLevel == 1); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -688,7 +690,9 @@ static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* if (numOfPlanLevel == 3) { plan = getAggSubPlan(pPlan, 1); // middle agg plan if (plan == NULL) { - return terrno; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } do { SArray** list = taosArrayGetLast(pStream->tasks); @@ -715,7 +719,9 @@ static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* plan = getAggSubPlan(pPlan, 0); if (plan == NULL) { - return terrno; + code = TSDB_CODE_MND_RETURN_VALUE_NULL; + if (terrno != 0) code = terrno; + TAOS_RETURN(code); } mDebug("doScheduleStream add final agg"); @@ -724,7 +730,7 @@ static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* addNewTaskList(pStream); code = addAggTask(pStream, pMnode, plan, pEpset, true); if (code != TSDB_CODE_SUCCESS) { - return code; + TAOS_RETURN(code); } bindTwoLevel(pStream->tasks, 0, size); if (pStream->conf.fillHistory) { @@ -735,26 +741,28 @@ static int32_t doScheduleStream(SStreamObj* pStream, SMnode* pMnode, SQueryPlan* if (pStream->conf.fillHistory) { bindAggSink(pStream, pMnode, pStream->pHTasksList); } - return TDB_CODE_SUCCESS; + TAOS_RETURN(code); } int32_t mndScheduleStream(SMnode* pMnode, SStreamObj* pStream, int64_t skey, SArray* pVgVerList) { + int32_t code = 0; SQueryPlan* pPlan = qStringToQueryPlan(pStream->physicalPlan); if (pPlan == NULL) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; - return -1; + code = TSDB_CODE_QRY_INVALID_INPUT; + TAOS_RETURN(code); } SEpSet mnodeEpset = {0}; mndGetMnodeEpSet(pMnode, &mnodeEpset); - int32_t code = doScheduleStream(pStream, pMnode, pPlan, &mnodeEpset, skey, pVgVerList); + code = doScheduleStream(pStream, pMnode, pPlan, &mnodeEpset, skey, pVgVerList); qDestroyQueryPlan(pPlan); - return code; + TAOS_RETURN(code); } int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscribeObj* pSub) { + int32_t code = 0; SSdb* pSdb = pMnode->pSdb; SVgObj* pVgroup = NULL; SQueryPlan* pPlan = NULL; @@ -763,21 +771,21 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib if (pTopic->subType == TOPIC_SUB_TYPE__COLUMN) { pPlan = qStringToQueryPlan(pTopic->physicalPlan); if (pPlan == NULL) { - terrno = TSDB_CODE_QRY_INVALID_INPUT; - return -1; + code = TSDB_CODE_QRY_INVALID_INPUT; + TAOS_RETURN(code); } } else if (pTopic->subType == TOPIC_SUB_TYPE__TABLE && pTopic->ast != NULL) { SNode* pAst = NULL; - if (nodesStringToNode(pTopic->ast, &pAst) != 0) { + if ((code = nodesStringToNode(pTopic->ast, &pAst)) != 0) { mError("topic:%s, failed to create since %s", pTopic->name, terrstr()); - return -1; + TAOS_RETURN(code); } SPlanContext cxt = {.pAstRoot = pAst, .topicQuery = true}; - if (qCreateQueryPlan(&cxt, &pPlan, NULL) != 0) { + if ((code = qCreateQueryPlan(&cxt, &pPlan, NULL)) != 0) { mError("failed to create topic:%s since %s", pTopic->name, terrstr()); nodesDestroyNode(pAst); - return -1; + TAOS_RETURN(code); } nodesDestroyNode(pAst); } @@ -786,8 +794,8 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib int32_t levelNum = LIST_LENGTH(pPlan->pSubplans); if (levelNum != 1) { qDestroyQueryPlan(pPlan); - terrno = TSDB_CODE_MND_INVALID_TOPIC_QUERY; - return -1; + code = TSDB_CODE_MND_INVALID_TOPIC_QUERY; + TAOS_RETURN(code); } SNodeListNode* pNodeListNode = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 0); @@ -795,8 +803,8 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib int32_t opNum = LIST_LENGTH(pNodeListNode->pNodeList); if (opNum != 1) { qDestroyQueryPlan(pPlan); - terrno = TSDB_CODE_MND_INVALID_TOPIC_QUERY; - return -1; + code = TSDB_CODE_MND_INVALID_TOPIC_QUERY; + TAOS_RETURN(code); } pSubplan = (SSubplan*)nodesListGetNode(pNodeListNode->pNodeList, 0); @@ -831,13 +839,13 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib if (qSubPlanToString(pSubplan, &pSub->qmsg, &msgLen) < 0) { qDestroyQueryPlan(pPlan); - terrno = TSDB_CODE_QRY_INVALID_INPUT; - return -1; + code = TSDB_CODE_QRY_INVALID_INPUT; + TAOS_RETURN(code); } } else { pSub->qmsg = taosStrdup(""); } qDestroyQueryPlan(pPlan); - return 0; + TAOS_RETURN(code); } From af42d4fa598c7db81035a3433713549749755b77 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Sun, 21 Jul 2024 22:22:26 +0800 Subject: [PATCH 35/64] opti:[TS-4593] transform offset from file to tdb in tmq --- source/dnode/vnode/src/tq/tqMeta.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/tq/tqMeta.c b/source/dnode/vnode/src/tq/tqMeta.c index 687c69bcca..ca536c5bad 100644 --- a/source/dnode/vnode/src/tq/tqMeta.c +++ b/source/dnode/vnode/src/tq/tqMeta.c @@ -103,24 +103,32 @@ int32_t tqMetaSaveInfo(STQ* pTq, TTB* ttb, const void* key, int32_t kLen, const int32_t code = TDB_CODE_SUCCESS; TXN* txn = NULL; - TQ_ERR_RETURN(tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED)); - TQ_ERR_RETURN(tdbTbUpsert(ttb, key, kLen, value, vLen, txn)); - TQ_ERR_RETURN(tdbCommit(pTq->pMetaDB, txn)); - TQ_ERR_RETURN(tdbPostCommit(pTq->pMetaDB, txn)); + TQ_ERR_GO_TO_END(tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED)); + TQ_ERR_GO_TO_END(tdbTbUpsert(ttb, key, kLen, value, vLen, txn)); + TQ_ERR_GO_TO_END(tdbCommit(pTq->pMetaDB, txn)); + TQ_ERR_GO_TO_END(tdbPostCommit(pTq->pMetaDB, txn)); return 0; + +END: + tdbAbort(pTq->pMetaDB, txn); + return code; } int32_t tqMetaDeleteInfo(STQ* pTq, TTB* ttb, const void* key, int32_t kLen) { int32_t code = TDB_CODE_SUCCESS; TXN* txn = NULL; - TQ_ERR_RETURN(tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED)); - TQ_ERR_RETURN(tdbTbDelete(ttb, key, kLen, txn)); - TQ_ERR_RETURN(tdbCommit(pTq->pMetaDB, txn)); - TQ_ERR_RETURN(tdbPostCommit(pTq->pMetaDB, txn)); + TQ_ERR_GO_TO_END(tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED)); + TQ_ERR_GO_TO_END(tdbTbDelete(ttb, key, kLen, txn)); + TQ_ERR_GO_TO_END(tdbCommit(pTq->pMetaDB, txn)); + TQ_ERR_GO_TO_END(tdbPostCommit(pTq->pMetaDB, txn)); return 0; + +END: + tdbAbort(pTq->pMetaDB, txn); + return code; } void* tqMetaGetOffset(STQ* pTq, const char* subkey){ From ebe0074da42821fa6ca6e84e1b561d4e50546d2e Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 00:06:47 +0800 Subject: [PATCH 36/64] fix: interp crash --- include/libs/function/functionMgt.h | 2 + source/libs/executor/src/executorInt.c | 3 +- source/libs/executor/src/timesliceoperator.c | 17 +- source/libs/function/inc/builtinsimpl.h | 1 + source/libs/function/src/builtins.c | 10 + source/libs/function/src/builtinsimpl.c | 35 ++++ source/libs/function/src/functionMgt.c | 7 + source/libs/parser/src/parTranslater.c | 29 ++- source/libs/planner/src/planLogicCreater.c | 2 +- tests/system-test/2-query/interp.py | 195 +++++++++++++++++++ 10 files changed, 294 insertions(+), 7 deletions(-) diff --git a/include/libs/function/functionMgt.h b/include/libs/function/functionMgt.h index 86db6640c5..9fb4c80bb4 100644 --- a/include/libs/function/functionMgt.h +++ b/include/libs/function/functionMgt.h @@ -138,6 +138,7 @@ typedef enum EFunctionType { FUNCTION_TYPE_CACHE_LAST_ROW, FUNCTION_TYPE_CACHE_LAST, FUNCTION_TYPE_TABLE_COUNT, + FUNCTION_TYPE_SELECT_TAG, // distributed splitting functions FUNCTION_TYPE_APERCENTILE_PARTIAL = 4000, @@ -256,6 +257,7 @@ bool fmIsConstantResFunc(SFunctionNode* pFunc); bool fmIsSkipScanCheckFunc(int32_t funcId); bool fmIsPrimaryKeyFunc(int32_t funcId); bool fmIsProcessByRowFunc(int32_t funcId); +bool fmIsSelectTagFunc(int32_t funcId); void getLastCacheDataType(SDataType* pType, int32_t pkBytes); SFunctionNode* createFunction(const char* pName, SNodeList* pParameterList); diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index 0476a7981c..3b4e0792a6 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -603,7 +603,8 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR pCtx[j].resultInfo = getResultEntryInfo(pRow, j, rowEntryOffset); if (pCtx[j].fpSet.finalize) { - if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_group_key") == 0) { + if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_group_key") == 0 || + strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_select_tag") == 0) { // for groupkey along with functions that output multiple lines(e.g. Histogram) // need to match groupkey result for each output row of that function. if (pCtx[j].resultInfo->numOfRes != 0) { diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c index cdcc702629..5a448520f1 100644 --- a/source/libs/executor/src/timesliceoperator.c +++ b/source/libs/executor/src/timesliceoperator.c @@ -233,6 +233,11 @@ static bool isGroupKeyFunc(SExprInfo* pExprInfo) { return (functionType == FUNCTION_TYPE_GROUP_KEY); } +static bool isSelectTagFunc(SExprInfo* pExprInfo) { + int32_t functionType = pExprInfo->pExpr->_function.functionType; + return (functionType == FUNCTION_TYPE_SELECT_TAG); +} + static bool getIgoreNullRes(SExprSupp* pExprSup) { for (int32_t i = 0; i < pExprSup->numOfExprs; ++i) { SExprInfo* pExprInfo = &pExprSup->pExprInfo[i]; @@ -296,7 +301,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp colDataSetVal(pDst, pResBlock->info.rows, (char*)&isFilled, false); continue; } else if (!isInterpFunc(pExprInfo)) { - if (isGroupKeyFunc(pExprInfo)) { + if (isGroupKeyFunc(pExprInfo) || isSelectTagFunc(pExprInfo)) { if (pSrcBlock != NULL) { int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; SColumnInfoData* pSrc = taosArrayGet(pSrcBlock->pDataBlock, srcSlot); @@ -308,7 +313,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp char* v = colDataGetData(pSrc, index); colDataSetVal(pDst, pResBlock->info.rows, v, false); - } else { + } else if(!isSelectTagFunc(pExprInfo)){ // use stored group key SGroupKeys* pkey = pSliceInfo->pPrevGroupKey; if (pkey->isNull == false) { @@ -316,6 +321,14 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp } else { colDataSetNULL(pDst, rows); } + } else { + 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); + } else { + colDataSetNULL(pDst, rows); + } } } continue; diff --git a/source/libs/function/inc/builtinsimpl.h b/source/libs/function/inc/builtinsimpl.h index 7615584f8c..f3ebb2359b 100644 --- a/source/libs/function/inc/builtinsimpl.h +++ b/source/libs/function/inc/builtinsimpl.h @@ -254,6 +254,7 @@ bool getGroupKeyFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv); int32_t groupKeyFunction(SqlFunctionCtx* pCtx); int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock); int32_t groupKeyCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx); +int32_t selectValueFunciton(SqlFunctionCtx* pCtx); #ifdef __cplusplus } diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c index 5058ebb8c3..75d6047c07 100644 --- a/source/libs/function/src/builtins.c +++ b/source/libs/function/src/builtins.c @@ -4108,6 +4108,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = { .sprocessFunc = md5Function, .finalizeFunc = NULL }, + { + .name = "_select_tag", + .type = FUNCTION_TYPE_SELECT_TAG, + .classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_SELECT_FUNC | FUNC_MGT_KEEP_ORDER_FUNC, + .translateFunc = translateGroupKey, + .getEnvFunc = getGroupKeyFuncEnv, + .initFunc = functionSetup, + .processFunc = groupKeyFunction, + .finalizeFunc = groupKeyFinalize, + }, }; // clang-format on diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index aab5a52776..7e2f631816 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -6650,6 +6650,41 @@ _group_key_over: return TSDB_CODE_SUCCESS; } +int32_t selectValueFunciton(SqlFunctionCtx* pCtx) { + SResultRowEntryInfo* pResInfo = GET_RES_INFO(pCtx); + SGroupKeyInfo* pInfo = GET_ROWCELL_INTERBUF(pResInfo); + + SInputColumnInfoData* pInput = &pCtx->input; + SColumnInfoData* pInputCol = pInput->pData[0]; + + int32_t startIndex = pInput->startRowIndex; + + // escape rest of data blocks to avoid first entry to be overwritten. + if (pInfo->hasResult) { + goto _group_key_over; + } + + if (pInputCol->pData == NULL || colDataIsNull_s(pInputCol, startIndex)) { + pInfo->isNull = true; + pInfo->hasResult = true; + goto _group_key_over; + } + + char* data = colDataGetData(pInputCol, startIndex); + if (IS_VAR_DATA_TYPE(pInputCol->info.type)) { + memcpy(pInfo->data, data, + (pInputCol->info.type == TSDB_DATA_TYPE_JSON) ? getJsonValueLen(data) : varDataTLen(data)); + } else { + memcpy(pInfo->data, data, pInputCol->info.bytes); + } + pInfo->hasResult = true; + +_group_key_over: + + SET_VAL(pResInfo, 1, 1); + return TSDB_CODE_SUCCESS; +} + int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { int32_t slotId = pCtx->pExpr->base.resSchema.slotId; SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId); diff --git a/source/libs/function/src/functionMgt.c b/source/libs/function/src/functionMgt.c index b99e67697c..9cb7d59a2c 100644 --- a/source/libs/function/src/functionMgt.c +++ b/source/libs/function/src/functionMgt.c @@ -268,6 +268,13 @@ bool fmIsGroupKeyFunc(int32_t funcId) { return FUNCTION_TYPE_GROUP_KEY == funcMgtBuiltins[funcId].type; } +bool fmIsSelectTagFunc(int32_t funcId) { + if (funcId < 0 || funcId >= funcMgtBuiltinsNum) { + return false; + } + return FUNCTION_TYPE_SELECT_TAG == funcMgtBuiltins[funcId].type; +} + bool fmIsBlockDistFunc(int32_t funcId) { if (funcId < 0 || funcId >= funcMgtBuiltinsNum) { return false; diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index c2278649e1..f4b318422a 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -3162,6 +3162,25 @@ static EDealRes rewriteExprToGroupKeyFunc(STranslateContext* pCxt, SNode** pNode return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR); } +static EDealRes rewriteExprToSelectTagFunc(STranslateContext* pCxt, SNode** pNode) { + SFunctionNode* pFunc = (SFunctionNode*)nodesMakeNode(QUERY_NODE_FUNCTION); + if (NULL == pFunc) { + pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; + return DEAL_RES_ERROR; + } + + strcpy(pFunc->functionName, "_select_tag"); + strcpy(pFunc->node.aliasName, ((SExprNode*)*pNode)->aliasName); + strcpy(pFunc->node.userAlias, ((SExprNode*)*pNode)->userAlias); + pCxt->errCode = nodesListMakeAppend(&pFunc->pParameterList, *pNode); + if (TSDB_CODE_SUCCESS == pCxt->errCode) { + *pNode = (SNode*)pFunc; + pCxt->errCode = fmGetFuncInfo(pFunc, pCxt->msgBuf.buf, pCxt->msgBuf.len); + } + + return (TSDB_CODE_SUCCESS == pCxt->errCode ? DEAL_RES_IGNORE_CHILD : DEAL_RES_ERROR); +} + static bool isWindowJoinProbeTablePrimCol(SSelectStmt* pSelect, SNode* pNode) { if (QUERY_NODE_COLUMN != nodeType(pNode)) { return false; @@ -3494,10 +3513,13 @@ static EDealRes doCheckAggColCoexist(SNode** pNode, void* pContext) { } } if (partionByTbname && - ((QUERY_NODE_COLUMN == nodeType(*pNode) && ((SColumnNode*)*pNode)->colType == COLUMN_TYPE_TAG) || - (QUERY_NODE_FUNCTION == nodeType(*pNode) && FUNCTION_TYPE_TBNAME == ((SFunctionNode*)*pNode)->funcType))) { + (QUERY_NODE_FUNCTION == nodeType(*pNode) && FUNCTION_TYPE_TBNAME == ((SFunctionNode*)*pNode)->funcType)) { return rewriteExprToGroupKeyFunc(pCxt->pTranslateCxt, pNode); } + if (partionByTbname && + ((QUERY_NODE_COLUMN == nodeType(*pNode) && ((SColumnNode*)*pNode)->colType == COLUMN_TYPE_TAG))) { + return rewriteExprToSelectTagFunc(pCxt->pTranslateCxt, pNode); + } if (isScanPseudoColumnFunc(*pNode) || QUERY_NODE_COLUMN == nodeType(*pNode)) { pCxt->existCol = true; } @@ -4951,7 +4973,8 @@ static int32_t translateOrderBy(STranslateContext* pCxt, SSelectStmt* pSelect) { } static EDealRes needFillImpl(SNode* pNode, void* pContext) { - if ((isAggFunc(pNode) || isInterpFunc(pNode)) && FUNCTION_TYPE_GROUP_KEY != ((SFunctionNode*)pNode)->funcType) { + if ((isAggFunc(pNode) || isInterpFunc(pNode)) && FUNCTION_TYPE_GROUP_KEY != ((SFunctionNode*)pNode)->funcType + && FUNCTION_TYPE_SELECT_TAG != ((SFunctionNode*)pNode)->funcType) { *(bool*)pContext = true; return DEAL_RES_END; } diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 0cba28e254..89a1da3585 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -891,7 +891,7 @@ static int32_t createIndefRowsFuncLogicNode(SLogicPlanContext* pCxt, SSelectStmt } static bool isInterpFunc(int32_t funcId) { - return fmIsInterpFunc(funcId) || fmIsInterpPseudoColumnFunc(funcId) || fmIsGroupKeyFunc(funcId); + return fmIsInterpFunc(funcId) || fmIsInterpPseudoColumnFunc(funcId) || fmIsGroupKeyFunc(funcId) || fmIsSelectTagFunc(funcId); } static int32_t createInterpFuncLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect, SLogicNode** pLogicNode) { diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py index 1cb95b59c5..bb96f6342c 100644 --- a/tests/system-test/2-query/interp.py +++ b/tests/system-test/2-query/interp.py @@ -38,6 +38,200 @@ class TDTestCase: tdSql.query(f"select _irowts, interp(k),k from {dbname}.{tbname} partition by k range(now()-1h, now()) every(1m) fill(value, 2)") tdSql.checkRows(0) + + def ts5181(self): + tdSql.execute("create database db1 keep 36500") + tdSql.execute("use db1") + + tdSql.execute("CREATE STABLE db1.`stb1` (`ts` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium', `v1` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium') TAGS (`t1` INT)") + + tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags( 44400 ) values('2024-02-19 16:05:17.649', 22300 ); ") + tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags( 44400 ) values('2024-02-19 16:05:48.818', 22300 ); ") + tdSql.execute("insert into db1.ttt_10 using db1.stb1 tags( 40 ) values('2024-02-19 16:25:36.013', 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-19 16:39:50.385' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-19 16:43:51.742' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-20 08:35:13.518' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-20 08:58:42.255' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-21 09:57:49.477' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-21 09:58:21.882' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-26 16:08:31.675' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-26 16:11:43.445' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:12:30.276' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.188' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.653' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.879' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.083' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.273' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.429' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.599' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.775' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.940' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.110' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.254' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.409' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:34.750' , 12 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:49.820' , 12 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:59.551' , NULL ); ") + tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 ) values('2024-02-19 15:26:39.644' , 2 ); ") + tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 ) values('2024-02-19 15:26:40.433' , 2 ); ") + tdSql.execute("insert into db1.ttt_3 using db1.stb1 tags( 3 ) values('2024-02-19 15:27:22.613' , 1 ); ") + tdSql.execute("insert into db1.ttt_13 using db1.stb1 tags( 3 ) values('2024-02-19 15:27:39.719' , 1 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:28:36.235' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:28:59.310' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:29:18.897' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:50:24.682' , 223 ); ") + tdSql.execute("insert into db1.ttt_4 using db1.stb1 tags( 3 ) values('2024-02-19 15:31:19.945' , 222 ); ") + tdSql.execute("insert into db1.ttt_a using db1.stb1 tags( 3 ) values('2024-02-19 15:31:37.915' , 4 ); ") + tdSql.execute("insert into db1.ttt_axxxx using db1.stb1 tags( NULL ) values('2024-02-19 15:31:58.953' , 4 ); ") + tdSql.execute("insert into db1.ttt_axxx using db1.stb1 tags( 56 ) values('2024-02-19 15:32:22.323' , NULL ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:36:44.625' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:38:41.479' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:57:23.249' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 16:04:20.465' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-26 16:11:29.364' , 5444 ); ") + tdSql.execute("insert into db1.ttt_123 using db1.stb1 tags( 0 ) values('2024-02-19 15:44:52.136' , 223 ); ") + tdSql.execute("insert into db1.ttt_145 using db1.stb1 tags( 0 ) values('2024-02-19 15:50:28.580' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 15:50:32.493' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 15:57:36.866' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 16:04:52.794' , 221113 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-27 08:47:11.366' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-28 09:35:46.474' , 5444 ); ") + + + tdSql.query("select *,tbname from db1.stb1 ;") + tdSql.checkRows(51) + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) fill(prev)") + tdSql.checkRows(4) + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) fill(prev) order by tbname") + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 2, 3) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 2, 3) + tdSql.checkData(0, 3, "ttt_13") + tdSql.checkData(1, 3, "ttt_14") + tdSql.checkData(2, 3, "ttt_2") + tdSql.checkData(3, 3, "ttt_3") + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(value, 0) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") + tdSql.checkData(1, 2, 3) + tdSql.checkData(1, 3, "ttt_13") + + tdSql.query("select _irowts as ts,interp(v1),tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(value, 0) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, "ttt_123") + tdSql.checkData(1, 2, "ttt_13") + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NULL) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") + tdSql.checkData(1, 2, 3) + tdSql.checkData(1, 3, "ttt_13") + + tdSql.query("select _irowts as ts,interp(v1),t1 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NULL) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(1, 2, 3) + + tdSql.query("select _irowts as ts,interp(v1), tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NULL) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, "ttt_123") + tdSql.checkData(1, 2, "ttt_13") + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NULL) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") + tdSql.checkData(1, 2, 3) + tdSql.checkData(1, 3, "ttt_13") + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(LINEAR) order by tbname") + tdSql.checkRows(1) + tdSql.checkData(0, 2, 3) + tdSql.checkData(0, 3, "ttt_14") + + tdSql.query("select _irowts as ts,interp(v1), tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(LINEAR) order by tbname") + tdSql.checkRows(1) + tdSql.checkData(0, 2, "ttt_14") + + tdSql.query("select _irowts as ts,interp(v1),t1 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(LINEAR) order by tbname") + tdSql.checkRows(1) + tdSql.checkData(0, 2, 3) + + tdSql.query("select _irowts as ts,interp(v1),t1, tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NEXT) order by tbname") + tdSql.checkRows(9) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") + + tdSql.query("select _irowts as ts,interp(v1),t1 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NEXT) order by tbname") + tdSql.checkRows(9) + tdSql.checkData(0, 2, 0) + + tdSql.query("select _irowts as ts,interp(v1),tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NEXT) order by tbname") + tdSql.checkRows(9) + tdSql.checkData(0, 2, "ttt_123") + + tdSql.query("select _irowts as ts,interp(v1),t1, tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(NULL_F) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") + + tdSql.query("select _irowts as ts,interp(v1),t1, tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(VALUE_F, 5) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 1, 5) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "ttt_123") def run(self): dbname = "db" @@ -5683,6 +5877,7 @@ class TDTestCase: tdSql.checkData(0, 1, None) self.interp_on_empty_table() + self.ts5181() def stop(self): From b72792e20e50b7b407af0296a04dcd069e0659b5 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 08:48:26 +0800 Subject: [PATCH 37/64] unuesd code --- source/libs/function/inc/builtinsimpl.h | 1 - source/libs/function/src/builtinsimpl.c | 35 ------------------------- 2 files changed, 36 deletions(-) diff --git a/source/libs/function/inc/builtinsimpl.h b/source/libs/function/inc/builtinsimpl.h index f3ebb2359b..7615584f8c 100644 --- a/source/libs/function/inc/builtinsimpl.h +++ b/source/libs/function/inc/builtinsimpl.h @@ -254,7 +254,6 @@ bool getGroupKeyFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv); int32_t groupKeyFunction(SqlFunctionCtx* pCtx); int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock); int32_t groupKeyCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx); -int32_t selectValueFunciton(SqlFunctionCtx* pCtx); #ifdef __cplusplus } diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 7e2f631816..aab5a52776 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -6650,41 +6650,6 @@ _group_key_over: return TSDB_CODE_SUCCESS; } -int32_t selectValueFunciton(SqlFunctionCtx* pCtx) { - SResultRowEntryInfo* pResInfo = GET_RES_INFO(pCtx); - SGroupKeyInfo* pInfo = GET_ROWCELL_INTERBUF(pResInfo); - - SInputColumnInfoData* pInput = &pCtx->input; - SColumnInfoData* pInputCol = pInput->pData[0]; - - int32_t startIndex = pInput->startRowIndex; - - // escape rest of data blocks to avoid first entry to be overwritten. - if (pInfo->hasResult) { - goto _group_key_over; - } - - if (pInputCol->pData == NULL || colDataIsNull_s(pInputCol, startIndex)) { - pInfo->isNull = true; - pInfo->hasResult = true; - goto _group_key_over; - } - - char* data = colDataGetData(pInputCol, startIndex); - if (IS_VAR_DATA_TYPE(pInputCol->info.type)) { - memcpy(pInfo->data, data, - (pInputCol->info.type == TSDB_DATA_TYPE_JSON) ? getJsonValueLen(data) : varDataTLen(data)); - } else { - memcpy(pInfo->data, data, pInputCol->info.bytes); - } - pInfo->hasResult = true; - -_group_key_over: - - SET_VAL(pResInfo, 1, 1); - return TSDB_CODE_SUCCESS; -} - int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { int32_t slotId = pCtx->pExpr->base.resSchema.slotId; SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId); From 02ea558db889568bbc797d054620d7b77133f3cf Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 15 Jul 2024 18:45:41 +0800 Subject: [PATCH 38/64] enh: return value: command --- source/libs/command/src/command.c | 121 ++++++++++++++++-------------- source/libs/command/src/explain.c | 13 ++-- 2 files changed, 73 insertions(+), 61 deletions(-) diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 9506e801c5..e528f61787 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -23,6 +23,15 @@ #include "tglobal.h" #include "tgrant.h" +#define COL_DATA_SET_VAL_AND_CHECK(pCol, rows, buf, isNull) \ + do { \ + int _code = colDataSetVal(pCol, rows, buf, isNull);\ + if (TSDB_CODE_SUCCESS != _code) { \ + terrno = _code; \ + return _code; \ + } \ + } while(0) + extern SConfig* tsCfg; static int32_t buildRetrieveTableRsp(SSDataBlock* pBlock, int32_t numOfCols, SRetrieveTableRsp** pRsp) { @@ -108,7 +117,7 @@ static int32_t buildDescResultDataBlock(SSDataBlock** pOutput) { static int32_t setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, int32_t numOfRows, STableMeta* pMeta, int8_t biMode) { int32_t blockCap = (biMode != 0) ? numOfRows + 1 : numOfRows; - blockDataEnsureCapacity(pBlock, blockCap); + QRY_ERR_RET(blockDataEnsureCapacity(pBlock, blockCap)); pBlock->info.rows = 0; // field @@ -138,11 +147,12 @@ static int32_t setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, continue; } STR_TO_VARSTR(buf, pMeta->schema[i].name); - colDataSetVal(pCol1, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol1, pBlock->info.rows, buf, false); + STR_TO_VARSTR(buf, tDataTypes[pMeta->schema[i].type].name); - colDataSetVal(pCol2, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol2, pBlock->info.rows, buf, false); int32_t bytes = getSchemaBytes(pMeta->schema + i); - colDataSetVal(pCol3, pBlock->info.rows, (const char*)&bytes, false); + COL_DATA_SET_VAL_AND_CHECK(pCol3, pBlock->info.rows, (const char*)&bytes, false); if (TSDB_VIEW_TABLE != pMeta->tableType) { if (i >= pMeta->tableInfo.numOfColumns) { STR_TO_VARSTR(buf, "TAG"); @@ -155,22 +165,22 @@ static int32_t setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, } else { STR_TO_VARSTR(buf, "VIEW COL"); } - colDataSetVal(pCol4, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol4, pBlock->info.rows, buf, false); if (useCompress(pMeta->tableType) && pMeta->schemaExt) { if (i < pMeta->tableInfo.numOfColumns) { STR_TO_VARSTR(buf, columnEncodeStr(COMPRESS_L1_TYPE_U32(pMeta->schemaExt[i].compress))); - colDataSetVal(pCol5, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol5, pBlock->info.rows, buf, false); STR_TO_VARSTR(buf, columnCompressStr(COMPRESS_L2_TYPE_U32(pMeta->schemaExt[i].compress))); - colDataSetVal(pCol6, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol6, pBlock->info.rows, buf, false); STR_TO_VARSTR(buf, columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(pMeta->schemaExt[i].compress))); - colDataSetVal(pCol7, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol7, pBlock->info.rows, buf, false); } else { STR_TO_VARSTR(buf, fillTagCol == 0 ? "" : "disabled"); - colDataSetVal(pCol5, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol5, pBlock->info.rows, buf, false); STR_TO_VARSTR(buf, fillTagCol == 0 ? "" : "disabled"); - colDataSetVal(pCol6, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol6, pBlock->info.rows, buf, false); STR_TO_VARSTR(buf, fillTagCol == 0 ? "" : "disabled"); - colDataSetVal(pCol7, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol7, pBlock->info.rows, buf, false); } } @@ -180,13 +190,13 @@ static int32_t setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, } if (pMeta->tableType == TSDB_SUPER_TABLE && biMode != 0) { STR_TO_VARSTR(buf, "tbname"); - colDataSetVal(pCol1, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol1, pBlock->info.rows, buf, false); STR_TO_VARSTR(buf, "VARCHAR"); - colDataSetVal(pCol2, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol2, pBlock->info.rows, buf, false); int32_t bytes = TSDB_TABLE_NAME_LEN - 1; - colDataSetVal(pCol3, pBlock->info.rows, (const char*)&bytes, false); + COL_DATA_SET_VAL_AND_CHECK(pCol3, pBlock->info.rows, (const char*)&bytes, false); STR_TO_VARSTR(buf, "TAG"); - colDataSetVal(pCol4, pBlock->info.rows, buf, false); + COL_DATA_SET_VAL_AND_CHECK(pCol4, pBlock->info.rows, buf, false); ++(pBlock->info.rows); } if (pBlock->info.rows <= 0) { @@ -264,13 +274,17 @@ int64_t getValOfDiffPrecision(int8_t unit, int64_t val) { return v; } -static char* buildRetension(SArray* pRetension) { +static int32_t buildRetension(SArray* pRetension, void **ppRetentions ) { size_t size = taosArrayGetSize(pRetension); if (size == 0) { - return NULL; + *ppRetentions = NULL; + return TSDB_CODE_SUCCESS; } char* p1 = taosMemoryCalloc(1, 100); + if(NULL == p1) { + return TSDB_CODE_OUT_OF_MEMORY; + } int32_t len = 0; for (int32_t i = 0; i < size; ++i) { @@ -288,7 +302,8 @@ static char* buildRetension(SArray* pRetension) { } } - return p1; + *ppRetentions = p1; + return TSDB_CODE_SUCCESS; } static const char* cacheModelStr(int8_t cacheModel) { @@ -319,14 +334,14 @@ static const char* encryptAlgorithmStr(int8_t encryptAlgorithm) { return TSDB_CACHE_MODEL_NONE_STR; } -static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, char* dbFName, SDbCfgInfo* pCfg) { - blockDataEnsureCapacity(pBlock, 1); +static int32_t setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, char* dbFName, SDbCfgInfo* pCfg) { + QRY_ERR_RET(blockDataEnsureCapacity(pBlock, 1)); pBlock->info.rows = 1; SColumnInfoData* pCol1 = taosArrayGet(pBlock->pDataBlock, 0); char buf1[SHOW_CREATE_DB_RESULT_FIELD1_LEN] = {0}; STR_TO_VARSTR(buf1, dbName); - colDataSetVal(pCol1, 0, buf1, false); + COL_DATA_SET_VAL_AND_CHECK(pCol1, 0, buf1, false); SColumnInfoData* pCol2 = taosArrayGet(pBlock->pDataBlock, 1); char buf2[SHOW_CREATE_DB_RESULT_FIELD2_LEN] = {0}; @@ -347,7 +362,8 @@ static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, ch break; } - char* retentions = buildRetension(pCfg->pRetensions); + char* pRetentions = NULL; + QRY_ERR_RET(buildRetension(pCfg->pRetensions, &pRetentions)); int32_t dbFNameLen = strlen(dbFName); int32_t hashPrefix = 0; if (pCfg->hashPrefix > 0) { @@ -374,23 +390,25 @@ static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbName, ch pCfg->keepTimeOffset, encryptAlgorithmStr(pCfg->encryptAlgorithm), pCfg->s3ChunkSize, pCfg->s3KeepLocal, pCfg->s3Compact); - if (retentions) { - len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, " RETENTIONS %s", retentions); + if (pRetentions) { + len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, " RETENTIONS %s", pRetentions); } } - taosMemoryFree(retentions); + taosMemoryFree(pRetentions); (varDataLen(buf2)) = len; - colDataSetVal(pCol2, 0, buf2, false); + COL_DATA_SET_VAL_AND_CHECK(pCol2, 0, buf2, false); + + return TSDB_CODE_SUCCESS; } static int32_t execShowCreateDatabase(SShowCreateDatabaseStmt* pStmt, SRetrieveTableRsp** pRsp) { SSDataBlock* pBlock = NULL; int32_t code = buildCreateDBResultDataBlock(&pBlock); if (TSDB_CODE_SUCCESS == code) { - setCreateDBResultIntoDataBlock(pBlock, pStmt->dbName, pStmt->dbFName, pStmt->pCfg); + code = setCreateDBResultIntoDataBlock(pBlock, pStmt->dbName, pStmt->dbFName, pStmt->pCfg); } if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_DB_RESULT_COLS, pRsp); @@ -511,10 +529,7 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { return TSDB_CODE_SUCCESS; } - int32_t code = tTagToValArray((const STag*)pCfg->pTags, &pTagVals); - if (code) { - return code; - } + QRY_ERR_RET(tTagToValArray((const STag*)pCfg->pTags, &pTagVals)); int16_t valueNum = taosArrayGetSize(pTagVals); int32_t num = 0; @@ -533,16 +548,15 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, j); if (pSchema->colId > pTagVal->cid) { qError("tag value and column mismatch, schemaId:%d, valId:%d", pSchema->colId, pTagVal->cid); - taosArrayDestroy(pTagVals); - return TSDB_CODE_APP_ERROR; + TAOS_CHECK_ERRNO(TSDB_CODE_APP_ERROR); } else if (pSchema->colId == pTagVal->cid) { char type = pTagVal->type; int32_t tlen = 0; if (IS_VAR_DATA_TYPE(type)) { - dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, pTagVal->pData, pTagVal->nData, &tlen); + TAOS_CHECK_ERRNO(dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, pTagVal->pData, pTagVal->nData, &tlen)); } else { - dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, &pTagVal->i64, tDataTypes[type].bytes, &tlen); + TAOS_CHECK_ERRNO(dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, &pTagVal->i64, tDataTypes[type].bytes, &tlen)); } *len += tlen; j++; @@ -579,9 +593,10 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { */ } +_exit: taosArrayDestroy(pTagVals); - return TSDB_CODE_SUCCESS; + return terrno; } void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* pCfg) { @@ -646,14 +661,13 @@ void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* } static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* pDbCfg, char* tbName, STableCfg* pCfg) { - int32_t code = 0; - blockDataEnsureCapacity(pBlock, 1); + QRY_ERR_RET(blockDataEnsureCapacity(pBlock, 1)); pBlock->info.rows = 1; SColumnInfoData* pCol1 = taosArrayGet(pBlock->pDataBlock, 0); char buf1[SHOW_CREATE_TB_RESULT_FIELD1_LEN] = {0}; STR_TO_VARSTR(buf1, tbName); - colDataSetVal(pCol1, 0, buf1, false); + QRY_ERR_RET(colDataSetVal(pCol1, 0, buf1, false)); SColumnInfoData* pCol2 = taosArrayGet(pBlock->pDataBlock, 1); char* buf2 = taosMemoryMalloc(SHOW_CREATE_TB_RESULT_FIELD2_LEN); @@ -675,11 +689,7 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p len += sprintf(buf2 + VARSTR_HEADER_SIZE, "CREATE TABLE `%s` USING `%s` (", tbName, pCfg->stbName); appendTagNameFields(buf2, &len, pCfg); len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, ") TAGS ("); - code = appendTagValues(buf2, &len, pCfg); - if (code) { - taosMemoryFree(buf2); - return code; - } + TAOS_CHECK_ERRNO(appendTagValues(buf2, &len, pCfg)); len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, ")"); appendTableOptions(buf2, &len, pDbCfg, pCfg); } else { @@ -691,29 +701,29 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p varDataLen(buf2) = (len > 65535) ? 65535 : len; - colDataSetVal(pCol2, 0, buf2, false); + TAOS_CHECK_ERRNO(colDataSetVal(pCol2, 0, buf2, false)); +_exit: taosMemoryFree(buf2); - return TSDB_CODE_SUCCESS; + return terrno; } static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreateViewStmt* pStmt) { int32_t code = 0; - blockDataEnsureCapacity(pBlock, 1); + QRY_ERR_RET(blockDataEnsureCapacity(pBlock, 1)); pBlock->info.rows = 1; SColumnInfoData* pCol1 = taosArrayGet(pBlock->pDataBlock, 0); char buf1[SHOW_CREATE_VIEW_RESULT_FIELD1_LEN + 1] = {0}; snprintf(varDataVal(buf1), TSDB_VIEW_FNAME_LEN + 4, "`%s`.`%s`", pStmt->dbName, pStmt->viewName); varDataSetLen(buf1, strlen(varDataVal(buf1))); - colDataSetVal(pCol1, 0, buf1, false); + QRY_ERR_RET(colDataSetVal(pCol1, 0, buf1, false)); SColumnInfoData* pCol2 = taosArrayGet(pBlock->pDataBlock, 1); char* buf2 = taosMemoryMalloc(SHOW_CREATE_VIEW_RESULT_FIELD2_LEN); if (NULL == buf2) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return terrno; + QRY_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); } SViewMeta* pMeta = pStmt->pViewMeta; @@ -722,8 +732,9 @@ static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreate pStmt->dbName, pStmt->viewName, pMeta->querySql); int32_t len = strlen(varDataVal(buf2)); varDataLen(buf2) = (len > 65535) ? 65535 : len; - colDataSetVal(pCol2, 0, buf2, false); + TAOS_CHECK_ERRNO(colDataSetVal(pCol2, 0, buf2, false)); +_exit: taosMemoryFree(buf2); return TSDB_CODE_SUCCESS; @@ -880,14 +891,14 @@ static int32_t createSelectResultDataBlock(SNodeList* pProjects, SSDataBlock** p infoData.info.type = pExpr->resType.type; infoData.info.bytes = pExpr->resType.bytes; } - blockDataAppendColInfo(pBlock, &infoData); + QRY_ERR_RET(blockDataAppendColInfo(pBlock, &infoData)); } *pOutput = pBlock; return TSDB_CODE_SUCCESS; } int32_t buildSelectResultDataBlock(SNodeList* pProjects, SSDataBlock* pBlock) { - blockDataEnsureCapacity(pBlock, 1); + QRY_ERR_RET(blockDataEnsureCapacity(pBlock, 1)); int32_t index = 0; SNode* pProj = NULL; @@ -896,9 +907,9 @@ int32_t buildSelectResultDataBlock(SNodeList* pProjects, SSDataBlock* pBlock) { return TSDB_CODE_PAR_INVALID_SELECTED_EXPR; } else { if (((SValueNode*)pProj)->isNull) { - colDataSetVal(taosArrayGet(pBlock->pDataBlock, index++), 0, NULL, true); + QRY_ERR_RET(colDataSetVal(taosArrayGet(pBlock->pDataBlock, index++), 0, NULL, true)); } else { - colDataSetVal(taosArrayGet(pBlock->pDataBlock, index++), 0, nodesGetValueFromNode((SValueNode*)pProj), false); + QRY_ERR_RET(colDataSetVal(taosArrayGet(pBlock->pDataBlock, index++), 0, nodesGetValueFromNode((SValueNode*)pProj), false)); } } } diff --git a/source/libs/command/src/explain.c b/source/libs/command/src/explain.c index 2ac7e6ae3b..3b30e40470 100644 --- a/source/libs/command/src/explain.c +++ b/source/libs/command/src/explain.c @@ -1920,6 +1920,7 @@ _return: } int32_t qExplainGetRspFromCtx(void *ctx, SRetrieveTableRsp **pRsp) { + int32_t code = 0; SExplainCtx *pCtx = (SExplainCtx *)ctx; int32_t rowNum = taosArrayGetSize(pCtx->rows); if (rowNum <= 0) { @@ -1929,14 +1930,14 @@ int32_t qExplainGetRspFromCtx(void *ctx, SRetrieveTableRsp **pRsp) { SSDataBlock *pBlock = createDataBlock(); SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, TSDB_EXPLAIN_RESULT_ROW_SIZE, 1); - blockDataAppendColInfo(pBlock, &infoData); - blockDataEnsureCapacity(pBlock, rowNum); + QRY_ERR_JRET(blockDataAppendColInfo(pBlock, &infoData)); + QRY_ERR_JRET(blockDataEnsureCapacity(pBlock, rowNum)); SColumnInfoData *pInfoData = taosArrayGet(pBlock->pDataBlock, 0); for (int32_t i = 0; i < rowNum; ++i) { SQueryExplainRowInfo *row = taosArrayGet(pCtx->rows, i); - colDataSetVal(pInfoData, i, row->buf, false); + QRY_ERR_JRET(colDataSetVal(pInfoData, i, row->buf, false)); } pBlock->info.rows = rowNum; @@ -1946,8 +1947,7 @@ int32_t qExplainGetRspFromCtx(void *ctx, SRetrieveTableRsp **pRsp) { SRetrieveTableRsp *rsp = (SRetrieveTableRsp *)taosMemoryCalloc(1, rspSize); if (NULL == rsp) { qError("malloc SRetrieveTableRsp failed, size:%d", rspSize); - blockDataDestroy(pBlock); - QRY_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); + QRY_ERR_JRET(TSDB_CODE_OUT_OF_MEMORY); } rsp->completed = 1; @@ -1961,10 +1961,11 @@ int32_t qExplainGetRspFromCtx(void *ctx, SRetrieveTableRsp **pRsp) { SET_PAYLOAD_LEN(rsp->data, len, len); +_return: blockDataDestroy(pBlock); *pRsp = rsp; - return TSDB_CODE_SUCCESS; + QRY_RET(code); } int32_t qExplainPrepareCtx(SQueryPlan *pDag, SExplainCtx **pCtx) { From 1583fbb40d30265a10d9e68df6801c96682a0115 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 15 Jul 2024 18:55:18 +0800 Subject: [PATCH 39/64] fix: build error --- source/libs/command/src/command.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index e528f61787..4cd87b139e 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -274,7 +274,7 @@ int64_t getValOfDiffPrecision(int8_t unit, int64_t val) { return v; } -static int32_t buildRetension(SArray* pRetension, void **ppRetentions ) { +static int32_t buildRetension(SArray* pRetension, char **ppRetentions ) { size_t size = taosArrayGetSize(pRetension); if (size == 0) { *ppRetentions = NULL; From 010a1da48294734f1c4f6febd847749219d6881a Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 16 Jul 2024 09:40:19 +0800 Subject: [PATCH 40/64] return value: querymsg.c --- source/client/src/clientEnv.c | 6 +++++- source/client/src/clientRawBlockWrite.c | 13 +++++++++++-- source/libs/command/src/command.c | 3 +-- source/libs/qcom/src/querymsg.c | 6 ++++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index 18907ede5d..7d737fbb8e 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -885,7 +885,11 @@ void taos_init_imp(void) { taosSetCoreDump(true); #endif - initTaskQueue(); + if (initTaskQueue() != 0){ + tscInitRes = -1; + tscError("failed to init task queue"); + return; + } fmFuncMgtInit(); nodesInitAllocatorSet(); diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index 2fabf01ef4..9e1ff6e5e5 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -460,8 +460,14 @@ static void buildChildElement(cJSON* json, SVCreateTbReq* pCreateReq) { } else { buf = taosMemoryCalloc(pTagVal->nData + 3, 1); } + RAW_NULL_CHECK(buf); - RAW_RETURN_CHECK(dataConverToStr(buf, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL)); + if (!buf) goto end; + if(dataConverToStr(buf, pTagVal->type, pTagVal->pData, pTagVal->nData, NULL) != TSDB_CODE_SUCCESS) { + taosMemoryFree(buf); + goto end; + } + tvalue = cJSON_CreateString(buf); RAW_NULL_CHECK(tvalue); taosMemoryFree(buf); @@ -729,7 +735,10 @@ static void processAlterTable(SMqMetaRsp* metaRsp, cJSON** pJson) { buf = taosMemoryCalloc(vAlterTbReq.nTagVal + 3, 1); } RAW_NULL_CHECK(buf); - RAW_RETURN_CHECK(dataConverToStr(buf, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL)); + if(dataConverToStr(buf, vAlterTbReq.tagType, vAlterTbReq.pTagVal, vAlterTbReq.nTagVal, NULL) != TSDB_CODE_SUCCESS) { + taosMemoryFree(buf); + goto end; + } } cJSON* colValue = cJSON_CreateString(buf); diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 4cd87b139e..8b2415128a 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -672,8 +672,7 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p SColumnInfoData* pCol2 = taosArrayGet(pBlock->pDataBlock, 1); char* buf2 = taosMemoryMalloc(SHOW_CREATE_TB_RESULT_FIELD2_LEN); if (NULL == buf2) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return terrno; + QRY_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); } int32_t len = 0; diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c index b13919e5e1..1f5b6315ba 100644 --- a/source/libs/qcom/src/querymsg.c +++ b/source/libs/qcom/src/querymsg.c @@ -713,6 +713,9 @@ int32_t queryProcessGetTbCfgRsp(void *output, char *msg, int32_t msgSize) { } STableCfgRsp *out = taosMemoryCalloc(1, sizeof(STableCfgRsp)); + if(out == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } if (tDeserializeSTableCfgRsp(msg, msgSize, out) != 0) { qError("tDeserializeSTableCfgRsp failed, msgSize:%d", msgSize); tFreeSTableCfgRsp(out); @@ -731,6 +734,9 @@ int32_t queryProcessGetViewMetaRsp(void *output, char *msg, int32_t msgSize) { } SViewMetaRsp *out = taosMemoryCalloc(1, sizeof(SViewMetaRsp)); + if (out == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } if (tDeserializeSViewMetaRsp(msg, msgSize, out) != 0) { qError("tDeserializeSViewMetaRsp failed, msgSize:%d", msgSize); tFreeSViewMetaRsp(out); From 200fd4738fb7af5d7ec0efd82e425befdf4efe24 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 16 Jul 2024 11:50:52 +0800 Subject: [PATCH 41/64] array push --- source/libs/command/src/command.c | 47 ++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 8b2415128a..43091b38ad 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -14,11 +14,14 @@ */ #include "command.h" +#include #include "catalog.h" #include "commandInt.h" #include "scheduler.h" #include "systable.h" #include "taosdef.h" +#include "taoserror.h" +#include "tarray.h" #include "tdatablock.h" #include "tglobal.h" #include "tgrant.h" @@ -109,7 +112,7 @@ static int32_t buildDescResultDataBlock(SSDataBlock** pOutput) { if (TSDB_CODE_SUCCESS == code) { *pOutput = pBlock; } else { - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); } return code; } @@ -222,7 +225,7 @@ static int32_t execDescribe(bool sysInfoUser, SNode* pStmt, SRetrieveTableRsp** code = buildRetrieveTableRsp(pBlock, DESCRIBE_RESULT_COLS, pRsp); } } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } @@ -244,7 +247,7 @@ static int32_t buildCreateDBResultDataBlock(SSDataBlock** pOutput) { if (TSDB_CODE_SUCCESS == code) { *pOutput = pBlock; } else { - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); } return code; } @@ -413,7 +416,7 @@ static int32_t execShowCreateDatabase(SShowCreateDatabaseStmt* pStmt, SRetrieveT if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_DB_RESULT_COLS, pRsp); } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } @@ -433,7 +436,7 @@ static int32_t buildCreateTbResultDataBlock(SSDataBlock** pOutput) { if (TSDB_CODE_SUCCESS == code) { *pOutput = pBlock; } else { - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); } return code; } @@ -454,7 +457,7 @@ static int32_t buildCreateViewResultDataBlock(SSDataBlock** pOutput) { if (TSDB_CODE_SUCCESS == code) { *pOutput = pBlock; } else { - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); } return code; } @@ -748,7 +751,7 @@ static int32_t execShowCreateTable(SShowCreateTableStmt* pStmt, SRetrieveTableRs if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_TB_RESULT_COLS, pRsp); } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } @@ -841,23 +844,39 @@ static int32_t buildLocalVariablesResultDataBlock(SSDataBlock** pOutput) { pBlock->info.hasVarCol = true; pBlock->pDataBlock = taosArrayInit(SHOW_LOCAL_VARIABLES_RESULT_COLS, sizeof(SColumnInfoData)); + if (NULL == pBlock->pDataBlock) { + taosMemoryFree(pBlock); + return TSDB_CODE_OUT_OF_MEMORY; + } SColumnInfoData infoData = {0}; infoData.info.type = TSDB_DATA_TYPE_VARCHAR; infoData.info.bytes = SHOW_LOCAL_VARIABLES_RESULT_FIELD1_LEN; - taosArrayPush(pBlock->pDataBlock, &infoData); + if(taosArrayPush(pBlock->pDataBlock, &infoData) == NULL) { + goto _exit; + } infoData.info.type = TSDB_DATA_TYPE_VARCHAR; infoData.info.bytes = SHOW_LOCAL_VARIABLES_RESULT_FIELD2_LEN; - taosArrayPush(pBlock->pDataBlock, &infoData); + if(taosArrayPush(pBlock->pDataBlock, &infoData) == NULL) { + goto _exit; + } infoData.info.type = TSDB_DATA_TYPE_VARCHAR; infoData.info.bytes = SHOW_LOCAL_VARIABLES_RESULT_FIELD3_LEN; - taosArrayPush(pBlock->pDataBlock, &infoData); + if(taosArrayPush(pBlock->pDataBlock, &infoData) == NULL) { + goto _exit; + } *pOutput = pBlock; - return TSDB_CODE_SUCCESS; + +_exit: + if(terrno != TSDB_CODE_SUCCESS) { + taosMemoryFree(pBlock); + taosArrayDestroy(pBlock->pDataBlock); + } + return terrno; } static int32_t execShowLocalVariables(SRetrieveTableRsp** pRsp) { @@ -869,7 +888,7 @@ static int32_t execShowLocalVariables(SRetrieveTableRsp** pRsp) { if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, SHOW_LOCAL_VARIABLES_RESULT_COLS, pRsp); } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } @@ -926,7 +945,7 @@ static int32_t execSelectWithoutFrom(SSelectStmt* pSelect, SRetrieveTableRsp** p if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, LIST_LENGTH(pSelect->pProjectionList), pRsp); } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } @@ -939,7 +958,7 @@ static int32_t execShowCreateView(SShowCreateViewStmt* pStmt, SRetrieveTableRsp* if (TSDB_CODE_SUCCESS == code) { code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_VIEW_RESULT_COLS, pRsp); } - blockDataDestroy(pBlock); + (void)blockDataDestroy(pBlock); return code; } From ebec7c928bd9b2cb154bd6b91af7725846bbe6b2 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 16 Jul 2024 13:58:58 +0800 Subject: [PATCH 42/64] array push --- source/libs/command/src/explain.c | 29 +++++++++++------------ source/libs/qcom/src/querymsg.c | 39 ++++++++++++++++++------------- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/source/libs/command/src/explain.c b/source/libs/command/src/explain.c index 3b30e40470..6aadb68da5 100644 --- a/source/libs/command/src/explain.c +++ b/source/libs/command/src/explain.c @@ -199,7 +199,7 @@ int32_t qExplainGenerateResNodeExecInfo(SPhysiNode *pNode, SArray **pExecInfo, S return TSDB_CODE_APP_ERROR; } - taosArrayPush(*pExecInfo, rsp->subplanInfo + group->physiPlanExecIdx); + if(taosArrayPush(*pExecInfo, rsp->subplanInfo + group->physiPlanExecIdx) == NULL) return terrno; } else { for (int32_t i = 0; i < group->nodeNum; ++i) { rsp = taosArrayGet(group->nodeExecInfo, i); @@ -208,7 +208,7 @@ int32_t qExplainGenerateResNodeExecInfo(SPhysiNode *pNode, SArray **pExecInfo, S return TSDB_CODE_APP_ERROR; } - taosArrayPush(*pExecInfo, rsp->subplanInfo + group->physiPlanExecIdx); + if(taosArrayPush(*pExecInfo, rsp->subplanInfo + group->physiPlanExecIdx) == NULL) return terrno; } } @@ -2100,32 +2100,26 @@ int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t group->nodeExecInfo = taosArrayInit(group->nodeNum, sizeof(SExplainRsp)); if (NULL == group->nodeExecInfo) { qError("taosArrayInit %d explainExecInfo failed", group->nodeNum); - tFreeSExplainRsp(pRspMsg); - taosWUnLockLatch(&group->lock); - - QRY_ERR_RET(TSDB_CODE_OUT_OF_MEMORY); + terrno = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; } group->physiPlanExecNum = pRspMsg->numOfPlans; } else if (taosArrayGetSize(group->nodeExecInfo) >= group->nodeNum) { qError("group execInfo already full, size:%d, nodeNum:%d", (int32_t)taosArrayGetSize(group->nodeExecInfo), group->nodeNum); - tFreeSExplainRsp(pRspMsg); - taosWUnLockLatch(&group->lock); - - QRY_ERR_RET(TSDB_CODE_APP_ERROR); + terrno = TSDB_CODE_APP_ERROR; + goto _exit; } if (group->physiPlanExecNum != pRspMsg->numOfPlans) { qError("physiPlanExecNum %d mismatch with others %d in group %d", pRspMsg->numOfPlans, group->physiPlanExecNum, groupId); - tFreeSExplainRsp(pRspMsg); - taosWUnLockLatch(&group->lock); - - QRY_ERR_RET(TSDB_CODE_APP_ERROR); + terrno = TSDB_CODE_APP_ERROR; + goto _exit; } - taosArrayPush(group->nodeExecInfo, pRspMsg); + if(taosArrayPush(group->nodeExecInfo, pRspMsg) == NULL) goto _exit; groupDone = (taosArrayGetSize(group->nodeExecInfo) >= group->nodeNum); @@ -2141,6 +2135,11 @@ int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t } return TSDB_CODE_SUCCESS; + +_exit: + tFreeSExplainRsp(pRspMsg); + taosWUnLockLatch(&group->lock); + return terrno; } int32_t qExecStaticExplain(SQueryPlan *pDag, SRetrieveTableRsp **pRsp) { diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c index 1f5b6315ba..fdb5f2d9c1 100644 --- a/source/libs/qcom/src/querymsg.c +++ b/source/libs/qcom/src/querymsg.c @@ -16,6 +16,7 @@ #include "query.h" #include "queryInt.h" #include "systable.h" +#include "taoserror.h" #include "tmsg.h" #include "trpc.h" @@ -85,7 +86,7 @@ int32_t queryBuildTableMetaReqMsg(void *input, char **msg, int32_t msgSize, int3 int32_t bufLen = tSerializeSTableInfoReq(NULL, 0, &infoReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSTableInfoReq(pBuf, bufLen, &infoReq); + (void)tSerializeSTableInfoReq(pBuf, bufLen, &infoReq); *msg = pBuf; *msgLen = bufLen; @@ -109,7 +110,7 @@ int32_t queryBuildUseDbMsg(void *input, char **msg, int32_t msgSize, int32_t *ms int32_t bufLen = tSerializeSUseDbReq(NULL, 0, &usedbReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSUseDbReq(pBuf, bufLen, &usedbReq); + (void)tSerializeSUseDbReq(pBuf, bufLen, &usedbReq); *msg = pBuf; *msgLen = bufLen; @@ -127,7 +128,7 @@ int32_t queryBuildQnodeListMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSQnodeListReq(NULL, 0, &qnodeListReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSQnodeListReq(pBuf, bufLen, &qnodeListReq); + (void)tSerializeSQnodeListReq(pBuf, bufLen, &qnodeListReq); *msg = pBuf; *msgLen = bufLen; @@ -145,7 +146,7 @@ int32_t queryBuildDnodeListMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSDnodeListReq(NULL, 0, &dnodeListReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSDnodeListReq(pBuf, bufLen, &dnodeListReq); + (void)tSerializeSDnodeListReq(pBuf, bufLen, &dnodeListReq); *msg = pBuf; *msgLen = bufLen; @@ -162,7 +163,7 @@ int32_t queryBuildGetSerVerMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSServerVerReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - tSerializeSServerVerReq(pBuf, bufLen, &req); + (void)tSerializeSServerVerReq(pBuf, bufLen, &req); *msg = pBuf; *msgLen = bufLen; @@ -180,7 +181,7 @@ int32_t queryBuildGetDBCfgMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSDbCfgReq(NULL, 0, &dbCfgReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSDbCfgReq(pBuf, bufLen, &dbCfgReq); + (void)tSerializeSDbCfgReq(pBuf, bufLen, &dbCfgReq); *msg = pBuf; *msgLen = bufLen; @@ -198,7 +199,7 @@ int32_t queryBuildGetIndexMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSUserIndexReq(NULL, 0, &indexReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSUserIndexReq(pBuf, bufLen, &indexReq); + (void)tSerializeSUserIndexReq(pBuf, bufLen, &indexReq); *msg = pBuf; *msgLen = bufLen; @@ -216,11 +217,17 @@ int32_t queryBuildRetrieveFuncMsg(void *input, char **msg, int32_t msgSize, int3 funcReq.numOfFuncs = 1; funcReq.ignoreCodeComment = true; funcReq.pFuncNames = taosArrayInit(1, strlen(input) + 1); - taosArrayPush(funcReq.pFuncNames, input); + if (NULL == funcReq.pFuncNames) { + return TSDB_CODE_OUT_OF_MEMORY; + } + if (taosArrayPush(funcReq.pFuncNames, input) == NULL) { + taosArrayDestroy(funcReq.pFuncNames); + return terrno; + } int32_t bufLen = tSerializeSRetrieveFuncReq(NULL, 0, &funcReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSRetrieveFuncReq(pBuf, bufLen, &funcReq); + (void)tSerializeSRetrieveFuncReq(pBuf, bufLen, &funcReq); taosArrayDestroy(funcReq.pFuncNames); @@ -240,7 +247,7 @@ int32_t queryBuildGetUserAuthMsg(void *input, char **msg, int32_t msgSize, int32 int32_t bufLen = tSerializeSGetUserAuthReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - tSerializeSGetUserAuthReq(pBuf, bufLen, &req); + (void)tSerializeSGetUserAuthReq(pBuf, bufLen, &req); *msg = pBuf; *msgLen = bufLen; @@ -258,7 +265,7 @@ int32_t queryBuildGetTbIndexMsg(void *input, char **msg, int32_t msgSize, int32_ int32_t bufLen = tSerializeSTableIndexReq(NULL, 0, &indexReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSTableIndexReq(pBuf, bufLen, &indexReq); + (void)tSerializeSTableIndexReq(pBuf, bufLen, &indexReq); *msg = pBuf; *msgLen = bufLen; @@ -279,7 +286,7 @@ int32_t queryBuildGetTbCfgMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSTableCfgReq(NULL, 0, &cfgReq); void *pBuf = (*mallcFp)(bufLen); - tSerializeSTableCfgReq(pBuf, bufLen, &cfgReq); + (void)tSerializeSTableCfgReq(pBuf, bufLen, &cfgReq); *msg = pBuf; *msgLen = bufLen; @@ -297,7 +304,7 @@ int32_t queryBuildGetViewMetaMsg(void *input, char **msg, int32_t msgSize, int32 int32_t bufLen = tSerializeSViewMetaReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - tSerializeSViewMetaReq(pBuf, bufLen, &req); + (void)tSerializeSViewMetaReq(pBuf, bufLen, &req); *msg = pBuf; *msgLen = bufLen; @@ -316,7 +323,7 @@ int32_t queryBuildGetTableTSMAMsg(void *input, char **msg, int32_t msgSize, int3 int32_t bufLen = tSerializeTableTSMAInfoReq(NULL, 0, &req); void * pBuf = (*mallcFp)(bufLen); - tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); + (void)tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); *msg = pBuf; *msgLen = bufLen; @@ -335,7 +342,7 @@ int32_t queryBuildGetTSMAMsg(void *input, char **msg, int32_t msgSize, int32_t * int32_t bufLen = tSerializeTableTSMAInfoReq(NULL, 0, &req); void * pBuf = (*mallcFp)(bufLen); - tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); + (void)tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); *msg = pBuf; *msgLen = bufLen; @@ -350,7 +357,7 @@ int32_t queryBuildGetStreamProgressMsg(void* input, char** msg, int32_t msgSize, int32_t len = tSerializeStreamProgressReq(NULL, 0, input); void* pBuf = (*mallcFp)(len); - tSerializeStreamProgressReq(pBuf, len, input); + (void)tSerializeStreamProgressReq(pBuf, len, input); *msg = pBuf; *msgLen = len; From 99dcaaff217ae929a70c94d6bd58ce0c2aed6ab5 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Tue, 16 Jul 2024 15:52:06 +0800 Subject: [PATCH 43/64] build on windows --- source/libs/command/src/command.c | 5 +---- source/libs/qcom/src/querymsg.c | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 43091b38ad..136e1d4ae1 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -14,14 +14,11 @@ */ #include "command.h" -#include #include "catalog.h" #include "commandInt.h" #include "scheduler.h" #include "systable.h" #include "taosdef.h" -#include "taoserror.h" -#include "tarray.h" #include "tdatablock.h" #include "tglobal.h" #include "tgrant.h" @@ -739,7 +736,7 @@ static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreate _exit: taosMemoryFree(buf2); - return TSDB_CODE_SUCCESS; + return terrno; } static int32_t execShowCreateTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) { diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c index fdb5f2d9c1..c803eb2cf8 100644 --- a/source/libs/qcom/src/querymsg.c +++ b/source/libs/qcom/src/querymsg.c @@ -16,7 +16,6 @@ #include "query.h" #include "queryInt.h" #include "systable.h" -#include "taoserror.h" #include "tmsg.h" #include "trpc.h" From e86189d9ea783d63ab6c90ed631336e1bab56d9c Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Sun, 21 Jul 2024 18:57:08 +0800 Subject: [PATCH 44/64] check serialize result --- source/libs/command/src/command.c | 28 +++++++----- source/libs/command/src/explain.c | 20 ++++---- source/libs/qcom/src/querymsg.c | 76 ++++++++++++++++++++++++------- 3 files changed, 88 insertions(+), 36 deletions(-) diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c index 136e1d4ae1..07409b1411 100644 --- a/source/libs/command/src/command.c +++ b/source/libs/command/src/command.c @@ -512,6 +512,7 @@ void appendTagNameFields(char* buf, int32_t* len, STableCfg* pCfg) { } int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { + int32_t code = TSDB_CODE_SUCCESS; SArray* pTagVals = NULL; STag* pTag = (STag*)pCfg->pTags; @@ -530,7 +531,6 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { } QRY_ERR_RET(tTagToValArray((const STag*)pCfg->pTags, &pTagVals)); - int16_t valueNum = taosArrayGetSize(pTagVals); int32_t num = 0; int32_t j = 0; @@ -548,15 +548,18 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { STagVal* pTagVal = (STagVal*)taosArrayGet(pTagVals, j); if (pSchema->colId > pTagVal->cid) { qError("tag value and column mismatch, schemaId:%d, valId:%d", pSchema->colId, pTagVal->cid); - TAOS_CHECK_ERRNO(TSDB_CODE_APP_ERROR); + code = TSDB_CODE_APP_ERROR; + TAOS_CHECK_ERRNO(code); } else if (pSchema->colId == pTagVal->cid) { char type = pTagVal->type; int32_t tlen = 0; if (IS_VAR_DATA_TYPE(type)) { - TAOS_CHECK_ERRNO(dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, pTagVal->pData, pTagVal->nData, &tlen)); + code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, pTagVal->pData, pTagVal->nData, &tlen); + TAOS_CHECK_ERRNO(code); } else { - TAOS_CHECK_ERRNO(dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, &pTagVal->i64, tDataTypes[type].bytes, &tlen)); + code = dataConverToStr(buf + VARSTR_HEADER_SIZE + *len, type, &pTagVal->i64, tDataTypes[type].bytes, &tlen); + TAOS_CHECK_ERRNO(code); } *len += tlen; j++; @@ -596,7 +599,7 @@ int32_t appendTagValues(char* buf, int32_t* len, STableCfg* pCfg) { _exit: taosArrayDestroy(pTagVals); - return terrno; + return code; } void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* pCfg) { @@ -661,6 +664,7 @@ void appendTableOptions(char* buf, int32_t* len, SDbCfgInfo* pDbCfg, STableCfg* } static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* pDbCfg, char* tbName, STableCfg* pCfg) { + int32_t code = TSDB_CODE_SUCCESS; QRY_ERR_RET(blockDataEnsureCapacity(pBlock, 1)); pBlock->info.rows = 1; @@ -688,7 +692,8 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p len += sprintf(buf2 + VARSTR_HEADER_SIZE, "CREATE TABLE `%s` USING `%s` (", tbName, pCfg->stbName); appendTagNameFields(buf2, &len, pCfg); len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, ") TAGS ("); - TAOS_CHECK_ERRNO(appendTagValues(buf2, &len, pCfg)); + code = appendTagValues(buf2, &len, pCfg); + TAOS_CHECK_ERRNO(code); len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, ")"); appendTableOptions(buf2, &len, pDbCfg, pCfg); } else { @@ -700,12 +705,13 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p varDataLen(buf2) = (len > 65535) ? 65535 : len; - TAOS_CHECK_ERRNO(colDataSetVal(pCol2, 0, buf2, false)); + code = colDataSetVal(pCol2, 0, buf2, false); + TAOS_CHECK_ERRNO(code); _exit: taosMemoryFree(buf2); - return terrno; + return code; } static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreateViewStmt* pStmt) { @@ -731,12 +737,10 @@ static int32_t setCreateViewResultIntoDataBlock(SSDataBlock* pBlock, SShowCreate pStmt->dbName, pStmt->viewName, pMeta->querySql); int32_t len = strlen(varDataVal(buf2)); varDataLen(buf2) = (len > 65535) ? 65535 : len; - TAOS_CHECK_ERRNO(colDataSetVal(pCol2, 0, buf2, false)); - -_exit: + code = colDataSetVal(pCol2, 0, buf2, false); taosMemoryFree(buf2); - return terrno; + return code; } static int32_t execShowCreateTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) { diff --git a/source/libs/command/src/explain.c b/source/libs/command/src/explain.c index 6aadb68da5..843e3ee734 100644 --- a/source/libs/command/src/explain.c +++ b/source/libs/command/src/explain.c @@ -2100,26 +2100,30 @@ int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t group->nodeExecInfo = taosArrayInit(group->nodeNum, sizeof(SExplainRsp)); if (NULL == group->nodeExecInfo) { qError("taosArrayInit %d explainExecInfo failed", group->nodeNum); - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _exit; + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_CHECK_ERRNO(code); } group->physiPlanExecNum = pRspMsg->numOfPlans; } else if (taosArrayGetSize(group->nodeExecInfo) >= group->nodeNum) { qError("group execInfo already full, size:%d, nodeNum:%d", (int32_t)taosArrayGetSize(group->nodeExecInfo), group->nodeNum); - terrno = TSDB_CODE_APP_ERROR; - goto _exit; + code = TSDB_CODE_APP_ERROR; + TAOS_CHECK_ERRNO(code); } if (group->physiPlanExecNum != pRspMsg->numOfPlans) { qError("physiPlanExecNum %d mismatch with others %d in group %d", pRspMsg->numOfPlans, group->physiPlanExecNum, groupId); - terrno = TSDB_CODE_APP_ERROR; - goto _exit; + code = TSDB_CODE_APP_ERROR; + TAOS_CHECK_ERRNO(code); } - if(taosArrayPush(group->nodeExecInfo, pRspMsg) == NULL) goto _exit; + if(taosArrayPush(group->nodeExecInfo, pRspMsg) == NULL) + { + code = TSDB_CODE_OUT_OF_MEMORY; + TAOS_CHECK_ERRNO(code); + } groupDone = (taosArrayGetSize(group->nodeExecInfo) >= group->nodeNum); @@ -2139,7 +2143,7 @@ int32_t qExplainUpdateExecInfo(SExplainCtx *pCtx, SExplainRsp *pRspMsg, int32_t _exit: tFreeSExplainRsp(pRspMsg); taosWUnLockLatch(&group->lock); - return terrno; + return code; } int32_t qExecStaticExplain(SQueryPlan *pDag, SRetrieveTableRsp **pRsp) { diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c index c803eb2cf8..e8deed1df9 100644 --- a/source/libs/qcom/src/querymsg.c +++ b/source/libs/qcom/src/querymsg.c @@ -85,7 +85,10 @@ int32_t queryBuildTableMetaReqMsg(void *input, char **msg, int32_t msgSize, int3 int32_t bufLen = tSerializeSTableInfoReq(NULL, 0, &infoReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSTableInfoReq(pBuf, bufLen, &infoReq); + if(tSerializeSTableInfoReq(pBuf, bufLen, &infoReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -109,7 +112,10 @@ int32_t queryBuildUseDbMsg(void *input, char **msg, int32_t msgSize, int32_t *ms int32_t bufLen = tSerializeSUseDbReq(NULL, 0, &usedbReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSUseDbReq(pBuf, bufLen, &usedbReq); + if(tSerializeSUseDbReq(pBuf, bufLen, &usedbReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -127,7 +133,10 @@ int32_t queryBuildQnodeListMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSQnodeListReq(NULL, 0, &qnodeListReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSQnodeListReq(pBuf, bufLen, &qnodeListReq); + if(tSerializeSQnodeListReq(pBuf, bufLen, &qnodeListReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -145,7 +154,10 @@ int32_t queryBuildDnodeListMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSDnodeListReq(NULL, 0, &dnodeListReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSDnodeListReq(pBuf, bufLen, &dnodeListReq); + if(tSerializeSDnodeListReq(pBuf, bufLen, &dnodeListReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -162,7 +174,10 @@ int32_t queryBuildGetSerVerMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSServerVerReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSServerVerReq(pBuf, bufLen, &req); + if(tSerializeSServerVerReq(pBuf, bufLen, &req) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -180,7 +195,10 @@ int32_t queryBuildGetDBCfgMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSDbCfgReq(NULL, 0, &dbCfgReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSDbCfgReq(pBuf, bufLen, &dbCfgReq); + if(tSerializeSDbCfgReq(pBuf, bufLen, &dbCfgReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -198,7 +216,10 @@ int32_t queryBuildGetIndexMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSUserIndexReq(NULL, 0, &indexReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSUserIndexReq(pBuf, bufLen, &indexReq); + if(tSerializeSUserIndexReq(pBuf, bufLen, &indexReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -221,12 +242,15 @@ int32_t queryBuildRetrieveFuncMsg(void *input, char **msg, int32_t msgSize, int3 } if (taosArrayPush(funcReq.pFuncNames, input) == NULL) { taosArrayDestroy(funcReq.pFuncNames); - return terrno; + return TSDB_CODE_OUT_OF_MEMORY; } int32_t bufLen = tSerializeSRetrieveFuncReq(NULL, 0, &funcReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSRetrieveFuncReq(pBuf, bufLen, &funcReq); + if(tSerializeSRetrieveFuncReq(pBuf, bufLen, &funcReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } taosArrayDestroy(funcReq.pFuncNames); @@ -246,7 +270,9 @@ int32_t queryBuildGetUserAuthMsg(void *input, char **msg, int32_t msgSize, int32 int32_t bufLen = tSerializeSGetUserAuthReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSGetUserAuthReq(pBuf, bufLen, &req); + if (tSerializeSGetUserAuthReq(pBuf, bufLen, &req) < 0) { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -264,7 +290,10 @@ int32_t queryBuildGetTbIndexMsg(void *input, char **msg, int32_t msgSize, int32_ int32_t bufLen = tSerializeSTableIndexReq(NULL, 0, &indexReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSTableIndexReq(pBuf, bufLen, &indexReq); + if(tSerializeSTableIndexReq(pBuf, bufLen, &indexReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -285,7 +314,10 @@ int32_t queryBuildGetTbCfgMsg(void *input, char **msg, int32_t msgSize, int32_t int32_t bufLen = tSerializeSTableCfgReq(NULL, 0, &cfgReq); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSTableCfgReq(pBuf, bufLen, &cfgReq); + if(tSerializeSTableCfgReq(pBuf, bufLen, &cfgReq) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -303,7 +335,10 @@ int32_t queryBuildGetViewMetaMsg(void *input, char **msg, int32_t msgSize, int32 int32_t bufLen = tSerializeSViewMetaReq(NULL, 0, &req); void *pBuf = (*mallcFp)(bufLen); - (void)tSerializeSViewMetaReq(pBuf, bufLen, &req); + if(tSerializeSViewMetaReq(pBuf, bufLen, &req) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -322,7 +357,10 @@ int32_t queryBuildGetTableTSMAMsg(void *input, char **msg, int32_t msgSize, int3 int32_t bufLen = tSerializeTableTSMAInfoReq(NULL, 0, &req); void * pBuf = (*mallcFp)(bufLen); - (void)tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); + if(tSerializeTableTSMAInfoReq(pBuf, bufLen, &req) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -341,7 +379,10 @@ int32_t queryBuildGetTSMAMsg(void *input, char **msg, int32_t msgSize, int32_t * int32_t bufLen = tSerializeTableTSMAInfoReq(NULL, 0, &req); void * pBuf = (*mallcFp)(bufLen); - (void)tSerializeTableTSMAInfoReq(pBuf, bufLen, &req); + if(tSerializeTableTSMAInfoReq(pBuf, bufLen, &req) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = bufLen; @@ -356,7 +397,10 @@ int32_t queryBuildGetStreamProgressMsg(void* input, char** msg, int32_t msgSize, int32_t len = tSerializeStreamProgressReq(NULL, 0, input); void* pBuf = (*mallcFp)(len); - (void)tSerializeStreamProgressReq(pBuf, len, input); + if(tSerializeStreamProgressReq(pBuf, len, input) < 0) + { + return TSDB_CODE_TSC_INVALID_INPUT; + } *msg = pBuf; *msgLen = len; From 45348b15be25cd23b8bfc01f8713b68111fe5422 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 22 Jul 2024 11:06:24 +0800 Subject: [PATCH 45/64] fix: return code validation --- source/libs/executor/inc/mergejoin.h | 11 +- source/libs/executor/src/groupcacheoperator.c | 8 +- source/libs/executor/src/mergejoin.c | 262 ++++++++++++++- source/libs/executor/src/mergejoinoperator.c | 316 ++++++++++++++---- 4 files changed, 503 insertions(+), 94 deletions(-) diff --git a/source/libs/executor/inc/mergejoin.h b/source/libs/executor/inc/mergejoin.h index f6f1cf26f3..64db1a57a0 100755 --- a/source/libs/executor/inc/mergejoin.h +++ b/source/libs/executor/inc/mergejoin.h @@ -432,6 +432,15 @@ typedef struct SMJoinOperatorInfo { } \ } while (0) +#define MJ_RET(c) \ + do { \ + int32_t _code = c; \ + if (_code != TSDB_CODE_SUCCESS) { \ + terrno = _code; \ + } \ + return _code; \ + } while (0) + void mJoinDestroyMergeCtx(SMJoinOperatorInfo* pJoin); @@ -459,7 +468,7 @@ int32_t mJoinCreateFullBuildTbHash(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pT int32_t mJoinCreateBuildTbHash(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable); int32_t mJoinSetKeyColsData(SSDataBlock* pBlock, SMJoinTableCtx* pTable); int32_t mJoinProcessEqualGrp(SMJoinMergeCtx* pCtx, int64_t timestamp, bool lastBuildGrp); -bool mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, SMJoinTableCtx* probe, SMJoinTableCtx* build); +int32_t mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, SMJoinTableCtx* probe, SMJoinTableCtx* build, bool* cont); int32_t mJoinMergeGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool append, SMJoinGrpRows* pFirst, SMJoinGrpRows* pSecond); int32_t mJoinHandleMidRemains(SMJoinMergeCtx* pCtx); int32_t mJoinNonEqGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool append, SMJoinGrpRows* pGrp, bool probeGrp); diff --git a/source/libs/executor/src/groupcacheoperator.c b/source/libs/executor/src/groupcacheoperator.c index 379cceeb03..e9a6c14141 100755 --- a/source/libs/executor/src/groupcacheoperator.c +++ b/source/libs/executor/src/groupcacheoperator.c @@ -149,7 +149,7 @@ void blockDataDeepCleanup(SSDataBlock* pDataBlock) { for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i); if (NULL == p) { - qError("fail to get %dth col in dataBlock, numOfCols:%d", i, numOfCols); + qError("fail to get %dth col in dataBlock, numOfCols:%d", i, (int32_t)numOfCols); continue; } taosMemoryFreeClear(p->pData); @@ -352,7 +352,7 @@ static int32_t addBlkToDirtyBufList(SGroupCacheOperatorInfo* pGCache, SGcDownstr } pBufInfo = taosHashGet(pCache->pDirtyBlk, &pBufInfo->basic.blkId, sizeof(pBufInfo->basic.blkId)); if (NULL == pBufInfo) { - qError("fail to get blk %d from pCache->pDirtyBlk", pBufInfo->basic.blkId); + qError("fail to get blk %" PRId64 " from pCache->pDirtyBlk", pBufInfo->basic.blkId); QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } int32_t code = TSDB_CODE_SUCCESS; @@ -462,7 +462,7 @@ void blockDataDeepClear(SSDataBlock* pDataBlock) { for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* p = taosArrayGet(pDataBlock->pDataBlock, i); if (NULL == p) { - qError("fail to get %d col from pDataBlock, numOfCols:%d", i, numOfCols); + qError("fail to get %d col from pDataBlock, numOfCols:%d", i, (int32_t)numOfCols); continue; } p->pData = NULL; @@ -1239,7 +1239,7 @@ static int32_t initGroupCacheSession(struct SOperatorInfo* pOperator, SOperatorP *ppSession = taosHashGet(pCtx->pSessions, &pGcParam->sessionId, sizeof(pGcParam->sessionId)); if (NULL == *ppSession) { - qError("fail to get session %d from pSessions", pGcParam->sessionId); + qError("fail to get session %" PRId64 " from pSessions", pGcParam->sessionId); QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); } diff --git a/source/libs/executor/src/mergejoin.c b/source/libs/executor/src/mergejoin.c index 1c625df52f..2c5121855a 100755 --- a/source/libs/executor/src/mergejoin.c +++ b/source/libs/executor/src/mergejoin.c @@ -72,9 +72,15 @@ int32_t mWinJoinDumpGrpCache(SMJoinWindowCtx* pCtx) { if ((!pCtx->seqWinGrp) && 0 == cache->grpIdx && probeRows * buildTotalRows <= rowsLeft) { SMJoinGrpRows* pFirstBuild = taosArrayGet(cache->grps, 0); + if (NULL == pFirstBuild) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (pFirstBuild->readIdx == pFirstBuild->beginIdx) { for (; cache->grpIdx < buildGrpNum; ++cache->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(cache->grps, cache->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); buildGrp->readIdx = buildGrp->beginIdx; } @@ -89,6 +95,9 @@ int32_t mWinJoinDumpGrpCache(SMJoinWindowCtx* pCtx) { probeGrp->endIdx = probeGrp->readIdx; for (; cache->grpIdx < buildGrpNum && rowsLeft > 0; ++cache->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(cache->grps, cache->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (rowsLeft >= GRP_REMAIN_ROWS(buildGrp)) { MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); @@ -134,7 +143,8 @@ static int32_t mOuterJoinHashFullCart(SMJoinMergeCtx* pCtx) { SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); if (build->grpRowIdx >= 0) { - bool contLoop = mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + bool contLoop = false; + MJ_ERR_RET(mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build, &contLoop)); if (build->grpRowIdx < 0) { probeGrp->readIdx++; } @@ -171,7 +181,8 @@ static int32_t mOuterJoinHashFullCart(SMJoinMergeCtx* pCtx) { } build->grpRowIdx = 0; - bool contLoop = mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + bool contLoop = false; + MJ_ERR_RET(mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build, &contLoop)); if (!contLoop) { if (build->grpRowIdx < 0) { probeGrp->readIdx++; @@ -193,15 +204,27 @@ static int32_t mOuterJoinMergeFullCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + int32_t buildGrpNum = taosArrayGetSize(build->eqGrps); int32_t probeRows = GRP_REMAIN_ROWS(probeGrp); int32_t probeEndIdx = probeGrp->endIdx; if (0 == build->grpIdx && probeRows * build->grpTotalRows <= rowsLeft) { SMJoinGrpRows* pFirstBuild = taosArrayGet(build->eqGrps, 0); + if (NULL == pFirstBuild) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pFirstBuild->readIdx == pFirstBuild->beginIdx) { for (; build->grpIdx < buildGrpNum; ++build->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); buildGrp->readIdx = buildGrp->beginIdx; } @@ -215,6 +238,9 @@ static int32_t mOuterJoinMergeFullCart(SMJoinMergeCtx* pCtx) { probeGrp->endIdx = probeGrp->readIdx; for (; build->grpIdx < buildGrpNum && rowsLeft > 0; ++build->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (rowsLeft >= GRP_REMAIN_ROWS(buildGrp)) { MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); @@ -254,6 +280,10 @@ static int32_t mOuterJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + int32_t buildGrpNum = taosArrayGetSize(build->eqGrps); int32_t probeEndIdx = probeGrp->endIdx; int32_t rowsLeft = pCtx->midBlk->info.capacity; @@ -274,6 +304,10 @@ static int32_t mOuterJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { for (; build->grpIdx < buildGrpNum && rowsLeft > 0; ++build->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (startRowIdx < 0) { startRowIdx = buildGrp->readIdx; } @@ -351,13 +385,17 @@ static int32_t mOuterJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, bool* contLoop) SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + int32_t startRowIdx = 0; //blockDataCleanup(pCtx->midBlk); do { startRowIdx = build->grpRowIdx; - (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + MJ_ERR_RET(mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build, NULL)); if (pCtx->midBlk->info.rows > 0) { if (build->rowBitmapSize > 0) { @@ -406,6 +444,10 @@ static int32_t mOuterJoinHashSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + bool contLoop = false; if (build->grpRowIdx >= 0) { @@ -500,7 +542,15 @@ static bool mLeftJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJoi if (buildGot) { SColumnInfoData* pProbeCol = taosArrayGet(pJoin->probe->blk->pDataBlock, pJoin->probe->primCtx.targetSlotId); + if (NULL == pProbeCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pBuildCol = taosArrayGet(pJoin->build->blk->pDataBlock, pJoin->build->primCtx.targetSlotId); + if (NULL == pBuildCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (MJOIN_BUILD_BLK_OOR(pCtx->ascTs, pProbeCol->pData, pJoin->probe->blkRowIdx, pBuildCol->pData, pJoin->build->blk->info.rows)) { pJoin->build->blkRowIdx = pJoin->build->blk->info.rows; buildGot = false; @@ -649,15 +699,27 @@ static int32_t mInnerJoinMergeCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + int32_t buildGrpNum = taosArrayGetSize(build->eqGrps); int32_t probeRows = GRP_REMAIN_ROWS(probeGrp); int32_t probeEndIdx = probeGrp->endIdx; if (0 == build->grpIdx && probeRows * build->grpTotalRows <= rowsLeft) { SMJoinGrpRows* pFirstBuild = taosArrayGet(build->eqGrps, 0); + if (NULL == pFirstBuild) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pFirstBuild->readIdx == pFirstBuild->beginIdx) { for (; build->grpIdx < buildGrpNum; ++build->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); buildGrp->readIdx = buildGrp->beginIdx; } @@ -671,6 +733,9 @@ static int32_t mInnerJoinMergeCart(SMJoinMergeCtx* pCtx) { probeGrp->endIdx = probeGrp->readIdx; for (; build->grpIdx < buildGrpNum && rowsLeft > 0; ++build->grpIdx) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (rowsLeft >= GRP_REMAIN_ROWS(buildGrp)) { MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->finBlk, true, probeGrp, buildGrp)); @@ -711,9 +776,13 @@ static int32_t mInnerJoinHashCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (build->grpRowIdx >= 0) { - bool contLoop = mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + bool contLoop = false; + MJ_ERR_RET(mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build, &contLoop)); if (build->grpRowIdx < 0) { probeGrp->readIdx++; } @@ -734,7 +803,8 @@ static int32_t mInnerJoinHashCart(SMJoinMergeCtx* pCtx) { if (NULL != pGrp) { build->pHashCurGrp = *pGrp; build->grpRowIdx = 0; - bool contLoop = mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + bool contLoop = false; + MJ_ERR_RET(mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build, &contLoop)); if (!contLoop) { if (build->grpRowIdx < 0) { probeGrp->readIdx++; @@ -772,7 +842,15 @@ static bool mInnerJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJo if (buildGot) { SColumnInfoData* pProbeCol = taosArrayGet(pJoin->probe->blk->pDataBlock, pJoin->probe->primCtx.targetSlotId); + if (NULL == pProbeCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pBuildCol = taosArrayGet(pJoin->build->blk->pDataBlock, pJoin->build->primCtx.targetSlotId); + if (NULL == pBuildCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (MJOIN_BUILD_BLK_OOR(pCtx->ascTs, pProbeCol->pData, pJoin->probe->blkRowIdx, pBuildCol->pData, pJoin->build->blk->info.rows)) { pJoin->build->blkRowIdx = pJoin->build->blk->info.rows; buildGot = false; @@ -903,6 +981,10 @@ static int32_t mFullJoinMergeCart(SMJoinMergeCtx* pCtx) { static FORCE_INLINE int32_t mFullJoinOutputHashRow(SMJoinMergeCtx* pCtx, SMJoinHashGrpRows* pGrpRows, int32_t idx) { SMJoinGrpRows grp = {0}; SMJoinRowPos* pPos = taosArrayGet(pGrpRows->pRows, idx); + if (NULL == pPos) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + grp.blk = pPos->pBlk; grp.readIdx = pPos->pos; grp.endIdx = pPos->pos; @@ -1042,6 +1124,10 @@ static int32_t mFullJoinHandleMergeGrpRemains(SMJoinMergeCtx* pCtx) { grpDone = false; SMJoinGrpRows* pGrpRows = taosArrayGet(build->eqGrps, pNMatch->grpIdx); + if (NULL == pGrpRows) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pGrpRows->allRowsMatch) { continue; } @@ -1283,7 +1369,7 @@ static int32_t mSemiJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, SMJoinGrpRows* p do { blockDataCleanup(pCtx->midBlk); - (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + MJ_ERR_RET(mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build, NULL)); if (pCtx->midBlk->info.rows > 0) { MJ_ERR_RET(mJoinFilterAndKeepSingleRow(pCtx->midBlk, pCtx->pJoin->pPreFilter)); @@ -1312,6 +1398,9 @@ static int32_t mSemiJoinHashSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } size_t bufLen = 0; int32_t probeEndIdx = probeGrp->endIdx; @@ -1343,6 +1432,10 @@ static int32_t mSemiJoinHashFullCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + size_t bufLen = 0; for (; !GRP_DONE(probeGrp) && !BLK_IS_FULL(pCtx->finBlk); ++probeGrp->readIdx) { @@ -1358,7 +1451,7 @@ static int32_t mSemiJoinHashFullCart(SMJoinMergeCtx* pCtx) { build->pHashCurGrp = *(SArray**)pGrp; ASSERT(1 == taosArrayGetSize(build->pHashCurGrp)); build->grpRowIdx = 0; - (void)mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build); + MJ_ERR_RET(mJoinHashGrpCart(pCtx->finBlk, probeGrp, true, probe, build, NULL)); ASSERT(build->grpRowIdx < 0); } @@ -1372,6 +1465,10 @@ static int32_t mSemiJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SMJoinGrpRows* buildGrp = NULL; int32_t buildGrpNum = taosArrayGetSize(build->eqGrps); int32_t probeEndIdx = probeGrp->endIdx; @@ -1387,6 +1484,9 @@ static int32_t mSemiJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { blockDataCleanup(pCtx->midBlk); for (; build->grpIdx < buildGrpNum && rowsLeft > 0; ++build->grpIdx) { buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (rowsLeft >= GRP_REMAIN_ROWS(buildGrp)) { MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->midBlk, true, probeGrp, buildGrp)); @@ -1448,6 +1548,10 @@ static int32_t mSemiJoinMergeFullCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, 0); + if (NULL == buildGrp || NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + int32_t probeRows = GRP_REMAIN_ROWS(probeGrp); int32_t probeEndIdx = probeGrp->endIdx; @@ -1584,6 +1688,10 @@ static int32_t mAntiJoinHashFullCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + size_t bufLen = 0; int32_t probeEndIdx = probeGrp->endIdx; @@ -1616,7 +1724,7 @@ static int32_t mAntiJoinHashGrpCartFilter(SMJoinMergeCtx* pCtx, SMJoinGrpRows* p do { blockDataCleanup(pCtx->midBlk); - (void)mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build); + MJ_ERR_RET(mJoinHashGrpCart(pCtx->midBlk, probeGrp, true, probe, build, NULL)); if (pCtx->midBlk->info.rows > 0) { MJ_ERR_RET(mJoinFilterAndNoKeepRows(pCtx->midBlk, pCtx->pJoin->pPreFilter)); @@ -1642,6 +1750,10 @@ static int32_t mAntiJoinHashSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, 0); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + size_t bufLen = 0; int32_t probeEndIdx = probeGrp->endIdx; @@ -1682,6 +1794,10 @@ static int32_t mAntiJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { SMJoinTableCtx* probe = pCtx->pJoin->probe; SMJoinTableCtx* build = pCtx->pJoin->build; SMJoinGrpRows* probeGrp = taosArrayGet(probe->eqGrps, probe->grpIdx); + if (NULL == probeGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SMJoinGrpRows* buildGrp = NULL; int32_t buildGrpNum = taosArrayGetSize(build->eqGrps); int32_t probeEndIdx = probeGrp->endIdx; @@ -1697,6 +1813,10 @@ static int32_t mAntiJoinMergeSeqCart(SMJoinMergeCtx* pCtx) { blockDataCleanup(pCtx->midBlk); for (; build->grpIdx < buildGrpNum && rowsLeft > 0; ++build->grpIdx) { buildGrp = taosArrayGet(build->eqGrps, build->grpIdx); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (rowsLeft >= GRP_REMAIN_ROWS(buildGrp)) { MJ_ERR_RET(mJoinMergeGrpCart(pCtx->pJoin, pCtx->midBlk, true, probeGrp, buildGrp)); rowsLeft -= GRP_REMAIN_ROWS(buildGrp); @@ -1889,6 +2009,9 @@ int32_t mAsofBackwardAddEqRowsToCache(struct SOperatorInfo* pOperator, SMJoinWin grp.blk = pTable->blk; SColumnInfoData* pCol = taosArrayGet(pTable->blk->pDataBlock, pTable->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (*(int64_t*)colDataGetNumData(pCol, pTable->blkRowIdx) != timestamp) { return TSDB_CODE_SUCCESS; @@ -2249,6 +2372,10 @@ int32_t mAsofForwardTrimCacheBlk(SMJoinWindowCtx* pCtx) { } SMJoinGrpRows* pGrp = taosArrayGet(pCtx->cache.grps, 0); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pGrp->blk == pCtx->cache.outBlk && pCtx->pJoin->build->blkRowIdx > 0) { MJ_ERR_RET(blockDataTrimFirstRows(pGrp->blk, pCtx->pJoin->build->blkRowIdx)); pCtx->pJoin->build->blkRowIdx = 0; @@ -2271,6 +2398,10 @@ int32_t mAsofForwardChkFillGrpCache(SMJoinWindowCtx* pCtx) { int32_t grpNum = taosArrayGetSize(pCache->grps); if (grpNum >= 1) { SMJoinGrpRows* pGrp = taosArrayGet(pCache->grps, grpNum - 1); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pGrp->blk != pCache->outBlk) { int32_t beginIdx = (1 == grpNum) ? build->blkRowIdx : 0; MJ_ERR_RET(blockDataMergeNRows(pCache->outBlk, pGrp->blk, beginIdx, pGrp->blk->info.rows - beginIdx)); @@ -2282,6 +2413,10 @@ int32_t mAsofForwardChkFillGrpCache(SMJoinWindowCtx* pCtx) { } else { (void)taosArrayPop(pCache->grps); pGrp = taosArrayGet(pCache->grps, 0); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + ASSERT(pGrp->blk == pCache->outBlk); //pGrp->endIdx = pGrp->blk->info.rows - pGrp->beginIdx; } @@ -2320,16 +2455,20 @@ int32_t mAsofForwardChkFillGrpCache(SMJoinWindowCtx* pCtx) { return TSDB_CODE_SUCCESS; } -void mAsofForwardUpdateBuildGrpEndIdx(SMJoinWindowCtx* pCtx) { +int32_t mAsofForwardUpdateBuildGrpEndIdx(SMJoinWindowCtx* pCtx) { int32_t grpNum = taosArrayGetSize(pCtx->cache.grps); if (grpNum <= 0) { - return; + return TSDB_CODE_SUCCESS; } SMJoinGrpRows* pGrp = taosArrayGet(pCtx->cache.grps, 0); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (1 == grpNum) { pGrp->endIdx = pGrp->beginIdx + TMIN(pGrp->blk->info.rows - pGrp->beginIdx, pCtx->jLimit) - 1; - return; + return TSDB_CODE_SUCCESS; } ASSERT(pCtx->jLimit > (pGrp->blk->info.rows - pGrp->beginIdx)); @@ -2338,7 +2477,13 @@ void mAsofForwardUpdateBuildGrpEndIdx(SMJoinWindowCtx* pCtx) { int64_t remainRows = pCtx->jLimit - (pGrp->endIdx - pGrp->beginIdx + 1); pGrp = taosArrayGet(pCtx->cache.grps, 1); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + pGrp->endIdx = pGrp->beginIdx + TMIN(pGrp->blk->info.rows, remainRows) - 1; + + return TSDB_CODE_SUCCESS; } int32_t mAsofForwardFillDumpGrpCache(SMJoinWindowCtx* pCtx, bool lastBuildGrp) { @@ -2347,13 +2492,16 @@ int32_t mAsofForwardFillDumpGrpCache(SMJoinWindowCtx* pCtx, bool lastBuildGrp) { MJ_ERR_RET(mAsofForwardChkFillGrpCache(pCtx)); } - mAsofForwardUpdateBuildGrpEndIdx(pCtx); + MJ_ERR_RET(mAsofForwardUpdateBuildGrpEndIdx(pCtx)); return mWinJoinDumpGrpCache(pCtx); } int32_t mAsofForwardSkipEqRows(SMJoinWindowCtx* pCtx, SMJoinTableCtx* pTable, int64_t timestamp, bool* wholeBlk) { SColumnInfoData* pCol = taosArrayGet(pTable->blk->pDataBlock, pTable->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (*(int64_t*)colDataGetNumData(pCol, pTable->blkRowIdx) != timestamp) { *wholeBlk = false; @@ -2513,6 +2661,10 @@ static int32_t mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo if (buildGot) { SColumnInfoData* pProbeCol = taosArrayGet(pJoin->probe->blk->pDataBlock, pJoin->probe->primCtx.targetSlotId); SColumnInfoData* pBuildCol = taosArrayGet(pJoin->build->blk->pDataBlock, pJoin->build->primCtx.targetSlotId); + if (NULL == pProbeCol || NULL == pBuildCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (MJOIN_BUILD_BLK_OOR(pCtx->ascTs, pProbeCol->pData, pJoin->probe->blkRowIdx, pBuildCol->pData, pJoin->build->blk->info.rows)) { pJoin->build->blkRowIdx = pJoin->build->blk->info.rows; MJOIN_POP_TB_BLK(&pCtx->cache); @@ -2674,6 +2826,10 @@ static int32_t mWinJoinCloneCacheBlk(SMJoinWindowCtx* pCtx) { } SMJoinGrpRows* pGrp = (SMJoinGrpRows*)taosArrayGetLast(pGrpArray); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (!pGrp->clonedBlk) { if (0 == pGrp->beginIdx) { pGrp->blk = createOneDataBlock(pGrp->blk, true); @@ -2720,6 +2876,10 @@ static int32_t mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJ if (buildGot && pCtx->forwardRowsAcq) { SColumnInfoData* pProbeCol = taosArrayGet(pJoin->probe->blk->pDataBlock, pJoin->probe->primCtx.targetSlotId); SColumnInfoData* pBuildCol = taosArrayGet(pJoin->build->blk->pDataBlock, pJoin->build->primCtx.targetSlotId); + if (NULL == pProbeCol || NULL == pBuildCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (MJOIN_BUILD_BLK_OOR(pCtx->ascTs, pProbeCol->pData, pJoin->probe->blkRowIdx, pBuildCol->pData, pJoin->build->blk->info.rows)) { pJoin->build->blkRowIdx = pJoin->build->blk->info.rows; buildGot = false; @@ -2739,6 +2899,10 @@ static int32_t mWinJoinRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo* pJ int32_t mWinJoinTryAddWinBeginBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, SMJoinTableCtx* build, bool* winEnd) { SSDataBlock* pBlk = build->blk; SColumnInfoData* pCol = taosArrayGet(pBlk->pDataBlock, build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pCtx->ascTs) { if (*((int64_t*)pCol->pData + pBlk->info.rows - 1) < pCtx->winBeginTs) { *winEnd = false; @@ -2759,6 +2923,9 @@ int32_t mWinJoinTryAddWinBeginBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, if (*((int64_t*)pCol->pData + build->blkRowIdx) <= pCtx->winEndTs) { SMJoinGrpRows grp = {.blk = pBlk, .beginIdx = build->blkRowIdx}; SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = pGrp->beginIdx; @@ -2795,7 +2962,10 @@ int32_t mWinJoinTryAddWinBeginBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, if (*((int64_t*)pCol->pData + build->blkRowIdx) >= pCtx->winBeginTs) { SMJoinGrpRows grp = {.blk = pBlk, .beginIdx = build->blkRowIdx}; SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); - + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } + pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = pGrp->beginIdx; @@ -2864,7 +3034,15 @@ int32_t mWinJoinMoveAscWinBegin(SMJoinWindowCtx* pCtx) { int32_t grpNum = taosArrayGetSize(pCache->grps); for (int32_t i = 0; i < grpNum; ++i) { SMJoinGrpRows* pGrp = taosArrayGet(pCache->grps, i); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pCol = taosArrayGet(pGrp->blk->pDataBlock, pCtx->pJoin->build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (*((int64_t*)pCol->pData + pGrp->blk->info.rows - 1) < pCtx->winBeginTs) { mWinJoinPopFrontGroup(pCtx, pGrp); grpNum--; @@ -2900,6 +3078,7 @@ int32_t mWinJoinMoveAscWinBegin(SMJoinWindowCtx* pCtx) { pCache->grps = pCache->grpsQueue; pCache->rowNum = 1; pCache->grpsQueue = NULL; + continue; } @@ -2916,7 +3095,15 @@ int32_t mWinJoinMoveDescWinBegin(SMJoinWindowCtx* pCtx) { int32_t grpNum = taosArrayGetSize(pCache->grps); for (int32_t i = 0; i < grpNum; ++i) { SMJoinGrpRows* pGrp = taosArrayGet(pCache->grps, i); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pCol = taosArrayGet(pGrp->blk->pDataBlock, pCtx->pJoin->build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (*((int64_t*)pCol->pData + pGrp->blk->info.rows - 1) > pCtx->winEndTs) { mWinJoinPopFrontGroup(pCtx, pGrp); @@ -2953,6 +3140,7 @@ int32_t mWinJoinMoveDescWinBegin(SMJoinWindowCtx* pCtx) { pCache->grps = pCache->grpsQueue; pCache->rowNum = 1; pCache->grpsQueue = NULL; + continue; } @@ -2986,6 +3174,10 @@ void mWinJoinRemoveOverflowGrp(SMJoinWindowCtx* pCtx) { int32_t mWinJoinTryAddWinEndBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, SMJoinTableCtx* build, bool* winEnd) { SSDataBlock* pBlk = build->blk; SColumnInfoData* pCol = taosArrayGet(pBlk->pDataBlock, build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SMJoinGrpRows grp = {.blk = pBlk, .beginIdx = build->blkRowIdx}; if (pCtx->ascTs) { @@ -3001,6 +3193,9 @@ int32_t mWinJoinTryAddWinEndBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, S if (*((int64_t*)pCol->pData + pBlk->info.rows - 1) <= pCtx->winEndTs) { SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = pBlk->info.rows - 1; @@ -3028,6 +3223,9 @@ int32_t mWinJoinTryAddWinEndBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, S } SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = build->blkRowIdx - 1; @@ -3048,6 +3246,9 @@ int32_t mWinJoinTryAddWinEndBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, S if (*((int64_t*)pCol->pData + pBlk->info.rows - 1) >= pCtx->winBeginTs) { SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = pBlk->info.rows - 1; @@ -3070,7 +3271,10 @@ int32_t mWinJoinTryAddWinEndBlk(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache, S } SMJoinGrpRows* pGrp = taosArrayPush(pCache->grps, &grp); - + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } + pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = build->blkRowIdx - 1; @@ -3130,7 +3334,15 @@ int32_t mWinJoinMoveAscWinEnd(SMJoinWindowCtx* pCtx) { } SMJoinGrpRows* pGrp = taosArrayGetLast(pCache->grps); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pCol = taosArrayGet(pGrp->blk->pDataBlock, pCtx->pJoin->build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (*((int64_t*)pCol->pData + pGrp->blk->info.rows - 1) <= pCtx->winEndTs) { pCache->rowNum += pGrp->blk->info.rows - pGrp->endIdx - 1; if (pCache->rowNum >= pCtx->jLimit) { @@ -3173,7 +3385,15 @@ int32_t mWinJoinMoveDescWinEnd(SMJoinWindowCtx* pCtx) { } SMJoinGrpRows* pGrp = taosArrayGetLast(pCache->grps); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pCol = taosArrayGet(pGrp->blk->pDataBlock, pCtx->pJoin->build->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (*((int64_t*)pCol->pData + pGrp->blk->info.rows - 1) >= pCtx->winBeginTs) { pCache->rowNum += pGrp->blk->info.rows - pGrp->endIdx - 1; pGrp->endIdx = pGrp->blk->info.rows - 1; @@ -3217,6 +3437,10 @@ int32_t mWinJoinTrimDumpGrpCache(SMJoinWindowCtx* pCtx) { int32_t buildGrpNum = taosArrayGetSize(cache->grps); for (int32_t i = 0; i < buildGrpNum && skipRows > 0; ++i) { SMJoinGrpRows* buildGrp = taosArrayGet(cache->grps, i); + if (NULL == buildGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (skipRows >= GRP_REMAIN_ROWS(buildGrp)) { skipRows -= GRP_REMAIN_ROWS(buildGrp); mWinJoinPopFrontGroup(pCtx, buildGrp); @@ -3318,7 +3542,7 @@ int32_t mJoinInitWindowCache(SMJoinWinCache* pCache, SMJoinOperatorInfo* pJoin, pCache->grps = taosArrayInit(2, sizeof(SMJoinGrpRows)); if (NULL == pCache->grps) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } //taosArrayReserve(pTable->eqGrps, 1); @@ -3392,6 +3616,10 @@ int32_t mJoinInitWindowCtx(SMJoinOperatorInfo* pJoin, SSortMergeJoinPhysiNode* p } pCtx->finBlk = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc); + if (NULL == pCtx->finBlk) { + MJ_ERR_RET(terrno); + } + MJ_ERR_RET(blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode))); pCtx->blkThreshold = pCtx->finBlk->info.capacity * MJOIN_BLK_THRESHOLD_RATIO; @@ -3430,6 +3658,10 @@ int32_t mJoinInitMergeCtx(SMJoinOperatorInfo* pJoin, SSortMergeJoinPhysiNode* pJ } pCtx->finBlk = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc); + if (NULL == pCtx->finBlk) { + MJ_ERR_RET(terrno); + } + ASSERT(pJoinNode->node.pOutputDataBlockDesc->totalRowSize > 0); MJ_ERR_RET(blockDataEnsureCapacity(pCtx->finBlk, mJoinGetFinBlkCapacity(pJoin, pJoinNode))); diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index 9db2c7d300..8d94841847 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -30,6 +30,9 @@ int32_t mJoinBuildEqGrp(SMJoinTableCtx* pTable, int64_t timestamp, bool* wholeBlk, SMJoinGrpRows* pGrp) { SColumnInfoData* pCol = taosArrayGet(pTable->blk->pDataBlock, pTable->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } pGrp->beginIdx = pTable->blkRowIdx; pGrp->readIdx = pTable->blkRowIdx; @@ -59,12 +62,16 @@ int32_t mJoinBuildEqGrp(SMJoinTableCtx* pTable, int64_t timestamp, bool* wholeBl } -void mJoinTrimKeepFirstRow(SSDataBlock* pBlock) { +int32_t mJoinTrimKeepFirstRow(SSDataBlock* pBlock) { int32_t bmLen = BitmapLen(pBlock->info.rows); size_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* pDst = taosArrayGet(pBlock->pDataBlock, i); + if (NULL == pDst) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + // it is a reserved column for scalar function, and no data in this column yet. if (pDst->pData == NULL || (IS_VAR_DATA_TYPE(pDst->info.type) && pDst->varmeta.length == 0)) { continue; @@ -86,7 +93,7 @@ void mJoinTrimKeepFirstRow(SSDataBlock* pBlock) { } else { bool isNull = colDataIsNull_f(pDst->nullbitmap, 0); - memset(pDst->nullbitmap, 0, bmLen); + TAOS_MEMSET(pDst->nullbitmap, 0, bmLen); if (isNull) { colDataSetNull_f(pDst->nullbitmap, 0); } @@ -94,11 +101,14 @@ void mJoinTrimKeepFirstRow(SSDataBlock* pBlock) { } pBlock->info.rows = 1; + + return TSDB_CODE_SUCCESS; } -void mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBoolList) { +int32_t mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBoolList) { // int32_t totalRows = pBlock->info.rows; + int32_t code = TSDB_CODE_SUCCESS; int32_t bmLen = BitmapLen(totalRows); char* pBitmap = NULL; int32_t maxRows = 0; @@ -106,6 +116,10 @@ void mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBo for (int32_t i = 0; i < numOfCols; ++i) { SColumnInfoData* pDst = taosArrayGet(pBlock->pDataBlock, i); + if (NULL == pDst) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + // it is a reserved column for scalar function, and no data in this column yet. if (pDst->pData == NULL || (IS_VAR_DATA_TYPE(pDst->info.type) && pDst->varmeta.length == 0)) { continue; @@ -135,8 +149,12 @@ void mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBo len = varDataTLen(p1); } char* p2 = taosMemoryMalloc(len); - memcpy(p2, p1, len); - colDataSetVal(pDst, numOfRows, p2, false); + TAOS_MEMCPY(p2, p1, len); + code = colDataSetVal(pDst, numOfRows, p2, false); + if (code) { + taosMemoryFreeClear(p2); + MJ_ERR_RET(terrno); + } taosMemoryFree(p2); } numOfRows += 1; @@ -150,10 +168,13 @@ void mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBo } else { if (pBitmap == NULL) { pBitmap = taosMemoryCalloc(1, bmLen); + if (NULL == pBitmap) { + MJ_ERR_RET(terrno); + } } - memcpy(pBitmap, pDst->nullbitmap, bmLen); - memset(pDst->nullbitmap, 0, bmLen); + TAOS_MEMCPY(pBitmap, pDst->nullbitmap, bmLen); + TAOS_MEMSET(pDst->nullbitmap, 0, bmLen); int32_t j = 0; @@ -243,6 +264,8 @@ void mJoinTrimKeepOneRow(SSDataBlock* pBlock, int32_t totalRows, const bool* pBo if (pBitmap != NULL) { taosMemoryFree(pBitmap); } + + return TSDB_CODE_SUCCESS; } @@ -290,8 +313,10 @@ int32_t mJoinFilterAndMarkHashRows(SSDataBlock* pBlock, SFilterInfo* pFilterInfo code = TSDB_CODE_SUCCESS; _err: + colDataDestroy(p); taosMemoryFree(p); + return code; } @@ -300,18 +325,19 @@ int32_t mJoinFilterAndMarkRows(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SM return TSDB_CODE_SUCCESS; } + int32_t code = TSDB_CODE_SUCCESS; SFilterColumnParam param1 = {.numOfCols = taosArrayGetSize(pBlock->pDataBlock), .pDataBlock = pBlock->pDataBlock}; SColumnInfoData* p = NULL; - int32_t code = filterSetDataFromSlotId(pFilterInfo, ¶m1); + code = filterSetDataFromSlotId(pFilterInfo, ¶m1); if (code != TSDB_CODE_SUCCESS) { - goto _err; + goto _return; } int32_t status = 0; code = filterExecute(pFilterInfo, pBlock, &p, NULL, param1.numOfCols, &status); if (code != TSDB_CODE_SUCCESS) { - goto _err; + goto _return; } int32_t rowNum = 0; @@ -320,6 +346,9 @@ int32_t mJoinFilterAndMarkRows(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SM if (status == FILTER_RESULT_ALL_QUALIFIED || status == FILTER_RESULT_PARTIAL_QUALIFIED) { for (int32_t i = startGrpIdx; i < grpNum && rowNum < pBlock->info.rows; startRowIdx = 0, ++i) { SMJoinGrpRows* buildGrp = taosArrayGet(build->eqGrps, i); + if (NULL == buildGrp) { + MJ_ERR_JRET(terrno); + } if (buildGrp->allRowsMatch) { rowNum += buildGrp->endIdx - startRowIdx + 1; continue; @@ -350,9 +379,11 @@ int32_t mJoinFilterAndMarkRows(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SM code = TSDB_CODE_SUCCESS; -_err: +_return: + colDataDestroy(p); taosMemoryFree(p); + return code; } @@ -366,29 +397,31 @@ int32_t mJoinFilterAndKeepSingleRow(SSDataBlock* pBlock, SFilterInfo* pFilterInf int32_t code = filterSetDataFromSlotId(pFilterInfo, ¶m1); if (code != TSDB_CODE_SUCCESS) { - goto _err; + goto _return; } int32_t status = 0; code = filterExecute(pFilterInfo, pBlock, &p, NULL, param1.numOfCols, &status); if (code != TSDB_CODE_SUCCESS) { - goto _err; + goto _return; } if (status == FILTER_RESULT_ALL_QUALIFIED) { pBlock->info.rows = 1; - mJoinTrimKeepFirstRow(pBlock); + MJ_ERR_JRET(mJoinTrimKeepFirstRow(pBlock)); } else if (status == FILTER_RESULT_NONE_QUALIFIED) { pBlock->info.rows = 0; } else if (status == FILTER_RESULT_PARTIAL_QUALIFIED) { - mJoinTrimKeepOneRow(pBlock, pBlock->info.rows, (bool*)p->pData); + MJ_ERR_JRET(mJoinTrimKeepOneRow(pBlock, pBlock->info.rows, (bool*)p->pData)); } code = TSDB_CODE_SUCCESS; -_err: +_return: + colDataDestroy(p); taosMemoryFree(p); + return code; } @@ -418,8 +451,10 @@ int32_t mJoinFilterAndNoKeepRows(SSDataBlock* pBlock, SFilterInfo* pFilterInfo) code = TSDB_CODE_SUCCESS; _err: + colDataDestroy(p); taosMemoryFree(p); + return code; } @@ -480,12 +515,20 @@ int32_t mJoinNonEqGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool app SMJoinColMap* pFirstCol = probe->finCols + c; SColumnInfoData* pInCol = taosArrayGet(pGrp->blk->pDataBlock, pFirstCol->srcSlot); SColumnInfoData* pOutCol = taosArrayGet(pRes->pDataBlock, pFirstCol->dstSlot); - colDataAssignNRows(pOutCol, currRows, pInCol, pGrp->readIdx, firstRows); + if (NULL == pInCol || NULL == pOutCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + + MJ_ERR_RET(colDataAssignNRows(pOutCol, currRows, pInCol, pGrp->readIdx, firstRows)); } for (int32_t c = 0; c < build->finNum; ++c) { SMJoinColMap* pSecondCol = build->finCols + c; SColumnInfoData* pOutCol = taosArrayGet(pRes->pDataBlock, pSecondCol->dstSlot); + if (NULL == pOutCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + colDataSetNItemsNull(pOutCol, currRows, firstRows); } @@ -536,6 +579,10 @@ int32_t mJoinMergeGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool app SMJoinColMap* pFirstCol = probe->finCols + c; SColumnInfoData* pInCol = taosArrayGet(pFirst->blk->pDataBlock, pFirstCol->srcSlot); SColumnInfoData* pOutCol = taosArrayGet(pRes->pDataBlock, pFirstCol->dstSlot); + if (NULL == pInCol || NULL == pOutCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + for (int32_t r = 0; r < firstRows; ++r) { if (colDataIsNull_s(pInCol, pFirst->readIdx + r)) { colDataSetNItemsNull(pOutCol, currRows + r * secondRows, secondRows); @@ -543,7 +590,7 @@ int32_t mJoinMergeGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool app ASSERT(pRes->info.capacity >= (pRes->info.rows + firstRows * secondRows)); uint32_t startOffset = (IS_VAR_DATA_TYPE(pOutCol->info.type)) ? pOutCol->varmeta.length : ((currRows + r * secondRows) * pOutCol->info.bytes); ASSERT((startOffset + 1 * pOutCol->info.bytes) <= pRes->info.capacity * pOutCol->info.bytes); - colDataSetNItems(pOutCol, currRows + r * secondRows, colDataGetData(pInCol, pFirst->readIdx + r), secondRows, true); + MJ_ERR_RET(colDataSetNItems(pOutCol, currRows + r * secondRows, colDataGetData(pInCol, pFirst->readIdx + r), secondRows, true)); } } } @@ -552,28 +599,40 @@ int32_t mJoinMergeGrpCart(SMJoinOperatorInfo* pJoin, SSDataBlock* pRes, bool app SMJoinColMap* pSecondCol = build->finCols + c; SColumnInfoData* pInCol = taosArrayGet(pSecond->blk->pDataBlock, pSecondCol->srcSlot); SColumnInfoData* pOutCol = taosArrayGet(pRes->pDataBlock, pSecondCol->dstSlot); + if (NULL == pInCol || NULL == pOutCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + for (int32_t r = 0; r < firstRows; ++r) { - colDataAssignNRows(pOutCol, currRows + r * secondRows, pInCol, pSecond->readIdx, secondRows); + MJ_ERR_RET(colDataAssignNRows(pOutCol, currRows + r * secondRows, pInCol, pSecond->readIdx, secondRows)); } } pRes->info.rows = append ? (pRes->info.rows + firstRows * secondRows) : firstRows * secondRows; + return TSDB_CODE_SUCCESS; } -bool mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, SMJoinTableCtx* probe, SMJoinTableCtx* build) { +int32_t mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, SMJoinTableCtx* probe, SMJoinTableCtx* build, bool* cont) { + if (NULL != cont) { + *cont = false; + } + int32_t rowsLeft = append ? (pBlk->info.capacity - pBlk->info.rows) : pBlk->info.capacity; if (rowsLeft <= 0) { - return false; + return TSDB_CODE_SUCCESS; } int32_t buildGrpRows = taosArrayGetSize(build->pHashCurGrp); int32_t grpRows = buildGrpRows - build->grpRowIdx; if (grpRows <= 0 || build->grpRowIdx < 0) { build->grpRowIdx = -1; - return true; + if (NULL != cont) { + *cont = true; + } + return TSDB_CODE_SUCCESS; } int32_t actRows = TMIN(grpRows, rowsLeft); @@ -583,10 +642,14 @@ bool mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, S SMJoinColMap* pFirstCol = probe->finCols + c; SColumnInfoData* pInCol = taosArrayGet(probeGrp->blk->pDataBlock, pFirstCol->srcSlot); SColumnInfoData* pOutCol = taosArrayGet(pBlk->pDataBlock, pFirstCol->dstSlot); + if (NULL == pInCol || NULL == pOutCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (colDataIsNull_s(pInCol, probeGrp->readIdx)) { colDataSetNItemsNull(pOutCol, currRows, actRows); } else { - colDataSetNItems(pOutCol, currRows, colDataGetData(pInCol, probeGrp->readIdx), actRows, true); + MJ_ERR_RET(colDataSetNItems(pOutCol, currRows, colDataGetData(pInCol, probeGrp->readIdx), actRows, true)); } } @@ -595,8 +658,16 @@ bool mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, S SColumnInfoData* pOutCol = taosArrayGet(pBlk->pDataBlock, pSecondCol->dstSlot); for (int32_t r = 0; r < actRows; ++r) { SMJoinRowPos* pRow = taosArrayGet(build->pHashCurGrp, build->grpRowIdx + r); + if (NULL == pRow) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SColumnInfoData* pInCol = taosArrayGet(pRow->pBlk->pDataBlock, pSecondCol->srcSlot); - colDataAssignNRows(pOutCol, currRows + r, pInCol, pRow->pos, 1); + if (NULL == pInCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + + MJ_ERR_RET(colDataAssignNRows(pOutCol, currRows + r, pInCol, pRow->pos, 1)); } } @@ -609,16 +680,24 @@ bool mJoinHashGrpCart(SSDataBlock* pBlk, SMJoinGrpRows* probeGrp, bool append, S } if (actRows == rowsLeft) { - return false; + return TSDB_CODE_SUCCESS; } - return true; + if (NULL != cont) { + *cont = true; + } + + return TSDB_CODE_SUCCESS; } int32_t mJoinAllocGrpRowBitmap(SMJoinTableCtx* pTb) { int32_t grpNum = taosArrayGetSize(pTb->eqGrps); for (int32_t i = 0; i < grpNum; ++i) { SMJoinGrpRows* pGrp = (SMJoinGrpRows*)taosArrayGet(pTb->eqGrps, i); + if (NULL == pGrp) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + MJ_ERR_RET(mJoinGetRowBitmapOffset(pTb, pGrp->endIdx - pGrp->beginIdx + 1, &pGrp->rowBitmapOffset)); pGrp->rowMatchNum = 0; } @@ -632,9 +711,9 @@ int32_t mJoinProcessEqualGrp(SMJoinMergeCtx* pCtx, int64_t timestamp, bool lastB pCtx->lastEqGrp = true; - mJoinBuildEqGroups(pJoin->probe, timestamp, NULL, true); + MJ_ERR_RET(mJoinBuildEqGroups(pJoin->probe, timestamp, NULL, true)); if (!lastBuildGrp) { - mJoinRetrieveEqGrpRows(pJoin, pJoin->build, timestamp); + MJ_ERR_RET(mJoinRetrieveEqGrpRows(pJoin, pJoin->build, timestamp)); } else { pJoin->build->grpIdx = 0; } @@ -661,7 +740,7 @@ int32_t mJoinProcessEqualGrp(SMJoinMergeCtx* pCtx, int64_t timestamp, bool lastB pCtx->hashJoin = false; if (!lastBuildGrp && pJoin->build->rowBitmapSize > 0) { - mJoinAllocGrpRowBitmap(pJoin->build); + MJ_ERR_RET(mJoinAllocGrpRowBitmap(pJoin->build)); } return (*pCtx->mergeCartFp)(pCtx); @@ -721,7 +800,7 @@ int32_t mJoinInitDownstreamInfo(SMJoinOperatorInfo* pInfo, SOperatorInfo*** pDow *newDownstreams = true; *pDownstream = mJoinBuildDownstreams(pInfo, *pDownstream); if (NULL == *pDownstream) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } *numOfDownstream = 2; } @@ -732,7 +811,7 @@ int32_t mJoinInitDownstreamInfo(SMJoinOperatorInfo* pInfo, SOperatorInfo*** pDow static int32_t mJoinInitPrimKeyInfo(SMJoinTableCtx* pTable, int32_t slotId) { pTable->primCol = taosMemoryMalloc(sizeof(SMJoinColInfo)); if (NULL == pTable->primCol) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pTable->primCol->srcSlot = slotId; @@ -745,7 +824,7 @@ static int32_t mJoinInitColsInfo(int32_t* colNum, int64_t* rowSize, SMJoinColInf *pCols = taosMemoryMalloc((*colNum) * sizeof(SMJoinColInfo)); if (NULL == *pCols) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } *rowSize = 0; @@ -779,7 +858,7 @@ static int32_t mJoinInitKeyColsInfo(SMJoinTableCtx* pTable, SNodeList* pList, bo pTable->keyBuf = taosMemoryMalloc(TMAX(rowSize, pTable->keyNullSize)); if (NULL == pTable->keyBuf) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } @@ -790,7 +869,7 @@ static int32_t mJoinInitKeyColsInfo(SMJoinTableCtx* pTable, SNodeList* pList, bo static int32_t mJoinInitFinColsInfo(SMJoinTableCtx* pTable, SNodeList* pList) { pTable->finCols = taosMemoryMalloc(LIST_LENGTH(pList) * sizeof(SMJoinColMap)); if (NULL == pTable->finCols) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } int32_t i = 0; @@ -837,8 +916,20 @@ static int32_t mJoinInitPrimExprCtx(SNode* pNode, SMJoinPrimExprCtx* pCtx, SMJoi } SValueNode* pUnit = (SValueNode*)nodesListGetNode(pFunc->pParameterList, 1); - SValueNode* pCurrTz = (5 == pFunc->pParameterList->length) ? (SValueNode*)nodesListGetNode(pFunc->pParameterList, 2) : NULL; + if (NULL == pUnit) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } + SValueNode* pCurrTz = NULL; + if (5 == pFunc->pParameterList->length){ + pCurrTz = (SValueNode*)nodesListGetNode(pFunc->pParameterList, 2); + if (NULL == pCurrTz) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } + } SValueNode* pTimeZone = (5 == pFunc->pParameterList->length) ? (SValueNode*)nodesListGetNode(pFunc->pParameterList, 4) : (SValueNode*)nodesListGetNode(pFunc->pParameterList, 3); + if (NULL == pTimeZone) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } pCtx->truncateUnit = pUnit->typeData; if ((NULL == pCurrTz || 1 == pCurrTz->typeData) && pCtx->truncateUnit >= (86400 * TSDB_TICK_PER_SECOND(pFunc->node.resType.precision))) { @@ -859,24 +950,32 @@ static int32_t mJoinInitTableInfo(SMJoinOperatorInfo* pJoin, SSortMergeJoinPhysi MJ_ERR_RET(mJoinInitKeyColsInfo(pTable, (0 == idx) ? pJoinNode->pEqLeft : pJoinNode->pEqRight, JOIN_TYPE_FULL == pJoin->joinType)); MJ_ERR_RET(mJoinInitFinColsInfo(pTable, pJoinNode->pTargets)); - memcpy(&pTable->inputStat, pStat, sizeof(*pStat)); + TAOS_MEMCPY(&pTable->inputStat, pStat, sizeof(*pStat)); pTable->eqGrps = taosArrayInit(8, sizeof(SMJoinGrpRows)); - //taosArrayReserve(pTable->eqGrps, 1); + if (NULL == pTable->eqGrps) { + return terrno; + } if (E_JOIN_TB_BUILD == pTable->type) { pTable->createdBlks = taosArrayInit(8, POINTER_BYTES); + if (NULL == pTable->createdBlks) { + return terrno; + } pTable->pGrpArrays = taosArrayInit(32, POINTER_BYTES); + if (NULL == pTable->pGrpArrays) { + return terrno; + } pTable->pGrpHash = tSimpleHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY)); - if (NULL == pTable->createdBlks || NULL == pTable->pGrpArrays || NULL == pTable->pGrpHash) { - return TSDB_CODE_OUT_OF_MEMORY; + if (NULL == pTable->pGrpHash) { + return terrno; } if (pJoin->pFPreFilter && IS_FULL_OUTER_JOIN(pJoin->joinType, pJoin->subType)) { pTable->rowBitmapSize = MJOIN_ROW_BITMAP_SIZE; pTable->pRowBitmap = taosMemoryMalloc(pTable->rowBitmapSize); if (NULL == pTable->pRowBitmap) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } @@ -945,7 +1044,15 @@ int32_t mJoinLaunchPrimExpr(SSDataBlock* pBlock, SMJoinTableCtx* pTable) { SMJoinPrimExprCtx* pCtx = &pTable->primCtx; SColumnInfoData* pPrimIn = taosArrayGet(pBlock->pDataBlock, pTable->primCol->srcSlot); + if (NULL == pPrimIn) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } + SColumnInfoData* pPrimOut = taosArrayGet(pBlock->pDataBlock, pTable->primCtx.targetSlotId); + if (NULL == pPrimOut) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } + if (0 != pCtx->timezoneUnit) { for (int32_t i = 0; i < pBlock->info.rows; ++i) { ((int64_t*)pPrimOut->pData)[i] = ((int64_t*)pPrimIn->pData)[i] - (((int64_t*)pPrimIn->pData)[i] + pCtx->timezoneUnit) % pCtx->truncateUnit; @@ -961,6 +1068,7 @@ int32_t mJoinLaunchPrimExpr(SSDataBlock* pBlock, SMJoinTableCtx* pTable) { SSDataBlock* mJoinGrpRetrieveImpl(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable) { SSDataBlock* pTmp = NULL; + int32_t code = TSDB_CODE_SUCCESS; int32_t dsIdx = pTable->downStreamIdx; if (E_JOIN_TB_PROBE == pTable->type) { if (pTable->remainInBlk) { @@ -1028,7 +1136,12 @@ SSDataBlock* mJoinGrpRetrieveImpl(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTa _return: - mJoinLaunchPrimExpr(pTmp, pTable); + code = mJoinLaunchPrimExpr(pTmp, pTable); + if (code) { + pJoin->errCode = code; + T_LONG_JMP(pJoin->pOperator->pTaskInfo->env, pJoin->errCode); + } + return pTmp; } @@ -1041,7 +1154,11 @@ static FORCE_INLINE SSDataBlock* mJoinRetrieveImpl(SMJoinOperatorInfo* pJoin, SM if (NULL == pTmp) { pTable->dsFetchDone = true; } else { - mJoinLaunchPrimExpr(pTmp, pTable); + int32_t code = mJoinLaunchPrimExpr(pTmp, pTable); + if (code) { + pJoin->errCode = code; + T_LONG_JMP(pJoin->pOperator->pTaskInfo->env, pJoin->errCode); + } } return pTmp; @@ -1107,7 +1224,7 @@ bool mJoinRetrieveBlk(SMJoinOperatorInfo* pJoin, int32_t* pIdx, SSDataBlock** pp static void mJoinDestroyCreatedBlks(SArray* pCreatedBlks) { int32_t blkNum = taosArrayGetSize(pCreatedBlks); for (int32_t i = 0; i < blkNum; ++i) { - blockDataDestroy(*(SSDataBlock**)TARRAY_GET_ELEM(pCreatedBlks, i)); + (void)blockDataDestroy(*(SSDataBlock**)TARRAY_GET_ELEM(pCreatedBlks, i)); } taosArrayClear(pCreatedBlks); } @@ -1119,12 +1236,12 @@ int32_t mJoinGetRowBitmapOffset(SMJoinTableCtx* pTable, int32_t rowNum, int32_t int64_t newSize = reqSize * 1.1; pTable->pRowBitmap = taosMemoryRealloc(pTable->pRowBitmap, newSize); if (NULL == pTable->pRowBitmap) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pTable->rowBitmapSize = newSize; } - memset(pTable->pRowBitmap + pTable->rowBitmapOffset, 0xFFFFFFFF, bitmapLen); + TAOS_MEMSET(pTable->pRowBitmap + pTable->rowBitmapOffset, 0xFFFFFFFF, bitmapLen); *rowBitmapOffset = pTable->rowBitmapOffset; pTable->rowBitmapOffset += bitmapLen; @@ -1140,12 +1257,16 @@ void mJoinResetForBuildTable(SMJoinTableCtx* pTable) { taosArrayClear(pTable->eqGrps); if (pTable->rowBitmapSize > 0) { pTable->rowBitmapOffset = 1; - memset(&pTable->nMatchCtx, 0, sizeof(pTable->nMatchCtx)); + TAOS_MEMSET(&pTable->nMatchCtx, 0, sizeof(pTable->nMatchCtx)); } } int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* wholeBlk, bool restart) { SColumnInfoData* pCol = taosArrayGet(pTable->blk->pDataBlock, pTable->primCtx.targetSlotId); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + SMJoinGrpRows* pGrp = NULL; int32_t code = TSDB_CODE_SUCCESS; @@ -1159,7 +1280,10 @@ int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* whol bool keepGrp = true; pGrp = taosArrayReserve(pTable->eqGrps, 1); - + if (NULL == pGrp) { + MJ_ERR_RET(terrno); + } + pGrp->beginIdx = pTable->blkRowIdx++; pGrp->readIdx = pGrp->beginIdx; pGrp->endIdx = pGrp->beginIdx; @@ -1209,10 +1333,10 @@ int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* whol if (0 == pGrp->beginIdx && pTable->multiEqGrpRows && 0 == pTable->eqRowLimit) { pGrp->blk = createOneDataBlock(pTable->blk, true); if (NULL == pGrp->blk) { - MJ_ERR_JRET(terrno); + MJ_ERR_RET(terrno); } if (NULL == taosArrayPush(pTable->createdBlks, &pGrp->blk)) { - MJ_ERR_JRET(terrno); + MJ_ERR_RET(terrno); } } else { if (!pTable->multiEqGrpRows) { @@ -1236,10 +1360,16 @@ int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* whol pTable->eqRowNum += rowNum; pGrp->blk = blockDataExtractBlock(pTable->blk, pGrp->beginIdx, rowNum); + if (NULL == pGrp->blk) { + MJ_ERR_RET(terrno); + } + pGrp->endIdx -= pGrp->beginIdx; pGrp->beginIdx = 0; pGrp->readIdx = 0; - taosArrayPush(pTable->createdBlks, &pGrp->blk); + if (NULL == taosArrayPush(pTable->createdBlks, &pGrp->blk)) { + MJ_ERR_RET(terrno); + } } } @@ -1248,19 +1378,19 @@ int32_t mJoinBuildEqGroups(SMJoinTableCtx* pTable, int64_t timestamp, bool* whol _return: if (pTable->noKeepEqGrpRows || !keepGrp || (!pTable->multiEqGrpRows && !restart)) { - taosArrayPop(pTable->eqGrps); + (void)taosArrayPop(pTable->eqGrps); } else { pTable->grpTotalRows += pGrp->endIdx - pGrp->beginIdx + 1; } - return TSDB_CODE_SUCCESS; + return code; } int32_t mJoinRetrieveEqGrpRows(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable, int64_t timestamp) { bool wholeBlk = false; - mJoinBuildEqGroups(pTable, timestamp, &wholeBlk, true); + MJ_ERR_RET(mJoinBuildEqGroups(pTable, timestamp, &wholeBlk, true)); while (wholeBlk && !pTable->dsFetchDone) { pTable->blk = (*pJoin->retrieveFp)(pJoin, pTable); @@ -1273,7 +1403,7 @@ int32_t mJoinRetrieveEqGrpRows(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable } wholeBlk = false; - mJoinBuildEqGroups(pTable, timestamp, &wholeBlk, false); + MJ_ERR_RET(mJoinBuildEqGroups(pTable, timestamp, &wholeBlk, false)); } return TSDB_CODE_SUCCESS; @@ -1282,6 +1412,10 @@ int32_t mJoinRetrieveEqGrpRows(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable int32_t mJoinSetKeyColsData(SSDataBlock* pBlock, SMJoinTableCtx* pTable) { for (int32_t i = 0; i < pTable->keyNum; ++i) { SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, pTable->keyCols[i].srcSlot); + if (NULL == pCol) { + MJ_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } + if (pTable->keyCols[i].vardata != IS_VAR_DATA_TYPE(pCol->info.type)) { qError("column type mismatch, idx:%d, slotId:%d, type:%d, vardata:%d", i, pTable->keyCols[i].srcSlot, pCol->info.type, pTable->keyCols[i].vardata); return TSDB_CODE_INVALID_PARA; @@ -1326,15 +1460,15 @@ bool mJoinCopyKeyColsDataToBuf(SMJoinTableCtx* pTable, int32_t rowIdx, size_t *p } if (pTable->keyCols[0].jsonData) { pData = pTable->keyCols[i].data + pTable->keyCols[i].offset[rowIdx]; - memcpy(pTable->keyBuf + bufLen, pData, getJsonValueLen(pData)); + TAOS_MEMCPY(pTable->keyBuf + bufLen, pData, getJsonValueLen(pData)); bufLen += getJsonValueLen(pData); } else if (pTable->keyCols[i].vardata) { pData = pTable->keyCols[i].data + pTable->keyCols[i].offset[rowIdx]; - memcpy(pTable->keyBuf + bufLen, pData, varDataTLen(pData)); + TAOS_MEMCPY(pTable->keyBuf + bufLen, pData, varDataTLen(pData)); bufLen += varDataTLen(pData); } else { pData = pTable->keyCols[i].data + pTable->keyCols[i].bytes * rowIdx; - memcpy(pTable->keyBuf + bufLen, pData, pTable->keyCols[i].bytes); + TAOS_MEMCPY(pTable->keyBuf + bufLen, pData, pTable->keyCols[i].bytes); bufLen += pTable->keyCols[i].bytes; } } @@ -1352,15 +1486,20 @@ static int32_t mJoinGetAvailableGrpArray(SMJoinTableCtx* pTable, SArray** ppRes) do { if (pTable->grpArrayIdx < taosArrayGetSize(pTable->pGrpArrays)) { *ppRes = taosArrayGetP(pTable->pGrpArrays, pTable->grpArrayIdx++); + if (NULL == *ppRes) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } taosArrayClear(*ppRes); return TSDB_CODE_SUCCESS; } SArray* pNew = taosArrayInit(4, sizeof(SMJoinRowPos)); if (NULL == pNew) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; + } + if (NULL == taosArrayPush(pTable->pGrpArrays, &pNew)) { + return terrno; } - taosArrayPush(pTable->pGrpArrays, &pNew); } while (true); return TSDB_CODE_SUCCESS; @@ -1374,10 +1513,14 @@ static int32_t mJoinAddRowToHash(SMJoinOperatorInfo* pJoin, size_t keyLen, SSDat SArray* pNewGrp = NULL; MJ_ERR_RET(mJoinGetAvailableGrpArray(pBuild, &pNewGrp)); - taosArrayPush(pNewGrp, &pos); - tSimpleHashPut(pBuild->pGrpHash, pBuild->keyData, keyLen, &pNewGrp, POINTER_BYTES); + if (NULL == taosArrayPush(pNewGrp, &pos)) { + return terrno; + } + MJ_ERR_RET(tSimpleHashPut(pBuild->pGrpHash, pBuild->keyData, keyLen, &pNewGrp, POINTER_BYTES)); } else if (pBuild->multiRowsGrp) { - taosArrayPush(*pGrpRows, &pos); + if (NULL == taosArrayPush(*pGrpRows, &pos)) { + return terrno; + } } return TSDB_CODE_SUCCESS; @@ -1392,10 +1535,14 @@ static int32_t mJoinAddRowToFullHash(SMJoinOperatorInfo* pJoin, size_t keyLen, S SMJoinHashGrpRows pNewGrp = {0}; MJ_ERR_RET(mJoinGetAvailableGrpArray(pBuild, &pNewGrp.pRows)); - taosArrayPush(pNewGrp.pRows, &pos); - tSimpleHashPut(pBuild->pGrpHash, pBuild->keyData, keyLen, &pNewGrp, sizeof(pNewGrp)); + if (NULL == taosArrayPush(pNewGrp.pRows, &pos)) { + return terrno; + } + MJ_ERR_RET(tSimpleHashPut(pBuild->pGrpHash, pBuild->keyData, keyLen, &pNewGrp, sizeof(pNewGrp))); } else { - taosArrayPush(pGrpRows->pRows, &pos); + if (NULL == taosArrayPush(pGrpRows->pRows, &pos)) { + return terrno; + } } return TSDB_CODE_SUCCESS; @@ -1412,6 +1559,9 @@ int32_t mJoinCreateFullBuildTbHash(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pT int32_t grpNum = taosArrayGetSize(pTable->eqGrps); for (int32_t g = 0; g < grpNum; ++g) { SMJoinGrpRows* pGrp = taosArrayGet(pTable->eqGrps, g); + if (NULL == pGrp) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } MJ_ERR_RET(mJoinSetKeyColsData(pGrp->blk, pTable)); int32_t grpRows = GRP_REMAIN_ROWS(pGrp); @@ -1440,6 +1590,10 @@ int32_t mJoinCreateBuildTbHash(SMJoinOperatorInfo* pJoin, SMJoinTableCtx* pTable int32_t grpNum = taosArrayGetSize(pTable->eqGrps); for (int32_t g = 0; g < grpNum; ++g) { SMJoinGrpRows* pGrp = taosArrayGet(pTable->eqGrps, g); + if (NULL == pGrp) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } + MJ_ERR_RET(mJoinSetKeyColsData(pGrp->blk, pTable)); int32_t grpRows = GRP_REMAIN_ROWS(pGrp); @@ -1496,8 +1650,11 @@ void mWinJoinResetWindowCache(SMJoinWindowCtx* pCtx, SMJoinWinCache* pCache) { for (int32_t i = 0; i < grpNum; ++i) { SMJoinGrpRows* pGrp = taosArrayGet(pCache->grps, i); + if (NULL == pGrp) { + continue; + } if (pGrp->blk != pCtx->cache.outBlk && pGrp->clonedBlk) { - blockDataDestroy(pGrp->blk); + (void)blockDataDestroy(pGrp->blk); } } @@ -1539,6 +1696,7 @@ void mJoinResetOperator(struct SOperatorInfo* pOperator) { SSDataBlock* mJoinMainProcess(struct SOperatorInfo* pOperator) { SMJoinOperatorInfo* pJoin = pOperator->info; + int32_t code = TSDB_CODE_SUCCESS; if (pOperator->status == OP_EXEC_DONE) { if (NULL == pOperator->pDownstreamGetParams || NULL == pOperator->pDownstreamGetParams[0] || NULL == pOperator->pDownstreamGetParams[1]) { qDebug("%s merge join done", GET_TASKID(pOperator->pTaskInfo)); @@ -1567,7 +1725,11 @@ SSDataBlock* mJoinMainProcess(struct SOperatorInfo* pOperator) { pBlock->info.id.blockId = pJoin->outBlkId; if (pJoin->pFinFilter != NULL) { - doFilter(pBlock, pJoin->pFinFilter, NULL); + code = doFilter(pBlock, pJoin->pFinFilter, NULL); + if (code) { + pJoin->errCode = code; + T_LONG_JMP(pOperator->pTaskInfo->env, pJoin->errCode); + } } if (pBlock->info.rows > 0 || pOperator->status == OP_EXEC_DONE) { @@ -1703,13 +1865,17 @@ int32_t mJoinSetImplFp(SMJoinOperatorInfo* pJoin) { SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SSortMergeJoinPhysiNode* pJoinNode, SExecTaskInfo* pTaskInfo) { - SMJoinOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SMJoinOperatorInfo)); - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); bool newDownstreams = false; - int32_t code = TSDB_CODE_SUCCESS; - if (pOperator == NULL || pInfo == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + SMJoinOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SMJoinOperatorInfo)); + if (pInfo == NULL) { + code = terrno; + goto _return; + } + + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + if (pOperator == NULL) { + code = terrno; goto _return; } @@ -1722,8 +1888,8 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t MJ_ERR_JRET(mJoinHandleConds(pInfo, pJoinNode)); - mJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 0, &pJoinNode->inputStat[0], newDownstreams); - mJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 1, &pJoinNode->inputStat[1], newDownstreams); + MJ_ERR_JRET(mJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 0, &pJoinNode->inputStat[0], newDownstreams)); + MJ_ERR_JRET(mJoinInitTableInfo(pInfo, pJoinNode, pDownstream, 1, &pJoinNode->inputStat[1], newDownstreams)); MJ_ERR_JRET(mJoinInitCtx(pInfo, pJoinNode)); MJ_ERR_JRET(mJoinSetImplFp(pInfo)); @@ -1742,6 +1908,7 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t return pOperator; _return: + if (pInfo != NULL) { destroyMergeJoinOperator(pInfo); } @@ -1751,6 +1918,7 @@ _return: taosMemoryFree(pOperator); pTaskInfo->code = code; + return NULL; } From 2a675ccf6b63cce7a8221a00857b087206b90de6 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 11:19:11 +0800 Subject: [PATCH 46/64] group const value func --- include/libs/function/functionMgt.h | 4 ++-- source/libs/executor/src/executorInt.c | 2 +- source/libs/executor/src/timesliceoperator.c | 8 ++++---- source/libs/function/inc/builtinsimpl.h | 2 ++ source/libs/function/src/builtins.c | 12 ++++++------ source/libs/function/src/builtinsimpl.c | 18 +++++++++++++----- source/libs/function/src/functionMgt.c | 4 ++-- source/libs/parser/src/parTranslater.c | 4 ++-- source/libs/planner/src/planLogicCreater.c | 2 +- 9 files changed, 33 insertions(+), 23 deletions(-) diff --git a/include/libs/function/functionMgt.h b/include/libs/function/functionMgt.h index 9fb4c80bb4..d3fb953dc3 100644 --- a/include/libs/function/functionMgt.h +++ b/include/libs/function/functionMgt.h @@ -138,7 +138,7 @@ typedef enum EFunctionType { FUNCTION_TYPE_CACHE_LAST_ROW, FUNCTION_TYPE_CACHE_LAST, FUNCTION_TYPE_TABLE_COUNT, - FUNCTION_TYPE_SELECT_TAG, + FUNCTION_TYPE_GROUP_CONST_VALUE, // distributed splitting functions FUNCTION_TYPE_APERCENTILE_PARTIAL = 4000, @@ -257,7 +257,7 @@ bool fmIsConstantResFunc(SFunctionNode* pFunc); bool fmIsSkipScanCheckFunc(int32_t funcId); bool fmIsPrimaryKeyFunc(int32_t funcId); bool fmIsProcessByRowFunc(int32_t funcId); -bool fmIsSelectTagFunc(int32_t funcId); +bool fmisSelectGroupConstValueFunc(int32_t funcId); void getLastCacheDataType(SDataType* pType, int32_t pkBytes); SFunctionNode* createFunction(const char* pName, SNodeList* pParameterList); diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index 3b4e0792a6..df70dfafe1 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -604,7 +604,7 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR pCtx[j].resultInfo = getResultEntryInfo(pRow, j, rowEntryOffset); if (pCtx[j].fpSet.finalize) { if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_group_key") == 0 || - strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_select_tag") == 0) { + strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_group_const_value") == 0) { // for groupkey along with functions that output multiple lines(e.g. Histogram) // need to match groupkey result for each output row of that function. if (pCtx[j].resultInfo->numOfRes != 0) { diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c index 5a448520f1..e5a1bd0701 100644 --- a/source/libs/executor/src/timesliceoperator.c +++ b/source/libs/executor/src/timesliceoperator.c @@ -233,9 +233,9 @@ static bool isGroupKeyFunc(SExprInfo* pExprInfo) { return (functionType == FUNCTION_TYPE_GROUP_KEY); } -static bool isSelectTagFunc(SExprInfo* pExprInfo) { +static bool isSelectGroupConstValueFunc(SExprInfo* pExprInfo) { int32_t functionType = pExprInfo->pExpr->_function.functionType; - return (functionType == FUNCTION_TYPE_SELECT_TAG); + return (functionType == FUNCTION_TYPE_GROUP_CONST_VALUE); } static bool getIgoreNullRes(SExprSupp* pExprSup) { @@ -301,7 +301,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp colDataSetVal(pDst, pResBlock->info.rows, (char*)&isFilled, false); continue; } else if (!isInterpFunc(pExprInfo)) { - if (isGroupKeyFunc(pExprInfo) || isSelectTagFunc(pExprInfo)) { + if (isGroupKeyFunc(pExprInfo) || isSelectGroupConstValueFunc(pExprInfo)) { if (pSrcBlock != NULL) { int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; SColumnInfoData* pSrc = taosArrayGet(pSrcBlock->pDataBlock, srcSlot); @@ -313,7 +313,7 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp char* v = colDataGetData(pSrc, index); colDataSetVal(pDst, pResBlock->info.rows, v, false); - } else if(!isSelectTagFunc(pExprInfo)){ + } else if(!isSelectGroupConstValueFunc(pExprInfo)){ // use stored group key SGroupKeys* pkey = pSliceInfo->pPrevGroupKey; if (pkey->isNull == false) { diff --git a/source/libs/function/inc/builtinsimpl.h b/source/libs/function/inc/builtinsimpl.h index 7615584f8c..b48a617b9c 100644 --- a/source/libs/function/inc/builtinsimpl.h +++ b/source/libs/function/inc/builtinsimpl.h @@ -254,6 +254,8 @@ bool getGroupKeyFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv); int32_t groupKeyFunction(SqlFunctionCtx* pCtx); int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock); int32_t groupKeyCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx); +int32_t groupConstValueFunction(SqlFunctionCtx* pCtx); +int32_t groupConstValueFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock); #ifdef __cplusplus } diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c index 75d6047c07..f5c98933fd 100644 --- a/source/libs/function/src/builtins.c +++ b/source/libs/function/src/builtins.c @@ -4109,14 +4109,14 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = { .finalizeFunc = NULL }, { - .name = "_select_tag", - .type = FUNCTION_TYPE_SELECT_TAG, + .name = "_group_const_value", + .type = FUNCTION_TYPE_GROUP_CONST_VALUE, .classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_SELECT_FUNC | FUNC_MGT_KEEP_ORDER_FUNC, - .translateFunc = translateGroupKey, - .getEnvFunc = getGroupKeyFuncEnv, + .translateFunc = translateSelectValue, + .getEnvFunc = getSelectivityFuncEnv, .initFunc = functionSetup, - .processFunc = groupKeyFunction, - .finalizeFunc = groupKeyFinalize, + .processFunc = groupConstValueFunction, + .finalizeFunc = groupConstValueFinalize, }, }; // clang-format on diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index aab5a52776..5f6565be1f 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -6615,7 +6615,7 @@ int32_t irateFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { return pResInfo->numOfRes; } -int32_t groupKeyFunction(SqlFunctionCtx* pCtx) { +int32_t groupConstValueFunction(SqlFunctionCtx* pCtx) { SResultRowEntryInfo* pResInfo = GET_RES_INFO(pCtx); SGroupKeyInfo* pInfo = GET_ROWCELL_INTERBUF(pResInfo); @@ -6626,13 +6626,13 @@ int32_t groupKeyFunction(SqlFunctionCtx* pCtx) { // escape rest of data blocks to avoid first entry to be overwritten. if (pInfo->hasResult) { - goto _group_key_over; + goto _group_value_over; } if (pInputCol->pData == NULL || colDataIsNull_s(pInputCol, startIndex)) { pInfo->isNull = true; pInfo->hasResult = true; - goto _group_key_over; + goto _group_value_over; } char* data = colDataGetData(pInputCol, startIndex); @@ -6644,13 +6644,17 @@ int32_t groupKeyFunction(SqlFunctionCtx* pCtx) { } pInfo->hasResult = true; -_group_key_over: +_group_value_over: SET_VAL(pResInfo, 1, 1); return TSDB_CODE_SUCCESS; } -int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { +int32_t groupKeyFunction(SqlFunctionCtx* pCtx) { + return groupConstValueFunction(pCtx); +} + +int32_t groupConstValueFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { int32_t slotId = pCtx->pExpr->base.resSchema.slotId; SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId); @@ -6670,6 +6674,10 @@ int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) { return pResInfo->numOfRes; } +int32_t groupKeyFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock){ + return groupConstValueFinalize(pCtx, pBlock); +} + int32_t groupKeyCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx) { SResultRowEntryInfo* pDResInfo = GET_RES_INFO(pDestCtx); SGroupKeyInfo* pDBuf = GET_ROWCELL_INTERBUF(pDResInfo); diff --git a/source/libs/function/src/functionMgt.c b/source/libs/function/src/functionMgt.c index 9cb7d59a2c..8255997836 100644 --- a/source/libs/function/src/functionMgt.c +++ b/source/libs/function/src/functionMgt.c @@ -268,11 +268,11 @@ bool fmIsGroupKeyFunc(int32_t funcId) { return FUNCTION_TYPE_GROUP_KEY == funcMgtBuiltins[funcId].type; } -bool fmIsSelectTagFunc(int32_t funcId) { +bool fmisSelectGroupConstValueFunc(int32_t funcId) { if (funcId < 0 || funcId >= funcMgtBuiltinsNum) { return false; } - return FUNCTION_TYPE_SELECT_TAG == funcMgtBuiltins[funcId].type; + return FUNCTION_TYPE_GROUP_CONST_VALUE == funcMgtBuiltins[funcId].type; } bool fmIsBlockDistFunc(int32_t funcId) { diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index f4b318422a..fef58df3dc 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -3169,7 +3169,7 @@ static EDealRes rewriteExprToSelectTagFunc(STranslateContext* pCxt, SNode** pNod return DEAL_RES_ERROR; } - strcpy(pFunc->functionName, "_select_tag"); + strcpy(pFunc->functionName, "_group_const_value"); strcpy(pFunc->node.aliasName, ((SExprNode*)*pNode)->aliasName); strcpy(pFunc->node.userAlias, ((SExprNode*)*pNode)->userAlias); pCxt->errCode = nodesListMakeAppend(&pFunc->pParameterList, *pNode); @@ -4974,7 +4974,7 @@ static int32_t translateOrderBy(STranslateContext* pCxt, SSelectStmt* pSelect) { static EDealRes needFillImpl(SNode* pNode, void* pContext) { if ((isAggFunc(pNode) || isInterpFunc(pNode)) && FUNCTION_TYPE_GROUP_KEY != ((SFunctionNode*)pNode)->funcType - && FUNCTION_TYPE_SELECT_TAG != ((SFunctionNode*)pNode)->funcType) { + && FUNCTION_TYPE_GROUP_CONST_VALUE != ((SFunctionNode*)pNode)->funcType) { *(bool*)pContext = true; return DEAL_RES_END; } diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c index 89a1da3585..cee765ff94 100644 --- a/source/libs/planner/src/planLogicCreater.c +++ b/source/libs/planner/src/planLogicCreater.c @@ -891,7 +891,7 @@ static int32_t createIndefRowsFuncLogicNode(SLogicPlanContext* pCxt, SSelectStmt } static bool isInterpFunc(int32_t funcId) { - return fmIsInterpFunc(funcId) || fmIsInterpPseudoColumnFunc(funcId) || fmIsGroupKeyFunc(funcId) || fmIsSelectTagFunc(funcId); + return fmIsInterpFunc(funcId) || fmIsInterpPseudoColumnFunc(funcId) || fmIsGroupKeyFunc(funcId) || fmisSelectGroupConstValueFunc(funcId); } static int32_t createInterpFuncLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect, SLogicNode** pLogicNode) { From c01984941334c2ac8866411a320a363a98902763 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 11:34:52 +0800 Subject: [PATCH 47/64] add test case --- tests/system-test/2-query/interp.py | 146 ++++++++++++++++++---------- 1 file changed, 93 insertions(+), 53 deletions(-) diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py index bb96f6342c..bcfc389d7b 100644 --- a/tests/system-test/2-query/interp.py +++ b/tests/system-test/2-query/interp.py @@ -43,60 +43,59 @@ class TDTestCase: tdSql.execute("create database db1 keep 36500") tdSql.execute("use db1") - tdSql.execute("CREATE STABLE db1.`stb1` (`ts` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium', `v1` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium') TAGS (`t1` INT)") - - tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags( 44400 ) values('2024-02-19 16:05:17.649', 22300 ); ") - tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags( 44400 ) values('2024-02-19 16:05:48.818', 22300 ); ") - tdSql.execute("insert into db1.ttt_10 using db1.stb1 tags( 40 ) values('2024-02-19 16:25:36.013', 20 ); ") - tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-19 16:39:50.385' , 20 ); ") - tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-19 16:43:51.742' , 20 ); ") - tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-20 08:35:13.518' , 20 ); ") - tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-20 08:58:42.255' , 20 ); ") - tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 ) values('2024-02-21 09:57:49.477' , 20 ); ") - tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-21 09:58:21.882' , 20 ); ") - tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-26 16:08:31.675' , 20 ); ") - tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 ) values('2024-02-26 16:11:43.445' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:12:30.276' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.188' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.653' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:07.879' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.083' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.273' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.429' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.599' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.775' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:08.940' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.110' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.254' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:09.409' , NULL ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:34.750' , 12 ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:49.820' , 12 ); ") - tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 ) values('2024-02-26 16:25:59.551' , NULL ); ") - tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 ) values('2024-02-19 15:26:39.644' , 2 ); ") - tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 ) values('2024-02-19 15:26:40.433' , 2 ); ") - tdSql.execute("insert into db1.ttt_3 using db1.stb1 tags( 3 ) values('2024-02-19 15:27:22.613' , 1 ); ") - tdSql.execute("insert into db1.ttt_13 using db1.stb1 tags( 3 ) values('2024-02-19 15:27:39.719' , 1 ); ") - tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:28:36.235' , 222 ); ") - tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:28:59.310' , 222 ); ") - tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:29:18.897' , 222 ); ") - tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 ) values('2024-02-19 15:50:24.682' , 223 ); ") - tdSql.execute("insert into db1.ttt_4 using db1.stb1 tags( 3 ) values('2024-02-19 15:31:19.945' , 222 ); ") - tdSql.execute("insert into db1.ttt_a using db1.stb1 tags( 3 ) values('2024-02-19 15:31:37.915' , 4 ); ") - tdSql.execute("insert into db1.ttt_axxxx using db1.stb1 tags( NULL ) values('2024-02-19 15:31:58.953' , 4 ); ") - tdSql.execute("insert into db1.ttt_axxx using db1.stb1 tags( 56 ) values('2024-02-19 15:32:22.323' , NULL ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:36:44.625' , 5444 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:38:41.479' , 5444 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 15:57:23.249' , 5444 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-19 16:04:20.465' , 5444 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-26 16:11:29.364' , 5444 ); ") - tdSql.execute("insert into db1.ttt_123 using db1.stb1 tags( 0 ) values('2024-02-19 15:44:52.136' , 223 ); ") - tdSql.execute("insert into db1.ttt_145 using db1.stb1 tags( 0 ) values('2024-02-19 15:50:28.580' , 223 ); ") - tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 15:50:32.493' , 223 ); ") - tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 15:57:36.866' , 223 ); ") - tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 ) values('2024-02-19 16:04:52.794' , 221113 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-27 08:47:11.366' , 5444 ); ") - tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633 ) values('2024-02-28 09:35:46.474' , 5444 ); ") + tdSql.execute("CREATE STABLE db1.`stb1` (`ts` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium', `v1` INT ENCODE 'simple8b' COMPRESS 'lz4' LEVEL 'medium') TAGS (`t1` INT, t2 nchar(20))") + tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags(44400, '_ttt_10000') values('2024-02-19 16:05:17.649', 22300 ); ") + tdSql.execute("insert into db1.ttt_10000 using db1.stb1 tags(44400, '_ttt_10000') values('2024-02-19 16:05:48.818', 22300 ); ") + tdSql.execute("insert into db1.ttt_10 using db1.stb1 tags( 40 , '_ttt_10') values('2024-02-19 16:25:36.013', 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 , '_ttt_11') values('2024-02-19 16:39:50.385' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 , '_ttt_11') values('2024-02-19 16:43:51.742' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 , '_ttt_11') values('2024-02-20 08:35:13.518' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 , '_ttt_11') values('2024-02-20 08:58:42.255' , 20 ); ") + tdSql.execute("insert into db1.ttt_11 using db1.stb1 tags( 11 , '_ttt_11') values('2024-02-21 09:57:49.477' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 , '_ttt_2024-2-21') values('2024-02-21 09:58:21.882' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 , '_ttt_2024-2-21') values('2024-02-26 16:08:31.675' , 20 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-21` using db1.stb1 tags( 11 , '_ttt_2024-2-21') values('2024-02-26 16:11:43.445' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:12:30.276' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:07.188' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:07.653' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:07.879' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.083' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.273' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.429' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.599' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.775' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:08.940' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:09.110' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:09.254' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:09.409' , NULL ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:34.750' , 12 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:49.820' , 12 ); ") + tdSql.execute("insert into db1.`ttt_2024-2-33` using db1.stb1 tags( 11 , '_ttt_2024-2-33') values('2024-02-26 16:25:59.551' , NULL ); ") + tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 , '_ttt_2') values('2024-02-19 15:26:39.644' , 2 ); ") + tdSql.execute("insert into db1.ttt_2 using db1.stb1 tags( 2 , '_ttt_2') values('2024-02-19 15:26:40.433' , 2 ); ") + tdSql.execute("insert into db1.ttt_3 using db1.stb1 tags( 3 , '_ttt_3') values('2024-02-19 15:27:22.613' , 1 ); ") + tdSql.execute("insert into db1.ttt_13 using db1.stb1 tags( 3 , '_ttt_13') values('2024-02-19 15:27:39.719' , 1 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 , '_ttt_14') values('2024-02-19 15:28:36.235' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 , '_ttt_14') values('2024-02-19 15:28:59.310' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 , '_ttt_14') values('2024-02-19 15:29:18.897' , 222 ); ") + tdSql.execute("insert into db1.ttt_14 using db1.stb1 tags( 3 , '_ttt_14') values('2024-02-19 15:50:24.682' , 223 ); ") + tdSql.execute("insert into db1.ttt_4 using db1.stb1 tags( 3 , '_ttt_4') values('2024-02-19 15:31:19.945' , 222 ); ") + tdSql.execute("insert into db1.ttt_a using db1.stb1 tags( 3 , '_ttt_a') values('2024-02-19 15:31:37.915' , 4 ); ") + tdSql.execute("insert into db1.ttt_axxxx using db1.stb1 tags( NULL, '_ttt_axxxx') values('2024-02-19 15:31:58.953' , 4 ); ") + tdSql.execute("insert into db1.ttt_axxx using db1.stb1 tags( 56 , '_ttt_axxx') values('2024-02-19 15:32:22.323' , NULL ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-19 15:36:44.625' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-19 15:38:41.479' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-19 15:57:23.249' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-19 16:04:20.465' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-26 16:11:29.364' , 5444 ); ") + tdSql.execute("insert into db1.ttt_123 using db1.stb1 tags( 0 , '_ttt_123') values('2024-02-19 15:44:52.136' , 223 ); ") + tdSql.execute("insert into db1.ttt_145 using db1.stb1 tags( 0 , '_ttt_145') values('2024-02-19 15:50:28.580' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 , '_ttt_1465') values('2024-02-19 15:50:32.493' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 , '_ttt_1465') values('2024-02-19 15:57:36.866' , 223 ); ") + tdSql.execute("insert into db1.ttt_1465 using db1.stb1 tags( 0 , '_ttt_1465') values('2024-02-19 16:04:52.794' , 221113 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-27 08:47:11.366' , 5444 ); ") + tdSql.execute("insert into db1.ttt_444 using db1.stb1 tags( 5633, '_ttt_444') values('2024-02-28 09:35:46.474' , 5444 ); ") tdSql.query("select *,tbname from db1.stb1 ;") tdSql.checkRows(51) @@ -232,6 +231,47 @@ class TDTestCase: tdSql.checkData(0, 1, 5) tdSql.checkData(0, 2, 0) tdSql.checkData(0, 3, "ttt_123") + + tdSql.query("select _irowts as ts,interp(v1),t1, t2, tbname from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(VALUE_F, 5) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 1, 5) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "_ttt_123") + tdSql.checkData(0, 4, "ttt_123") + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname, t2 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) fill(prev)") + tdSql.checkRows(4) + + tdSql.query("select _irowts as ts,interp(v1),t1,tbname, t2 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) fill(prev) order by tbname") + tdSql.checkData(0, 2, 3) + tdSql.checkData(1, 2, 3) + tdSql.checkData(2, 2, 2) + tdSql.checkData(3, 2, 3) + tdSql.checkData(0, 3, "ttt_13") + tdSql.checkData(1, 3, "ttt_14") + tdSql.checkData(2, 3, "ttt_2") + tdSql.checkData(3, 3, "ttt_3") + tdSql.checkData(0, 4, "_ttt_13") + tdSql.checkData(1, 4, "_ttt_14") + tdSql.checkData(2, 4, "_ttt_2") + tdSql.checkData(3, 4, "_ttt_3") + + tdSql.query("select _irowts as ts,interp(v1),t1,t2 from db1.stb1 \ + where ts>'2024-02-19T15:25:00+08:00' and ts<'2024-02-19T16:05:00+08:00' \ + partition by tbname range('2024-02-19T15:30:00+08:00','2024-02-19T15:30:00+08:00') every(1m) \ + fill(value, 0) order by tbname") + tdSql.checkRows(12) + tdSql.checkData(0, 2, 0) + tdSql.checkData(0, 3, "_ttt_123") + tdSql.checkData(1, 2, 3) + tdSql.checkData(1, 3, "_ttt_13") def run(self): dbname = "db" From 6e70da62fb12e756fe89465a0202ef39c5b0bcde Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 12:51:25 +0800 Subject: [PATCH 48/64] adj operator res --- source/libs/executor/inc/executil.h | 2 +- source/libs/executor/inc/executorInt.h | 8 +- source/libs/executor/src/aggregateoperator.c | 41 ++- .../libs/executor/src/countwindowoperator.c | 66 ++-- .../libs/executor/src/eventwindowoperator.c | 46 +-- source/libs/executor/src/executil.c | 15 +- source/libs/executor/src/executor.c | 259 ++++++++++----- source/libs/executor/src/executorInt.c | 214 ++++++++----- source/libs/executor/src/filloperator.c | 109 +++++-- source/libs/executor/src/groupoperator.c | 301 ++++++++++++------ source/libs/executor/src/scanoperator.c | 5 +- .../executor/src/streamcountwindowoperator.c | 6 +- .../executor/src/streameventwindowoperator.c | 18 +- source/libs/executor/src/streamfilloperator.c | 6 +- .../executor/src/streamtimewindowoperator.c | 35 +- source/libs/executor/src/timewindowoperator.c | 52 +-- 16 files changed, 791 insertions(+), 392 deletions(-) diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 55b803f6d4..27ea98afd5 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -179,7 +179,7 @@ SExprInfo* createExprInfo(SNodeList* pNodeList, SNodeList* pGroupKeys, int32_t* SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput, int32_t** rowEntryInfoOffset, SFunctionStateStore* pStore); void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray* pCols, bool outputEveryColumn); -void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow); +int32_t initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow); SInterval extractIntervalInfo(const STableScanPhysiNode* pTableScanNode); SColumn extractColumnFromColumnNode(SColumnNode* pColNode); diff --git a/source/libs/executor/inc/executorInt.h b/source/libs/executor/inc/executorInt.h index d8267c4579..fec16f9ef4 100644 --- a/source/libs/executor/inc/executorInt.h +++ b/source/libs/executor/inc/executorInt.h @@ -834,9 +834,8 @@ void doBuildResultDatablock(struct SOperatorInfo* pOperator, SOptrBasicInfo* pbI /** * @brief copydata from hash table, instead of copying from SGroupResInfo's pRow */ -int32_t doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, - SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t threshold, - bool ignoreGroup); +void doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, + SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t threshold, bool ignoreGroup); bool hasLimitOffsetInfo(SLimitInfo* pLimitInfo); bool hasSlimitOffsetInfo(SLimitInfo* pLimitInfo); @@ -879,7 +878,8 @@ SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pR int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBlock* pSrcBlock, SqlFunctionCtx* pCtx, int32_t numOfOutput, SArray* pPseudoList); -void setInputDataBlock(SExprSupp* pExprSupp, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, bool createDummyCol); +int32_t setInputDataBlock(SExprSupp* pExprSupp, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, + bool createDummyCol); int32_t checkForQueryBuf(size_t numOfTables); diff --git a/source/libs/executor/src/aggregateoperator.c b/source/libs/executor/src/aggregateoperator.c index 5ff0601b7a..55cb8c8302 100644 --- a/source/libs/executor/src/aggregateoperator.c +++ b/source/libs/executor/src/aggregateoperator.c @@ -21,6 +21,7 @@ #include "tname.h" #include "executorInt.h" +#include "index.h" #include "operator.h" #include "query.h" #include "querytask.h" @@ -29,7 +30,6 @@ #include "tglobal.h" #include "thash.h" #include "ttypes.h" -#include "index.h" typedef struct { bool hasAgg; @@ -54,13 +54,13 @@ static void destroyAggOperatorInfo(void* param); static void setExecutionContext(SOperatorInfo* pOperator, int32_t numOfOutput, uint64_t groupId); static int32_t createDataBlockForEmptyInput(SOperatorInfo* pOperator, SSDataBlock** ppBlock); -static void destroyDataBlockForEmptyInput(bool blockAllocated, SSDataBlock** ppBlock); +static void destroyDataBlockForEmptyInput(bool blockAllocated, SSDataBlock** ppBlock); -static int32_t doAggregateImpl(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx); +static int32_t doAggregateImpl(SOperatorInfo* pOperator, SqlFunctionCtx* pCtx); static SSDataBlock* getAggregateResult(SOperatorInfo* pOperator); static int32_t doInitAggInfoSup(SAggSupporter* pAggSup, SqlFunctionCtx* pCtx, int32_t numOfOutput, size_t keyBufSize, - const char* pKey); + const char* pKey); static int32_t addNewResultRowBuf(SResultRow* pWindowRes, SDiskbasedBuf* pResultBuf, uint32_t size); @@ -134,7 +134,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN return pOperator; - _error: +_error: if (pInfo != NULL) { destroyAggOperatorInfo(pInfo); } @@ -166,6 +166,8 @@ void destroyAggOperatorInfo(void* param) { * if false, fill results of ONE GROUP * */ static bool nextGroupedResult(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SAggOperatorInfo* pAggInfo = pOperator->info; @@ -175,7 +177,6 @@ static bool nextGroupedResult(SOperatorInfo* pOperator) { SOperatorInfo* downstream = pOperator->pDownstream[0]; int64_t st = taosGetTimestampUs(); - int32_t code = TSDB_CODE_SUCCESS; int32_t order = pAggInfo->binfo.inputTsOrder; SSDataBlock* pBlock = pAggInfo->pNewGroupBlock; @@ -183,11 +184,10 @@ static bool nextGroupedResult(SOperatorInfo* pOperator) { pAggInfo->pNewGroupBlock = NULL; tSimpleHashClear(pAggInfo->aggSup.pResultRowHashTable); setExecutionContext(pOperator, pOperator->exprSupp.numOfExprs, pBlock->info.id.groupId); - setInputDataBlock(pSup, pBlock, order, pBlock->info.scanFlag, true); + QUERY_CHECK_CODE(code, lino, _end); + code = setInputDataBlock(pSup, pBlock, order, pBlock->info.scanFlag, true); code = doAggregateImpl(pOperator, pSup->pCtx); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - } + QUERY_CHECK_CODE(code, lino, _end); } while (1) { bool blockAllocated = false; @@ -222,7 +222,9 @@ static bool nextGroupedResult(SOperatorInfo* pOperator) { } // the pDataBlock are always the same one, no need to call this again setExecutionContext(pOperator, pOperator->exprSupp.numOfExprs, pBlock->info.id.groupId); - setInputDataBlock(pSup, pBlock, order, pBlock->info.scanFlag, true); + code = setInputDataBlock(pSup, pBlock, order, pBlock->info.scanFlag, true); + QUERY_CHECK_CODE(code, lino, _end); + code = doAggregateImpl(pOperator, pSup->pCtx); if (code != 0) { destroyDataBlockForEmptyInput(blockAllocated, &pBlock); @@ -238,6 +240,13 @@ static bool nextGroupedResult(SOperatorInfo* pOperator) { } initGroupedResultInfo(&pAggInfo->groupResInfo, pAggInfo->aggSup.pResultRowHashTable, 0); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return pBlock != NULL; } @@ -250,7 +259,7 @@ SSDataBlock* getAggregateResult(SOperatorInfo* pOperator) { } SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - bool hasNewGroups = false; + bool hasNewGroups = false; do { hasNewGroups = nextGroupedResult(pOperator); blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); @@ -336,7 +345,6 @@ static int32_t createDataBlockForEmptyInput(SOperatorInfo* pOperator, SSDataBloc colInfo.info.type = TSDB_DATA_TYPE_NULL; colInfo.info.bytes = 1; - SExprInfo* pOneExpr = &pOperator->exprSupp.pExprInfo[i]; for (int32_t j = 0; j < pOneExpr->base.numOfParams; ++j) { SFunctParam* pFuncParam = &pOneExpr->base.pParam[j]; @@ -395,8 +403,9 @@ void doSetTableGroupOutputBuf(SOperatorInfo* pOperator, int32_t numOfOutput, uin SqlFunctionCtx* pCtx = pOperator->exprSupp.pCtx; int32_t* rowEntryInfoOffset = pOperator->exprSupp.rowEntryInfoOffset; - SResultRow* pResultRow = doSetResultOutBufByKey(pAggInfo->aggSup.pResultBuf, pResultRowInfo, (char*)&groupId, - sizeof(groupId), true, groupId, pTaskInfo, false, &pAggInfo->aggSup, true); + SResultRow* pResultRow = + doSetResultOutBufByKey(pAggInfo->aggSup.pResultBuf, pResultRowInfo, (char*)&groupId, sizeof(groupId), true, + groupId, pTaskInfo, false, &pAggInfo->aggSup, true); /* * not assign result buffer yet, add new result buffer * all group belong to one result set, and each group result has different group id so set the id to be one @@ -486,7 +495,7 @@ int32_t doInitAggInfoSup(SAggSupporter* pAggSup, SqlFunctionCtx* pCtx, int32_t n qError("failed to get buff page size, rowSize:%d", pAggSup->resultRowSize); return code; } - + if (!osTempSpaceAvailable()) { code = TSDB_CODE_NO_DISKSPACE; qError("Init stream agg supporter failed since %s, key:%s, tempDir:%s", tstrerror(code), pKey, tsTempDir); diff --git a/source/libs/executor/src/countwindowoperator.c b/source/libs/executor/src/countwindowoperator.c index 3a6c85532a..6e476c4ea0 100644 --- a/source/libs/executor/src/countwindowoperator.c +++ b/source/libs/executor/src/countwindowoperator.c @@ -25,13 +25,13 @@ #include "ttime.h" typedef struct SCountWindowResult { - int32_t winRows; - SResultRow row; + int32_t winRows; + SResultRow row; } SCountWindowResult; typedef struct SCountWindowSupp { - SArray* pWinStates; - int32_t stateIndex; + SArray* pWinStates; + int32_t stateIndex; } SCountWindowSupp; typedef struct SCountWindowOperatorInfo { @@ -61,13 +61,11 @@ void destroyCountWindowOperatorInfo(void* param) { taosMemoryFreeClear(param); } -static void clearWinStateBuff(SCountWindowResult* pBuff) { - pBuff->winRows = 0; -} +static void clearWinStateBuff(SCountWindowResult* pBuff) { pBuff->winRows = 0; } static SCountWindowResult* getCountWinStateInfo(SCountWindowSupp* pCountSup) { SCountWindowResult* pBuffInfo = taosArrayGet(pCountSup->pWinStates, pCountSup->stateIndex); - int32_t size = taosArrayGetSize(pCountSup->pWinStates); + int32_t size = taosArrayGetSize(pCountSup->pWinStates); // coverity scan ASSERTS(size > 0, "WinStates is empty"); if (size > 0) { @@ -76,7 +74,8 @@ static SCountWindowResult* getCountWinStateInfo(SCountWindowSupp* pCountSup) { return pBuffInfo; } -static SCountWindowResult* setCountWindowOutputBuff(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, SResultRow** pResult) { +static SCountWindowResult* setCountWindowOutputBuff(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, + SResultRow** pResult) { SCountWindowResult* pBuff = getCountWinStateInfo(pCountSup); (*pResult) = &pBuff->row; setResultRowInitCtx(*pResult, pExprSup->pCtx, pExprSup->numOfExprs, pExprSup->rowEntryInfoOffset); @@ -100,9 +99,9 @@ int32_t doCountWindowAggImpl(SOperatorInfo* pOperator, SSDataBlock* pBlock) { for (int32_t i = 0; i < pBlock->info.rows;) { SCountWindowResult* pBuffInfo = setCountWindowOutputBuff(pExprSup, &pInfo->countSup, &pInfo->pRow); - int32_t prevRows = pBuffInfo->winRows; - int32_t num = updateCountWindowInfo(i, pBlock->info.rows, pInfo->windowCount, &pBuffInfo->winRows); - int32_t step = num; + int32_t prevRows = pBuffInfo->winRows; + int32_t num = updateCountWindowInfo(i, pBlock->info.rows, pInfo->windowCount, &pBuffInfo->winRows); + int32_t step = num; if (prevRows == 0) { pInfo->pRow->win.skey = tsCols[i]; } @@ -136,12 +135,14 @@ int32_t doCountWindowAggImpl(SOperatorInfo* pOperator, SSDataBlock* pBlock) { return code; } -static void buildCountResult(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, SExecTaskInfo* pTaskInfo, SFilterInfo* pFilterInfo, SSDataBlock* pBlock) { +static void buildCountResult(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, SExecTaskInfo* pTaskInfo, + SFilterInfo* pFilterInfo, SSDataBlock* pBlock) { SResultRow* pResultRow = NULL; for (int32_t i = 0; i < taosArrayGetSize(pCountSup->pWinStates); i++) { SCountWindowResult* pBuff = setCountWindowOutputBuff(pExprSup, pCountSup, &pResultRow); if (pBuff->winRows == 0) { - continue;; + continue; + ; } doUpdateNumOfRows(pExprSup->pCtx, pResultRow, pExprSup->numOfExprs, pExprSup->rowEntryInfoOffset); copyResultrowToDataBlock(pExprSup->pExprInfo, pExprSup->numOfExprs, pResultRow, pExprSup->pCtx, pBlock, @@ -154,6 +155,8 @@ static void buildCountResult(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, S } static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SCountWindowOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SExprSupp* pExprSup = &pOperator->exprSupp; @@ -170,8 +173,11 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { } pRes->info.scanFlag = pBlock->info.scanFlag; - setInputDataBlock(pExprSup, pBlock, order, MAIN_SCAN, true); - blockDataUpdateTsWindow(pBlock, pInfo->tsSlotId); + code = setInputDataBlock(pExprSup, pBlock, order, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); + + code = blockDataUpdateTsWindow(pBlock, pInfo->tsSlotId); + QUERY_CHECK_CODE(code, lino, _end); // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { @@ -196,11 +202,19 @@ static SSDataBlock* countWindowAggregate(SOperatorInfo* pOperator) { } buildCountResult(pExprSup, &pInfo->countSup, pTaskInfo, pOperator->exprSupp.pFilterInfo, pRes); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } return pRes->info.rows == 0 ? NULL : pRes; } SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -209,7 +223,6 @@ SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo pOperator->exprSupp.hasWindowOrGroup = true; - int32_t code = TSDB_CODE_SUCCESS; SCountWinodwPhysiNode* pCountWindowNode = (SCountWinodwPhysiNode*)physiNode; pInfo->tsSlotId = ((SColumnNode*)pCountWindowNode->window.pTspk)->slotId; @@ -218,21 +231,17 @@ SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo int32_t numOfScalarExpr = 0; SExprInfo* pScalarExprInfo = createExprInfo(pCountWindowNode->window.pExprs, NULL, &numOfScalarExpr); code = initExprSupp(&pInfo->scalarSup, pScalarExprInfo, numOfScalarExpr, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); } - size_t keyBufSize = 0; + size_t keyBufSize = 0; int32_t num = 0; SExprInfo* pExprInfo = createExprInfo(pCountWindowNode->window.pFuncs, NULL, &num); initResultSizeInfo(&pOperator->resultInfo, 4096); 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; - } + QUERY_CHECK_CODE(code, lino, _error); SSDataBlock* pResBlock = createDataBlockFromDescNode(pCountWindowNode->window.node.pOutputDataBlockDesc); blockDataEnsureCapacity(pResBlock, pOperator->resultInfo.capacity); @@ -243,7 +252,7 @@ SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo pInfo->binfo.outputTsOrder = physiNode->outputTsOrder; pInfo->windowCount = pCountWindowNode->windowCount; pInfo->windowSliding = pCountWindowNode->windowSliding; - //sizeof(SCountWindowResult) + // sizeof(SCountWindowResult) int32_t itemSize = sizeof(int32_t) + pInfo->aggSup.resultRowSize; int32_t numOfItem = 1; if (pInfo->windowCount != pInfo->windowSliding) { @@ -257,11 +266,10 @@ SOperatorInfo* createCountwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo pInfo->countSup.stateIndex = 0; code = filterInitFromNode((SNode*)pCountWindowNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); setOperatorInfo(pOperator, "CountWindowOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_COUNT, true, OP_NOT_OPENED, pInfo, pTaskInfo); diff --git a/source/libs/executor/src/eventwindowoperator.c b/source/libs/executor/src/eventwindowoperator.c index b898ea576a..f15b05f817 100644 --- a/source/libs/executor/src/eventwindowoperator.c +++ b/source/libs/executor/src/eventwindowoperator.c @@ -60,6 +60,8 @@ static void doKeepTuple(SWindowRowsSup* pRowSup, int64_t ts, uint64_t groupId) { SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNode* physiNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -71,29 +73,21 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo SEventWinodwPhysiNode* pEventWindowNode = (SEventWinodwPhysiNode*)physiNode; int32_t tsSlotId = ((SColumnNode*)pEventWindowNode->window.pTspk)->slotId; - int32_t code = filterInitFromNode((SNode*)pEventWindowNode->pStartCond, &pInfo->pStartCondInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + code = filterInitFromNode((SNode*)pEventWindowNode->pStartCond, &pInfo->pStartCondInfo, 0); + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pEventWindowNode->pEndCond, &pInfo->pEndCondInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); if (pEventWindowNode->window.pExprs != NULL) { int32_t numOfScalarExpr = 0; SExprInfo* pScalarExprInfo = createExprInfo(pEventWindowNode->window.pExprs, NULL, &numOfScalarExpr); code = initExprSupp(&pInfo->scalarSup, pScalarExprInfo, numOfScalarExpr, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); } code = filterInitFromNode((SNode*)pEventWindowNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES; @@ -103,12 +97,13 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo 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; - } + QUERY_CHECK_CODE(code, lino, _error); SSDataBlock* pResBlock = createDataBlockFromDescNode(pEventWindowNode->window.node.pOutputDataBlockDesc); - blockDataEnsureCapacity(pResBlock, pOperator->resultInfo.capacity); + QUERY_CHECK_NULL(pResBlock, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + + code = blockDataEnsureCapacity(pResBlock, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _error); initBasicInfo(&pInfo->binfo, pResBlock); initResultRowInfo(&pInfo->binfo.resultRowInfo); @@ -118,7 +113,8 @@ SOperatorInfo* createEventwindowOperatorInfo(SOperatorInfo* downstream, SPhysiNo pInfo->twAggSup = (STimeWindowAggSupp){.waterMark = pEventWindowNode->window.watermark, .calTrigger = pEventWindowNode->window.triggerType}; - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); pInfo->tsSlotId = tsSlotId; @@ -173,6 +169,8 @@ void destroyEWindowOperatorInfo(void* param) { } static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SEventWindowOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -191,8 +189,11 @@ static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { } pRes->info.scanFlag = pBlock->info.scanFlag; - setInputDataBlock(pSup, pBlock, order, MAIN_SCAN, true); - blockDataUpdateTsWindow(pBlock, pInfo->tsSlotId); + code = setInputDataBlock(pSup, pBlock, order, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); + + code = blockDataUpdateTsWindow(pBlock, pInfo->tsSlotId); + QUERY_CHECK_CODE(code, lino, _end); // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { @@ -210,6 +211,11 @@ static SSDataBlock* eventWindowAggregate(SOperatorInfo* pOperator) { } } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } return pRes->info.rows == 0 ? NULL : pRes; } diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index c623e94a12..aa24e3a8b8 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -2021,18 +2021,27 @@ uint64_t tableListGetTableGroupId(const STableListInfo* pTableList, uint64_t tab // TODO handle the group offset info, fix it, the rule of group output will be broken by this function int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pTableList->map == NULL) { pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + QUERY_CHECK_NULL(pTableList->map, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; - taosArrayPush(pTableList->pTableList, &keyInfo); + void* tmp = taosArrayPush(pTableList->pTableList, &keyInfo); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); int32_t slot = (int32_t)taosArrayGetSize(pTableList->pTableList) - 1; - taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); + code = taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); + QUERY_CHECK_CODE(code, lino, _end); +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } qDebug("uid:%" PRIu64 ", groupId:%" PRIu64 " added into table list, slot:%d, total:%d", uid, gid, slot, slot + 1); - return TSDB_CODE_SUCCESS; + return code; } int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 4aff0e69a3..c79f69129c 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -15,14 +15,14 @@ #include "executor.h" #include "executorInt.h" -#include "trpc.h" -#include "wal.h" #include "operator.h" #include "planner.h" #include "querytask.h" #include "tdatablock.h" #include "tref.h" +#include "trpc.h" #include "tudf.h" +#include "wal.h" #include "storageapi.h" @@ -31,15 +31,17 @@ int32_t exchangeObjRefPool = -1; static void cleanupRefPool() { int32_t ref = atomic_val_compare_exchange_32(&exchangeObjRefPool, exchangeObjRefPool, 0); - taosCloseRef(ref); + (void)taosCloseRef(ref); } static void initRefPool() { exchangeObjRefPool = taosOpenRef(1024, doDestroyExchangeOperatorInfo); - atexit(cleanupRefPool); + (void)atexit(cleanupRefPool); } static int32_t doSetSMABlock(SOperatorInfo* pOperator, void* input, size_t numOfBlocks, int32_t type, char* id) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { if (pOperator->numOfDownstream == 0) { qError("failed to find stream scan operator to set the input data block, %s" PRIx64, id); @@ -60,33 +62,44 @@ static int32_t doSetSMABlock(SOperatorInfo* pOperator, void* input, size_t numOf if (type == STREAM_INPUT__MERGED_SUBMIT) { for (int32_t i = 0; i < numOfBlocks; i++) { SPackedData* pReq = POINTER_SHIFT(input, i * sizeof(SPackedData)); - taosArrayPush(pInfo->pBlockLists, pReq); + void* tmp = taosArrayPush(pInfo->pBlockLists, pReq); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; } else if (type == STREAM_INPUT__DATA_SUBMIT) { - taosArrayPush(pInfo->pBlockLists, &input); + void* tmp = taosArrayPush(pInfo->pBlockLists, &input); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; } else if (type == STREAM_INPUT__DATA_BLOCK) { for (int32_t i = 0; i < numOfBlocks; ++i) { SSDataBlock* pDataBlock = &((SSDataBlock*)input)[i]; - SPackedData tmp = {.pDataBlock = pDataBlock}; - taosArrayPush(pInfo->pBlockLists, &tmp); + SPackedData tmp = {.pDataBlock = pDataBlock}; + void* tmpItem = taosArrayPush(pInfo->pBlockLists, &tmp); + QUERY_CHECK_NULL(tmpItem, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pInfo->blockType = STREAM_INPUT__DATA_BLOCK; } else if (type == STREAM_INPUT__CHECKPOINT) { SPackedData tmp = {.pDataBlock = input}; - taosArrayPush(pInfo->pBlockLists, &tmp); + void* tmpItem = taosArrayPush(pInfo->pBlockLists, &tmp); + QUERY_CHECK_NULL(tmpItem, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pInfo->blockType = STREAM_INPUT__CHECKPOINT; } else if (type == STREAM_INPUT__REF_DATA_BLOCK) { - for (int32_t i = 0; i < numOfBlocks; ++i) { + for (int32_t i = 0; i < numOfBlocks; ++i) { SPackedData* pReq = POINTER_SHIFT(input, i * sizeof(SPackedData)); - taosArrayPush(pInfo->pBlockLists, pReq); + void* tmp = taosArrayPush(pInfo->pBlockLists, pReq); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pInfo->blockType = STREAM_INPUT__DATA_BLOCK; } return TSDB_CODE_SUCCESS; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + } + return code; } static int32_t doSetStreamOpOpen(SOperatorInfo* pOperator, char* id) { @@ -124,7 +137,10 @@ void resetTaskInfo(qTaskInfo_t tinfo) { clearStreamBlock(pTaskInfo->pRoot); } -static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t numOfBlocks, int32_t type, const char* id) { +static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t numOfBlocks, int32_t type, + const char* id) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pOperator->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { if (pOperator->numOfDownstream == 0) { qError("failed to find stream scan operator to set the input data block, %s" PRIx64, id); @@ -147,24 +163,30 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu if (type == STREAM_INPUT__MERGED_SUBMIT) { for (int32_t i = 0; i < numOfBlocks; i++) { SPackedData* pReq = POINTER_SHIFT(input, i * sizeof(SPackedData)); - taosArrayPush(pInfo->pBlockLists, pReq); + void* tmp = taosArrayPush(pInfo->pBlockLists, pReq); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; } else if (type == STREAM_INPUT__DATA_SUBMIT) { - taosArrayPush(pInfo->pBlockLists, input); + void* tmp = taosArrayPush(pInfo->pBlockLists, input); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + pInfo->blockType = STREAM_INPUT__DATA_SUBMIT; } else if (type == STREAM_INPUT__DATA_BLOCK) { for (int32_t i = 0; i < numOfBlocks; ++i) { SSDataBlock* pDataBlock = &((SSDataBlock*)input)[i]; SPackedData tmp = {.pDataBlock = pDataBlock}; - taosArrayPush(pInfo->pBlockLists, &tmp); + void* tmpItem = taosArrayPush(pInfo->pBlockLists, &tmp); + QUERY_CHECK_NULL(tmpItem, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pInfo->blockType = STREAM_INPUT__DATA_BLOCK; } else if (type == STREAM_INPUT__CHECKPOINT_TRIGGER) { SPackedData tmp = {.pDataBlock = input}; - taosArrayPush(pInfo->pBlockLists, &tmp); + void* tmpItem = taosArrayPush(pInfo->pBlockLists, &tmp); + QUERY_CHECK_NULL(tmpItem, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + pInfo->blockType = STREAM_INPUT__CHECKPOINT; } else { ASSERT(0); @@ -172,6 +194,12 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu return TSDB_CODE_SUCCESS; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } void doSetTaskId(SOperatorInfo* pOperator, SStorageAPI* pAPI) { @@ -330,16 +358,25 @@ qTaskInfo_t qCreateStreamExecTaskInfo(void* msg, SReadHandle* readers, int32_t v return NULL; } - qStreamInfoResetTimewindowFilter(pTaskInfo); + code = qStreamInfoResetTimewindowFilter(pTaskInfo); + if (code != TSDB_CODE_SUCCESS) { + nodesDestroyNode((SNode*)pPlan); + qDestroyTask(pTaskInfo); + terrno = code; + return NULL; + } return pTaskInfo; } -static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const SArray* tableIdList, const char* idstr, - SStorageAPI* pAPI) { +static int32_t filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const SArray* tableIdList, const char* idstr, + SStorageAPI* pAPI, SArray** ppArrayRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SArray* qa = taosArrayInit(4, sizeof(tb_uid_t)); int32_t numOfUids = taosArrayGetSize(tableIdList); if (numOfUids == 0) { - return qa; + (*ppArrayRes) = qa; + goto _end; } STableScanInfo* pTableScanInfo = pScanInfo->pTableScanOp->info; @@ -395,11 +432,18 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S } // handle multiple partition - taosArrayPush(qa, id); + void* tmp = taosArrayPush(qa, id); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } pAPI->metaReaderFn.clearReader(&mr); - return qa; + (*ppArrayRes) = qa; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableIdList, bool isAdd) { @@ -416,7 +460,12 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI SStreamScanInfo* pScanInfo = pInfo->info; if (isAdd) { // add new table id - SArray* qa = filterUnqualifiedTables(pScanInfo, tableIdList, id, &pTaskInfo->storageAPI); + SArray* qa = NULL; + code = filterUnqualifiedTables(pScanInfo, tableIdList, id, &pTaskInfo->storageAPI, &qa); + if (code != TSDB_CODE_SUCCESS) { + taosArrayDestroy(qa); + return code; + } 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); @@ -459,7 +508,13 @@ int32_t qUpdateTableListForStreamScanner(qTaskInfo_t tinfo, const SArray* tableI } } - tableListAddTableInfo(pTableListInfo, keyInfo.uid, keyInfo.groupId); + code = tableListAddTableInfo(pTableListInfo, keyInfo.uid, keyInfo.groupId); + if (code != TSDB_CODE_SUCCESS) { + taosMemoryFree(keyBuf); + taosArrayDestroy(qa); + taosWUnLockLatch(&pTaskInfo->lock); + return code; + } } taosWUnLockLatch(&pTaskInfo->lock); @@ -509,16 +564,14 @@ int32_t qGetQueryTableSchemaVersion(qTaskInfo_t tinfo, char* dbName, char* table return TSDB_CODE_SUCCESS; } -bool qIsDynamicExecTask(qTaskInfo_t tinfo) { - return ((SExecTaskInfo*)tinfo)->dynamicTask; -} +bool qIsDynamicExecTask(qTaskInfo_t tinfo) { return ((SExecTaskInfo*)tinfo)->dynamicTask; } void destroyOperatorParam(SOperatorParam* pParam) { if (NULL == pParam) { return; } - //TODO + // TODO } void qUpdateOperatorParam(qTaskInfo_t tinfo, void* pParam) { @@ -531,7 +584,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId, qTaskInfo_t* pTaskInfo, DataSinkHandle* handle, int8_t compressResult, char* sql, EOPTR_EXEC_MODEL model) { SExecTaskInfo** pTask = (SExecTaskInfo**)pTaskInfo; - taosThreadOnce(&initPoolOnce, initRefPool); + (void)taosThreadOnce(&initPoolOnce, initRefPool); qDebug("start to create task, TID:0x%" PRIx64 " QID:0x%" PRIx64 ", vgId:%d", taskId, pSubplan->id.queryId, vgId); @@ -543,7 +596,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId, if (handle) { SDataSinkMgtCfg cfg = {.maxDataBlockNum = 500, .maxDataBlockNumPerQuery = 50, .compress = compressResult}; - void* pSinkManager = NULL; + void* pSinkManager = NULL; code = dsDataSinkMgtInit(&cfg, &(*pTask)->storageAPI, &pSinkManager); if (code != TSDB_CODE_SUCCESS) { qError("failed to dsDataSinkMgtInit, code:%s, %s", tstrerror(code), (*pTask)->id.str); @@ -575,6 +628,8 @@ static void freeBlock(void* param) { } int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bool* hasMore, SLocalFetch* pLocal) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; int64_t threadId = taosGetSelfPthreadId(); @@ -605,7 +660,7 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo int32_t ret = setjmp(pTaskInfo->env); if (ret != TSDB_CODE_SUCCESS) { pTaskInfo->code = ret; - cleanUpUdfs(); + (void)cleanUpUdfs(); qDebug("%s task abort due to error/cancel occurs, code:%s", GET_TASKID(pTaskInfo), tstrerror(pTaskInfo->code)); atomic_store_64(&pTaskInfo->owner, 0); @@ -627,10 +682,10 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo pRes = pTaskInfo->pRoot->fpSet.getNextFn(pTaskInfo->pRoot); } - if(pRes == NULL) { + if (pRes == NULL) { st = taosGetTimestampUs(); } - + int32_t rowsThreshold = pTaskInfo->pSubplan->rowsThreshold; if (!pTaskInfo->pSubplan->dynamicRowThreshold || 4096 <= pTaskInfo->pSubplan->rowsThreshold) { rowsThreshold = 4096; @@ -640,18 +695,21 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo SSDataBlock* p = NULL; if (blockIndex >= taosArrayGetSize(pTaskInfo->pResultBlockList)) { SSDataBlock* p1 = createOneDataBlock(pRes, true); - taosArrayPush(pTaskInfo->pResultBlockList, &p1); + void* tmp = taosArrayPush(pTaskInfo->pResultBlockList, &p1); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); p = p1; } else { p = *(SSDataBlock**)taosArrayGet(pTaskInfo->pResultBlockList, blockIndex); - copyDataBlock(p, pRes); + code = copyDataBlock(p, pRes); + QUERY_CHECK_CODE(code, lino, _end); } blockIndex += 1; current += p->info.rows; ASSERT(p->info.rows > 0 || p->info.type == STREAM_CHECKPOINT); - taosArrayPush(pResList, &p); + void* tmp = taosArrayPush(pResList, &p); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); if (current >= rowsThreshold) { break; @@ -671,7 +729,10 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo *useconds = pTaskInfo->cost.elapsedTime; } - cleanUpUdfs(); +_end: + + int32_t tmpRes = cleanUpUdfs(); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); uint64_t total = pTaskInfo->pRoot->resultInfo.totalRows; qDebug("%s task suspended, %d rows in %d blocks returned, total:%" PRId64 " rows, in sinkNode:%d, elapsed:%.2f ms", @@ -730,7 +791,7 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) { int32_t ret = setjmp(pTaskInfo->env); if (ret != TSDB_CODE_SUCCESS) { pTaskInfo->code = ret; - cleanUpUdfs(); + (void)cleanUpUdfs(); qDebug("%s task abort due to error/cancel occurs, code:%s", GET_TASKID(pTaskInfo), tstrerror(pTaskInfo->code)); atomic_store_64(&pTaskInfo->owner, 0); return pTaskInfo->code; @@ -748,7 +809,8 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) { *useconds = pTaskInfo->cost.elapsedTime; } - cleanUpUdfs(); + int32_t tmpRes = cleanUpUdfs(); + qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); int32_t current = (*pRes != NULL) ? (*pRes)->info.rows : 0; uint64_t total = pTaskInfo->pRoot->resultInfo.totalRows; @@ -762,9 +824,13 @@ int32_t qExecTask(qTaskInfo_t tinfo, SSDataBlock** pRes, uint64_t* useconds) { int32_t qAppendTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo* pInfo) { taosWLockLatch(&pTaskInfo->stopInfo.lock); - taosArrayPush(pTaskInfo->stopInfo.pStopInfo, pInfo); + void* tmp = taosArrayPush(pTaskInfo->stopInfo.pStopInfo, pInfo); taosWUnLockLatch(&pTaskInfo->stopInfo.lock); + if (tmp != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(TSDB_CODE_OUT_OF_MEMORY)); + return TSDB_CODE_OUT_OF_MEMORY; + } return TSDB_CODE_SUCCESS; } @@ -798,8 +864,8 @@ void qStopTaskOperators(SExecTaskInfo* pTaskInfo) { SExchangeOpStopInfo* pStop = taosArrayGet(pTaskInfo->stopInfo.pStopInfo, i); SExchangeInfo* pExchangeInfo = taosAcquireRef(exchangeObjRefPool, pStop->refId); if (pExchangeInfo) { - tsem_post(&pExchangeInfo->ready); - taosReleaseRef(exchangeObjRefPool, pStop->refId); + (void)tsem_post(&pExchangeInfo->ready); + (void)taosReleaseRef(exchangeObjRefPool, pStop->refId); } } @@ -829,12 +895,12 @@ int32_t qKillTask(qTaskInfo_t tinfo, int32_t rspCode) { qDebug("%s sync killed execTask", GET_TASKID(pTaskInfo)); setTaskKilled(pTaskInfo, TSDB_CODE_TSC_QUERY_KILLED); - while(1) { + while (1) { taosWLockLatch(&pTaskInfo->lock); - if (qTaskIsExecuting(pTaskInfo)) { // let's wait for 100 ms and try again + if (qTaskIsExecuting(pTaskInfo)) { // let's wait for 100 ms and try again taosWUnLockLatch(&pTaskInfo->lock); taosMsleep(100); - } else { // not running now + } else { // not running now pTaskInfo->code = rspCode; taosWUnLockLatch(&pTaskInfo->lock); return TSDB_CODE_SUCCESS; @@ -907,7 +973,7 @@ int32_t qExtractStreamScanner(qTaskInfo_t tinfo, void** scanner) { } } -int32_t qStreamSourceScanParamForHistoryScanStep1(qTaskInfo_t tinfo, SVersionRange *pVerRange, STimeWindow* pWindow) { +int32_t qStreamSourceScanParamForHistoryScanStep1(qTaskInfo_t tinfo, SVersionRange* pVerRange, STimeWindow* pWindow) { SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM); @@ -917,14 +983,14 @@ int32_t qStreamSourceScanParamForHistoryScanStep1(qTaskInfo_t tinfo, SVersionRan pStreamInfo->fillHistoryWindow = *pWindow; pStreamInfo->recoverStep = STREAM_RECOVER_STEP__PREPARE1; - qDebug("%s step 1. set param for stream scanner for scan-history data, verRange:%" PRId64 " - %" PRId64 ", window:%" PRId64 - " - %" PRId64, + qDebug("%s step 1. set param for stream scanner for scan-history data, verRange:%" PRId64 " - %" PRId64 + ", window:%" PRId64 " - %" PRId64, GET_TASKID(pTaskInfo), pStreamInfo->fillHistoryVer.minVer, pStreamInfo->fillHistoryVer.maxVer, pWindow->skey, pWindow->ekey); return 0; } -int32_t qStreamSourceScanParamForHistoryScanStep2(qTaskInfo_t tinfo, SVersionRange *pVerRange, STimeWindow* pWindow) { +int32_t qStreamSourceScanParamForHistoryScanStep2(qTaskInfo_t tinfo, SVersionRange* pVerRange, STimeWindow* pWindow) { SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; ASSERT(pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM); @@ -955,9 +1021,10 @@ int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo) { while (1) { int32_t type = pOperator->operatorType; if (type == QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL || type == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL || - type == QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL || type == QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL) { + type == QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL || + type == QUERY_NODE_PHYSICAL_PLAN_STREAM_MID_INTERVAL) { SStreamIntervalOperatorInfo* pInfo = pOperator->info; - STimeWindowAggSupp* pSup = &pInfo->twAggSup; + STimeWindowAggSupp* pSup = &pInfo->twAggSup; ASSERT(pSup->calTrigger == STREAM_TRIGGER_AT_ONCE || pSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE); ASSERT(pSup->calTriggerSaved == 0 && pSup->deleteMarkSaved == 0); @@ -974,7 +1041,7 @@ int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo) { type == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION || type == QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION) { SStreamSessionAggOperatorInfo* pInfo = pOperator->info; - STimeWindowAggSupp* pSup = &pInfo->twAggSup; + STimeWindowAggSupp* pSup = &pInfo->twAggSup; ASSERT(pSup->calTrigger == STREAM_TRIGGER_AT_ONCE || pSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE); ASSERT(pSup->calTriggerSaved == 0 && pSup->deleteMarkSaved == 0); @@ -989,7 +1056,7 @@ int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo) { pInfo->ignoreExpiredData = false; } else if (type == QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE) { SStreamStateAggOperatorInfo* pInfo = pOperator->info; - STimeWindowAggSupp* pSup = &pInfo->twAggSup; + STimeWindowAggSupp* pSup = &pInfo->twAggSup; ASSERT(pSup->calTrigger == STREAM_TRIGGER_AT_ONCE || pSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE); ASSERT(pSup->calTriggerSaved == 0 && pSup->deleteMarkSaved == 0); @@ -1004,7 +1071,7 @@ int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo) { pInfo->ignoreExpiredData = false; } else if (type == QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT) { SStreamEventAggOperatorInfo* pInfo = pOperator->info; - STimeWindowAggSupp* pSup = &pInfo->twAggSup; + STimeWindowAggSupp* pSup = &pInfo->twAggSup; ASSERT(pSup->calTrigger == STREAM_TRIGGER_AT_ONCE || pSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE); ASSERT(pSup->calTriggerSaved == 0 && pSup->deleteMarkSaved == 0); @@ -1019,7 +1086,7 @@ int32_t qSetStreamOperatorOptionForScanHistory(qTaskInfo_t tinfo) { pInfo->ignoreExpiredData = false; } else if (type == QUERY_NODE_PHYSICAL_PLAN_STREAM_COUNT) { SStreamCountAggOperatorInfo* pInfo = pOperator->info; - STimeWindowAggSupp* pSup = &pInfo->twAggSup; + STimeWindowAggSupp* pSup = &pInfo->twAggSup; ASSERT(pSup->calTrigger == STREAM_TRIGGER_AT_ONCE || pSup->calTrigger == STREAM_TRIGGER_WINDOW_CLOSE); ASSERT(pSup->calTriggerSaved == 0 && pSup->deleteMarkSaved == 0); @@ -1137,20 +1204,21 @@ void qStreamSetSourceExcluded(qTaskInfo_t tinfo, int8_t sourceExcluded) { } int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subType) { + int32_t code = TSDB_CODE_SUCCESS; SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; SStorageAPI* pAPI = &pTaskInfo->storageAPI; SOperatorInfo* pOperator = pTaskInfo->pRoot; const char* id = GET_TASKID(pTaskInfo); - if(subType == TOPIC_SUB_TYPE__COLUMN && pOffset->type == TMQ_OFFSET__LOG){ + 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; } SStreamScanInfo* pInfo = pOperator->info; - SStoreTqReader* pReaderAPI = &pTaskInfo->storageAPI.tqReaderFn; - SWalReader* pWalReader = pReaderAPI->tqReaderGetWalReader(pInfo->tqReader); + SStoreTqReader* pReaderAPI = &pTaskInfo->storageAPI.tqReaderFn; + SWalReader* pWalReader = pReaderAPI->tqReaderGetWalReader(pInfo->tqReader); walReaderVerifyOffset(pWalReader, pOffset); } // if pOffset equal to current offset, means continue consume @@ -1229,9 +1297,9 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT int64_t oldSkey = pScanBaseInfo->cond.twindows.skey; // let's start from the next ts that returned to consumer. - if(pTaskInfo->storageAPI.tqReaderFn.tqGetTablePrimaryKey(pInfo->tqReader)){ + if (pTaskInfo->storageAPI.tqReaderFn.tqGetTablePrimaryKey(pInfo->tqReader)) { pScanBaseInfo->cond.twindows.skey = ts; - }else{ + } else { pScanBaseInfo->cond.twindows.skey = ts + 1; } pScanInfo->scanTimes = 0; @@ -1249,8 +1317,17 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT qDebug("tsdb reader created with offset(snapshot) uid:%" PRId64 " ts:%" PRId64 " table index:%d, total:%d, %s", uid, pScanBaseInfo->cond.twindows.skey, pScanInfo->currentTable, numOfTables, id); } else { - pTaskInfo->storageAPI.tsdReader.tsdSetQueryTableList(pScanBaseInfo->dataReader, &keyInfo, 1); - pTaskInfo->storageAPI.tsdReader.tsdReaderResetStatus(pScanBaseInfo->dataReader, &pScanBaseInfo->cond); + code = pTaskInfo->storageAPI.tsdReader.tsdSetQueryTableList(pScanBaseInfo->dataReader, &keyInfo, 1); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } + + code = pTaskInfo->storageAPI.tsdReader.tsdReaderResetStatus(pScanBaseInfo->dataReader, &pScanBaseInfo->cond); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } qDebug("tsdb reader offset seek snapshot to uid:%" PRId64 " ts %" PRId64 " table index:%d numOfTable:%d, %s", uid, pScanBaseInfo->cond.twindows.skey, pScanInfo->currentTable, numOfTables, id); } @@ -1289,20 +1366,32 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT } pAPI->snapshotFn.taosXSetTablePrimaryKey(sContext, mtInfo.uid); - initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); - if(pAPI->snapshotFn.taosXGetTablePrimaryKey(sContext)){ + code = initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } + if (pAPI->snapshotFn.taosXGetTablePrimaryKey(sContext)) { pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts; - }else{ + } else { pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts + 1; } - tableListAddTableInfo(pTableListInfo, mtInfo.uid, 0); + code = tableListAddTableInfo(pTableListInfo, mtInfo.uid, 0); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } STableKeyInfo* pList = tableListGetInfo(pTableListInfo, 0); int32_t size = tableListGetSize(pTableListInfo); - pTaskInfo->storageAPI.tsdReader.tsdReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, NULL, - (void**)&pInfo->dataReader, NULL, NULL); + code = pTaskInfo->storageAPI.tsdReader.tsdReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, + NULL, (void**)&pInfo->dataReader, NULL, NULL); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + return code; + } cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); strcpy(pTaskInfo->streamInfo.tbName, mtInfo.tbName); @@ -1353,12 +1442,14 @@ void qProcessRspMsg(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet) { } } - pSendInfo->fp(pSendInfo->param, &buf, pMsg->code); + (void)pSendInfo->fp(pSendInfo->param, &buf, pMsg->code); rpcFreeCont(pMsg->pCont); destroySendMsgInfo(pSendInfo); } SArray* qGetQueriedTableListInfo(qTaskInfo_t tinfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = tinfo; SArray* plist = getTableListInfo(pTaskInfo); @@ -1366,30 +1457,50 @@ SArray* qGetQueriedTableListInfo(qTaskInfo_t tinfo) { STableListInfo* pTableListInfo = taosArrayGetP(plist, 0); SArray* pUidList = taosArrayInit(10, sizeof(uint64_t)); + QUERY_CHECK_NULL(pUidList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); int32_t numOfTables = tableListGetSize(pTableListInfo); for (int32_t i = 0; i < numOfTables; ++i) { STableKeyInfo* pKeyInfo = tableListGetInfo(pTableListInfo, i); - taosArrayPush(pUidList, &pKeyInfo->uid); + void* tmp = taosArrayPush(pUidList, &pKeyInfo->uid); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } taosArrayDestroy(plist); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } return pUidList; } static void extractTableList(SArray* pList, const SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + if (pOperator->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { SStreamScanInfo* pScanInfo = pOperator->info; STableScanInfo* pTableScanInfo = pScanInfo->pTableScanOp->info; - taosArrayPush(pList, &pTableScanInfo->base.pTableListInfo); + void* tmp = taosArrayPush(pList, &pTableScanInfo->base.pTableListInfo); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else if (pOperator->operatorType == QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN) { STableScanInfo* pScanInfo = pOperator->info; - taosArrayPush(pList, &pScanInfo->base.pTableListInfo); + void* tmp = taosArrayPush(pList, &pScanInfo->base.pTableListInfo); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else { if (pOperator->pDownstream != NULL && pOperator->pDownstream[0] != NULL) { extractTableList(pList, pOperator->pDownstream[0]); } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } SArray* getTableListInfo(const SExecTaskInfo* pTaskInfo) { @@ -1400,13 +1511,13 @@ SArray* getTableListInfo(const SExecTaskInfo* pTaskInfo) { } int32_t qStreamOperatorReleaseState(qTaskInfo_t tInfo) { - SExecTaskInfo* pTaskInfo = (SExecTaskInfo*) tInfo; + SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tInfo; pTaskInfo->pRoot->fpSet.releaseStreamStateFn(pTaskInfo->pRoot); return 0; } int32_t qStreamOperatorReloadState(qTaskInfo_t tInfo) { - SExecTaskInfo* pTaskInfo = (SExecTaskInfo*) tInfo; + SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tInfo; pTaskInfo->pRoot->fpSet.reloadStreamStateFn(pTaskInfo->pRoot); return 0; } diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index 0476a7981c..dd6067da34 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -72,14 +72,14 @@ static UNUSED_FUNC void* u_realloc(void* p, size_t __size) { #define realloc u_realloc #endif -static void setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExpr, SSDataBlock* pBlock); +static int32_t setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExpr, SSDataBlock* pBlock); static void 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, bool createDummyCol); -static int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, +static void doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, SGroupResInfo* pGroupResInfo, int32_t threshold, bool ignoreGroup); SResultRow* getNewResultRow(SDiskbasedBuf* pResultBuf, int32_t* currentPageId, int32_t interBufSize) { @@ -192,8 +192,12 @@ SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pR // add a new result set for a new group SResultRowPosition pos = {.pageId = pResult->pageId, .offset = pResult->offset}; - tSimpleHashPut(pSup->pResultRowHashTable, pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes), &pos, - sizeof(SResultRowPosition)); + int32_t code = tSimpleHashPut(pSup->pResultRowHashTable, pSup->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes), &pos, + sizeof(SResultRowPosition)); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } // 2. set the new time window to be the new active time window @@ -209,11 +213,14 @@ SResultRow* doSetResultOutBufByKey(SDiskbasedBuf* pResultBuf, SResultRowInfo* pR } // query_range_start, query_range_end, window_duration, window_start, window_end -void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow) { +int32_t initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow) { pColData->info.type = TSDB_DATA_TYPE_TIMESTAMP; pColData->info.bytes = sizeof(int64_t); - colInfoDataEnsureCapacity(pColData, 5, false); + int32_t code = colInfoDataEnsureCapacity(pColData, 5, false); + if (code != TSDB_CODE_SUCCESS) { + return code; + } colDataSetInt64(pColData, 0, &pQueryWindow->skey); colDataSetInt64(pColData, 1, &pQueryWindow->ekey); @@ -221,35 +228,46 @@ void initExecTimeWindowInfo(SColumnInfoData* pColData, STimeWindow* pQueryWindow colDataSetInt64(pColData, 2, &interval); // this value may be variable in case of 'n' and 'y'. colDataSetInt64(pColData, 3, &pQueryWindow->skey); colDataSetInt64(pColData, 4, &pQueryWindow->ekey); + return TSDB_CODE_SUCCESS; } -static void doSetInputDataBlockInfo(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag) { +static int32_t doSetInputDataBlockInfo(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SqlFunctionCtx* pCtx = pExprSup->pCtx; for (int32_t i = 0; i < pExprSup->numOfExprs; ++i) { pCtx[i].order = order; pCtx[i].input.numOfRows = pBlock->info.rows; - setBlockSMAInfo(&pCtx[i], &pExprSup->pExprInfo[i], pBlock); + code = setBlockSMAInfo(&pCtx[i], &pExprSup->pExprInfo[i], pBlock); + QUERY_CHECK_CODE(code, lino, _end); pCtx[i].pSrcBlock = pBlock; pCtx[i].scanFlag = scanFlag; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } -void setInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, bool createDummyCol) { +int32_t setInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, + bool createDummyCol) { if (pBlock->pBlockAgg != NULL) { - doSetInputDataBlockInfo(pExprSup, pBlock, order, scanFlag); + return doSetInputDataBlockInfo(pExprSup, pBlock, order, scanFlag); } else { - doSetInputDataBlock(pExprSup, pBlock, order, scanFlag, createDummyCol); + return doSetInputDataBlock(pExprSup, pBlock, order, scanFlag, createDummyCol); } } static int32_t doCreateConstantValColumnInfo(SInputColumnInfoData* pInput, SFunctParam* pFuncParam, int32_t paramIndex, int32_t numOfRows) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SColumnInfoData* pColInfo = NULL; if (pInput->pData[paramIndex] == NULL) { pColInfo = taosMemoryCalloc(1, sizeof(SColumnInfoData)); - if (pColInfo == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } + QUERY_CHECK_NULL(pColInfo, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); // Set the correct column info (data type and bytes) pColInfo->info.type = pFuncParam->param.nType; @@ -260,7 +278,8 @@ static int32_t doCreateConstantValColumnInfo(SInputColumnInfoData* pInput, SFunc pColInfo = pInput->pData[paramIndex]; } - colInfoDataEnsureCapacity(pColInfo, numOfRows, false); + code = colInfoDataEnsureCapacity(pColInfo, numOfRows, false); + QUERY_CHECK_CODE(code, lino, _end); int8_t type = pFuncParam->param.nType; if (type == TSDB_DATA_TYPE_BIGINT || type == TSDB_DATA_TYPE_UBIGINT) { @@ -277,12 +296,17 @@ static int32_t doCreateConstantValColumnInfo(SInputColumnInfoData* pInput, SFunc char* tmp = taosMemoryMalloc(pFuncParam->param.nLen + VARSTR_HEADER_SIZE); STR_WITH_SIZE_TO_VARSTR(tmp, pFuncParam->param.pz, pFuncParam->param.nLen); for (int32_t i = 0; i < numOfRows; ++i) { - colDataSetVal(pColInfo, i, tmp, false); + code = colDataSetVal(pColInfo, i, tmp, false); + QUERY_CHECK_CODE(code, lino, _end); } taosMemoryFree(tmp); } - return TSDB_CODE_SUCCESS; +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int32_t order, int32_t scanFlag, @@ -302,7 +326,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int pInput->colDataSMAIsSet = false; SExprInfo* pOneExpr = &pExprSup->pExprInfo[i]; - bool hasPk = pOneExpr->pExpr->nodeType == QUERY_NODE_FUNCTION && pOneExpr->pExpr->_function.pFunctNode->hasPk; + bool hasPk = pOneExpr->pExpr->nodeType == QUERY_NODE_FUNCTION && pOneExpr->pExpr->_function.pFunctNode->hasPk; pCtx[i].hasPrimaryKey = hasPk; int16_t tsParamIdx = (!hasPk) ? pOneExpr->base.numOfParams - 1 : pOneExpr->base.numOfParams - 2; @@ -320,13 +344,13 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int // NOTE: the last parameter is the primary timestamp column // todo: refactor this - + if (fmIsImplicitTsFunc(pCtx[i].functionId) && (j == tsParamIdx)) { pInput->pPTS = pInput->pData[j]; // in case of merge function, this is not always the ts column data. } if (hasPk && (j == pkParamIdx)) { pInput->pPrimaryKey = pInput->pData[j]; - } + } ASSERT(pInput->pData[j] != NULL); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { // todo avoid case: top(k, 12), 12 is the value parameter. @@ -419,7 +443,9 @@ static int32_t doCreateConstantValColumnSMAInfo(SInputColumnInfoData* pInput, SF return TSDB_CODE_SUCCESS; } -void setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExprInfo, SSDataBlock* pBlock) { +int32_t setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExprInfo, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; int32_t numOfRows = pBlock->info.rows; SInputColumnInfoData* pInput = &pCtx->input; @@ -443,12 +469,19 @@ void setBlockSMAInfo(SqlFunctionCtx* pCtx, SExprInfo* pExprInfo, SSDataBlock* pB // the data in the corresponding SColumnInfoData will not be used. pInput->pData[j] = taosArrayGet(pBlock->pDataBlock, slotId); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { - doCreateConstantValColumnSMAInfo(pInput, pFuncParam, pFuncParam->param.nType, j, pBlock->info.rows); + code = doCreateConstantValColumnSMAInfo(pInput, pFuncParam, pFuncParam->param.nType, j, pBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); } } } else { pInput->colDataSMAIsSet = false; } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } ///////////////////////////////////////////////////////////////////////////////////////////// @@ -468,7 +501,8 @@ STimeWindow getAlignQueryTimeWindow(const SInterval* pInterval, int64_t key) { return win; } -int32_t setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t numOfOutput, int32_t* rowEntryInfoOffset) { +int32_t setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t numOfOutput, + int32_t* rowEntryInfoOffset) { bool init = false; for (int32_t i = 0; i < numOfOutput; ++i) { pCtx[i].resultInfo = getResultEntryInfo(pResult, i, rowEntryInfoOffset); @@ -488,7 +522,7 @@ int32_t setResultRowInitCtx(SResultRow* pResult, SqlFunctionCtx* pCtx, int32_t n if (!pResInfo->initialized) { if (pCtx[i].functionId != -1) { bool ini = pCtx[i].fpSet.init(&pCtx[i], pResInfo); - if (!ini && fmIsUserDefinedFunc(pCtx[i].functionId)){ + if (!ini && fmIsUserDefinedFunc(pCtx[i].functionId)) { pResInfo->initialized = false; return TSDB_CODE_UDF_FUNC_EXEC_FAILURE; } @@ -517,6 +551,8 @@ void clearResultRowInitFlag(SqlFunctionCtx* pCtx, int32_t numOfOutput) { } int32_t doFilter(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SColMatchInfo* pColMatchInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pFilterInfo == NULL || pBlock->info.rows == 0) { return TSDB_CODE_SUCCESS; } @@ -524,16 +560,12 @@ int32_t doFilter(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SColMatchInfo* p SFilterColumnParam param1 = {.numOfCols = taosArrayGetSize(pBlock->pDataBlock), .pDataBlock = pBlock->pDataBlock}; SColumnInfoData* p = NULL; - int32_t code = filterSetDataFromSlotId(pFilterInfo, ¶m1); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + code = filterSetDataFromSlotId(pFilterInfo, ¶m1); + QUERY_CHECK_CODE(code, lino, _err); int32_t status = 0; code = filterExecute(pFilterInfo, pBlock, &p, NULL, param1.numOfCols, &status); - if (code != TSDB_CODE_SUCCESS) { - goto _err; - } + QUERY_CHECK_CODE(code, lino, _err); extractQualifiedTupleByFilterResult(pBlock, p, status); @@ -544,7 +576,8 @@ int32_t doFilter(SSDataBlock* pBlock, SFilterInfo* pFilterInfo, SColMatchInfo* p if (pInfo->colId == PRIMARYKEY_TIMESTAMP_COL_ID) { SColumnInfoData* pColData = taosArrayGet(pBlock->pDataBlock, pInfo->dstSlotId); if (pColData->info.type == TSDB_DATA_TYPE_TIMESTAMP) { - blockDataUpdateTsWindow(pBlock, pInfo->dstSlotId); + code = blockDataUpdateTsWindow(pBlock, pInfo->dstSlotId); + QUERY_CHECK_CODE(code, lino, _err); break; } } @@ -598,6 +631,8 @@ void doUpdateNumOfRows(SqlFunctionCtx* pCtx, SResultRow* pRow, int32_t numOfExpr void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultRow* pRow, SqlFunctionCtx* pCtx, SSDataBlock* pBlock, const int32_t* rowEntryOffset, SExecTaskInfo* pTaskInfo) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; for (int32_t j = 0; j < numOfExprs; ++j) { int32_t slotId = pExprInfo[j].base.resSchema.slotId; @@ -611,8 +646,10 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR } } - blockDataEnsureCapacity(pBlock, pBlock->info.rows + pCtx[j].resultInfo->numOfRes); - int32_t code = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); + code = blockDataEnsureCapacity(pBlock, pBlock->info.rows + pCtx[j].resultInfo->numOfRes); + QUERY_CHECK_CODE(code, lino, _end); + + code = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); if (TAOS_FAILED(code)) { qError("%s build result data block error, code %s", GET_TASKID(pTaskInfo), tstrerror(code)); T_LONG_JMP(pTaskInfo->env, code); @@ -625,10 +662,17 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR SColumnInfoData* pColInfoData = taosArrayGet(pBlock->pDataBlock, slotId); char* in = GET_ROWCELL_INTERBUF(pCtx[j].resultInfo); for (int32_t k = 0; k < pRow->numOfRows; ++k) { - colDataSetVal(pColInfoData, pBlock->info.rows + k, in, pCtx[j].resultInfo->isNullRes); + code = colDataSetVal(pColInfoData, pBlock->info.rows + k, in, pCtx[j].resultInfo->isNullRes); + QUERY_CHECK_CODE(code, lino, _end); } } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } // todo refactor. SResultRow has direct pointer in miainfo @@ -671,9 +715,10 @@ int32_t finalizeResultRows(SDiskbasedBuf* pBuf, SResultRowPosition* resultRowPos return 0; } -int32_t doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, - SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t threshold, - bool ignoreGroup) { +void doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, + SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, int32_t threshold, bool ignoreGroup) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExprInfo* pExprInfo = pSup->pExprInfo; int32_t numOfExprs = pSup->numOfExprs; int32_t* rowEntryOffset = pSup->rowEntryInfoOffset; @@ -724,7 +769,8 @@ int32_t doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, if (pBlock->info.rows + pRow->numOfRows > pBlock->info.capacity) { uint32_t newSize = pBlock->info.rows + pRow->numOfRows + ((numOfRows - iter) > 1 ? 1 : 0); - blockDataEnsureCapacity(pBlock, newSize); + code = blockDataEnsureCapacity(pBlock, newSize); + QUERY_CHECK_CODE(code, lino, _end); qDebug("datablock capacity not sufficient, expand to required:%d, current capacity:%d, %s", newSize, pBlock->info.capacity, GET_TASKID(pTaskInfo)); // todo set the pOperator->resultInfo size @@ -744,14 +790,22 @@ int32_t doCopyToSDataBlockByHash(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, } qDebug("%s result generated, rows:%" PRId64 ", groupId:%" PRIu64, GET_TASKID(pTaskInfo), pBlock->info.rows, - pBlock->info.id.groupId); + pBlock->info.id.groupId); pBlock->info.dataLoad = 1; - blockDataUpdateTsWindow(pBlock, 0); - return 0; + code = blockDataUpdateTsWindow(pBlock, 0); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } -int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, - SGroupResInfo* pGroupResInfo, int32_t threshold, bool ignoreGroup) { +void doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprSupp* pSup, SDiskbasedBuf* pBuf, + SGroupResInfo* pGroupResInfo, int32_t threshold, bool ignoreGroup) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExprInfo* pExprInfo = pSup->pExprInfo; int32_t numOfExprs = pSup->numOfExprs; int32_t* rowEntryOffset = pSup->rowEntryInfoOffset; @@ -792,7 +846,8 @@ int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprS if (pBlock->info.rows + pRow->numOfRows > pBlock->info.capacity) { uint32_t newSize = pBlock->info.rows + pRow->numOfRows + ((numOfRows - i) > 1 ? 1 : 0); - blockDataEnsureCapacity(pBlock, newSize); + code = blockDataEnsureCapacity(pBlock, newSize); + QUERY_CHECK_CODE(code, lino, _end); qDebug("datablock capacity not sufficient, expand to required:%d, current capacity:%d, %s", newSize, pBlock->info.capacity, GET_TASKID(pTaskInfo)); // todo set the pOperator->resultInfo size @@ -811,8 +866,14 @@ int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprS qDebug("%s result generated, rows:%" PRId64 ", groupId:%" PRIu64, GET_TASKID(pTaskInfo), pBlock->info.rows, pBlock->info.id.groupId); pBlock->info.dataLoad = 1; - blockDataUpdateTsWindow(pBlock, 0); - return 0; + code = blockDataUpdateTsWindow(pBlock, 0); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } void doBuildResultDatablock(SOperatorInfo* pOperator, SOptrBasicInfo* pbInfo, SGroupResInfo* pGroupResInfo, @@ -909,9 +970,9 @@ void initBasicInfo(SOptrBasicInfo* pInfo, SSDataBlock* pBlock) { initResultRowInfo(&pInfo->resultRowInfo); } -static void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, SExprInfo* pExpr, int32_t numOfOutput) { +static void destroySqlFunctionCtx(SqlFunctionCtx* pCtx, SExprInfo* pExpr, int32_t numOfOutput) { if (pCtx == NULL) { - return NULL; + return; } for (int32_t i = 0; i < numOfOutput; ++i) { @@ -939,7 +1000,7 @@ static void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, SExprInfo* pExpr, int32 } taosMemoryFreeClear(pCtx); - return NULL; + return; } int32_t initExprSupp(SExprSupp* pSup, SExprInfo* pExprInfo, int32_t numOfExpr, SFunctionStateStore* pStore) { @@ -970,7 +1031,10 @@ void cleanupExprSupp(SExprSupp* pSupp) { taosMemoryFree(pSupp->rowEntryInfoOffset); } -void cleanupBasicInfo(SOptrBasicInfo* pInfo) { blockDataDestroy(pInfo->pRes); pInfo->pRes = NULL;} +void cleanupBasicInfo(SOptrBasicInfo* pInfo) { + blockDataDestroy(pInfo->pRes); + pInfo->pRes = NULL; +} bool groupbyTbname(SNodeList* pGroupList) { bool bytbname = false; @@ -1019,7 +1083,12 @@ int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, SExecTaskInfo* for (int32_t i = 0; i < numOfTables; ++i) { STableKeyInfo* pTable = tableListGetInfo(pTableListInfo, i); - taosArrayPush(pDeleterParam->pUidList, &pTable->uid); + void* tmp = taosArrayPush(pDeleterParam->pUidList, &pTable->uid); + if (!tmp) { + taosArrayDestroy(pDeleterParam->pUidList); + taosMemoryFree(pDeleterParam); + return TSDB_CODE_OUT_OF_MEMORY; + } } *pParam = pDeleterParam; @@ -1056,7 +1125,7 @@ void freeOperatorParamImpl(SOperatorParam* pParam, SOperatorParamType type) { taosArrayDestroy(pParam->pChildren); taosMemoryFree(pParam->value); - + taosMemoryFree(pParam); } @@ -1077,25 +1146,15 @@ void freeExchangeGetOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_GET_PARAM); } -void freeExchangeNotifyOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); -} +void freeExchangeNotifyOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); } -void freeGroupCacheGetOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_GET_PARAM); -} +void freeGroupCacheGetOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_GET_PARAM); } -void freeGroupCacheNotifyOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); -} +void freeGroupCacheNotifyOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); } -void freeMergeJoinGetOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_GET_PARAM); -} +void freeMergeJoinGetOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_GET_PARAM); } -void freeMergeJoinNotifyOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); -} +void freeMergeJoinNotifyOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); } void freeTableScanGetOperatorParam(SOperatorParam* pParam) { STableScanOperatorParam* pTableScanParam = (STableScanOperatorParam*)pParam->value; @@ -1103,16 +1162,13 @@ void freeTableScanGetOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_GET_PARAM); } -void freeTableScanNotifyOperatorParam(SOperatorParam* pParam) { - freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); -} - +void freeTableScanNotifyOperatorParam(SOperatorParam* pParam) { freeOperatorParamImpl(pParam, OP_NOTIFY_PARAM); } void freeOperatorParam(SOperatorParam* pParam, SOperatorParamType type) { if (NULL == pParam) { return; } - + switch (pParam->opType) { case QUERY_NODE_PHYSICAL_PLAN_EXCHANGE: type == OP_GET_PARAM ? freeExchangeGetOperatorParam(pParam) : freeExchangeNotifyOperatorParam(pParam); @@ -1133,7 +1189,7 @@ void freeOperatorParam(SOperatorParam* pParam, SOperatorParamType type) { } void freeResetOperatorParams(struct SOperatorInfo* pOperator, SOperatorParamType type, bool allFree) { - SOperatorParam** ppParam = NULL; + SOperatorParam** ppParam = NULL; SOperatorParam*** pppDownstramParam = NULL; switch (type) { case OP_GET_PARAM: @@ -1166,22 +1222,22 @@ void freeResetOperatorParams(struct SOperatorInfo* pOperator, SOperatorParamType } } - -FORCE_INLINE SSDataBlock* getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, bool clearParam) { +FORCE_INLINE SSDataBlock* getNextBlockFromDownstreamImpl(struct SOperatorInfo* pOperator, int32_t idx, + bool clearParam) { 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]); + SSDataBlock* pBlock = pOperator->pDownstream[idx]->fpSet.getNextExtFn(pOperator->pDownstream[idx], + pOperator->pDownstreamGetParams[idx]); if (clearParam) { freeOperatorParam(pOperator->pDownstreamGetParams[idx], OP_GET_PARAM); pOperator->pDownstreamGetParams[idx] = NULL; } return pBlock; } - + return pOperator->pDownstream[idx]->fpSet.getNextFn(pOperator->pDownstream[idx]); } - bool compareVal(const char* v, const SStateKeys* pKey) { if (IS_VAR_DATA_TYPE(pKey->type)) { if (varDataLen(v) != varDataLen(pKey->pData)) { diff --git a/source/libs/executor/src/filloperator.c b/source/libs/executor/src/filloperator.c index ad1c6d67d4..cf31b5b7ad 100644 --- a/source/libs/executor/src/filloperator.c +++ b/source/libs/executor/src/filloperator.c @@ -26,11 +26,11 @@ #include "ttime.h" #include "function.h" +#include "operator.h" #include "querynodes.h" +#include "querytask.h" #include "tdatablock.h" #include "tfill.h" -#include "operator.h" -#include "querytask.h" typedef struct STimeRange { TSKEY skey; @@ -65,9 +65,9 @@ static void doHandleRemainBlockForNewGroupImpl(SOperatorInfo* pOperator, SFillOp pInfo->totalInputRows = pInfo->existNewGroupBlock->info.rows; SSDataBlock* pResBlock = pInfo->pFinalRes; -// int32_t order = TSDB_ORDER_ASC; + // int32_t order = TSDB_ORDER_ASC; int32_t scanFlag = MAIN_SCAN; -// getTableScanInfo(pOperator, &order, &scanFlag, false); + // getTableScanInfo(pOperator, &order, &scanFlag, false); taosResetFillInfo(pInfo->pFillInfo, getFillInfoStart(pInfo->pFillInfo)); blockDataCleanup(pInfo->pRes); @@ -75,7 +75,8 @@ static void doHandleRemainBlockForNewGroupImpl(SOperatorInfo* pOperator, SFillOp revisedFillStartKey(pInfo, pInfo->existNewGroupBlock, order); - int64_t ts = (order == TSDB_ORDER_ASC)? pInfo->existNewGroupBlock->info.window.ekey:pInfo->existNewGroupBlock->info.window.skey; + int64_t ts = (order == TSDB_ORDER_ASC) ? pInfo->existNewGroupBlock->info.window.ekey + : pInfo->existNewGroupBlock->info.window.skey; taosFillSetStartInfo(pInfo->pFillInfo, pInfo->pRes->info.rows, ts); taosFillSetInputDataBlock(pInfo->pFillInfo, pInfo->pRes); @@ -84,7 +85,12 @@ static void doHandleRemainBlockForNewGroupImpl(SOperatorInfo* pOperator, SFillOp } int32_t numOfResultRows = pResultInfo->capacity - pResBlock->info.rows; - taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); + int32_t code = taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; + T_LONG_JMP(pTaskInfo->env, code); + } pInfo->curGroupId = pInfo->existNewGroupBlock->info.id.groupId; pInfo->existNewGroupBlock = NULL; @@ -92,9 +98,14 @@ static void doHandleRemainBlockForNewGroupImpl(SOperatorInfo* pOperator, SFillOp static void doHandleRemainBlockFromNewGroup(SOperatorInfo* pOperator, SFillOperatorInfo* pInfo, SResultInfo* pResultInfo, int32_t order) { + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (taosFillHasMoreResults(pInfo->pFillInfo)) { int32_t numOfResultRows = pResultInfo->capacity - pInfo->pFinalRes->info.rows; - taosFillResultDataBlock(pInfo->pFillInfo, pInfo->pFinalRes, numOfResultRows); + int32_t code = taosFillResultDataBlock(pInfo->pFillInfo, pInfo->pFinalRes, numOfResultRows); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } pInfo->pRes->info.id.groupId = pInfo->curGroupId; return; } @@ -106,18 +117,32 @@ static void doHandleRemainBlockFromNewGroup(SOperatorInfo* pOperator, SFillOpera } void doApplyScalarCalculation(SOperatorInfo* pOperator, SSDataBlock* pBlock, int32_t order, int32_t scanFlag) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SFillOperatorInfo* pInfo = pOperator->info; SExprSupp* pSup = &pOperator->exprSupp; - setInputDataBlock(pSup, pBlock, order, scanFlag, false); - projectApplyFunctions(pSup->pExprInfo, pInfo->pRes, pBlock, pSup->pCtx, pSup->numOfExprs, NULL); + code = setInputDataBlock(pSup, pBlock, order, scanFlag, false); + QUERY_CHECK_CODE(code, lino, _end); + code = projectApplyFunctions(pSup->pExprInfo, pInfo->pRes, pBlock, pSup->pCtx, pSup->numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); // reset the row value before applying the no-fill functions to the input data block, which is "pBlock" in this case. pInfo->pRes->info.rows = 0; SExprSupp* pNoFillSupp = &pInfo->noFillExprSupp; - setInputDataBlock(pNoFillSupp, pBlock, order, scanFlag, false); + code = setInputDataBlock(pNoFillSupp, pBlock, order, scanFlag, false); + QUERY_CHECK_CODE(code, lino, _end); - projectApplyFunctions(pNoFillSupp->pExprInfo, pInfo->pRes, pBlock, pNoFillSupp->pCtx, pNoFillSupp->numOfExprs, NULL); + code = projectApplyFunctions(pNoFillSupp->pExprInfo, pInfo->pRes, pBlock, pNoFillSupp->pCtx, pNoFillSupp->numOfExprs, + NULL); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pRes->info.id.groupId = pBlock->info.id.groupId; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } static void fillResetPrevForNewGroup(SFillInfo* pFillInfo) { @@ -134,13 +159,13 @@ static void revisedFillStartKey(SFillOperatorInfo* pInfo, SSDataBlock* pBlock, i if (order == TSDB_ORDER_ASC) { int64_t skey = pBlock->info.window.skey; if (skey < pInfo->pFillInfo->start) { // the start key may be smaller than the - ASSERT( taosFillNotStarted(pInfo->pFillInfo)); + ASSERT(taosFillNotStarted(pInfo->pFillInfo)); taosFillUpdateStartTimestampInfo(pInfo->pFillInfo, skey); } else if (pInfo->pFillInfo->start < skey) { - int64_t t = skey; + int64_t t = skey; SInterval* pInterval = &pInfo->pFillInfo->interval; - while(1) { + while (1) { int64_t prev = taosTimeAdd(t, -pInterval->sliding, pInterval->slidingUnit, pInterval->precision); if (prev <= pInfo->pFillInfo->start) { t = prev; @@ -155,13 +180,13 @@ static void revisedFillStartKey(SFillOperatorInfo* pInfo, SSDataBlock* pBlock, i } else { int64_t ekey = pBlock->info.window.ekey; if (ekey > pInfo->pFillInfo->start) { - ASSERT( taosFillNotStarted(pInfo->pFillInfo)); + ASSERT(taosFillNotStarted(pInfo->pFillInfo)); taosFillUpdateStartTimestampInfo(pInfo->pFillInfo, ekey); } else if (ekey < pInfo->pFillInfo->start) { - int64_t t = ekey; + int64_t t = ekey; SInterval* pInterval = &pInfo->pFillInfo->interval; int64_t prev = t; - while(1) { + while (1) { int64_t next = taosTimeAdd(t, pInterval->sliding, pInterval->slidingUnit, pInterval->precision); if (next >= pInfo->pFillInfo->start) { prev = t; @@ -180,6 +205,8 @@ static void revisedFillStartKey(SFillOperatorInfo* pInfo, SSDataBlock* pBlock, i } static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SFillOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -219,11 +246,14 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { } else { pResBlock->info.scanFlag = pBlock->info.scanFlag; pBlock->info.dataLoad = 1; - blockDataUpdateTsWindow(pBlock, pInfo->primarySrcSlotId); + code = blockDataUpdateTsWindow(pBlock, pInfo->primarySrcSlotId); + QUERY_CHECK_CODE(code, lino, _end); blockDataCleanup(pInfo->pRes); - blockDataEnsureCapacity(pInfo->pRes, pBlock->info.rows); - blockDataEnsureCapacity(pInfo->pFinalRes, pBlock->info.rows); + code = blockDataEnsureCapacity(pInfo->pRes, pBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); + code = blockDataEnsureCapacity(pInfo->pFinalRes, pBlock->info.rows); + QUERY_CHECK_CODE(code, lino, _end); doApplyScalarCalculation(pOperator, pBlock, order, pBlock->info.scanFlag); if (pInfo->curGroupId == 0 || (pInfo->curGroupId == pInfo->pRes->info.id.groupId)) { @@ -234,7 +264,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { pInfo->curGroupId = pInfo->pRes->info.id.groupId; // the first data block pInfo->totalInputRows += pInfo->pRes->info.rows; - int64_t ts = (order == TSDB_ORDER_ASC)? pBlock->info.window.ekey:pBlock->info.window.skey; + int64_t ts = (order == TSDB_ORDER_ASC) ? pBlock->info.window.ekey : pBlock->info.window.skey; taosFillSetStartInfo(pInfo->pFillInfo, pInfo->pRes->info.rows, ts); taosFillSetInputDataBlock(pInfo->pFillInfo, pInfo->pRes); } else if (pInfo->curGroupId != pBlock->info.id.groupId) { // the new group data block @@ -248,7 +278,8 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { } int32_t numOfResultRows = pOperator->resultInfo.capacity - pResBlock->info.rows; - taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); + code = taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); + QUERY_CHECK_CODE(code, lino, _end); // current group has no more result to return if (pResBlock->info.rows > 0) { @@ -276,6 +307,13 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { return NULL; } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } + return NULL; } static SSDataBlock* doFill(SOperatorInfo* pOperator) { @@ -294,7 +332,11 @@ static SSDataBlock* doFill(SOperatorInfo* pOperator) { break; } - doFilter(fillResult, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); + int32_t code = doFilter(fillResult, pOperator->exprSupp.pFilterInfo, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } if (fillResult->info.rows > 0) { break; } @@ -329,8 +371,8 @@ static int32_t initFillInfo(SFillOperatorInfo* pInfo, SExprInfo* pExpr, int32_t int64_t startKey = (order == TSDB_ORDER_ASC) ? win.skey : win.ekey; -// STimeWindow w = {0}; -// getInitialStartTimeWindow(pInterval, startKey, &w, order == TSDB_ORDER_ASC); + // STimeWindow w = {0}; + // getInitialStartTimeWindow(pInterval, startKey, &w, order == TSDB_ORDER_ASC); pInfo->pFillInfo = taosCreateFillInfo(startKey, numOfCols, numOfNotFillCols, capacity, pInterval, fillType, pColInfo, pInfo->primaryTsCol, order, id); @@ -409,7 +451,8 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* goto _error; } - code = initExprSupp(pNoFillSupp, pNoFillSupp->pExprInfo, pNoFillSupp->numOfExprs, &pTaskInfo->storageAPI.functionStore); + code = + initExprSupp(pNoFillSupp, pNoFillSupp->pExprInfo, pNoFillSupp->numOfExprs, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -425,7 +468,10 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* SResultInfo* pResultInfo = &pOperator->resultInfo; initResultSizeInfo(&pOperator->resultInfo, 4096); - blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } code = initExprSupp(&pOperator->exprSupp, pExprInfo, pInfo->numOfExpr, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -446,7 +492,10 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* } pInfo->pFinalRes = createOneDataBlock(pInfo->pRes, false); - blockDataEnsureCapacity(pInfo->pFinalRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->pFinalRes, pOperator->resultInfo.capacity); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } code = filterInitFromNode((SNode*)pPhyFillNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); if (code != TSDB_CODE_SUCCESS) { @@ -455,8 +504,8 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* setOperatorInfo(pOperator, "FillOperator", QUERY_NODE_PHYSICAL_PLAN_FILL, false, OP_NOT_OPENED, pInfo, pTaskInfo); pOperator->exprSupp.numOfExprs = pInfo->numOfExpr; - pOperator->fpSet = - createOperatorFpSet(optrDummyOpenFn, doFill, NULL, destroyFillOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); + pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doFill, NULL, destroyFillOperatorInfo, optrDefaultBufFn, NULL, + optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); return pOperator; diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 2382f10503..dbe844bc32 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -67,7 +67,7 @@ static void* getCurrentDataGroupInfo(const SPartitionOperatorInfo* pInfo, SDa static int32_t* setupColumnOffset(const SSDataBlock* pBlock, int32_t rowCapacity); static int32_t setGroupResultOutputBuf(SOperatorInfo* pOperator, SOptrBasicInfo* binfo, int32_t numOfCols, char* pData, int32_t bytes, uint64_t groupId, SDiskbasedBuf* pBuf, SAggSupporter* pAggSup); -static SArray* extractColumnInfo(SNodeList* pNodeList); +static int32_t extractColumnInfo(SNodeList* pNodeList, SArray** pArrayRes); static void freeGroupKey(void* param) { SGroupKeys* pKey = (SGroupKeys*)param; @@ -111,7 +111,10 @@ static int32_t initGroupOptrInfo(SArray** pGroupColVals, int32_t* keyLen, char** return TSDB_CODE_OUT_OF_MEMORY; } - taosArrayPush((*pGroupColVals), &key); + void* tmp = taosArrayPush((*pGroupColVals), &key); + if (!tmp) { + return TSDB_CODE_OUT_OF_MEMORY; + } } int32_t nullFlagSize = sizeof(int8_t) * numOfGroupCols; @@ -349,12 +352,16 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SSDataBlock* pBlock) { } static SSDataBlock* buildGroupResultDataBlock(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SGroupbyOperatorInfo* pInfo = pOperator->info; + SSDataBlock* pRes = pInfo->binfo.pRes; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - SSDataBlock* pRes = pInfo->binfo.pRes; while (1) { doBuildResultDatablock(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf); - doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); if (!hasRemainResults(&pInfo->groupResInfo)) { setOperatorCompleted(pOperator); @@ -367,6 +374,12 @@ static SSDataBlock* buildGroupResultDataBlock(SOperatorInfo* pOperator) { } pOperator->resultInfo.totalRows += pRes->info.rows; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } return (pRes->info.rows == 0) ? NULL : pRes; } @@ -412,6 +425,9 @@ void doBuildResultDatablockByHash(SOperatorInfo* pOperator, SOptrBasicInfo* pbIn } static SSDataBlock* buildGroupResultDataBlockByHash(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SGroupbyOperatorInfo* pInfo = pOperator->info; SSDataBlock* pRes = pInfo->binfo.pRes; @@ -419,7 +435,9 @@ static SSDataBlock* buildGroupResultDataBlockByHash(SOperatorInfo* pOperator) { while (1) { doBuildResultDatablockByHash(pOperator, &pInfo->binfo, &pInfo->groupResInfo, pInfo->aggSup.pResultBuf); - doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + code = doFilter(pRes, pOperator->exprSupp.pFilterInfo, NULL); + QUERY_CHECK_CODE(code, lino, _end); + if (!hasRemainResultByHash(pOperator)) { setOperatorCompleted(pOperator); // clean hash after completed @@ -433,6 +451,12 @@ static SSDataBlock* buildGroupResultDataBlockByHash(SOperatorInfo* pOperator) { } pOperator->resultInfo.totalRows += pRes->info.rows; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } return (pRes->info.rows == 0) ? NULL : pRes; } @@ -441,6 +465,8 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { return NULL; } + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SGroupbyOperatorInfo* pInfo = pOperator->info; @@ -462,15 +488,14 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { pInfo->binfo.pRes->info.scanFlag = pBlock->info.scanFlag; // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(&pOperator->exprSupp, pBlock, order, pBlock->info.scanFlag, true); + code = setInputDataBlock(&pOperator->exprSupp, pBlock, order, pBlock->info.scanFlag, true); + QUERY_CHECK_CODE(code, lino, _end); // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { - pTaskInfo->code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, - pInfo->scalarSup.numOfExprs, NULL); - if (pTaskInfo->code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, pTaskInfo->code); - } + code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, + pInfo->scalarSup.numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); } doHashGroupbyAgg(pOperator, pBlock); @@ -491,11 +516,19 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { pGroupResInfo->dataPos = NULL; pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + pTaskInfo->code = code; + T_LONG_JMP(pTaskInfo->env, code); + } return buildGroupResultDataBlockByHash(pOperator); } SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo) { int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SGroupbyOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupbyOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -514,32 +547,28 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pScalarExprInfo = createExprInfo(pAggNode->pExprs, NULL, &numOfScalarExpr); } - pInfo->pGroupCols = extractColumnInfo(pAggNode->pGroupKeys); + pInfo->pGroupCols = NULL; + code = extractColumnInfo(pAggNode->pGroupKeys, &pInfo->pGroupCols); + QUERY_CHECK_CODE(code, lino, _error); + code = initExprSupp(&pInfo->scalarSup, pScalarExprInfo, numOfScalarExpr, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); initResultSizeInfo(&pOperator->resultInfo, 4096); - blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity); + QUERY_CHECK_CODE(code, lino, _error); code = initGroupOptrInfo(&pInfo->pGroupColVals, &pInfo->groupKeyLen, &pInfo->keyBuf, pInfo->pGroupCols); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); int32_t num = 0; SExprInfo* pExprInfo = createExprInfo(pAggNode->pAggFuncs, pAggNode->pGroupKeys, &num); code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, num, pInfo->groupKeyLen, pTaskInfo->id.str, pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); code = filterInitFromNode((SNode*)pAggNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); initResultRowInfo(&pInfo->binfo.resultRowInfo); setOperatorInfo(pOperator, "GroupbyAggOperator", 0, true, OP_NOT_OPENED, pInfo, pTaskInfo); @@ -551,9 +580,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, hashGroupbyAggregate, NULL, destroyGroupOperatorInfo, optrDefaultBufFn, NULL, optrDefaultGetNextExtFn, NULL); code = appendDownstream(pOperator, &downstream, 1); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); return pOperator; @@ -567,6 +594,8 @@ _error: } SSDataBlock* createBlockDataNotLoaded(const SOperatorInfo* pOperator, SSDataBlock* pDataBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; if (pDataBlock == NULL) { return NULL; } @@ -595,27 +624,33 @@ SSDataBlock* createBlockDataNotLoaded(const SOperatorInfo* pOperator, SSDataBloc int32_t slotId = pExpr->base.pParam[0].pCol->slotId; SColumnInfoData* pSrc = taosArrayGet(pDataBlock->pDataBlock, slotId); SColumnInfoData colInfo = {.hasNull = true, .info = pSrc->info}; - blockDataAppendColInfo(pDstBlock, &colInfo); + code = blockDataAppendColInfo(pDstBlock, &colInfo); + QUERY_CHECK_CODE(code, lino, _end); SColumnInfoData* pDst = taosArrayGet(pDstBlock->pDataBlock, i); if (pDataBlock->pBlockAgg && pDataBlock->pBlockAgg[slotId].colId != -1) { pDstBlock->pBlockAgg[i] = pDataBlock->pBlockAgg[slotId]; } else { - int32_t code = doEnsureCapacity(pDst, &pDstBlock->info, pDataBlock->info.rows, false); - if (code != TSDB_CODE_SUCCESS) { - terrno = code; - blockDataDestroy(pDstBlock); - return NULL; - } + code = doEnsureCapacity(pDst, &pDstBlock->info, pDataBlock->info.rows, false); + QUERY_CHECK_CODE(code, lino, _end); - colDataAssign(pDst, pSrc, pDataBlock->info.rows, &pDataBlock->info); + code = colDataAssign(pDst, pSrc, pDataBlock->info.rows, &pDataBlock->info); + QUERY_CHECK_CODE(code, lino, _end); } } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + blockDataDestroy(pDstBlock); + return NULL; + } return pDstBlock; } static void doHashPartition(SOperatorInfo* pOperator, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SPartitionOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -709,24 +744,37 @@ static void doHashPartition(SOperatorInfo* pOperator, SSDataBlock* pBlock) { } if (pGroupInfo->blockForNotLoaded == NULL) { pGroupInfo->blockForNotLoaded = taosArrayInit(0, sizeof(SSDataBlock*)); + QUERY_CHECK_NULL(pGroupInfo->blockForNotLoaded, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pGroupInfo->offsetForNotLoaded = 0; } dataNotLoadBlock->info.id.groupId = pGroupInfo->groupId; dataNotLoadBlock->info.dataLoad = 0; - taosArrayPush(pGroupInfo->blockForNotLoaded, &dataNotLoadBlock); + void* tmp = taosArrayPush(pGroupInfo->blockForNotLoaded, &dataNotLoadBlock); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); break; } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } } void* getCurrentDataGroupInfo(const SPartitionOperatorInfo* pInfo, SDataGroupInfo** pGroupInfo, int32_t len) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SDataGroupInfo* p = taosHashGet(pInfo->pGroupSet, pInfo->keyBuf, len); void* pPage = NULL; if (p == NULL) { // it is a new group SDataGroupInfo gi = {0}; gi.pPageList = taosArrayInit(100, sizeof(int32_t)); - taosHashPut(pInfo->pGroupSet, pInfo->keyBuf, len, &gi, sizeof(SDataGroupInfo)); + QUERY_CHECK_NULL(gi.pPageList, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + + code = taosHashPut(pInfo->pGroupSet, pInfo->keyBuf, len, &gi, sizeof(SDataGroupInfo)); + QUERY_CHECK_CODE(code, lino, _end); p = taosHashGet(pInfo->pGroupSet, pInfo->keyBuf, len); @@ -736,7 +784,9 @@ void* getCurrentDataGroupInfo(const SPartitionOperatorInfo* pInfo, SDataGroupInf return pPage; } - taosArrayPush(p->pPageList, &pageId); + void* tmp = taosArrayPush(p->pPageList, &pageId); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + *(int32_t*)pPage = 0; } else { int32_t* curId = taosArrayGetLast(p->pPageList); @@ -759,12 +809,21 @@ void* getCurrentDataGroupInfo(const SPartitionOperatorInfo* pInfo, SDataGroupInf return NULL; } - taosArrayPush(p->pPageList, &pageId); + void* tmp = taosArrayPush(p->pPageList, &pageId); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + memset(pPage, 0, getBufPageSize(pInfo->pBuf)); } } *pGroupInfo = p; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + return NULL; + } + return pPage; } @@ -832,6 +891,8 @@ static SSDataBlock* buildPartitionResultForNotLoadBlock(SDataGroupInfo* pGroupIn } static SSDataBlock* buildPartitionResult(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SPartitionOperatorInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; @@ -877,8 +938,11 @@ static SSDataBlock* buildPartitionResult(SOperatorInfo* pOperator) { return buildPartitionResult(pOperator); } - blockDataEnsureCapacity(pInfo->binfo.pRes, pInfo->rowCapacity); - blockDataFromBuf1(pInfo->binfo.pRes, page, pInfo->rowCapacity); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, pInfo->rowCapacity); + QUERY_CHECK_CODE(code, lino, _end); + + code = blockDataFromBuf1(pInfo->binfo.pRes, page, pInfo->rowCapacity); + QUERY_CHECK_CODE(code, lino, _end); pInfo->pageIndex += 1; releaseBufPage(pInfo->pBuf, page); @@ -891,13 +955,21 @@ static SSDataBlock* buildPartitionResult(SOperatorInfo* pOperator) { if (pInfo->pOrderInfoArr) { pInfo->binfo.pRes->info.rows += pInfo->remainRows; - blockDataTrimFirstRows(pInfo->binfo.pRes, pInfo->orderedRows); + code = blockDataTrimFirstRows(pInfo->binfo.pRes, pInfo->orderedRows); + QUERY_CHECK_CODE(code, lino, _end); pInfo->orderedRows = blockDataGetSortedRows(pInfo->binfo.pRes, pInfo->pOrderInfoArr); pInfo->remainRows = pInfo->binfo.pRes->info.rows - pInfo->orderedRows; pInfo->binfo.pRes->info.rows = pInfo->orderedRows; } - blockDataUpdateTsWindow(pInfo->binfo.pRes, 0); + code = blockDataUpdateTsWindow(pInfo->binfo.pRes, 0); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } pOperator->resultInfo.totalRows += pInfo->binfo.pRes->info.rows; return pInfo->binfo.pRes; @@ -908,8 +980,9 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { return NULL; } - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; + SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; SPartitionOperatorInfo* pInfo = pOperator->info; SSDataBlock* pRes = pInfo->binfo.pRes; @@ -948,7 +1021,8 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { void* pGroupIter = taosHashIterate(pInfo->pGroupSet, NULL); while (pGroupIter != NULL) { SDataGroupInfo* pGroupInfo = pGroupIter; - taosArrayPush(groupArray, pGroupInfo); + void* tmp = taosArrayPush(groupArray, pGroupInfo); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pGroupIter = taosHashIterate(pInfo->pGroupSet, pGroupIter); } @@ -960,7 +1034,15 @@ static SSDataBlock* hashPartition(SOperatorInfo* pOperator) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; pOperator->status = OP_RES_TO_RETURN; - blockDataEnsureCapacity(pRes, 4096); + code = blockDataEnsureCapacity(pRes, 4096); + QUERY_CHECK_CODE(code, lino, _end); + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + T_LONG_JMP(pTaskInfo->env, code); + } + return buildPartitionResult(pOperator); } @@ -1002,6 +1084,8 @@ static void destroyPartitionOperatorInfo(void* param) { SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartitionPhysiNode* pPartNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -1022,7 +1106,8 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition pTaskInfo->code = terrno; goto _error; } - taosArrayPush(pInfo->pOrderInfoArr, &order); + void* tmp = taosArrayPush(pInfo->pOrderInfoArr, &order); + QUERY_CHECK_NULL(tmp, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); } if (pPartNode->pExprs != NULL) { @@ -1048,7 +1133,7 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition uint32_t defaultBufsz = 0; pInfo->binfo.pRes = createDataBlockFromDescNode(pPartNode->node.pOutputDataBlockDesc); - int32_t code = getBufferPgSize(pInfo->binfo.pRes->info.rowSize, &defaultPgsz, &defaultBufsz); + code = getBufferPgSize(pInfo->binfo.pRes->info.rowSize, &defaultPgsz, &defaultBufsz); if (code != TSDB_CODE_SUCCESS) { terrno = code; pTaskInfo->code = code; @@ -1101,6 +1186,7 @@ _error: if (pInfo != NULL) { destroyPartitionOperatorInfo(pInfo); } + pTaskInfo->code = code; taosMemoryFreeClear(pOperator); return NULL; } @@ -1156,7 +1242,8 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) { bool isNull = colDataIsNull(pSrcCol, pSrc->info.rows, rowIndex, NULL); char* pSrcData = NULL; if (!isNull) pSrcData = colDataGetData(pSrcCol, rowIndex); - colDataSetVal(pDestCol, pDest->info.rows, pSrcData, isNull); + code = colDataSetVal(pDestCol, pDest->info.rows, pSrcData, isNull); + QUERY_CHECK_CODE(code, lino, _end); } pDest->info.rows++; } @@ -1177,7 +1264,9 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) { pParInfo->rowIds = NULL; pDest->info.dataLoad = 1; - blockDataUpdateTsWindow(pDest, pInfo->tsColIndex); + code = blockDataUpdateTsWindow(pDest, pInfo->tsColIndex); + QUERY_CHECK_CODE(code, lino, _end); + pDest->info.id.groupId = pParInfo->groupId; pOperator->resultInfo.totalRows += pDest->info.rows; pInfo->parIte = taosHashIterate(pInfo->pPartitions, pInfo->parIte); @@ -1288,6 +1377,8 @@ _end: } static void doStreamHashPartitionImpl(SStreamPartitionOperatorInfo* pInfo, SSDataBlock* pBlock) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; pInfo->pInputDataBlock = pBlock; for (int32_t i = 0; i < pBlock->info.rows; ++i) { recordNewGroupKeys(pInfo->partitionSup.pGroupCols, pInfo->partitionSup.pGroupColVals, pBlock, i); @@ -1295,15 +1386,25 @@ static void doStreamHashPartitionImpl(SStreamPartitionOperatorInfo* pInfo, SSDat SPartitionDataInfo* pParData = (SPartitionDataInfo*)taosHashGet(pInfo->pPartitions, pInfo->partitionSup.keyBuf, keyLen); if (pParData) { - taosArrayPush(pParData->rowIds, &i); + void* tmp = taosArrayPush(pParData->rowIds, &i); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else { SPartitionDataInfo newParData = {0}; newParData.groupId = calcGroupId(pInfo->partitionSup.keyBuf, keyLen); newParData.rowIds = taosArrayInit(64, sizeof(int32_t)); - taosArrayPush(newParData.rowIds, &i); - taosHashPut(pInfo->pPartitions, pInfo->partitionSup.keyBuf, keyLen, &newParData, sizeof(SPartitionDataInfo)); + void* tmp = taosArrayPush(newParData.rowIds, &i); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); + + code = + taosHashPut(pInfo->pPartitions, pInfo->partitionSup.keyBuf, keyLen, &newParData, sizeof(SPartitionDataInfo)); + QUERY_CHECK_CODE(code, lino, _end); } } + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } } static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { @@ -1345,7 +1446,9 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { pInfo->binfo.pRes->info.type = pBlock->info.type; break; case STREAM_DELETE_DATA: { - copyDataBlock(pInfo->pDelRes, pBlock); + code = copyDataBlock(pInfo->pDelRes, pBlock); + QUERY_CHECK_CODE(code, lino, _end); + pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; printDataBlock(pInfo->pDelRes, getStreamOpName(pOperator->operatorType), GET_TASKID(pTaskInfo)); return pInfo->pDelRes; @@ -1362,8 +1465,9 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { // there is an scalar expression that needs to be calculated right before apply the group aggregation. if (pInfo->scalarSup.pExprInfo != NULL) { - projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, - pInfo->scalarSup.numOfExprs, NULL); + code = projectApplyFunctions(pInfo->scalarSup.pExprInfo, pBlock, pBlock, pInfo->scalarSup.pCtx, + pInfo->scalarSup.numOfExprs, NULL); + QUERY_CHECK_CODE(code, lino, _end); } taosHashClear(pInfo->pPartitions); doStreamHashPartitionImpl(pInfo, pBlock); @@ -1429,6 +1533,8 @@ int32_t initParDownStream(SOperatorInfo* downstream, SPartitionBySupporter* pPar } SSDataBlock* buildCreateTableBlock(SExprSupp* tbName, SExprSupp* tag) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock)); pBlock->info.hasVarCol = false; pBlock->info.id.groupId = 0; @@ -1446,14 +1552,16 @@ SSDataBlock* buildCreateTableBlock(SExprSupp* tbName, SExprSupp* tag) { } pBlock->info.rowSize += infoData.info.bytes; // sub table name - taosArrayPush(pBlock->pDataBlock, &infoData); + void* tmp = taosArrayPush(pBlock->pDataBlock, &infoData); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); SColumnInfoData gpIdData = {0}; gpIdData.info.type = TSDB_DATA_TYPE_UBIGINT; gpIdData.info.bytes = 8; pBlock->info.rowSize += gpIdData.info.bytes; // group id - taosArrayPush(pBlock->pDataBlock, &gpIdData); + tmp = taosArrayPush(pBlock->pDataBlock, &gpIdData); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); for (int32_t i = 0; i < tag->numOfExprs; i++) { SColumnInfoData tagCol = {0}; @@ -1461,10 +1569,17 @@ SSDataBlock* buildCreateTableBlock(SExprSupp* tbName, SExprSupp* tag) { tagCol.info.bytes = tag->pExprInfo[i].base.resSchema.bytes; tagCol.info.precision = tag->pExprInfo[i].base.resSchema.precision; // tag info - taosArrayPush(pBlock->pDataBlock, &tagCol); + tmp = taosArrayPush(pBlock->pDataBlock, &tagCol); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); pBlock->info.rowSize += tagCol.info.bytes; } +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + blockDataDestroy(pBlock); + return NULL; + } return pBlock; } @@ -1490,42 +1605,33 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr int32_t num = 0; SExprInfo* pCalExprInfo = createExprInfo(pPartNode->part.pExprs, NULL, &num); code = initExprSupp(&pInfo->scalarSup, pCalExprInfo, num, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); } pInfo->tbnameCalSup.numOfExprs = 0; if (pPartNode->pSubtable != NULL) { SExprInfo* pSubTableExpr = taosMemoryCalloc(1, sizeof(SExprInfo)); - if (pSubTableExpr == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } + QUERY_CHECK_NULL(pSubTableExpr, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + pInfo->tbnameCalSup.pExprInfo = pSubTableExpr; createExprFromOneNode(pSubTableExpr, pPartNode->pSubtable, 0); code = initExprSupp(&pInfo->tbnameCalSup, pSubTableExpr, 1, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); } pInfo->tagCalSup.numOfExprs = 0; if (pPartNode->pTags != NULL) { int32_t numOfTags; SExprInfo* pTagExpr = createExpr(pPartNode->pTags, &numOfTags); - if (pTagExpr == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } - if (initExprSupp(&pInfo->tagCalSup, pTagExpr, numOfTags, &pTaskInfo->storageAPI.functionStore) != 0) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } + QUERY_CHECK_NULL(pTagExpr, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + + code = initExprSupp(&pInfo->tagCalSup, pTagExpr, numOfTags, &pTaskInfo->storageAPI.functionStore); + QUERY_CHECK_CODE(code, lino, _error); } if (pInfo->tbnameCalSup.numOfExprs != 0 || pInfo->tagCalSup.numOfExprs != 0) { pInfo->pCreateTbRes = buildCreateTableBlock(&pInfo->tbnameCalSup, &pInfo->tagCalSup); + QUERY_CHECK_NULL(pInfo->pCreateTbRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); } else { pInfo->pCreateTbRes = NULL; } @@ -1533,18 +1639,15 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr int32_t keyLen = 0; code = initGroupOptrInfo(&pInfo->partitionSup.pGroupColVals, &keyLen, &pInfo->partitionSup.keyBuf, pInfo->partitionSup.pGroupCols); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); + pInfo->partitionSup.needCalc = true; pInfo->binfo.pRes = createDataBlockFromDescNode(pPartNode->part.node.pOutputDataBlockDesc); - if (pInfo->binfo.pRes == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _error; - } + QUERY_CHECK_NULL(pInfo->binfo.pRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); - blockDataEnsureCapacity(pInfo->binfo.pRes, 4096); + code = blockDataEnsureCapacity(pInfo->binfo.pRes, 4096); + QUERY_CHECK_CODE(code, lino, _error); pInfo->parIte = NULL; pInfo->pTbNameIte = NULL; @@ -1555,6 +1658,7 @@ SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStr taosHashSetFreeFp(pInfo->pPartitions, freePartItem); pInfo->tsColIndex = 0; pInfo->pDelRes = createSpecialDataBlock(STREAM_DELETE_RESULT); + QUERY_CHECK_NULL(pInfo->pDelRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pPartNode->part.pTargets, NULL, &numOfCols); @@ -1584,12 +1688,15 @@ _error: return NULL; } -SArray* extractColumnInfo(SNodeList* pNodeList) { +int32_t extractColumnInfo(SNodeList* pNodeList, SArray** pArrayRes) { + int32_t code = TSDB_CODE_SUCCESS; + int32_t lino = 0; size_t numOfCols = LIST_LENGTH(pNodeList); SArray* pList = taosArrayInit(numOfCols, sizeof(SColumn)); if (pList == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return NULL; + code = TSDB_CODE_OUT_OF_MEMORY; + (*pArrayRes) = NULL; + QUERY_CHECK_CODE(code, lino, _end); } for (int32_t i = 0; i < numOfCols; ++i) { @@ -1599,7 +1706,8 @@ SArray* extractColumnInfo(SNodeList* pNodeList) { SColumnNode* pColNode = (SColumnNode*)pNode->pExpr; SColumn c = extractColumnFromColumnNode(pColNode); - taosArrayPush(pList, &c); + void* tmp = taosArrayPush(pList, &c); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } else if (nodeType(pNode->pExpr) == QUERY_NODE_VALUE) { SValueNode* pValNode = (SValueNode*)pNode->pExpr; SColumn c = {0}; @@ -1610,9 +1718,16 @@ SArray* extractColumnInfo(SNodeList* pNodeList) { c.scale = pValNode->node.resType.scale; c.precision = pValNode->node.resType.precision; - taosArrayPush(pList, &c); + void* tmp = taosArrayPush(pList, &c); + QUERY_CHECK_NULL(tmp, code, lino, _end, TSDB_CODE_OUT_OF_MEMORY); } } - return pList; + (*pArrayRes) = pList; + +_end: + if (code != TSDB_CODE_SUCCESS) { + qError("%s failed at line %d since %s", __func__, lino, tstrerror(code)); + } + return code; } diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 207c81fcb9..520cba92a1 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -1131,9 +1131,8 @@ static SSDataBlock* groupSeqTableScan(SOperatorInfo* pOperator) { ASSERT(pInfo->base.dataReader == NULL); - code = pAPI->tsdReader.tsdReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num, pInfo->pResBlock, + pAPI->tsdReader.tsdReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num, pInfo->pResBlock, (void**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo), &pInfo->pIgnoreTables); - QUERY_CHECK_CODE(code, lino, _end); if (pInfo->filesetDelimited) { pAPI->tsdReader.tsdSetFilesetDelimited(pInfo->base.dataReader); } @@ -3782,6 +3781,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pInfo->readHandle = *pHandle; pTaskInfo->streamInfo.snapshotVer = pHandle->version; pInfo->pCreateTbRes = buildCreateTableBlock(&pInfo->tbnameCalSup, &pInfo->tagCalSup); + QUERY_CHECK_NULL(pInfo->pCreateTbRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + code = blockDataEnsureCapacity(pInfo->pCreateTbRes, 8); QUERY_CHECK_CODE(code, lino, _error); diff --git a/source/libs/executor/src/streamcountwindowoperator.c b/source/libs/executor/src/streamcountwindowoperator.c index 3471f02bf5..dd05581ff0 100644 --- a/source/libs/executor/src/streamcountwindowoperator.c +++ b/source/libs/executor/src/streamcountwindowoperator.c @@ -683,7 +683,8 @@ static SSDataBlock* doStreamCountAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamCountAggImpl(pOperator, pBlock, pInfo->pStUpdated, pInfo->pStDeleted); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.watermark); @@ -821,7 +822,8 @@ SOperatorInfo* createStreamCountAggOperatorInfo(SOperatorInfo* downstream, SPhys pInfo->streamAggSup.windowCount = pCountNode->windowCount; pInfo->streamAggSup.windowSliding = pCountNode->windowSliding; - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); pInfo->binfo.pRes = pResBlock; _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); diff --git a/source/libs/executor/src/streameventwindowoperator.c b/source/libs/executor/src/streameventwindowoperator.c index 807cf5a4ba..2cd36a7fb7 100644 --- a/source/libs/executor/src/streameventwindowoperator.c +++ b/source/libs/executor/src/streameventwindowoperator.c @@ -650,7 +650,8 @@ static SSDataBlock* doStreamEventAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamEventAggImpl(pOperator, pBlock, pInfo->pSeUpdated, pInfo->pSeDeleted); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); } @@ -846,24 +847,21 @@ SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhys .deleteMark = getDeleteMark(&pEventNode->window, 0), }; - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); SExprSupp* pExpSup = &pOperator->exprSupp; int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pEventNode->window.pFuncs, NULL, &numOfCols); SSDataBlock* pResBlock = createDataBlockFromDescNode(pPhyNode->pOutputDataBlockDesc); code = initBasicInfoEx(&pInfo->binfo, pExpSup, pExprInfo, numOfCols, pResBlock, &pTaskInfo->storageAPI.functionStore); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); pInfo->primaryTsIndex = tsSlotId; code = initStreamAggSupporter(&pInfo->streamAggSup, pExpSup, numOfCols, 0, pTaskInfo->streamInfo.pState, sizeof(bool) + sizeof(bool), 0, &pTaskInfo->storageAPI.stateStore, pHandle, &pInfo->twAggSup, GET_TASKID(pTaskInfo), &pTaskInfo->storageAPI, pInfo->primaryTsIndex); - if (code != TSDB_CODE_SUCCESS) { - goto _error; - } + QUERY_CHECK_CODE(code, lino, _error); _hash_fn_t hashFn = taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY); pInfo->pSeDeleted = tSimpleHashInit(64, hashFn); @@ -885,14 +883,18 @@ SOperatorInfo* createStreamEventAggOperatorInfo(SOperatorInfo* downstream, SPhys if (pInfo->isHistoryOp) { pInfo->pAllUpdated = tSimpleHashInit(64, hashFn); + QUERY_CHECK_NULL(pInfo->pAllUpdated, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); } else { pInfo->pAllUpdated = NULL; } pInfo->pCheckpointRes = createSpecialDataBlock(STREAM_CHECKPOINT); + QUERY_CHECK_NULL(pInfo->pCheckpointRes, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); + pInfo->reCkBlock = false; pInfo->recvGetAll = false; pInfo->pPkDeleted = tSimpleHashInit(64, hashFn); + QUERY_CHECK_NULL(pInfo->pPkDeleted, code, lino, _error, TSDB_CODE_OUT_OF_MEMORY); pInfo->destHasPrimaryKey = pEventNode->window.destHasPrimayKey; setOperatorInfo(pOperator, "StreamEventAggOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT, true, OP_NOT_OPENED, diff --git a/source/libs/executor/src/streamfilloperator.c b/source/libs/executor/src/streamfilloperator.c index a9cc270f7a..bd254c5e5a 100644 --- a/source/libs/executor/src/streamfilloperator.c +++ b/source/libs/executor/src/streamfilloperator.c @@ -990,13 +990,15 @@ static int32_t doApplyStreamScalarCalculation(SOperatorInfo* pOperator, SSDataBl code = blockDataEnsureCapacity(pDstBlock, pSrcBlock->info.rows); QUERY_CHECK_CODE(code, lino, _end); - setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); + code = setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); + QUERY_CHECK_CODE(code, lino, _end); code = projectApplyFunctions(pSup->pExprInfo, pDstBlock, pSrcBlock, pSup->pCtx, pSup->numOfExprs, NULL); QUERY_CHECK_CODE(code, lino, _end); pDstBlock->info.rows = 0; pSup = &pInfo->pFillSup->notFillExprSup; - setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); + code = setInputDataBlock(pSup, pSrcBlock, TSDB_ORDER_ASC, MAIN_SCAN, false); + QUERY_CHECK_CODE(code, lino, _end); code = projectApplyFunctions(pSup->pExprInfo, pDstBlock, pSrcBlock, pSup->pCtx, pSup->numOfExprs, NULL); QUERY_CHECK_CODE(code, lino, _end); diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index b2af12aab9..1135757950 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -1667,7 +1667,9 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) { code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); QUERY_CHECK_CODE(code, lino, _end); } - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); + doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.id.groupId, pInfo->pUpdatedMap, pInfo->pDeletedMap); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.watermark); @@ -1859,7 +1861,8 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, pInfo->pState, &pTaskInfo->storageAPI.functionStore); QUERY_CHECK_CODE(code, lino, _error); - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); initResultRowInfo(&pInfo->binfo.resultRowInfo); pInfo->numOfChild = numOfChild; @@ -3331,7 +3334,9 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); + doStreamSessionAggImpl(pOperator, pBlock, pInfo->pStUpdated, pInfo->pStDeleted, IS_FINAL_SESSION_OP(pOperator), true); if (IS_FINAL_SESSION_OP(pOperator)) { @@ -3353,7 +3358,8 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) { } } SOperatorInfo* pChildOp = taosArrayGetP(pInfo->pChildren, chIndex); - setInputDataBlock(&pChildOp->exprSupp, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(&pChildOp->exprSupp, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamSessionAggImpl(pChildOp, pBlock, NULL, NULL, true, false); } pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); @@ -3625,7 +3631,8 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh goto _error; } - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); if (pSessionNode->window.pTsEnd) { pInfo->endTsIndex = ((SColumnNode*)pSessionNode->window.pTsEnd)->slotId; @@ -3818,7 +3825,8 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamSessionAggImpl(pOperator, pBlock, pInfo->pStUpdated, NULL, false, false); maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); } @@ -4501,7 +4509,8 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) { QUERY_CHECK_CODE(code, lino, _end); } // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamStateAggImpl(pOperator, pBlock, pInfo->pSeUpdated, pInfo->pSeDeleted); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); } @@ -4688,7 +4697,8 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys .deleteMark = getDeleteMark(&pStateNode->window, 0), }; - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); SExprSupp* pExpSup = &pOperator->exprSupp; int32_t numOfCols = 0; @@ -4874,7 +4884,8 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { // The timewindow that overlaps the timestamps of the input pBlock need to be recalculated and return to the // caller. Note that all the time window are not close till now. // the pDataBlock are always the same one, no need to call this again - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = (pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); #ifdef BUILD_NO_CALL if (pInfo->invertible) { setInverFunction(pSup->pCtx, pOperator->exprSupp.numOfExprs, pBlock->info.type); @@ -4970,7 +4981,8 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys pSup->hasWindowOrGroup = true; initBasicInfo(&pInfo->binfo, pResBlock); - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); pInfo->primaryTsIndex = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId; initResultSizeInfo(&pOperator->resultInfo, 4096); @@ -5359,7 +5371,8 @@ static SSDataBlock* doStreamMidIntervalAgg(SOperatorInfo* pOperator) { code = projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); QUERY_CHECK_CODE(code, lino, _end); } - setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + QUERY_CHECK_CODE(code, lino, _end); doStreamMidIntervalAggImpl(pOperator, pBlock, pInfo->pUpdatedMap); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.window.ekey); pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, pBlock->info.watermark); diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 41d398888e..fb3176a2a8 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -30,7 +30,7 @@ typedef struct SSessionAggOperatorInfo { SOptrBasicInfo binfo; SAggSupporter aggSup; - SExprSupp scalarSupp; // supporter for perform scalar function + SExprSupp scalarSupp; // supporter for perform scalar function SGroupResInfo groupResInfo; SWindowRowsSup winSup; bool reptScan; // next round scan @@ -518,8 +518,8 @@ static void doWindowBorderInterpolation(SIntervalAggOperatorInfo* pInfo, SSDataB // duplicated ts row does not involve in the interpolation of end value for current time window int32_t x = endRowIndex; - while(x > 0) { - if (tsCols[x] == tsCols[x-1]) { + while (x > 0) { + if (tsCols[x] == tsCols[x - 1]) { x -= 1; } else { endRowIndex = x; @@ -528,7 +528,8 @@ static void doWindowBorderInterpolation(SIntervalAggOperatorInfo* pInfo, SSDataB } TSKEY endKey = (pInfo->binfo.inputTsOrder == TSDB_ORDER_ASC) ? pBlock->info.window.ekey : pBlock->info.window.skey; - bool interp = setTimeWindowInterpolationEndTs(pInfo, pSup, endRowIndex, nextRowIndex, pBlock->pDataBlock, tsCols, endKey, win); + bool interp = setTimeWindowInterpolationEndTs(pInfo, pSup, endRowIndex, nextRowIndex, pBlock->pDataBlock, tsCols, + endKey, win); if (interp) { setResultRowInterpo(pResult, RESULT_ROW_END_INTERP); } @@ -1203,6 +1204,8 @@ static bool timeWindowinterpNeeded(SqlFunctionCtx* pCtx, int32_t numOfCols, SInt SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -1223,8 +1226,8 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPh int32_t num = 0; SExprInfo* pExprInfo = createExprInfo(pPhyNode->window.pFuncs, NULL, &num); - int32_t code = initAggSup(pSup, &pInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, - pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); + code = initAggSup(pSup, &pInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, pTaskInfo->streamInfo.pState, + &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -1274,7 +1277,8 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPh goto _error; } - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pInfo->win); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pInfo->win); + QUERY_CHECK_CODE(code, lino, _error); pInfo->timeWindowInterpo = timeWindowinterpNeeded(pSup->pCtx, num, pInfo); if (pInfo->timeWindowInterpo) { pInfo->binfo.resultRowInfo.openWindow = tdListNew(sizeof(SOpenWindowInfo)); @@ -1421,7 +1425,7 @@ static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { if (pInfo->scalarSupp.pExprInfo != NULL) { SExprSupp* pExprSup = &pInfo->scalarSupp; projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL); - } + } // the pDataBlock are always the same one, no need to call this again setInputDataBlock(pSup, pBlock, order, MAIN_SCAN, true); blockDataUpdateTsWindow(pBlock, pInfo->tsSlotId); @@ -1457,6 +1461,8 @@ static SSDataBlock* doSessionWindowAgg(SOperatorInfo* pOperator) { // todo make this as an non-blocking operator SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWinodwPhysiNode* pStateNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -1487,7 +1493,7 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWi pInfo->binfo.inputTsOrder = pStateNode->window.node.inputTsOrder; pInfo->binfo.outputTsOrder = pStateNode->window.node.outputTsOrder; - int32_t code = filterInitFromNode((SNode*)pStateNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); + code = filterInitFromNode((SNode*)pStateNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -1511,7 +1517,8 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWi pInfo->twAggSup = (STimeWindowAggSupp){.waterMark = pStateNode->window.watermark, .calTrigger = pStateNode->window.triggerType}; - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); pInfo->tsSlotId = tsSlotId; @@ -1548,13 +1555,15 @@ void destroySWindowOperatorInfo(void* param) { cleanupAggSup(&pInfo->aggSup); cleanupExprSupp(&pInfo->scalarSupp); - + cleanupGroupResInfo(&pInfo->groupResInfo); taosMemoryFreeClear(param); } SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -1571,7 +1580,7 @@ SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionW SSDataBlock* pResBlock = createDataBlockFromDescNode(pSessionNode->window.node.pOutputDataBlockDesc); initBasicInfo(&pInfo->binfo, pResBlock); - int32_t code = initAggSup(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str, + 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; @@ -1582,7 +1591,8 @@ SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionW pInfo->gap = pSessionNode->gap; initResultRowInfo(&pInfo->binfo.resultRowInfo); - initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + code = initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window); + QUERY_CHECK_CODE(code, lino, _error); pInfo->tsSlotId = ((SColumnNode*)pSessionNode->window.pTspk)->slotId; pInfo->binfo.pRes = pResBlock; @@ -1830,6 +1840,8 @@ static SSDataBlock* mergeAlignedIntervalAgg(SOperatorInfo* pOperator) { SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SMergeAlignedIntervalPhysiNode* pNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -1852,7 +1864,7 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SExprSupp* pSup = &pOperator->exprSupp; pSup->hasWindowOrGroup = true; - int32_t code = filterInitFromNode((SNode*)pNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); + code = filterInitFromNode((SNode*)pNode->window.node.pConditions, &pOperator->exprSupp.pFilterInfo, 0); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -1879,7 +1891,8 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream, SSDataBlock* pResBlock = createDataBlockFromDescNode(pNode->window.node.pOutputDataBlockDesc); initBasicInfo(&iaInfo->binfo, pResBlock); - initExecTimeWindowInfo(&iaInfo->twAggSup.timeWindowData, &iaInfo->win); + code = initExecTimeWindowInfo(&iaInfo->twAggSup.timeWindowData, &iaInfo->win); + QUERY_CHECK_CODE(code, lino, _error); iaInfo->timeWindowInterpo = timeWindowinterpNeeded(pSup->pCtx, num, iaInfo); if (iaInfo->timeWindowInterpo) { @@ -2126,6 +2139,8 @@ static SSDataBlock* doMergeIntervalAgg(SOperatorInfo* pOperator) { SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMergeIntervalPhysiNode* pIntervalPhyNode, SExecTaskInfo* pTaskInfo) { + 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) { @@ -2158,15 +2173,16 @@ SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMerge size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES; initResultSizeInfo(&pOperator->resultInfo, 4096); - int32_t code = initAggSup(pExprSupp, &pIntervalInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, - pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); + code = initAggSup(pExprSupp, &pIntervalInfo->aggSup, pExprInfo, num, keyBufSize, pTaskInfo->id.str, + pTaskInfo->streamInfo.pState, &pTaskInfo->storageAPI.functionStore); if (code != TSDB_CODE_SUCCESS) { goto _error; } SSDataBlock* pResBlock = createDataBlockFromDescNode(pIntervalPhyNode->window.node.pOutputDataBlockDesc); initBasicInfo(&pIntervalInfo->binfo, pResBlock); - initExecTimeWindowInfo(&pIntervalInfo->twAggSup.timeWindowData, &pIntervalInfo->win); + code = initExecTimeWindowInfo(&pIntervalInfo->twAggSup.timeWindowData, &pIntervalInfo->win); + QUERY_CHECK_CODE(code, lino, _error); pIntervalInfo->timeWindowInterpo = timeWindowinterpNeeded(pExprSupp->pCtx, num, pIntervalInfo); if (pIntervalInfo->timeWindowInterpo) { From fd6c1ecf3720f2e8da08732bf4b5c7abb4f9c8da Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:05:39 +0800 Subject: [PATCH 49/64] adj operator res --- source/libs/stream/src/streamUpdate.c | 4 ++-- source/util/src/tscalablebf.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/source/libs/stream/src/streamUpdate.c b/source/libs/stream/src/streamUpdate.c index ea3b923f98..76b0d6a561 100644 --- a/source/libs/stream/src/streamUpdate.c +++ b/source/libs/stream/src/streamUpdate.c @@ -241,8 +241,8 @@ static int32_t getSBf(SUpdateInfo* pInfo, TSKEY ts, SScalableBf** ppSBf) { } int64_t index = (int64_t)((ts - pInfo->minTS) / pInfo->interval); if (index < 0) { - code = TSDB_CODE_FAILED; - QUERY_CHECK_CODE(code, lino, _end); + (*ppSBf) = NULL; + goto _end; } if (index >= pInfo->numSBFs) { uint64_t count = index + 1 - pInfo->numSBFs; diff --git a/source/util/src/tscalablebf.c b/source/util/src/tscalablebf.c index 5b018ba677..72a97fee45 100644 --- a/source/util/src/tscalablebf.c +++ b/source/util/src/tscalablebf.c @@ -221,8 +221,9 @@ int32_t tScalableBfDecode(SDecoder* pDecoder, SScalableBf** ppSBf) { QUERY_CHECK_CODE(code, lino, _error); } if (size == 0) { - code = TSDB_CODE_FAILED; - QUERY_CHECK_CODE(code, lino, _error); + (*ppSBf) = NULL; + tScalableBfDestroy(pSBf); + goto _error; } pSBf->bfArray = taosArrayInit(size * 2, POINTER_BYTES); if (!pSBf->bfArray) { From 951283fc4408e0c8d492a2f3d2433c912f42485c Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:15:24 +0800 Subject: [PATCH 50/64] adj operator res --- source/libs/executor/src/executor.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index c79f69129c..c7259c464d 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -731,8 +731,7 @@ int32_t qExecTaskOpt(qTaskInfo_t tinfo, SArray* pResList, uint64_t* useconds, bo _end: - int32_t tmpRes = cleanUpUdfs(); - qTrace("%s at line %d res:%d", __func__, __LINE__, tmpRes); + (void)cleanUpUdfs(); uint64_t total = pTaskInfo->pRoot->resultInfo.totalRows; qDebug("%s task suspended, %d rows in %d blocks returned, total:%" PRId64 " rows, in sinkNode:%d, elapsed:%.2f ms", From 04df9e4f11b36540f77c3f15717f908e5917e3c6 Mon Sep 17 00:00:00 2001 From: dmchen Date: Mon, 22 Jul 2024 05:35:30 +0000 Subject: [PATCH 51/64] error str --- source/dnode/mnode/impl/src/mndIndex.c | 4 ++-- source/dnode/mnode/impl/src/mndMain.c | 25 +++++++++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndIndex.c b/source/dnode/mnode/impl/src/mndIndex.c index 910665e450..e32b18c488 100644 --- a/source/dnode/mnode/impl/src/mndIndex.c +++ b/source/dnode/mnode/impl/src/mndIndex.c @@ -506,7 +506,7 @@ static int32_t mndProcessCreateIdxReq(SRpcMsg *pReq) { _OVER: if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("stb:%s, failed to create since %s", createReq.idxName, terrstr()); + mError("stb:%s, failed to create since %s", createReq.idxName, tstrerror(code)); } mndReleaseStb(pMnode, pStb); @@ -882,7 +882,7 @@ int32_t mndProcessDropTagIdxReq(SRpcMsg *pReq) { _OVER: if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) { - mError("idx:%s, failed to drop since %s", req.name, terrstr()); + mError("idx:%s, failed to drop since %s", req.name, tstrerror(code)); } mndReleaseIdx(pMnode, pIdx); mndReleaseDb(pMnode, pDb); diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index 8930f2786f..fd1e88de81 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -329,6 +329,7 @@ static int32_t minCronTime() { return min <= 1 ? 2 : min; } void mndDoTimerPullupTask(SMnode *pMnode, int64_t sec) { + int32_t code = 0; if (sec % tsTtlPushIntervalSec == 0) { mndPullupTtl(pMnode); } @@ -378,14 +379,14 @@ void mndDoTimerPullupTask(SMnode *pMnode, int64_t sec) { } if (sec % (tsArbHeartBeatIntervalSec) == 0) { - if (mndPullupArbHeartbeat(pMnode) != 0) { - mError("failed to pullup arb heartbeat, since:%s", terrstr()); + if ((code = mndPullupArbHeartbeat(pMnode)) != 0) { + mError("failed to pullup arb heartbeat, since:%s", tstrerror(code)); } } if (sec % (tsArbCheckSyncIntervalSec) == 0) { - if (mndPullupArbCheckSync(pMnode) != 0) { - mError("failed to pullup arb check sync, since:%s", terrstr()); + if ((code = mndPullupArbCheckSync(pMnode)) != 0) { + mError("failed to pullup arb check sync, since:%s", tstrerror(code)); } } } @@ -494,9 +495,9 @@ static int32_t mndInitWal(SMnode *pMnode) { pMnode->pWal = walOpen(path, &cfg); if (pMnode->pWal == NULL) { - mError("failed to open wal since %s. wal:%s", terrstr(), path); code = TSDB_CODE_MND_RETURN_VALUE_NULL; if (terrno != 0) code = terrno; + mError("failed to open wal since %s. wal:%s", tstrerror(code), path); TAOS_RETURN(code); } @@ -616,14 +617,14 @@ static void mndCleanupSteps(SMnode *pMnode, int32_t pos) { } static int32_t mndExecSteps(SMnode *pMnode) { + int32_t code = 0; int32_t size = taosArrayGetSize(pMnode->pSteps); for (int32_t pos = 0; pos < size; pos++) { SMnodeStep *pStep = taosArrayGet(pMnode->pSteps, pos); if (pStep->initFp == NULL) continue; - if ((*pStep->initFp)(pMnode) != 0) { - int32_t code = terrno; - mError("%s exec failed since %s, start to cleanup", pStep->name, terrstr()); + if ((code = (*pStep->initFp)(pMnode)) != 0) { + mError("%s exec failed since %s, start to cleanup", pStep->name, tstrerror(code)); mndCleanupSteps(pMnode, pos); TAOS_RETURN(code); } else { @@ -675,7 +676,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { int32_t code = mndCreateDir(pMnode, path); if (code != 0) { code = terrno; - mError("failed to open mnode since %s", terrstr()); + mError("failed to open mnode since %s", tstrerror(code)); mndClose(pMnode); terrno = code; return NULL; @@ -684,7 +685,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { code = mndInitSteps(pMnode); if (code != 0) { code = terrno; - mError("failed to open mnode since %s", terrstr()); + mError("failed to open mnode since %s", tstrerror(code)); mndClose(pMnode); terrno = code; return NULL; @@ -693,7 +694,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) { code = mndExecSteps(pMnode); if (code != 0) { code = terrno; - mError("failed to open mnode since %s", terrstr()); + mError("failed to open mnode since %s", tstrerror(code)); mndClose(pMnode); terrno = code; return NULL; @@ -769,7 +770,7 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { int32_t code = syncProcessMsg(pMgmt->sync, pMsg); if (code != 0) { mGError("vgId:1, failed to process sync msg:%p type:%s, errno: %s, code:0x%x", pMsg, TMSG_INFO(pMsg->msgType), - terrstr(), code); + tstrerror(code), code); } return code; From b43dcf2a26817acfb62dc81370bf256ba63d334e Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:38:30 +0800 Subject: [PATCH 52/64] adj operator res --- source/libs/executor/src/streamtimewindowoperator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/executor/src/streamtimewindowoperator.c b/source/libs/executor/src/streamtimewindowoperator.c index 1135757950..d340efbb1b 100644 --- a/source/libs/executor/src/streamtimewindowoperator.c +++ b/source/libs/executor/src/streamtimewindowoperator.c @@ -4884,7 +4884,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { // The timewindow that overlaps the timestamps of the input pBlock need to be recalculated and return to the // caller. Note that all the time window are not close till now. // the pDataBlock are always the same one, no need to call this again - code = (pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); + code = setInputDataBlock(pSup, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true); QUERY_CHECK_CODE(code, lino, _end); #ifdef BUILD_NO_CALL if (pInfo->invertible) { From e3a89571ff82dcfac1a9dfa26f3d85ca55a9ceb3 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:40:35 +0800 Subject: [PATCH 53/64] adj operator res --- source/libs/executor/src/countwindowoperator.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/libs/executor/src/countwindowoperator.c b/source/libs/executor/src/countwindowoperator.c index 6e476c4ea0..55f73b9417 100644 --- a/source/libs/executor/src/countwindowoperator.c +++ b/source/libs/executor/src/countwindowoperator.c @@ -142,7 +142,6 @@ static void buildCountResult(SExprSupp* pExprSup, SCountWindowSupp* pCountSup, S SCountWindowResult* pBuff = setCountWindowOutputBuff(pExprSup, pCountSup, &pResultRow); if (pBuff->winRows == 0) { continue; - ; } doUpdateNumOfRows(pExprSup->pCtx, pResultRow, pExprSup->numOfExprs, pExprSup->rowEntryInfoOffset); copyResultrowToDataBlock(pExprSup->pExprInfo, pExprSup->numOfExprs, pResultRow, pExprSup->pCtx, pBlock, From 3660b6cede223a335d9cff8306f56ef71ecb94b5 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:55:00 +0800 Subject: [PATCH 54/64] adj operator res --- source/libs/executor/src/executor.c | 2 +- source/libs/executor/src/executorInt.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index c7259c464d..8cf44602f9 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -826,7 +826,7 @@ int32_t qAppendTaskStopInfo(SExecTaskInfo* pTaskInfo, SExchangeOpStopInfo* pInfo void* tmp = taosArrayPush(pTaskInfo->stopInfo.pStopInfo, pInfo); taosWUnLockLatch(&pTaskInfo->stopInfo.lock); - if (tmp != TSDB_CODE_SUCCESS) { + if (!tmp) { qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(TSDB_CODE_OUT_OF_MEMORY)); return TSDB_CODE_OUT_OF_MEMORY; } diff --git a/source/libs/executor/src/executorInt.c b/source/libs/executor/src/executorInt.c index dd6067da34..3b356f0ab4 100644 --- a/source/libs/executor/src/executorInt.c +++ b/source/libs/executor/src/executorInt.c @@ -649,10 +649,10 @@ void copyResultrowToDataBlock(SExprInfo* pExprInfo, int32_t numOfExprs, SResultR code = blockDataEnsureCapacity(pBlock, pBlock->info.rows + pCtx[j].resultInfo->numOfRes); QUERY_CHECK_CODE(code, lino, _end); - code = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); - if (TAOS_FAILED(code)) { - qError("%s build result data block error, code %s", GET_TASKID(pTaskInfo), tstrerror(code)); - T_LONG_JMP(pTaskInfo->env, code); + int32_t winCode = pCtx[j].fpSet.finalize(&pCtx[j], pBlock); + if (TAOS_FAILED(winCode)) { + qError("%s build result data block error, code %s", GET_TASKID(pTaskInfo), tstrerror(winCode)); + T_LONG_JMP(pTaskInfo->env, winCode); } } else if (strcmp(pCtx[j].pExpr->pExpr->_function.functionName, "_select_value") == 0) { // do nothing From feba37b5ea3265ceb15d691bf2ec391c4a054901 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 14:10:17 +0800 Subject: [PATCH 55/64] group by --- source/libs/parser/src/parTranslater.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index fef58df3dc..c1995ab784 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -3407,13 +3407,13 @@ static EDealRes doCheckExprForGroupBy(SNode** pNode, void* pContext) { if (nodesEqualNode(pActualNode, *pNode)) { return DEAL_RES_IGNORE_CHILD; } - if (isTbnameFuction(pActualNode) && QUERY_NODE_COLUMN == nodeType(*pNode) && - ((SColumnNode*)*pNode)->colType == COLUMN_TYPE_TAG) { - return rewriteExprToGroupKeyFunc(pCxt, pNode); - } if (IsEqualTbNameFuncNode(pSelect, pActualNode, *pNode)) { return rewriteExprToGroupKeyFunc(pCxt, pNode); } + if (isTbnameFuction(pActualNode) && QUERY_NODE_COLUMN == nodeType(*pNode) && + ((SColumnNode*)*pNode)->colType == COLUMN_TYPE_TAG) { + return rewriteExprToSelectTagFunc(pCxt, pNode); + } } SNode* pPartKey = NULL; bool partionByTbname = hasTbnameFunction(pSelect->pPartitionByList); From 64ad24077329b50c28cd26358c483f845d6cfd2a Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 22 Jul 2024 14:35:12 +0800 Subject: [PATCH 56/64] fix: crash issue --- .../libs/executor/src/dynqueryctrloperator.c | 59 +-- source/libs/executor/src/mergejoin.c | 5 +- source/libs/executor/test/joinTests.cpp | 348 +++++++++++------- 3 files changed, 258 insertions(+), 154 deletions(-) diff --git a/source/libs/executor/src/dynqueryctrloperator.c b/source/libs/executor/src/dynqueryctrloperator.c index 6a4840b188..c3b3126f68 100755 --- a/source/libs/executor/src/dynqueryctrloperator.c +++ b/source/libs/executor/src/dynqueryctrloperator.c @@ -105,7 +105,7 @@ static FORCE_INLINE bool tableNeedCache(int64_t uid, SStbJoinPrevJoinCtx* pPrev, return (NULL == num) ? false : true; } -static void updatePostJoinCurrTableInfo(SStbJoinDynCtrlInfo* pStbJoin) { +static int32_t updatePostJoinCurrTableInfo(SStbJoinDynCtrlInfo* pStbJoin) { SStbJoinPrevJoinCtx* pPrev = &pStbJoin->ctx.prev; SStbJoinPostJoinCtx* pPost = &pStbJoin->ctx.post; SStbJoinTableList* pNode = pPrev->pListHead; @@ -141,32 +141,38 @@ static void updatePostJoinCurrTableInfo(SStbJoinDynCtrlInfo* pStbJoin) pPost->leftNeedCache = tableNeedCache(*leftUid, pPrev, pPost, false, pStbJoin->basic.batchFetch); pPost->rightNeedCache = tableNeedCache(*rightUid, pPrev, pPost, true, pStbJoin->basic.batchFetch); - if (pPost->rightNeedCache && rightPrevUid != pPost->rightCurrUid) { - tSimpleHashPut(pPrev->rightCache, &pPost->rightCurrUid, sizeof(pPost->rightCurrUid), NULL, 0); + if (!pStbJoin->basic.batchFetch && pPost->rightNeedCache && rightPrevUid != pPost->rightCurrUid) { + QRY_ERR_RET(tSimpleHashPut(pPrev->rightCache, &pPost->rightCurrUid, sizeof(pPost->rightCurrUid), NULL, 0)); pStbJoin->execInfo.rightCacheNum++; } + + return TSDB_CODE_SUCCESS; } static int32_t buildGroupCacheOperatorParam(SOperatorParam** ppRes, int32_t downstreamIdx, int32_t vgId, int64_t tbUid, bool needCache, SOperatorParam* pChild) { + int32_t code = TSDB_CODE_SUCCESS; *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { + code = terrno; freeOperatorParam(pChild, OP_GET_PARAM); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (pChild) { (*ppRes)->pChildren = taosArrayInit(1, POINTER_BYTES); if (NULL == (*ppRes)->pChildren) { + code = terrno; freeOperatorParam(pChild, OP_GET_PARAM); freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (NULL == taosArrayPush((*ppRes)->pChildren, &pChild)) { + code = terrno; freeOperatorParam(pChild, OP_GET_PARAM); freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } } else { (*ppRes)->pChildren = NULL; @@ -174,9 +180,10 @@ static int32_t buildGroupCacheOperatorParam(SOperatorParam** ppRes, int32_t down SGcOperatorParam* pGc = taosMemoryMalloc(sizeof(SGcOperatorParam)); if (NULL == pGc) { + code = terrno; freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } pGc->sessionId = atomic_add_fetch_64(&gSessionId, 1); @@ -194,16 +201,18 @@ static int32_t buildGroupCacheOperatorParam(SOperatorParam** ppRes, int32_t down static int32_t buildGroupCacheNotifyOperatorParam(SOperatorParam** ppRes, int32_t downstreamIdx, int32_t vgId, int64_t tbUid) { + int32_t code = TSDB_CODE_SUCCESS; *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } (*ppRes)->pChildren = NULL; SGcNotifyOperatorParam* pGc = taosMemoryMalloc(sizeof(SGcNotifyOperatorParam)); if (NULL == pGc) { + code = terrno; freeOperatorParam(*ppRes, OP_NOTIFY_PARAM); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } pGc->downstreamIdx = downstreamIdx; @@ -221,13 +230,13 @@ static int32_t buildGroupCacheNotifyOperatorParam(SOperatorParam** ppRes, int32_ static int32_t buildExchangeOperatorParam(SOperatorParam** ppRes, int32_t downstreamIdx, int32_t* pVgId, int64_t* pUid) { *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } (*ppRes)->pChildren = NULL; SExchangeOperatorParam* pExc = taosMemoryMalloc(sizeof(SExchangeOperatorParam)); if (NULL == pExc) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pExc->multiParams = false; @@ -237,7 +246,7 @@ static int32_t buildExchangeOperatorParam(SOperatorParam** ppRes, int32_t downst pExc->basic.uidList = taosArrayInit(1, sizeof(int64_t)); if (NULL == pExc->basic.uidList) { taosMemoryFree(pExc); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } taosArrayPush(pExc->basic.uidList, pUid); @@ -252,14 +261,14 @@ static int32_t buildExchangeOperatorParam(SOperatorParam** ppRes, int32_t downst static int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppRes, int32_t downstreamIdx, SSHashObj* pVg) { *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } (*ppRes)->pChildren = NULL; SExchangeOperatorBatchParam* pExc = taosMemoryMalloc(sizeof(SExchangeOperatorBatchParam)); if (NULL == pExc) { taosMemoryFreeClear(*ppRes); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pExc->multiParams = true; @@ -267,7 +276,7 @@ static int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppRes, int32_t d if (NULL == pExc->pBatchs) { taosMemoryFree(pExc); taosMemoryFreeClear(*ppRes); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } tSimpleHashSetFreeFp(pExc->pBatchs, freeExchangeGetBasicOperatorParam); @@ -283,7 +292,7 @@ static int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppRes, int32_t d basic.uidList = pUidList; basic.tableSeq = false; - tSimpleHashPut(pExc->pBatchs, pVgId, sizeof(*pVgId), &basic, sizeof(basic)); + QRY_ERR_RET(tSimpleHashPut(pExc->pBatchs, pVgId, sizeof(*pVgId), &basic, sizeof(basic))); qTrace("build downstreamIdx %d batch scan, vgId:%d, uidNum:%" PRId64, downstreamIdx, *pVgId, (int64_t)taosArrayGetSize(pUidList)); *(SArray**)p = NULL; @@ -298,39 +307,45 @@ static int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppRes, int32_t d static int32_t buildMergeJoinOperatorParam(SOperatorParam** ppRes, bool initParam, SOperatorParam* pChild0, SOperatorParam* pChild1) { + int32_t code = TSDB_CODE_SUCCESS; *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { + code = terrno; freeOperatorParam(pChild0, OP_GET_PARAM); freeOperatorParam(pChild1, OP_GET_PARAM); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } (*ppRes)->pChildren = taosArrayInit(2, POINTER_BYTES); if (NULL == *ppRes) { + code = terrno; freeOperatorParam(pChild0, OP_GET_PARAM); freeOperatorParam(pChild1, OP_GET_PARAM); freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (NULL == taosArrayPush((*ppRes)->pChildren, &pChild0)) { + code = terrno; freeOperatorParam(pChild0, OP_GET_PARAM); freeOperatorParam(pChild1, OP_GET_PARAM); freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (NULL == taosArrayPush((*ppRes)->pChildren, &pChild1)) { + code = terrno; freeOperatorParam(pChild1, OP_GET_PARAM); freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } SSortMergeJoinOperatorParam* pJoin = taosMemoryMalloc(sizeof(SSortMergeJoinOperatorParam)); if (NULL == pJoin) { + code = terrno; freeOperatorParam(*ppRes, OP_GET_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } pJoin->initDownstream = initParam; @@ -435,7 +450,7 @@ static int32_t buildSeqStbJoinOperatorParam(SDynQueryCtrlOperatorInfo* pInfo, SS qDebug("start %" PRId64 ":%" PRId64 "th stbJoin, left:%d,%" PRIu64 " - right:%d,%" PRIu64, rowIdx, pPrev->tableNum, *leftVg, *leftUid, *rightVg, *rightUid); - updatePostJoinCurrTableInfo(&pInfo->stbJoin); + QRY_ERR_RET(updatePostJoinCurrTableInfo(&pInfo->stbJoin)); if (pInfo->stbJoin.basic.batchFetch) { if (pPrev->leftHash) { diff --git a/source/libs/executor/src/mergejoin.c b/source/libs/executor/src/mergejoin.c index 2c5121855a..cb0cb5cbde 100755 --- a/source/libs/executor/src/mergejoin.c +++ b/source/libs/executor/src/mergejoin.c @@ -2655,7 +2655,7 @@ static int32_t mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo mJoinSetDone(pOperator); } - return false; + return TSDB_CODE_SUCCESS; } if (buildGot) { @@ -2690,8 +2690,9 @@ static int32_t mAsofForwardRetrieve(SOperatorInfo* pOperator, SMJoinOperatorInfo } pCtx->probeGrp.blk = pJoin->probe->blk; + *newBlock = true; - return true; + return TSDB_CODE_SUCCESS; } diff --git a/source/libs/executor/test/joinTests.cpp b/source/libs/executor/test/joinTests.cpp index fd8c1d80b3..e3daf6ff27 100755 --- a/source/libs/executor/test/joinTests.cpp +++ b/source/libs/executor/test/joinTests.cpp @@ -70,6 +70,8 @@ enum { TEST_FULL_COND }; +#define JT_PRINTF (void)printf + #define COL_DISPLAY_WIDTH 18 #define JT_MAX_LOOP 1000 @@ -222,33 +224,33 @@ void printResRow(char* value, int32_t type) { return; } - printf(" "); + JT_PRINTF(" "); for (int32_t i = 0; i < jtCtx.resColNum; ++i) { int32_t slot = jtCtx.resColInSlot[i]; if (0 == type && ((jtCtx.leftColOnly && slot >= MAX_SLOT_NUM) || (jtCtx.rightColOnly && slot < MAX_SLOT_NUM))) { - printf("%18s", " "); + ("%18s", " "); continue; } if (*(bool*)(value + slot)) { - printf("%18s", " NULL"); + JT_PRINTF("%18s", " NULL"); continue; } switch (jtInputColType[slot % MAX_SLOT_NUM]) { case TSDB_DATA_TYPE_TIMESTAMP: - printf("%18" PRId64 , *(int64_t*)(value + jtCtx.resColOffset[slot])); + JT_PRINTF("%18" PRId64 , *(int64_t*)(value + jtCtx.resColOffset[slot])); break; case TSDB_DATA_TYPE_INT: - printf("%18d", *(int32_t*)(value + jtCtx.resColOffset[slot])); + JT_PRINTF("%18d", *(int32_t*)(value + jtCtx.resColOffset[slot])); break; case TSDB_DATA_TYPE_BIGINT: - printf("%18" PRId64, *(int64_t*)(value + jtCtx.resColOffset[slot])); + JT_PRINTF("%18" PRId64, *(int64_t*)(value + jtCtx.resColOffset[slot])); break; } } - printf("\t %s\n", 0 == type ? "-" : (1 == type ? "+" : "")); + JT_PRINTF("\t %s\n", 0 == type ? "-" : (1 == type ? "+" : "")); } void pushResRow(char* buf, int32_t size) { @@ -260,7 +262,7 @@ void pushResRow(char* buf, int32_t size) { (*rows)++; } else { int32_t n = 1; - tSimpleHashPut(jtCtx.jtResRows, buf, size, &n, sizeof(n)); + assert(0 == tSimpleHashPut(jtCtx.jtResRows, buf, size, &n, sizeof(n))); } } } @@ -270,10 +272,10 @@ void rmResRow() { if (rows) { (*rows)--; if ((*rows) == 0) { - tSimpleHashRemove(jtCtx.jtResRows, jtCtx.resColBuf, jtCtx.resColSize); + (void)tSimpleHashRemove(jtCtx.jtResRows, jtCtx.resColBuf, jtCtx.resColSize); } } else { - ASSERT(0); + assert(0); } } @@ -292,10 +294,10 @@ static int32_t jtMergeEqCond(SNode** ppDst, SNode** ppSrc) { if (QUERY_NODE_LOGIC_CONDITION == nodeType(*ppDst)) { SLogicConditionNode* pLogic = (SLogicConditionNode*)*ppDst; if (QUERY_NODE_LOGIC_CONDITION == nodeType(*ppSrc)) { - nodesListStrictAppendList(pLogic->pParameterList, ((SLogicConditionNode*)(*ppSrc))->pParameterList); + assert(0 == nodesListStrictAppendList(pLogic->pParameterList, ((SLogicConditionNode*)(*ppSrc))->pParameterList)); ((SLogicConditionNode*)(*ppSrc))->pParameterList = NULL; } else { - nodesListStrictAppend(pLogic->pParameterList, *ppSrc); + assert(0 == nodesListStrictAppend(pLogic->pParameterList, *ppSrc)); *ppSrc = NULL; } nodesDestroyNode(*ppSrc); @@ -311,8 +313,8 @@ static int32_t jtMergeEqCond(SNode** ppDst, SNode** ppSrc) { pLogicCond->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; pLogicCond->condType = LOGIC_COND_TYPE_AND; pLogicCond->pParameterList = nodesMakeList(); - nodesListStrictAppend(pLogicCond->pParameterList, *ppSrc); - nodesListStrictAppend(pLogicCond->pParameterList, *ppDst); + assert(0 == nodesListStrictAppend(pLogicCond->pParameterList, *ppSrc)); + assert(0 == nodesListStrictAppend(pLogicCond->pParameterList, *ppDst)); *ppDst = (SNode*)pLogicCond; *ppSrc = NULL; @@ -324,6 +326,7 @@ static int32_t jtMergeEqCond(SNode** ppDst, SNode** ppSrc) { void createDummyDownstreamOperators(int32_t num, SOperatorInfo** ppRes) { for (int32_t i = 0; i < num; ++i) { SOperatorInfo* p = (SOperatorInfo*)taosMemoryCalloc(1, sizeof(SOperatorInfo)); + assert(NULL != p); p->resultDataBlockId = i; ppRes[i] = p; } @@ -331,7 +334,7 @@ void createDummyDownstreamOperators(int32_t num, SOperatorInfo** ppRes) { void createTargetSlotList(SSortMergeJoinPhysiNode* p) { jtCtx.resColNum = 0; - memset(jtCtx.resColList, 0, sizeof(jtCtx.resColList)); + TAOS_MEMSET(jtCtx.resColList, 0, sizeof(jtCtx.resColList)); jtCtx.resColSize = MAX_SLOT_NUM * 2 * sizeof(bool); jtCtx.keyInSlotIdx = -1; @@ -386,6 +389,7 @@ void createTargetSlotList(SSortMergeJoinPhysiNode* p) { STargetNode* pTarget = (STargetNode*)nodesMakeNode(QUERY_NODE_TARGET); SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(NULL != pTarget && NULL != pCol); pCol->dataBlockId = LEFT_BLK_ID; pCol->slotId = i; pTarget->dataBlockId = RES_BLK_ID; @@ -394,7 +398,7 @@ void createTargetSlotList(SSortMergeJoinPhysiNode* p) { dstOffset += tDataTypes[jtInputColType[i]].bytes; jtCtx.resColSize += tDataTypes[jtInputColType[i]].bytes; - nodesListMakeStrictAppend(&p->pTargets, (SNode*)pTarget); + assert(0 == nodesListMakeStrictAppend(&p->pTargets, (SNode*)pTarget)); jtCtx.resColNum++; } @@ -410,6 +414,7 @@ void createTargetSlotList(SSortMergeJoinPhysiNode* p) { STargetNode* pTarget = (STargetNode*)nodesMakeNode(QUERY_NODE_TARGET); SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(NULL != pTarget && NULL != pCol); pCol->dataBlockId = RIGHT_BLK_ID; pCol->slotId = i; pTarget->dataBlockId = RES_BLK_ID; @@ -418,12 +423,13 @@ void createTargetSlotList(SSortMergeJoinPhysiNode* p) { dstOffset += tDataTypes[jtInputColType[i]].bytes; jtCtx.resColSize += tDataTypes[jtInputColType[i]].bytes; - nodesListMakeStrictAppend(&p->pTargets, (SNode*)pTarget); + assert(0 == nodesListMakeStrictAppend(&p->pTargets, (SNode*)pTarget)); jtCtx.resColNum++; } } jtCtx.resColBuf = (char*)taosMemoryRealloc(jtCtx.resColBuf, jtCtx.resColSize); + assert(NULL != jtCtx.resColBuf); } void createColEqCondStart(SSortMergeJoinPhysiNode* p) { @@ -433,7 +439,7 @@ void createColEqCondStart(SSortMergeJoinPhysiNode* p) { } while (0 == jtCtx.colEqNum); int32_t idx = 0; - memset(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); + TAOS_MEMSET(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); for (int32_t i = 0; i < jtCtx.colEqNum; ) { idx = taosRand() % MAX_SLOT_NUM; if (jtCtx.colEqList[idx]) { @@ -449,12 +455,14 @@ void createColEqCondStart(SSortMergeJoinPhysiNode* p) { for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (jtCtx.colEqList[i]) { SColumnNode* pCol1 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol1); + pCol1->dataBlockId = LEFT_BLK_ID; pCol1->slotId = i; pCol1->node.resType.type = jtInputColType[i]; pCol1->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - nodesListMakeStrictAppend(&p->pEqLeft, (SNode*)pCol1); + assert(0 == nodesListMakeStrictAppend(&p->pEqLeft, (SNode*)pCol1)); SColumnNode* pCol2 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); pCol2->dataBlockId = RIGHT_BLK_ID; @@ -462,7 +470,7 @@ void createColEqCondStart(SSortMergeJoinPhysiNode* p) { pCol2->node.resType.type = jtInputColType[i]; pCol2->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - nodesListMakeStrictAppend(&p->pEqRight, (SNode*)pCol2); + assert(0 == nodesListMakeStrictAppend(&p->pEqRight, (SNode*)pCol2)); } } } @@ -474,7 +482,7 @@ void createColOnCondStart(SSortMergeJoinPhysiNode* p) { } while (0 == jtCtx.colOnNum || (jtCtx.colOnNum + jtCtx.colEqNum) > MAX_SLOT_NUM); int32_t idx = 0; - memset(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); + TAOS_MEMSET(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); for (int32_t i = 0; i < jtCtx.colOnNum; ) { idx = taosRand() % MAX_SLOT_NUM; if (jtCtx.colOnList[idx] || jtCtx.colEqList[idx]) { @@ -504,6 +512,7 @@ void createColEqCondEnd(SSortMergeJoinPhysiNode* p) { SLogicConditionNode* pLogic = NULL; if (jtCtx.colEqNum > 1) { pLogic = (SLogicConditionNode*)nodesMakeNode(QUERY_NODE_LOGIC_CONDITION); + assert(pLogic); pLogic->node.resType.type = TSDB_DATA_TYPE_BOOL; pLogic->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; pLogic->condType = LOGIC_COND_TYPE_AND; @@ -512,18 +521,21 @@ void createColEqCondEnd(SSortMergeJoinPhysiNode* p) { for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (jtCtx.colEqList[i]) { SColumnNode* pCol1 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol1); pCol1->dataBlockId = RES_BLK_ID; pCol1->slotId = getDstSlotId(i); pCol1->node.resType.type = jtInputColType[i]; pCol1->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; SColumnNode* pCol2 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol2); pCol2->dataBlockId = RES_BLK_ID; pCol2->slotId = getDstSlotId(MAX_SLOT_NUM + i); pCol2->node.resType.type = jtInputColType[i]; pCol2->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; SOperatorNode* pOp = (SOperatorNode*)nodesMakeNode(QUERY_NODE_OPERATOR); + assert(pOp); pOp->opType = OP_TYPE_EQUAL; pOp->node.resType.type = TSDB_DATA_TYPE_BOOL; pOp->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; @@ -531,7 +543,7 @@ void createColEqCondEnd(SSortMergeJoinPhysiNode* p) { pOp->pRight = (SNode*)pCol2; if (jtCtx.colEqNum > 1) { - nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp); + assert(0 == nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp)); } else { p->pFullOnCond = (SNode*)pOp; break; @@ -552,6 +564,7 @@ void createColOnCondEnd(SSortMergeJoinPhysiNode* p) { SLogicConditionNode* pLogic = NULL; if (jtCtx.colOnNum > 1) { pLogic = (SLogicConditionNode*)nodesMakeNode(QUERY_NODE_LOGIC_CONDITION); + assert(pLogic); pLogic->node.resType.type = TSDB_DATA_TYPE_BOOL; pLogic->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; pLogic->condType = LOGIC_COND_TYPE_AND; @@ -560,18 +573,21 @@ void createColOnCondEnd(SSortMergeJoinPhysiNode* p) { for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (jtCtx.colOnList[i]) { SColumnNode* pCol1 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol1); pCol1->dataBlockId = RES_BLK_ID; pCol1->slotId = getDstSlotId(i); pCol1->node.resType.type = jtInputColType[i]; pCol1->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; SColumnNode* pCol2 = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol2); pCol2->dataBlockId = RES_BLK_ID; pCol2->slotId = getDstSlotId(MAX_SLOT_NUM + i); pCol2->node.resType.type = jtInputColType[i]; pCol2->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; SOperatorNode* pOp = (SOperatorNode*)nodesMakeNode(QUERY_NODE_OPERATOR); + assert(pOp); pOp->opType = OP_TYPE_GREATER_THAN; pOp->node.resType.type = TSDB_DATA_TYPE_BOOL; pOp->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; @@ -579,7 +595,7 @@ void createColOnCondEnd(SSortMergeJoinPhysiNode* p) { pOp->pRight = (SNode*)pCol2; if (jtCtx.colOnNum > 1) { - nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp); + assert(0 == nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp)); } else { p->pColOnCond = (SNode*)pOp; break; @@ -592,7 +608,8 @@ void createColOnCondEnd(SSortMergeJoinPhysiNode* p) { } SNode* pTmp = nodesCloneNode(p->pColOnCond); - jtMergeEqCond(&p->pFullOnCond, &pTmp); + assert(pTmp); + assert(0 == jtMergeEqCond(&p->pFullOnCond, &pTmp)); } @@ -603,18 +620,18 @@ void createColCond(SSortMergeJoinPhysiNode* p, int32_t cond) { case TEST_NO_COND: jtCtx.colEqNum = 0; jtCtx.colOnNum = 0; - memset(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); - memset(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); + TAOS_MEMSET(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); + TAOS_MEMSET(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); break; case TEST_EQ_COND: createColEqCondStart(p); jtCtx.colOnNum = 0; - memset(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); + TAOS_MEMSET(jtCtx.colOnList, 0, sizeof(jtCtx.colOnList)); break; case TEST_ON_COND: createColOnCondStart(p); jtCtx.colEqNum = 0; - memset(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); + TAOS_MEMSET(jtCtx.colEqList, 0, sizeof(jtCtx.colEqList)); break; case TEST_FULL_COND: createColEqCondStart(p); @@ -643,8 +660,8 @@ void createFilterStart(SSortMergeJoinPhysiNode* p, bool filter) { if (!filter) { jtCtx.leftFilterNum = 0; jtCtx.rightFilterNum = 0; - memset(jtCtx.leftFilterColList, 0, sizeof(jtCtx.leftFilterColList)); - memset(jtCtx.rightFilterColList, 0, sizeof(jtCtx.rightFilterColList)); + TAOS_MEMSET(jtCtx.leftFilterColList, 0, sizeof(jtCtx.leftFilterColList)); + TAOS_MEMSET(jtCtx.rightFilterColList, 0, sizeof(jtCtx.rightFilterColList)); return; } @@ -676,8 +693,8 @@ void createFilterStart(SSortMergeJoinPhysiNode* p, bool filter) { } int32_t idx = 0; - memset(jtCtx.leftFilterColList, 0, sizeof(jtCtx.leftFilterColList)); - memset(jtCtx.rightFilterColList, 0, sizeof(jtCtx.rightFilterColList)); + TAOS_MEMSET(jtCtx.leftFilterColList, 0, sizeof(jtCtx.leftFilterColList)); + TAOS_MEMSET(jtCtx.rightFilterColList, 0, sizeof(jtCtx.rightFilterColList)); for (int32_t i = 0; i < jtCtx.leftFilterNum; ) { idx = taosRand() % MAX_SLOT_NUM; if (jtCtx.leftFilterColList[idx]) { @@ -705,6 +722,7 @@ void createFilterEnd(SSortMergeJoinPhysiNode* p, bool filter) { SLogicConditionNode* pLogic = NULL; if ((jtCtx.leftFilterNum + jtCtx.rightFilterNum) > 1) { pLogic = (SLogicConditionNode*)nodesMakeNode(QUERY_NODE_LOGIC_CONDITION); + assert(pLogic); pLogic->node.resType.type = TSDB_DATA_TYPE_BOOL; pLogic->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; pLogic->condType = LOGIC_COND_TYPE_AND; @@ -713,18 +731,21 @@ void createFilterEnd(SSortMergeJoinPhysiNode* p, bool filter) { for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (jtCtx.leftFilterColList[i]) { SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol); pCol->dataBlockId = RES_BLK_ID; pCol->slotId = getDstSlotId(i); pCol->node.resType.type = jtInputColType[i]; pCol->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - sprintf(pCol->colName, "l%d", i); + (void)sprintf(pCol->colName, "l%d", i); SValueNode* pVal = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE); + assert(pVal); pVal->node.resType.type = jtInputColType[i]; pVal->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - nodesSetValueNodeValue(pVal, getFilterValue(jtInputColType[i])); + assert(0 == nodesSetValueNodeValue(pVal, getFilterValue(jtInputColType[i]))); SOperatorNode* pOp = (SOperatorNode*)nodesMakeNode(QUERY_NODE_OPERATOR); + assert(pOp); pOp->opType = OP_TYPE_GREATER_THAN; pOp->node.resType.type = TSDB_DATA_TYPE_BOOL; pOp->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; @@ -732,7 +753,7 @@ void createFilterEnd(SSortMergeJoinPhysiNode* p, bool filter) { pOp->pRight = (SNode*)pVal; if ((jtCtx.leftFilterNum + jtCtx.rightFilterNum) > 1) { - nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp); + assert(0 == nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp)); } else { p->node.pConditions = (SNode*)pOp; break; @@ -743,18 +764,21 @@ void createFilterEnd(SSortMergeJoinPhysiNode* p, bool filter) { for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (jtCtx.rightFilterColList[i]) { SColumnNode* pCol = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN); + assert(pCol); pCol->dataBlockId = RES_BLK_ID; pCol->slotId = getDstSlotId(MAX_SLOT_NUM + i); pCol->node.resType.type = jtInputColType[i]; pCol->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - sprintf(pCol->colName, "r%d", i); + (void)sprintf(pCol->colName, "r%d", i); SValueNode* pVal = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE); + assert(pVal); pVal->node.resType.type = jtInputColType[i]; pVal->node.resType.bytes = tDataTypes[jtInputColType[i]].bytes; - nodesSetValueNodeValue(pVal, getFilterValue(jtInputColType[i])); + assert(0 == nodesSetValueNodeValue(pVal, getFilterValue(jtInputColType[i]))); SOperatorNode* pOp = (SOperatorNode*)nodesMakeNode(QUERY_NODE_OPERATOR); + assert(pOp); pOp->opType = OP_TYPE_GREATER_THAN; pOp->node.resType.type = TSDB_DATA_TYPE_BOOL; pOp->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes; @@ -762,7 +786,7 @@ void createFilterEnd(SSortMergeJoinPhysiNode* p, bool filter) { pOp->pRight = (SNode*)pVal; if ((jtCtx.leftFilterNum + jtCtx.rightFilterNum) > 1) { - nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp); + assert(0 == nodesListMakeStrictAppend(&pLogic->pParameterList, (SNode*)pOp)); } else { p->node.pConditions = (SNode*)pOp; break; @@ -787,17 +811,19 @@ void updateColRowInfo() { void createBlockDescNode(SDataBlockDescNode** ppNode) { SDataBlockDescNode* pDesc = (SDataBlockDescNode*)nodesMakeNode(QUERY_NODE_DATABLOCK_DESC); + assert(pDesc); pDesc->dataBlockId = RES_BLK_ID; pDesc->totalRowSize = jtCtx.resColSize - MAX_SLOT_NUM * 2 * sizeof(bool); pDesc->outputRowSize = pDesc->totalRowSize; for (int32_t i = 0; i < jtCtx.resColNum; ++i) { SSlotDescNode* pSlot = (SSlotDescNode*)nodesMakeNode(QUERY_NODE_SLOT_DESC); + assert(pSlot); pSlot->slotId = i; int32_t slotIdx = jtCtx.resColInSlot[i] >= MAX_SLOT_NUM ? jtCtx.resColInSlot[i] - MAX_SLOT_NUM : jtCtx.resColInSlot[i]; pSlot->dataType.type = jtInputColType[slotIdx]; pSlot->dataType.bytes = tDataTypes[pSlot->dataType.type].bytes; - nodesListMakeStrictAppend(&pDesc->pSlots, (SNode *)pSlot); + assert(0 == nodesListMakeStrictAppend(&pDesc->pSlots, (SNode *)pSlot)); } *ppNode = pDesc; @@ -805,12 +831,14 @@ void createBlockDescNode(SDataBlockDescNode** ppNode) { SSortMergeJoinPhysiNode* createDummySortMergeJoinPhysiNode(SJoinTestParam* param) { SSortMergeJoinPhysiNode* p = (SSortMergeJoinPhysiNode*)nodesMakeNode(QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN); + assert(p); p->joinType = param->joinType; p->subType = param->subType; p->asofOpType = param->asofOp; p->grpJoin = param->grpJoin; if (p->subType == JOIN_STYPE_WIN || param->jLimit > 1 || taosRand() % 2) { SLimitNode* limitNode = (SLimitNode*)nodesMakeNode(QUERY_NODE_LIMIT); + assert(limitNode); limitNode->limit = param->jLimit; p->pJLimit = (SNode*)limitNode; } @@ -820,8 +848,11 @@ SSortMergeJoinPhysiNode* createDummySortMergeJoinPhysiNode(SJoinTestParam* param p->node.inputTsOrder = param->asc ? ORDER_ASC : ORDER_DESC; if (JOIN_STYPE_WIN == p->subType) { SWindowOffsetNode* pOffset = (SWindowOffsetNode*)nodesMakeNode(QUERY_NODE_WINDOW_OFFSET); + assert(pOffset); SValueNode* pStart = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE); + assert(pStart); SValueNode* pEnd = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE); + assert(pEnd); pStart->node.resType.type = TSDB_DATA_TYPE_BIGINT; pStart->node.resType.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes; pStart->datum.i = (taosRand() % 2) ? (((int32_t)-1) * (int64_t)(taosRand() % JT_MAX_WINDOW_OFFSET)) : (taosRand() % JT_MAX_WINDOW_OFFSET); @@ -863,6 +894,7 @@ SSortMergeJoinPhysiNode* createDummySortMergeJoinPhysiNode(SJoinTestParam* param SExecTaskInfo* createDummyTaskInfo(char* taskId) { SExecTaskInfo* p = (SExecTaskInfo*)taosMemoryCalloc(1, sizeof(SExecTaskInfo)); + assert(p); p->id.str = taskId; return p; @@ -870,6 +902,7 @@ SExecTaskInfo* createDummyTaskInfo(char* taskId) { SSDataBlock* createDummyBlock(int32_t blkId) { SSDataBlock* p = createDataBlock(); + assert(p); p->info.id.blockId = blkId; p->info.type = STREAM_INVALID; @@ -881,14 +914,14 @@ SSDataBlock* createDummyBlock(int32_t blkId) { SColumnInfoData idata = createColumnInfoData(jtInputColType[i], tDataTypes[jtInputColType[i]].bytes, i); - blockDataAppendColInfo(p, &idata); + assert(0 == blockDataAppendColInfo(p, &idata)); } return p; } void appendAsofLeftEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rightRows) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { if (!jtCtx.resColList[c]) { continue; @@ -897,7 +930,7 @@ void appendAsofLeftEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rig if (*((bool*)leftInRow + c)) { *(char*)(jtCtx.resColBuf + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); } } @@ -913,10 +946,10 @@ void appendAsofLeftEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rig if (jtCtx.resColList[MAX_SLOT_NUM + c]) { if (*(bool*)(rightResRows + c)) { *(bool*)(jtCtx.resColBuf + MAX_SLOT_NUM + c) = true; - memset(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], 0, tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMSET(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], 0, tDataTypes[jtInputColType[c]].bytes); } else { *(bool*)(jtCtx.resColBuf + MAX_SLOT_NUM + c) = false; - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rightResRows + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rightResRows + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); } } } @@ -927,7 +960,7 @@ void appendAsofLeftEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rig void appendLeftNonMatchGrp(char* leftInRow) { if (!jtCtrl.noKeepResRows) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { if (!jtCtx.resColList[c]) { continue; @@ -936,7 +969,7 @@ void appendLeftNonMatchGrp(char* leftInRow) { if (*((bool*)leftInRow + c)) { *(char*)(jtCtx.resColBuf + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); } } @@ -957,13 +990,15 @@ void appendAllAsofResRows() { if (0 == jtCtx.rightFilterNum) { for (int32_t i = 0; i < leftRows; ++i) { char* leftInRow = (char*)taosArrayGet(jtCtx.leftRowsList, i); + assert(leftInRow); appendLeftNonMatchGrp(leftInRow); } } } else { - ASSERT(rightRows <= jtCtx.jLimit); + assert(rightRows <= jtCtx.jLimit); for (int32_t i = 0; i < leftRows; ++i) { char* leftInRow = (char*)taosArrayGet(jtCtx.leftRowsList, i); + assert(leftInRow); appendAsofLeftEachResGrps(leftInRow, 0, rightRows); } } @@ -982,10 +1017,12 @@ void chkAppendAsofForwardGrpResRows(bool forceOut) { int32_t i = 0; for (; i < leftRows; ++i) { char* leftRow = (char*)taosArrayGet(jtCtx.leftRowsList, i); + assert(leftRow); int64_t* leftTs = (int64_t*)(leftRow + jtCtx.inColOffset[JT_PRIM_TS_SLOT_ID]); bool append = false; for (int32_t r = rightOffset; r < rightRows; ++r) { char* rightRow = (char*)taosArrayGet(jtCtx.rightRowsList, r); + assert(rightRow); int64_t* rightTs = (int64_t*)(rightRow + jtCtx.inColOffset[JT_PRIM_TS_SLOT_ID]); if (((jtCtx.asc && *leftTs > *rightTs) || (!jtCtx.asc && *leftTs < *rightTs)) || (*leftTs == *rightTs && (OP_TYPE_LOWER_THAN == jtCtx.asofOpType || OP_TYPE_GREATER_THAN == jtCtx.asofOpType))) { rightOffset++; @@ -1030,7 +1067,7 @@ void appendWinEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rightRow return; } - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { if (!jtCtx.resColList[c]) { continue; @@ -1039,7 +1076,7 @@ void appendWinEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rightRow if (*((bool*)leftInRow + c)) { *(char*)(jtCtx.resColBuf + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[c], leftInRow + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); } } @@ -1052,14 +1089,15 @@ void appendWinEachResGrps(char* leftInRow, int32_t rightOffset, int32_t rightRow } char* rightResRows = (char*)taosArrayGet(jtCtx.rightRowsList, r); + assert(rightResRows); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { if (jtCtx.resColList[MAX_SLOT_NUM + c]) { if (*(bool*)(rightResRows + c)) { *(bool*)(jtCtx.resColBuf + MAX_SLOT_NUM + c) = true; - memset(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], 0, tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMSET(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], 0, tDataTypes[jtInputColType[c]].bytes); } else { *(bool*)(jtCtx.resColBuf + MAX_SLOT_NUM + c) = false; - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rightResRows + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rightResRows + jtCtx.inColOffset[c], tDataTypes[jtInputColType[c]].bytes); } } } @@ -1080,6 +1118,7 @@ void chkAppendWinResRows(bool forceOut) { int32_t i = 0; for (; i < leftRows; ++i) { char* leftRow = (char*)taosArrayGet(jtCtx.leftRowsList, i); + assert(leftRow); int64_t* leftTs = (int64_t*)(leftRow + jtCtx.inColOffset[JT_PRIM_TS_SLOT_ID]); int64_t winStart = *leftTs + jtCtx.winStartOffset; int64_t winEnd = *leftTs + jtCtx.winEndOffset; @@ -1088,6 +1127,7 @@ void chkAppendWinResRows(bool forceOut) { bool winClosed = false; for (int32_t r = rightOffset; r < rightRows; ++r) { char* rightRow = (char*)taosArrayGet(jtCtx.rightRowsList, r); + assert(rightRow); int64_t* rightTs = (int64_t*)(rightRow + jtCtx.inColOffset[JT_PRIM_TS_SLOT_ID]); if ((jtCtx.asc && *rightTs < winStart) || (!jtCtx.asc && *rightTs > winEnd)) { rightOffset++; @@ -1154,8 +1194,9 @@ void createGrpRows(SSDataBlock** ppBlk, int32_t blkId, int32_t grpRows) { if (NULL == *ppBlk) { *ppBlk = createDummyBlock((blkId == LEFT_BLK_ID) ? LEFT_BLK_ID : RIGHT_BLK_ID); - blockDataEnsureCapacity(*ppBlk, jtCtx.blkRows); - taosArrayPush((blkId == LEFT_BLK_ID) ? jtCtx.leftBlkList : jtCtx.rightBlkList, ppBlk); + assert(*ppBlk); + assert(0 == blockDataEnsureCapacity(*ppBlk, jtCtx.blkRows)); + assert(NULL != taosArrayPush((blkId == LEFT_BLK_ID) ? jtCtx.leftBlkList : jtCtx.rightBlkList, ppBlk)); } if (jtCtx.grpJoin) { @@ -1207,8 +1248,9 @@ void createGrpRows(SSDataBlock** ppBlk, int32_t blkId, int32_t grpRows) { for (int32_t i = 0; i < grpRows; ++i) { if ((*ppBlk)->info.rows >= (*ppBlk)->info.capacity) { *ppBlk = createDummyBlock((blkId == LEFT_BLK_ID) ? LEFT_BLK_ID : RIGHT_BLK_ID); - blockDataEnsureCapacity(*ppBlk, jtCtx.blkRows); - taosArrayPush((blkId == LEFT_BLK_ID) ? jtCtx.leftBlkList : jtCtx.rightBlkList, ppBlk); + assert(*ppBlk); + assert(0 == blockDataEnsureCapacity(*ppBlk, jtCtx.blkRows)); + assert(NULL != taosArrayPush((blkId == LEFT_BLK_ID) ? jtCtx.leftBlkList : jtCtx.rightBlkList, ppBlk)); if (jtCtx.grpJoin) { (*ppBlk)->info.id.groupId = jtCtx.inGrpId; } @@ -1216,9 +1258,9 @@ void createGrpRows(SSDataBlock** ppBlk, int32_t blkId, int32_t grpRows) { filterOut = (peerFilterNum > 0 && (jtCtx.subType != JOIN_STYPE_ASOF && jtCtx.subType != JOIN_STYPE_WIN)) ? true : false; if (!filterOut) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); if (keepInput) { - memset(jtCtx.inColBuf, 0, jtCtx.inColSize); + TAOS_MEMSET(jtCtx.inColBuf, 0, jtCtx.inColSize); } } @@ -1262,14 +1304,15 @@ void createGrpRows(SSDataBlock** ppBlk, int32_t blkId, int32_t grpRows) { } SColumnInfoData* pCol = (SColumnInfoData*)taosArrayGet((*ppBlk)->pDataBlock, c); - colDataSetVal(pCol, (*ppBlk)->info.rows, pData, isNull); + assert(pCol); + assert(0 == colDataSetVal(pCol, (*ppBlk)->info.rows, pData, isNull)); if (keepInput) { if (!filterOut || (blkId != LEFT_BLK_ID)) { if (isNull) { *(char*)(jtCtx.inColBuf + c) = true; } else { - memcpy(jtCtx.inColBuf + jtCtx.inColOffset[c], pData, tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.inColBuf + jtCtx.inColOffset[c], pData, tDataTypes[jtInputColType[c]].bytes); } } else { addToRowList = false; @@ -1278,16 +1321,16 @@ void createGrpRows(SSDataBlock** ppBlk, int32_t blkId, int32_t grpRows) { if (isNull) { *(char*)(jtCtx.resColBuf + tableOffset + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[tableOffset + c], pData, tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[tableOffset + c], pData, tDataTypes[jtInputColType[c]].bytes); } } } if (keepInput && addToRowList) { - taosArrayPush(pTableRows, jtCtx.inColBuf); + assert(NULL != taosArrayPush(pTableRows, jtCtx.inColBuf)); if (blkId == RIGHT_BLK_ID) { bool fout = filterOut ? true : false; - taosArrayPush(jtCtx.rightFilterOut, &fout); + assert(NULL != taosArrayPush(jtCtx.rightFilterOut, &fout)); } } @@ -1328,27 +1371,28 @@ void createRowData(SSDataBlock* pBlk, int64_t tbOffset, int32_t rowIdx, int32_t for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { SColumnInfoData* pCol = (SColumnInfoData*)taosArrayGet(pBlk->pDataBlock, c); + assert(pCol); int32_t rv = taosRand() % 10; switch (jtInputColType[c]) { case TSDB_DATA_TYPE_TIMESTAMP: *(int64_t*)(jtCtx.colRowDataBuf + tbOffset + rowIdx * jtCtx.blkRowSize + jtCtx.colRowOffset[c]) = jtCtx.curTs; - colDataSetVal(pCol, pBlk->info.rows, (char*)&jtCtx.curTs, false); + assert(0 == colDataSetVal(pCol, pBlk->info.rows, (char*)&jtCtx.curTs, false)); break; case TSDB_DATA_TYPE_INT: if (rv) { tmpInt = (taosRand() % 2) ? INT_FILTER_VALUE + jtCtx.grpOffset[c] + taosRand() % vRange : INT_FILTER_VALUE - taosRand() % vRange; *(int32_t*)(jtCtx.colRowDataBuf + tbOffset + rowIdx * jtCtx.blkRowSize + jtCtx.colRowOffset[c]) = tmpInt; - colDataSetVal(pCol, pBlk->info.rows, (char*)&tmpInt, false); + assert(0 == colDataSetVal(pCol, pBlk->info.rows, (char*)&tmpInt, false)); } else { *(bool*)(jtCtx.colRowDataBuf + tbOffset + rowIdx * jtCtx.blkRowSize + c) = true; - colDataSetVal(pCol, pBlk->info.rows, NULL, true); + assert(0 == colDataSetVal(pCol, pBlk->info.rows, NULL, true)); } break; case TSDB_DATA_TYPE_BIGINT: tmpBig = (taosRand() % 2) ? BIGINT_FILTER_VALUE + jtCtx.curKeyOffset++ : BIGINT_FILTER_VALUE - jtCtx.curKeyOffset++; *(int64_t*)(jtCtx.colRowDataBuf + tbOffset + rowIdx * jtCtx.blkRowSize + jtCtx.colRowOffset[c]) = tmpBig; - colDataSetVal(pCol, pBlk->info.rows, (char*)&tmpBig, false); + assert(0 == colDataSetVal(pCol, pBlk->info.rows, (char*)&tmpBig, false)); break; default: break; @@ -1364,9 +1408,10 @@ void makeAppendBlkData(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left if (jtCtx.colRowDataBufSize < totalSize) { jtCtx.colRowDataBuf = (char*)taosMemoryRealloc(jtCtx.colRowDataBuf, totalSize); + assert(jtCtx.colRowDataBuf); } - memset(jtCtx.colRowDataBuf, 0, totalSize); + TAOS_MEMSET(jtCtx.colRowDataBuf, 0, totalSize); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { jtCtx.grpOffset[c] = c * TMAX(leftGrpRows, rightGrpRows); @@ -1376,8 +1421,9 @@ void makeAppendBlkData(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left for (int32_t i = 0; i < leftGrpRows; ++i) { if ((*ppLeft)->info.rows >= (*ppLeft)->info.capacity) { *ppLeft = createDummyBlock(LEFT_BLK_ID); - blockDataEnsureCapacity(*ppLeft, jtCtx.blkRows); - taosArrayPush(jtCtx.leftBlkList, ppLeft); + assert(*ppLeft); + assert(0 == blockDataEnsureCapacity(*ppLeft, jtCtx.blkRows)); + assert(NULL != taosArrayPush(jtCtx.leftBlkList, ppLeft)); if (jtCtx.grpJoin) { (*ppLeft)->info.id.groupId = jtCtx.inGrpId; } @@ -1390,8 +1436,9 @@ void makeAppendBlkData(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left for (int32_t i = 0; i < rightGrpRows; ++i) { if ((*ppRight)->info.rows >= (*ppRight)->info.capacity) { *ppRight = createDummyBlock(RIGHT_BLK_ID); - blockDataEnsureCapacity(*ppRight, jtCtx.blkRows); - taosArrayPush(jtCtx.rightBlkList, ppRight); + assert(*ppRight); + assert(0 == blockDataEnsureCapacity(*ppRight, jtCtx.blkRows)); + assert(NULL != taosArrayPush(jtCtx.rightBlkList, ppRight)); if (jtCtx.grpJoin) { (*ppRight)->info.id.groupId = jtCtx.inGrpId; } @@ -1404,14 +1451,14 @@ void makeAppendBlkData(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left void putNMatchRowToRes(char* lrow, int32_t tableOffset, int32_t peerOffset) { if (!jtCtrl.noKeepResRows) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { if (jtCtx.resColList[tableOffset + c]) { if (*(bool*)(lrow + c)) { *(bool*)(jtCtx.resColBuf + tableOffset + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[tableOffset + c], lrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[tableOffset + c], lrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); } } } @@ -1428,7 +1475,7 @@ void putNMatchRowToRes(char* lrow, int32_t tableOffset, int32_t peerOffset) { void putMatchRowToRes(char* lrow, char* rrow, int32_t cols) { if (!jtCtrl.noKeepResRows) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); if (cols & LEFT_TABLE_COLS) { for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { @@ -1436,7 +1483,7 @@ void putMatchRowToRes(char* lrow, char* rrow, int32_t cols) { if (*(bool*)(lrow + c)) { *(bool*)(jtCtx.resColBuf + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[c], lrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[c], lrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); } } } @@ -1448,7 +1495,7 @@ void putMatchRowToRes(char* lrow, char* rrow, int32_t cols) { if (*(bool*)(rrow + c)) { *(bool*)(jtCtx.resColBuf + MAX_SLOT_NUM + c) = true; } else { - memcpy(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); + TAOS_MEMCPY(jtCtx.resColBuf + jtCtx.resColOffset[MAX_SLOT_NUM + c], rrow + jtCtx.colRowOffset[c], tDataTypes[jtInputColType[c]].bytes); } } } @@ -1824,7 +1871,7 @@ void antiJoinAppendEqGrpRes(int32_t leftGrpRows, int32_t rightGrpRows) { int64_t lBig = 0, rBig = 0, fbig = 0; int64_t rightTbOffset = jtCtx.blkRowSize * leftGrpRows; - ASSERT(0 == jtCtx.rightFilterNum); + assert(0 == jtCtx.rightFilterNum); for (int32_t l = 0; l < leftGrpRows; ++l) { char* lrow = jtCtx.colRowDataBuf + jtCtx.blkRowSize * l; @@ -1977,9 +2024,9 @@ void addAsofEqInRows(int32_t rowsNum, int64_t tbOffset, bool leftTable) { continue; } - taosArrayPush(rowList, row); + assert(NULL != taosArrayPush(rowList, row)); if (!leftTable) { - taosArrayPush(jtCtx.rightFilterOut, &filterOut); + assert(NULL != taosArrayPush(jtCtx.rightFilterOut, &filterOut)); } } @@ -2103,9 +2150,9 @@ void addWinEqInRows(int32_t rowsNum, int64_t tbOffset, bool leftTable) { continue; } - taosArrayPush(rowList, row); + assert(NULL != taosArrayPush(rowList, row)); if (!leftTable) { - taosArrayPush(jtCtx.rightFilterOut, &filterOut); + assert(NULL != taosArrayPush(jtCtx.rightFilterOut, &filterOut)); } } } @@ -2127,7 +2174,7 @@ void fullJoinAppendEqGrpRes(int32_t leftGrpRows, int32_t rightGrpRows) { int64_t lBig = 0, rBig = 0, fbig = 0; int64_t rightTbOffset = jtCtx.blkRowSize * leftGrpRows; - memset(jtCtx.rightFinMatch, 0, rightGrpRows * sizeof(bool)); + TAOS_MEMSET(jtCtx.rightFinMatch, 0, rightGrpRows * sizeof(bool)); for (int32_t l = 0; l < leftGrpRows; ++l) { char* lrow = jtCtx.colRowDataBuf + jtCtx.blkRowSize * l; @@ -2285,8 +2332,9 @@ void createTsEqGrpRows(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left if (NULL == *ppLeft && leftGrpRows > 0) { *ppLeft = createDummyBlock(LEFT_BLK_ID); - blockDataEnsureCapacity(*ppLeft, jtCtx.blkRows); - taosArrayPush(jtCtx.leftBlkList, ppLeft); + assert(*ppLeft); + assert(0 == blockDataEnsureCapacity(*ppLeft, jtCtx.blkRows)); + assert(NULL != taosArrayPush(jtCtx.leftBlkList, ppLeft)); } if (jtCtx.grpJoin) { @@ -2295,8 +2343,9 @@ void createTsEqGrpRows(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left if (NULL == *ppRight && rightGrpRows > 0) { *ppRight = createDummyBlock(RIGHT_BLK_ID); - blockDataEnsureCapacity(*ppRight, jtCtx.blkRows); - taosArrayPush(jtCtx.rightBlkList, ppRight); + assert(*ppRight); + assert(0 == blockDataEnsureCapacity(*ppRight, jtCtx.blkRows)); + assert(NULL != taosArrayPush(jtCtx.rightBlkList, ppRight)); } if (jtCtx.grpJoin) { @@ -2311,7 +2360,7 @@ void createTsEqGrpRows(SSDataBlock** ppLeft, SSDataBlock** ppRight, int32_t left void forceFlushResRows() { if (JOIN_STYPE_ASOF == jtCtx.subType && taosArrayGetSize(jtCtx.leftRowsList) > 0) { - ASSERT((jtCtx.asc && (OP_TYPE_LOWER_EQUAL == jtCtx.asofOpType || OP_TYPE_LOWER_THAN == jtCtx.asofOpType)) + assert((jtCtx.asc && (OP_TYPE_LOWER_EQUAL == jtCtx.asofOpType || OP_TYPE_LOWER_THAN == jtCtx.asofOpType)) || (!jtCtx.asc && (OP_TYPE_GREATER_EQUAL == jtCtx.asofOpType || OP_TYPE_GREATER_THAN == jtCtx.asofOpType))); chkAppendAsofForwardGrpResRows(true); } else if (JOIN_STYPE_WIN == jtCtx.subType && taosArrayGetSize(jtCtx.leftRowsList) > 0) { @@ -2404,6 +2453,7 @@ void createDummyBlkList(int32_t leftMaxRows, int32_t leftMaxGrpRows, int32_t rig if (maxGrpRows > jtCtx.rightFinMatchNum) { jtCtx.rightFinMatchNum = maxGrpRows; jtCtx.rightFinMatch = (bool*)taosMemoryRealloc(jtCtx.rightFinMatch, maxGrpRows * sizeof(bool)); + assert(jtCtx.rightFinMatch); } taosArrayClear(jtCtx.leftRowsList); @@ -2466,43 +2516,44 @@ void joinTestReplaceRetrieveFp() { void printColList(char* title, bool left, int32_t* colList, bool filter, char* opStr) { bool first = true; - printf("\t %s:", title); + JT_PRINTF("\t %s:", title); for (int32_t i = 0; i < MAX_SLOT_NUM; ++i) { if (colList[i]) { if (!first) { - printf(" AND "); + JT_PRINTF(" AND "); } first = false; if (filter) { - printf("%sc%d%s%" PRId64 , left ? "l" : "r", i, opStr, jtFilterValue[i]); + JT_PRINTF("%sc%d%s%" PRId64 , left ? "l" : "r", i, opStr, jtFilterValue[i]); } else { - printf("lc%d%src%d", i, opStr, i); + JT_PRINTF("lc%d%src%d", i, opStr, i); } } } - printf("\n"); + JT_PRINTF("\n"); } void printInputRowData(SSDataBlock* pBlk, int32_t* rowIdx) { if (jtCtx.grpJoin) { - printf("%5" PRIu64, pBlk->info.id.groupId); + JT_PRINTF("%5" PRIu64, pBlk->info.id.groupId); } for (int32_t c = 0; c < MAX_SLOT_NUM; ++c) { SColumnInfoData* pCol = (SColumnInfoData*)taosArrayGet(pBlk->pDataBlock, c); - ASSERT(pCol->info.type == jtInputColType[c]); + assert(pCol); + assert(pCol->info.type == jtInputColType[c]); if (colDataIsNull_s(pCol, *rowIdx)) { - printf("%18s", " NULL"); + JT_PRINTF("%18s", " NULL"); } else { switch (jtInputColType[c]) { case TSDB_DATA_TYPE_TIMESTAMP: case TSDB_DATA_TYPE_BIGINT: - printf("%18" PRId64, *(int64_t*)colDataGetData(pCol, *rowIdx)); + JT_PRINTF("%18" PRId64, *(int64_t*)colDataGetData(pCol, *rowIdx)); break; case TSDB_DATA_TYPE_INT: - printf("%18d", *(int32_t*)colDataGetData(pCol, *rowIdx)); + JT_PRINTF("%18d", *(int32_t*)colDataGetData(pCol, *rowIdx)); break; default: - ASSERT(0); + assert(0); } } } @@ -2513,41 +2564,43 @@ void printInputRowData(SSDataBlock* pBlk, int32_t* rowIdx) { void printInputData() { int32_t leftRowIdx = 0, rightRowIdx = 0; - printf("\nInput Data:\n"); + JT_PRINTF("\nInput Data:\n"); while (jtCtx.leftBlkReadIdx < taosArrayGetSize(jtCtx.leftBlkList) || jtCtx.rightBlkReadIdx < taosArrayGetSize(jtCtx.rightBlkList)) { if (jtCtx.leftBlkReadIdx < taosArrayGetSize(jtCtx.leftBlkList)) { while (true) { SSDataBlock* pBlk = (SSDataBlock*)taosArrayGetP(jtCtx.leftBlkList, jtCtx.leftBlkReadIdx); + assert(pBlk); if (leftRowIdx < pBlk->info.rows) { printInputRowData(pBlk, &leftRowIdx); break; } - printf("\t%*s-------------------------blk end-------------------------------", jtCtx.grpJoin ? 6 : 0, " "); + JT_PRINTF("\t%*s-------------------------blk end-------------------------------", jtCtx.grpJoin ? 6 : 0, " "); jtCtx.leftBlkReadIdx++; leftRowIdx = 0; break; } } else { - printf("%*s", jtCtx.grpJoin ? 77 : 72, " "); + JT_PRINTF("%*s", jtCtx.grpJoin ? 77 : 72, " "); } if (jtCtx.rightBlkReadIdx < taosArrayGetSize(jtCtx.rightBlkList)) { while (true) { SSDataBlock* pBlk = (SSDataBlock*)taosArrayGetP(jtCtx.rightBlkList, jtCtx.rightBlkReadIdx); + assert(pBlk); if (rightRowIdx < pBlk->info.rows) { printInputRowData(pBlk, &rightRowIdx); break; } - printf("\t%*s--------------------------blk end----------------------------\t", jtCtx.grpJoin ? 6 : 0, " "); + JT_PRINTF("\t%*s--------------------------blk end----------------------------\t", jtCtx.grpJoin ? 6 : 0, " "); jtCtx.rightBlkReadIdx++; rightRowIdx = 0; break; } } - printf("\n"); + JT_PRINTF("\n"); } jtCtx.leftBlkReadIdx = jtCtx.rightBlkReadIdx = 0; @@ -2555,13 +2608,13 @@ void printInputData() { char* getInputStatStr(char* inputStat) { if (jtCtx.inputStat & (1 << LEFT_BLK_ID)) { - strcat(inputStat, "L"); + TAOS_STRCAT(inputStat, "L"); } if (jtCtx.inputStat & (1 << RIGHT_BLK_ID)) { - strcat(inputStat, "R"); + TAOS_STRCAT(inputStat, "R"); } if (jtCtx.inputStat & (1 << 2)) { - strcat(inputStat, "E"); + TAOS_STRCAT(inputStat, "E"); } return inputStat; } @@ -2589,19 +2642,19 @@ void printBasicInfo(char* caseName) { } char inputStat[4] = {0}; - printf("\n%dth TEST [%s] START\nBasic Info:\n\t asc:%d\n\t filter:%d\n\t maxRows:left-%d right-%d\n\t " + JT_PRINTF("\n%dth TEST [%s] START\nBasic Info:\n\t asc:%d\n\t filter:%d\n\t maxRows:left-%d right-%d\n\t " "maxGrpRows:left-%d right-%d\n\t blkRows:%d\n\t colCond:%s\n\t joinType:%s\n\t " "subType:%s\n\t inputStat:%s\n\t groupJoin:%s\n", jtCtx.loopIdx, caseName, jtCtx.asc, jtCtx.filter, jtCtx.leftMaxRows, jtCtx.rightMaxRows, jtCtx.leftMaxGrpRows, jtCtx.rightMaxGrpRows, jtCtx.blkRows, jtColCondStr[jtCtx.colCond], jtJoinTypeStr[jtCtx.joinType], jtSubTypeStr[jtCtx.subType], getInputStatStr(inputStat), jtCtx.grpJoin ? "true" : "false"); if (JOIN_STYPE_ASOF == jtCtx.subType) { - printf("\t asofOp:%s\n\t JLimit:%" PRId64 "\n", getAsofOpStr(), jtCtx.jLimit); + JT_PRINTF("\t asofOp:%s\n\t JLimit:%" PRId64 "\n", getAsofOpStr(), jtCtx.jLimit); } else if (JOIN_STYPE_WIN == jtCtx.subType) { - printf("\t windowOffset:[%" PRId64 ", %" PRId64 "]\n\t JLimit:%" PRId64 "\n", jtCtx.winStartOffset, jtCtx.winEndOffset, jtCtx.jLimit); + JT_PRINTF("\t windowOffset:[%" PRId64 ", %" PRId64 "]\n\t JLimit:%" PRId64 "\n", jtCtx.winStartOffset, jtCtx.winEndOffset, jtCtx.jLimit); } - printf("Input Info:\n\t totalBlk:left-%d right-%d\n\t totalRows:left-%d right-%d\n\t " + JT_PRINTF("Input Info:\n\t totalBlk:left-%d right-%d\n\t totalRows:left-%d right-%d\n\t " "blkRowSize:%d\n\t inputCols:left-%s %s %s %s right-%s %s %s %s\n", (int32_t)taosArrayGetSize(jtCtx.leftBlkList), (int32_t)taosArrayGetSize(jtCtx.rightBlkList), jtCtx.leftTotalRows, jtCtx.rightTotalRows, @@ -2610,30 +2663,30 @@ void printBasicInfo(char* caseName) { tDataTypes[jtInputColType[1]].name, tDataTypes[jtInputColType[2]].name, tDataTypes[jtInputColType[3]].name); if (jtCtx.colEqNum) { - printf("\t colEqNum:%d\n", jtCtx.colEqNum); + JT_PRINTF("\t colEqNum:%d\n", jtCtx.colEqNum); printColList("colEqList", false, jtCtx.colEqList, false, "="); } if (jtCtx.colOnNum) { - printf("\t colOnNum:%d\n", jtCtx.colOnNum); + JT_PRINTF("\t colOnNum:%d\n", jtCtx.colOnNum); printColList("colOnList", false, jtCtx.colOnList, false, ">"); } if (jtCtx.leftFilterNum) { - printf("\t leftFilterNum:%d\n", jtCtx.leftFilterNum); + JT_PRINTF("\t leftFilterNum:%d\n", jtCtx.leftFilterNum); printColList("leftFilterList", true, jtCtx.leftFilterColList, true, ">"); } if (jtCtx.rightFilterNum) { - printf("\t rightFilterNum:%d\n", jtCtx.rightFilterNum); + JT_PRINTF("\t rightFilterNum:%d\n", jtCtx.rightFilterNum); printColList("rightFilterList", false, jtCtx.rightFilterColList, true, ">"); } - printf("\t resColSize:%d\n\t resColNum:%d\n\t resColList:", jtCtx.resColSize, jtCtx.resColNum); + JT_PRINTF("\t resColSize:%d\n\t resColNum:%d\n\t resColList:", jtCtx.resColSize, jtCtx.resColNum); for (int32_t i = 0; i < jtCtx.resColNum; ++i) { int32_t s = jtCtx.resColInSlot[i]; int32_t idx = s >= MAX_SLOT_NUM ? s - MAX_SLOT_NUM : s; - printf("%sc%d[%s]\t", s >= MAX_SLOT_NUM ? "r" : "l", s, tDataTypes[jtInputColType[idx]].name); + JT_PRINTF("%sc%d[%s]\t", s >= MAX_SLOT_NUM ? "r" : "l", s, tDataTypes[jtInputColType[idx]].name); } if (jtCtrl.printInputRow) { @@ -2646,8 +2699,8 @@ void printOutputInfo() { return; } - printf("\nOutput Info:\n\t expectedRows:%d\n\t ", jtCtx.resRows); - printf("Actual Result:\n"); + JT_PRINTF("\nOutput Info:\n\t expectedRows:%d\n\t ", jtCtx.resRows); + JT_PRINTF("Actual Result:\n"); } void printActualResInfo() { @@ -2655,7 +2708,7 @@ void printActualResInfo() { return; } - printf("Actual Result Summary:\n\t blkNum:%d\n\t rowNum:%d%s\n\t leftBlkRead:%d\n\t rightBlkRead:%d\n\t +rows:%d%s\n\t " + JT_PRINTF("Actual Result Summary:\n\t blkNum:%d\n\t rowNum:%d%s\n\t leftBlkRead:%d\n\t rightBlkRead:%d\n\t +rows:%d%s\n\t " "-rows:%d%s\n\t matchRows:%d%s\n\t executionTime:%" PRId64 "us\n", jtRes.blkNum, jtRes.rowNum, jtRes.rowNum == jtCtx.resRows ? "" : "*", @@ -2667,7 +2720,7 @@ void printActualResInfo() { } void printStatInfo(char* caseName) { - printf("\n TEST [%s] Stat:\n\t maxResRows:%d\n\t maxResBlkRows:%d\n\t totalResRows:%" PRId64 "\n\t useMSecs:%" PRId64 "\n", + JT_PRINTF("\n TEST [%s] Stat:\n\t maxResRows:%d\n\t maxResBlkRows:%d\n\t totalResRows:%" PRId64 "\n\t useMSecs:%" PRId64 "\n", caseName, jtStat.maxResRows, jtStat.maxResBlkRows, jtStat.totalResRows, jtStat.useMSecs); } @@ -2689,7 +2742,7 @@ void checkJoinDone(char* caseName) { printActualResInfo(); - printf("\n%dth TEST [%s] Final Result: %s\n", jtCtx.loopIdx, caseName, jtRes.succeed ? "SUCCEED" : "FAILED"); + JT_PRINTF("\n%dth TEST [%s] Final Result: %s\n", jtCtx.loopIdx, caseName, jtRes.succeed ? "SUCCEED" : "FAILED"); } void putRowToResColBuf(SSDataBlock* pBlock, int32_t r, bool ignoreTbCols) { @@ -2701,6 +2754,7 @@ void putRowToResColBuf(SSDataBlock* pBlock, int32_t r, bool ignoreTbCols) { } SColumnInfoData* pCol = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, c); + assert(pCol); switch (jtInputColType[slot % MAX_SLOT_NUM]) { case TSDB_DATA_TYPE_TIMESTAMP: case TSDB_DATA_TYPE_BIGINT: @@ -2739,7 +2793,7 @@ void checkJoinRes(SSDataBlock* pBlock) { jtRes.matchNum += pBlock->info.rows; } else { for (int32_t r = 0; r < pBlock->info.rows; ++r) { - memset(jtCtx.resColBuf, 0, jtCtx.resColSize); + TAOS_MEMSET(jtCtx.resColBuf, 0, jtCtx.resColSize); putRowToResColBuf(pBlock, r, true); @@ -2766,7 +2820,7 @@ void resetForJoinRerun(int32_t dsNum, SSortMergeJoinPhysiNode* pNode, SExecTaskI jtCtx.rightBlkReadIdx = 0; jtCtx.curKeyOffset = 0; - memset(&jtRes, 0, sizeof(jtRes)); + TAOS_MEMSET(&jtRes, 0, sizeof(jtRes)); jtRes.succeed = true; SOperatorInfo* pDownstreams[2]; @@ -2800,10 +2854,10 @@ void jtInitLogFile() { tsAsyncLog = 0; qDebugFlag = 159; - strcpy(tsLogDir, TD_LOG_DIR_PATH); + TAOS_STRCPY(tsLogDir, TD_LOG_DIR_PATH); if (taosInitLog(defaultLogFileNamePrefix, maxLogFileNum) < 0) { - printf("failed to open log file in directory:%s\n", tsLogDir); + JT_PRINTF("failed to open log file in directory:%s\n", tsLogDir); } } @@ -2812,12 +2866,15 @@ void jtInitLogFile() { void initJoinTest() { jtCtx.leftBlkList = taosArrayInit(10, POINTER_BYTES); jtCtx.rightBlkList = taosArrayInit(10, POINTER_BYTES); + assert(jtCtx.leftBlkList && jtCtx.rightBlkList); jtCtx.jtResRows = tSimpleHashInit(10000000, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY)); + assert(jtCtx.jtResRows); joinTestReplaceRetrieveFp(); if (jtCtrl.logHistory) { jtStat.pHistory = taosArrayInit(100000, sizeof(SJoinTestHistory)); + assert(jtStat.pHistory); } int32_t offset = MAX_SLOT_NUM * sizeof(bool); @@ -2827,10 +2884,12 @@ void initJoinTest() { } jtCtx.inColSize = offset; jtCtx.inColBuf = (char*)taosMemoryMalloc(jtCtx.inColSize); + assert(jtCtx.inColBuf); jtCtx.leftRowsList = taosArrayInit(1024, jtCtx.inColSize); jtCtx.rightRowsList = taosArrayInit(1024, jtCtx.inColSize); jtCtx.rightFilterOut = taosArrayInit(1024, sizeof(bool)); + assert(jtCtx.leftRowsList && jtCtx.rightRowsList && jtCtx.rightFilterOut); jtInitLogFile(); } @@ -2838,22 +2897,24 @@ void initJoinTest() { void handleTestDone() { if (jtCtrl.logHistory) { SJoinTestHistory h; - memcpy(&h.ctx, &jtCtx, sizeof(h.ctx)); - memcpy(&h.res, &jtRes, sizeof(h.res)); - taosArrayPush(jtStat.pHistory, &h); + TAOS_MEMCPY(&h.ctx, &jtCtx, sizeof(h.ctx)); + TAOS_MEMCPY(&h.res, &jtRes, sizeof(h.res)); + assert(NULL != taosArrayPush(jtStat.pHistory, &h)); } int32_t blkNum = taosArrayGetSize(jtCtx.leftBlkList); for (int32_t i = 0; i < blkNum; ++i) { SSDataBlock* pBlk = (SSDataBlock*)taosArrayGetP(jtCtx.leftBlkList, i); - blockDataDestroy(pBlk); + assert(pBlk); + (void)blockDataDestroy(pBlk); } taosArrayClear(jtCtx.leftBlkList); blkNum = taosArrayGetSize(jtCtx.rightBlkList); for (int32_t i = 0; i < blkNum; ++i) { SSDataBlock* pBlk = (SSDataBlock*)taosArrayGetP(jtCtx.rightBlkList, i); - blockDataDestroy(pBlk); + assert(pBlk); + (void)blockDataDestroy(pBlk); } taosArrayClear(jtCtx.rightBlkList); @@ -2867,6 +2928,7 @@ void runSingleTest(char* caseName, SJoinTestParam* param) { bool contLoop = true; SSortMergeJoinPhysiNode* pNode = createDummySortMergeJoinPhysiNode(param); + assert(pNode); createDummyBlkList(1000, 1000, 1000, 1000, 100); while (contLoop) { @@ -2906,6 +2968,7 @@ TEST(innerJoin, noCondTest) { SJoinTestParam param; char* caseName = "innerJoin:noCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_INNER; @@ -2933,6 +2996,7 @@ TEST(innerJoin, eqCondTest) { SJoinTestParam param; char* caseName = "innerJoin:eqCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_INNER; @@ -2960,6 +3024,7 @@ TEST(innerJoin, onCondTest) { SJoinTestParam param; char* caseName = "innerJoin:onCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_INNER; @@ -2987,6 +3052,7 @@ TEST(innerJoin, fullCondTest) { SJoinTestParam param; char* caseName = "innerJoin:fullCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_INNER; @@ -3017,6 +3083,7 @@ TEST(leftOuterJoin, noCondTest) { SJoinTestParam param; char* caseName = "leftOuterJoin:noCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3045,6 +3112,7 @@ TEST(leftOuterJoin, eqCondTest) { SJoinTestParam param; char* caseName = "leftOuterJoin:eqCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3072,6 +3140,7 @@ TEST(leftOuterJoin, onCondTest) { SJoinTestParam param; char* caseName = "leftOuterJoin:onCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3099,6 +3168,7 @@ TEST(leftOuterJoin, fullCondTest) { SJoinTestParam param; char* caseName = "leftOuterJoin:fullCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3128,6 +3198,7 @@ TEST(fullOuterJoin, noCondTest) { SJoinTestParam param; char* caseName = "fullOuterJoin:noCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_FULL; @@ -3155,6 +3226,7 @@ TEST(fullOuterJoin, eqCondTest) { SJoinTestParam param; char* caseName = "fullOuterJoin:eqCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_FULL; @@ -3183,6 +3255,7 @@ TEST(fullOuterJoin, onCondTest) { SJoinTestParam param; char* caseName = "fullOuterJoin:onCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_FULL; @@ -3210,6 +3283,7 @@ TEST(fullOuterJoin, fullCondTest) { SJoinTestParam param; char* caseName = "fullOuterJoin:fullCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_FULL; @@ -3239,6 +3313,7 @@ TEST(leftSemiJoin, noCondTest) { SJoinTestParam param; char* caseName = "leftSemiJoin:noCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3266,6 +3341,7 @@ TEST(leftSemiJoin, eqCondTest) { SJoinTestParam param; char* caseName = "leftSemiJoin:eqCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3294,6 +3370,7 @@ TEST(leftSemiJoin, onCondTest) { SJoinTestParam param; char* caseName = "leftSemiJoin:onCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3321,6 +3398,7 @@ TEST(leftSemiJoin, fullCondTest) { SJoinTestParam param; char* caseName = "leftSemiJoin:fullCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3350,6 +3428,7 @@ TEST(leftAntiJoin, noCondTest) { SJoinTestParam param; char* caseName = "leftAntiJoin:noCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3377,6 +3456,7 @@ TEST(leftAntiJoin, eqCondTest) { SJoinTestParam param; char* caseName = "leftAntiJoin:eqCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3405,6 +3485,7 @@ TEST(leftAntiJoin, onCondTest) { SJoinTestParam param; char* caseName = "leftAntiJoin:onCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3432,6 +3513,7 @@ TEST(leftAntiJoin, fullCondTest) { SJoinTestParam param; char* caseName = "leftAntiJoin:fullCondTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3461,6 +3543,7 @@ TEST(leftAsofJoin, noCondGreaterThanTest) { SJoinTestParam param; char* caseName = "leftAsofJoin:noCondGreaterThanTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3492,6 +3575,7 @@ TEST(leftAsofJoin, noCondGreaterEqTest) { SJoinTestParam param; char* caseName = "leftAsofJoin:noCondGreaterEqTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3523,6 +3607,7 @@ TEST(leftAsofJoin, noCondEqTest) { SJoinTestParam param; char* caseName = "leftAsofJoin:noCondEqTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3554,6 +3639,7 @@ TEST(leftAsofJoin, noCondLowerThanTest) { SJoinTestParam param; char* caseName = "leftAsofJoin:noCondLowerThanTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3586,6 +3672,7 @@ TEST(leftAsofJoin, noCondLowerEqTest) { SJoinTestParam param; char* caseName = "leftAsofJoin:noCondLowerEqTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; @@ -3621,6 +3708,7 @@ TEST(leftWinJoin, noCondProjectionTest) { SJoinTestParam param; char* caseName = "leftWinJoin:noCondProjectionTest"; SExecTaskInfo* pTask = createDummyTaskInfo(caseName); + assert(pTask); param.pTask = pTask; param.joinType = JOIN_TYPE_LEFT; From d02617aaf6c62b7110f34d9fc4f3ada702bb0d34 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 14:42:50 +0800 Subject: [PATCH 57/64] adj operator result --- source/libs/executor/inc/tfill.h | 4 ++-- source/libs/executor/src/filloperator.c | 16 +++------------- source/libs/executor/src/tfill.c | 4 +--- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/source/libs/executor/inc/tfill.h b/source/libs/executor/inc/tfill.h index 79837480d7..82d422302c 100644 --- a/source/libs/executor/inc/tfill.h +++ b/source/libs/executor/inc/tfill.h @@ -131,11 +131,11 @@ SFillInfo* taosCreateFillInfo(TSKEY skey, int32_t numOfFillCols, int32_t numOfNo int32_t order, const char* id); void* taosDestroyFillInfo(struct SFillInfo* pFillInfo); -int64_t taosFillResultDataBlock(struct SFillInfo* pFillInfo, SSDataBlock* p, int32_t capacity); +void taosFillResultDataBlock(struct SFillInfo* pFillInfo, SSDataBlock* p, int32_t capacity); int64_t getFillInfoStart(struct SFillInfo* pFillInfo); bool fillIfWindowPseudoColumn(SFillInfo* pFillInfo, SFillColInfo* pCol, SColumnInfoData* pDstColInfoData, - int32_t rowIndex); + int32_t rowIndex); #ifdef __cplusplus } #endif diff --git a/source/libs/executor/src/filloperator.c b/source/libs/executor/src/filloperator.c index cf31b5b7ad..79e2d4b7c9 100644 --- a/source/libs/executor/src/filloperator.c +++ b/source/libs/executor/src/filloperator.c @@ -85,12 +85,7 @@ static void doHandleRemainBlockForNewGroupImpl(SOperatorInfo* pOperator, SFillOp } int32_t numOfResultRows = pResultInfo->capacity - pResBlock->info.rows; - int32_t code = taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - T_LONG_JMP(pTaskInfo->env, code); - } + taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); pInfo->curGroupId = pInfo->existNewGroupBlock->info.id.groupId; pInfo->existNewGroupBlock = NULL; @@ -101,11 +96,7 @@ static void doHandleRemainBlockFromNewGroup(SOperatorInfo* pOperator, SFillOpera SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; if (taosFillHasMoreResults(pInfo->pFillInfo)) { int32_t numOfResultRows = pResultInfo->capacity - pInfo->pFinalRes->info.rows; - int32_t code = taosFillResultDataBlock(pInfo->pFillInfo, pInfo->pFinalRes, numOfResultRows); - if (code != TSDB_CODE_SUCCESS) { - qError("%s failed at line %d since %s", __func__, __LINE__, tstrerror(code)); - T_LONG_JMP(pTaskInfo->env, code); - } + taosFillResultDataBlock(pInfo->pFillInfo, pInfo->pFinalRes, numOfResultRows); pInfo->pRes->info.id.groupId = pInfo->curGroupId; return; } @@ -278,8 +269,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { } int32_t numOfResultRows = pOperator->resultInfo.capacity - pResBlock->info.rows; - code = taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); - QUERY_CHECK_CODE(code, lino, _end); + taosFillResultDataBlock(pInfo->pFillInfo, pResBlock, numOfResultRows); // current group has no more result to return if (pResBlock->info.rows > 0) { diff --git a/source/libs/executor/src/tfill.c b/source/libs/executor/src/tfill.c index 2be8024aa8..5a8697d7b8 100644 --- a/source/libs/executor/src/tfill.c +++ b/source/libs/executor/src/tfill.c @@ -617,7 +617,7 @@ void taosGetLinearInterpolationVal(SPoint* point, int32_t outputType, SPoint* po SET_TYPED_DATA(point->val, outputType, r); } -int64_t taosFillResultDataBlock(SFillInfo* pFillInfo, SSDataBlock* p, int32_t capacity) { +void taosFillResultDataBlock(SFillInfo* pFillInfo, SSDataBlock* p, int32_t capacity) { int32_t remain = taosNumOfRemainRows(pFillInfo); int64_t numOfRes = getNumOfResultsAfterFillGap(pFillInfo, pFillInfo->end, capacity); @@ -635,8 +635,6 @@ int64_t taosFillResultDataBlock(SFillInfo* pFillInfo, SSDataBlock* p, int32_t ca ", current : % d, total : % d, %s", pFillInfo, pFillInfo->numOfRows, pFillInfo->index, pFillInfo->start, pFillInfo->end, pFillInfo->currentKey, pFillInfo->numOfCurrent, pFillInfo->numOfTotal, pFillInfo->id); - - return numOfRes; } int64_t getFillInfoStart(struct SFillInfo* pFillInfo) { return pFillInfo->start; } From ef96d37c1f2efd4a7fff5dac96c6b3d40b5e2f95 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 22 Jul 2024 15:07:01 +0800 Subject: [PATCH 58/64] fix: return code validation --- .../libs/executor/src/dynqueryctrloperator.c | 163 ++++++++++++------ source/libs/executor/src/mergejoinoperator.c | 1 - 2 files changed, 109 insertions(+), 55 deletions(-) diff --git a/source/libs/executor/src/dynqueryctrloperator.c b/source/libs/executor/src/dynqueryctrloperator.c index c3b3126f68..e4ca946f4f 100755 --- a/source/libs/executor/src/dynqueryctrloperator.c +++ b/source/libs/executor/src/dynqueryctrloperator.c @@ -358,31 +358,36 @@ static int32_t buildMergeJoinOperatorParam(SOperatorParam** ppRes, bool initPara static int32_t buildMergeJoinNotifyOperatorParam(SOperatorParam** ppRes, SOperatorParam* pChild0, SOperatorParam* pChild1) { + int32_t code = TSDB_CODE_SUCCESS; *ppRes = taosMemoryMalloc(sizeof(SOperatorParam)); if (NULL == *ppRes) { + code = terrno; freeOperatorParam(pChild0, OP_NOTIFY_PARAM); freeOperatorParam(pChild1, OP_NOTIFY_PARAM); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } (*ppRes)->pChildren = taosArrayInit(2, POINTER_BYTES); if (NULL == *ppRes) { + code = terrno; taosMemoryFreeClear(*ppRes); freeOperatorParam(pChild0, OP_NOTIFY_PARAM); freeOperatorParam(pChild1, OP_NOTIFY_PARAM); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (pChild0 && NULL == taosArrayPush((*ppRes)->pChildren, &pChild0)) { + code = terrno; freeOperatorParam(*ppRes, OP_NOTIFY_PARAM); freeOperatorParam(pChild0, OP_NOTIFY_PARAM); freeOperatorParam(pChild1, OP_NOTIFY_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } if (pChild1 && NULL == taosArrayPush((*ppRes)->pChildren, &pChild1)) { + code = terrno; freeOperatorParam(*ppRes, OP_NOTIFY_PARAM); freeOperatorParam(pChild1, OP_NOTIFY_PARAM); *ppRes = NULL; - return TSDB_CODE_OUT_OF_MEMORY; + return code; } (*ppRes)->opType = QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN; @@ -422,9 +427,11 @@ static int32_t buildBatchTableScanOperatorParam(SOperatorParam** ppRes, int32_t static int32_t buildSingleTableScanOperatorParam(SOperatorParam** ppRes, int32_t downstreamIdx, int32_t* pVgId, int64_t* pUid) { SArray* pUidList = taosArrayInit(1, sizeof(int64_t)); if (NULL == pUidList) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; + } + if (NULL == taosArrayPush(pUidList, pUid)) { + return terrno; } - taosArrayPush(pUidList, pUid); int32_t code = buildTableScanOperatorParam(ppRes, pUidList, QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN, true); taosArrayDestroy(pUidList); @@ -553,53 +560,56 @@ static int32_t notifySeqJoinTableCacheEnd(SOperatorInfo* pOperator, SStbJoinPost return optrDefaultNotifyFn(pOperator->pDownstream[1], pMergeJoinParam); } -static void handleSeqJoinCurrRetrieveEnd(SOperatorInfo* pOperator, SStbJoinDynCtrlInfo* pStbJoin) { +static int32_t handleSeqJoinCurrRetrieveEnd(SOperatorInfo* pOperator, SStbJoinDynCtrlInfo* pStbJoin) { SStbJoinPostJoinCtx* pPost = &pStbJoin->ctx.post; pPost->isStarted = false; if (pStbJoin->basic.batchFetch) { - return; + return TSDB_CODE_SUCCESS; } if (pPost->leftNeedCache) { uint32_t* num = tSimpleHashGet(pStbJoin->ctx.prev.leftCache, &pPost->leftCurrUid, sizeof(pPost->leftCurrUid)); if (num && --(*num) <= 0) { - tSimpleHashRemove(pStbJoin->ctx.prev.leftCache, &pPost->leftCurrUid, sizeof(pPost->leftCurrUid)); - notifySeqJoinTableCacheEnd(pOperator, pPost, true); + (void)tSimpleHashRemove(pStbJoin->ctx.prev.leftCache, &pPost->leftCurrUid, sizeof(pPost->leftCurrUid)); + QRY_ERR_RET(notifySeqJoinTableCacheEnd(pOperator, pPost, true)); } } if (!pPost->rightNeedCache) { void* v = tSimpleHashGet(pStbJoin->ctx.prev.rightCache, &pPost->rightCurrUid, sizeof(pPost->rightCurrUid)); if (NULL != v) { - tSimpleHashRemove(pStbJoin->ctx.prev.rightCache, &pPost->rightCurrUid, sizeof(pPost->rightCurrUid)); - notifySeqJoinTableCacheEnd(pOperator, pPost, false); + (void)tSimpleHashRemove(pStbJoin->ctx.prev.rightCache, &pPost->rightCurrUid, sizeof(pPost->rightCurrUid)); + QRY_ERR_RET(notifySeqJoinTableCacheEnd(pOperator, pPost, false)); } } + + return TSDB_CODE_SUCCESS; } -static FORCE_INLINE void seqJoinContinueCurrRetrieve(SOperatorInfo* pOperator, SSDataBlock** ppRes) { +static FORCE_INLINE int32_t seqJoinContinueCurrRetrieve(SOperatorInfo* pOperator, SSDataBlock** ppRes) { SDynQueryCtrlOperatorInfo* pInfo = pOperator->info; SStbJoinPostJoinCtx* pPost = &pInfo->stbJoin.ctx.post; SStbJoinPrevJoinCtx* pPrev = &pInfo->stbJoin.ctx.prev; if (!pPost->isStarted) { - return; + return TSDB_CODE_SUCCESS; } qDebug("%s dynQueryCtrl continue to retrieve block from post op", GET_TASKID(pOperator->pTaskInfo)); *ppRes = getNextBlockFromDownstream(pOperator, 1); if (NULL == *ppRes) { - handleSeqJoinCurrRetrieveEnd(pOperator, &pInfo->stbJoin); + QRY_ERR_RET(handleSeqJoinCurrRetrieveEnd(pOperator, &pInfo->stbJoin)); pPrev->pListHead->readIdx++; } else { pInfo->stbJoin.execInfo.postBlkNum++; pInfo->stbJoin.execInfo.postBlkRows += (*ppRes)->info.rows; - return; } + + return TSDB_CODE_SUCCESS; } static FORCE_INLINE int32_t addToJoinVgroupHash(SSHashObj* pHash, void* pKey, int32_t keySize, void* pVal, int32_t valSize) { @@ -607,35 +617,38 @@ static FORCE_INLINE int32_t addToJoinVgroupHash(SSHashObj* pHash, void* pKey, in if (NULL == ppArray) { SArray* pArray = taosArrayInit(10, valSize); if (NULL == pArray) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } if (NULL == taosArrayPush(pArray, pVal)) { taosArrayDestroy(pArray); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } if (tSimpleHashPut(pHash, pKey, keySize, &pArray, POINTER_BYTES)) { taosArrayDestroy(pArray); - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } return TSDB_CODE_SUCCESS; } if (NULL == taosArrayPush(*ppArray, pVal)) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } return TSDB_CODE_SUCCESS; } static FORCE_INLINE int32_t addToJoinTableHash(SSHashObj* pHash, SSHashObj* pOnceHash, void* pKey, int32_t keySize) { + int32_t code = TSDB_CODE_SUCCESS; uint32_t* pNum = tSimpleHashGet(pHash, pKey, keySize); if (NULL == pNum) { uint32_t n = 1; - if (tSimpleHashPut(pHash, pKey, keySize, &n, sizeof(n))) { - return TSDB_CODE_OUT_OF_MEMORY; + code = tSimpleHashPut(pHash, pKey, keySize, &n, sizeof(n)); + if (code) { + return code; } - if (tSimpleHashPut(pOnceHash, pKey, keySize, NULL, 0)) { - return TSDB_CODE_OUT_OF_MEMORY; + code = tSimpleHashPut(pOnceHash, pKey, keySize, NULL, 0); + if (code) { + return code; } return TSDB_CODE_SUCCESS; } @@ -648,7 +661,7 @@ static FORCE_INLINE int32_t addToJoinTableHash(SSHashObj* pHash, SSHashObj* pOnc break; default: if (1 == (*pNum)) { - tSimpleHashRemove(pOnceHash, pKey, keySize); + (void)tSimpleHashRemove(pOnceHash, pKey, keySize); } (*pNum)++; break; @@ -670,23 +683,40 @@ static void freeStbJoinTableList(SStbJoinTableList* pList) { } static int32_t appendStbJoinTableList(SStbJoinPrevJoinCtx* pCtx, int64_t rows, int32_t* pLeftVg, int64_t* pLeftUid, int32_t* pRightVg, int64_t* pRightUid) { + int32_t code = TSDB_CODE_SUCCESS; SStbJoinTableList* pNew = taosMemoryMalloc(sizeof(SStbJoinTableList)); if (NULL == pNew) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pNew->pLeftVg = taosMemoryMalloc(rows * sizeof(*pLeftVg)); - pNew->pLeftUid = taosMemoryMalloc(rows * sizeof(*pLeftUid)); - pNew->pRightVg = taosMemoryMalloc(rows * sizeof(*pRightVg)); - pNew->pRightUid = taosMemoryMalloc(rows * sizeof(*pRightUid)); - if (NULL == pNew->pLeftVg || NULL == pNew->pLeftUid || NULL == pNew->pRightVg || NULL == pNew->pRightUid) { + if (NULL == pNew->pLeftVg) { + code = terrno; freeStbJoinTableList(pNew); - return TSDB_CODE_OUT_OF_MEMORY; + return code; + } + pNew->pLeftUid = taosMemoryMalloc(rows * sizeof(*pLeftUid)); + if (NULL == pNew->pLeftUid) { + code = terrno; + freeStbJoinTableList(pNew); + return code; + } + pNew->pRightVg = taosMemoryMalloc(rows * sizeof(*pRightVg)); + if (NULL == pNew->pRightVg) { + code = terrno; + freeStbJoinTableList(pNew); + return code; + } + pNew->pRightUid = taosMemoryMalloc(rows * sizeof(*pRightUid)); + if (NULL == pNew->pRightUid) { + code = terrno; + freeStbJoinTableList(pNew); + return code; } - memcpy(pNew->pLeftVg, pLeftVg, rows * sizeof(*pLeftVg)); - memcpy(pNew->pLeftUid, pLeftUid, rows * sizeof(*pLeftUid)); - memcpy(pNew->pRightVg, pRightVg, rows * sizeof(*pRightVg)); - memcpy(pNew->pRightUid, pRightUid, rows * sizeof(*pRightUid)); + TAOS_MEMCPY(pNew->pLeftVg, pLeftVg, rows * sizeof(*pLeftVg)); + TAOS_MEMCPY(pNew->pLeftUid, pLeftUid, rows * sizeof(*pLeftUid)); + TAOS_MEMCPY(pNew->pRightVg, pRightVg, rows * sizeof(*pRightVg)); + TAOS_MEMCPY(pNew->pRightUid, pRightUid, rows * sizeof(*pRightUid)); pNew->readIdx = 0; pNew->uidNum = rows; @@ -708,9 +738,21 @@ static void doBuildStbJoinTableHash(SOperatorInfo* pOperator, SSDataBlock* pBloc SDynQueryCtrlOperatorInfo* pInfo = pOperator->info; SStbJoinDynCtrlInfo* pStbJoin = (SStbJoinDynCtrlInfo*)&pInfo->stbJoin; SColumnInfoData* pVg0 = taosArrayGet(pBlock->pDataBlock, pStbJoin->basic.vgSlot[0]); + if (NULL == pVg0) { + QRY_ERR_JRET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SColumnInfoData* pVg1 = taosArrayGet(pBlock->pDataBlock, pStbJoin->basic.vgSlot[1]); + if (NULL == pVg1) { + QRY_ERR_JRET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SColumnInfoData* pUid0 = taosArrayGet(pBlock->pDataBlock, pStbJoin->basic.uidSlot[0]); + if (NULL == pUid0) { + QRY_ERR_JRET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SColumnInfoData* pUid1 = taosArrayGet(pBlock->pDataBlock, pStbJoin->basic.uidSlot[1]); + if (NULL == pUid1) { + QRY_ERR_JRET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } if (pStbJoin->basic.batchFetch) { for (int32_t i = 0; i < pBlock->info.rows; ++i) { @@ -746,6 +788,8 @@ static void doBuildStbJoinTableHash(SOperatorInfo* pOperator, SSDataBlock* pBloc } } +_return: + if (TSDB_CODE_SUCCESS != code) { pOperator->pTaskInfo->code = code; T_LONG_JMP(pOperator->pTaskInfo->env, pOperator->pTaskInfo->code); @@ -769,7 +813,7 @@ static void postProcessStbJoinTableHash(SOperatorInfo* pOperator) { uint64_t* pUid = NULL; int32_t iter = 0; while (NULL != (pUid = tSimpleHashIterate(pStbJoin->ctx.prev.onceTable, pUid, &iter))) { - tSimpleHashRemove(pStbJoin->ctx.prev.leftCache, pUid, sizeof(*pUid)); + (void)tSimpleHashRemove(pStbJoin->ctx.prev.leftCache, pUid, sizeof(*pUid)); } pStbJoin->execInfo.leftCacheNum = tSimpleHashGetSize(pStbJoin->ctx.prev.leftCache); @@ -804,7 +848,7 @@ static void buildStbJoinTableList(SOperatorInfo* pOperator) { pStbJoin->ctx.prev.joinBuild = true; } -static void seqJoinLaunchNewRetrieve(SOperatorInfo* pOperator, SSDataBlock** ppRes) { +static int32_t seqJoinLaunchNewRetrieve(SOperatorInfo* pOperator, SSDataBlock** ppRes) { SDynQueryCtrlOperatorInfo* pInfo = pOperator->info; SStbJoinDynCtrlInfo* pStbJoin = (SStbJoinDynCtrlInfo*)&pInfo->stbJoin; SStbJoinPrevJoinCtx* pPrev = &pStbJoin->ctx.prev; @@ -820,17 +864,17 @@ static void seqJoinLaunchNewRetrieve(SOperatorInfo* pOperator, SSDataBlock** ppR seqJoinLaunchNewRetrieveImpl(pOperator, ppRes); if (*ppRes) { - return; + return TSDB_CODE_SUCCESS; } - handleSeqJoinCurrRetrieveEnd(pOperator, pStbJoin); + QRY_ERR_RET(handleSeqJoinCurrRetrieveEnd(pOperator, pStbJoin)); pPrev->pListHead->readIdx++; } *ppRes = NULL; setOperatorCompleted(pOperator); - return; + return TSDB_CODE_SUCCESS; } static FORCE_INLINE SSDataBlock* seqStableJoinComposeRes(SStbJoinDynCtrlInfo* pStbJoin, SSDataBlock* pBlock) { @@ -840,6 +884,7 @@ static FORCE_INLINE SSDataBlock* seqStableJoinComposeRes(SStbJoinDynCtrlInfo* SSDataBlock* seqStableJoin(SOperatorInfo* pOperator) { + int32_t code = TSDB_CODE_SUCCESS; SDynQueryCtrlOperatorInfo* pInfo = pOperator->info; SStbJoinDynCtrlInfo* pStbJoin = (SStbJoinDynCtrlInfo*)&pInfo->stbJoin; SSDataBlock* pRes = NULL; @@ -861,18 +906,23 @@ SSDataBlock* seqStableJoin(SOperatorInfo* pOperator) { } } - seqJoinContinueCurrRetrieve(pOperator, &pRes); + QRY_ERR_JRET(seqJoinContinueCurrRetrieve(pOperator, &pRes)); if (pRes) { goto _return; } - seqJoinLaunchNewRetrieve(pOperator, &pRes); + QRY_ERR_JRET(seqJoinLaunchNewRetrieve(pOperator, &pRes)); _return: if (pOperator->cost.openCost == 0) { pOperator->cost.openCost = (taosGetTimestampUs() - st) / 1000.0; } + + if (code) { + pOperator->pTaskInfo->code = code; + T_LONG_JMP(pOperator->pTaskInfo->env, pOperator->pTaskInfo->code); + } return pRes ? seqStableJoinComposeRes(pStbJoin, pRes) : NULL; } @@ -881,24 +931,24 @@ int32_t initSeqStbJoinTableHash(SStbJoinPrevJoinCtx* pPrev, bool batchFetch) { if (batchFetch) { pPrev->leftHash = tSimpleHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT)); if (NULL == pPrev->leftHash) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pPrev->rightHash = tSimpleHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT)); if (NULL == pPrev->rightHash) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } else { pPrev->leftCache = tSimpleHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT)); if (NULL == pPrev->leftCache) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pPrev->rightCache = tSimpleHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT)); if (NULL == pPrev->rightCache) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pPrev->onceTable = tSimpleHashInit(20, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT)); if (NULL == pPrev->onceTable) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } } @@ -908,13 +958,16 @@ int32_t initSeqStbJoinTableHash(SStbJoinPrevJoinCtx* pPrev, bool batchFetch) { SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32_t numOfDownstream, SDynQueryCtrlPhysiNode* pPhyciNode, SExecTaskInfo* pTaskInfo) { - SDynQueryCtrlOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SDynQueryCtrlOperatorInfo)); - SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); - __optr_fn_t nextFp = NULL; - int32_t code = TSDB_CODE_SUCCESS; - if (pOperator == NULL || pInfo == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; + __optr_fn_t nextFp = NULL; + SDynQueryCtrlOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SDynQueryCtrlOperatorInfo)); + if (pInfo == NULL) { + code = terrno; + goto _error; + } + SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); + if (pOperator == NULL) { + code = terrno; goto _error; } @@ -928,7 +981,7 @@ SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32 pInfo->qType = pPhyciNode->qType; switch (pInfo->qType) { case DYN_QTYPE_STB_HASH: - memcpy(&pInfo->stbJoin.basic, &pPhyciNode->stbJoin, sizeof(pPhyciNode->stbJoin)); + TAOS_MEMCPY(&pInfo->stbJoin.basic, &pPhyciNode->stbJoin, sizeof(pPhyciNode->stbJoin)); pInfo->stbJoin.outputBlkId = pPhyciNode->node.pOutputDataBlockDesc->dataBlockId; code = initSeqStbJoinTableHash(&pInfo->stbJoin.ctx.prev, pInfo->stbJoin.basic.batchFetch); if (TSDB_CODE_SUCCESS != code) { @@ -949,12 +1002,14 @@ SOperatorInfo* createDynQueryCtrlOperatorInfo(SOperatorInfo** pDownstream, int32 return pOperator; _error: + if (pInfo != NULL) { destroyDynQueryCtrlOperator(pInfo); } taosMemoryFree(pOperator); pTaskInfo->code = code; + return NULL; } diff --git a/source/libs/executor/src/mergejoinoperator.c b/source/libs/executor/src/mergejoinoperator.c index 8d94841847..395b04f45b 100644 --- a/source/libs/executor/src/mergejoinoperator.c +++ b/source/libs/executor/src/mergejoinoperator.c @@ -1717,7 +1717,6 @@ SSDataBlock* mJoinMainProcess(struct SOperatorInfo* pOperator) { pBlock = (*pJoin->joinFp)(pOperator); if (NULL == pBlock) { if (pJoin->errCode) { - ASSERT(0); T_LONG_JMP(pOperator->pTaskInfo->env, pJoin->errCode); } break; From edf453b92acd57e9859834b137601614cca984a7 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 15:18:32 +0800 Subject: [PATCH 59/64] fix: client init regex cache --- source/client/src/clientEnv.c | 7 +++++++ source/client/src/clientMain.c | 2 ++ source/util/src/tcompare.c | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index 7d737fbb8e..724229af16 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -35,6 +35,7 @@ #include "tsched.h" #include "ttime.h" #include "tversion.h" +#include "tcompare.h" #if defined(CUS_NAME) || defined(CUS_PROMPT) || defined(CUS_EMAIL) #include "cus_name.h" @@ -875,6 +876,12 @@ void taos_init_imp(void) { } rpcInit(); + if (InitRegexCache() != 0) { + tscInitRes = -1; + tscError("failed to init regex cache"); + return; + } + SCatalogCfg cfg = {.maxDBCacheNum = 100, .maxTblCacheNum = 100}; catalogInit(&cfg); diff --git a/source/client/src/clientMain.c b/source/client/src/clientMain.c index f65edc103a..35e0b61114 100644 --- a/source/client/src/clientMain.c +++ b/source/client/src/clientMain.c @@ -28,6 +28,7 @@ #include "tref.h" #include "trpc.h" #include "version.h" +#include "tcompare.h" #define TSC_VAR_NOT_RELEASE 1 #define TSC_VAR_RELEASED 0 @@ -78,6 +79,7 @@ void taos_cleanup(void) { clientConnRefPool = -1; taosCloseRef(id); + DestroyRegexCache(); rpcCleanup(); tscDebug("rpc cleanup"); diff --git a/source/util/src/tcompare.c b/source/util/src/tcompare.c index 09599cead4..b3e1da5f1c 100644 --- a/source/util/src/tcompare.c +++ b/source/util/src/tcompare.c @@ -1299,6 +1299,7 @@ static UsingRegex **getRegComp(const char *pPattern) { UsingRegex *pUsingRegex = taosMemoryMalloc(sizeof(UsingRegex)); if (pUsingRegex == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; uError("Failed to Malloc when compile regex pattern %s.", pPattern); return NULL; } @@ -1309,6 +1310,7 @@ static UsingRegex **getRegComp(const char *pPattern) { regerror(ret, &pUsingRegex->pRegex, msgbuf, tListLen(msgbuf)); uError("Failed to compile regex pattern %s. reason %s", pPattern, msgbuf); taosMemoryFree(pUsingRegex); + terrno = TSDB_CODE_PAR_REGULAR_EXPRESSION_ERROR; return NULL; } @@ -1317,6 +1319,7 @@ static UsingRegex **getRegComp(const char *pPattern) { if (code != 0 && code != TSDB_CODE_DUP_KEY) { regexCacheFree(&pUsingRegex); uError("Failed to put regex pattern %s into cache, exception internal error.", pPattern); + terrno = code; return NULL; } ppUsingRegex = (UsingRegex **)taosHashAcquire(sRegexCache.regexHash, pPattern, strlen(pPattern)); @@ -1350,6 +1353,7 @@ static int32_t doExecRegexMatch(const char *pString, const char *pPattern) { ret = regexec(&(*pUsingRegex)->pRegex, pString, 1, pmatch, 0); releaseRegComp(pUsingRegex); if (ret != 0 && ret != REG_NOMATCH) { + terrno = TSDB_CODE_PAR_REGULAR_EXPRESSION_ERROR; regerror(ret, &(*pUsingRegex)->pRegex, msgbuf, sizeof(msgbuf)); uDebug("Failed to match %s with pattern %s, reason %s", pString, pPattern, msgbuf) } From c4d04b21e96066f6114c6c778a10315af022d628 Mon Sep 17 00:00:00 2001 From: dmchen Date: Mon, 22 Jul 2024 07:53:13 +0000 Subject: [PATCH 60/64] fix case --- source/dnode/mnode/impl/src/mndMain.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index cad8a345d0..7b98378725 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -892,7 +892,10 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg, SQueueInfo *pQueueInfo) { } else if (code == 0) { mGTrace("msg:%p, successfully processed", pMsg); } else { - if (terrno != 0) code = terrno; + //TODO removve this wrong set code + if (code == -1) { + code = terrno; + } mGError("msg:%p, failed to process since %s, app:%p type:%s", pMsg, tstrerror(code), pMsg->info.ahandle, TMSG_INFO(pMsg->msgType)); } From e3cbfb8b24c0c3cbc83ea4f8c33f95c0af72d198 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Mon, 22 Jul 2024 16:33:24 +0800 Subject: [PATCH 61/64] fix TD-30781 --- packaging/deb/DEBIAN/prerm | 7 +++++-- packaging/rpm/tdengine.spec | 10 ++++++++-- packaging/tools/remove.sh | 5 ++--- packaging/tools/remove_client.sh | 12 ++++++++---- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/packaging/deb/DEBIAN/prerm b/packaging/deb/DEBIAN/prerm index 2bbc6ff855..31561c5682 100644 --- a/packaging/deb/DEBIAN/prerm +++ b/packaging/deb/DEBIAN/prerm @@ -20,6 +20,7 @@ if [ -f ${insmetaPath}/preun.sh ]; then else bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" + lib64_link_dir="/usr/lib64" inc_link_dir="/usr/include" data_link_dir="/usr/local/taos/data" @@ -40,9 +41,11 @@ else ${csudo}rm -f ${inc_link_dir}/taoserror.h || : ${csudo}rm -f ${inc_link_dir}/tdef.h || : ${csudo}rm -f ${inc_link_dir}/taosudf.h || : - [ -f ${inc_link_dir}/taosws.h ] && ${csudo}rm -f ${inc_link_dir}/taosws.h || : + ${csudo}rm -f ${inc_link_dir}/taosws.h || : ${csudo}rm -f ${lib_link_dir}/libtaos.* || : - [ -f ${lib_link_dir}/libtaosws.so ] && ${csudo}rm -f ${lib_link_dir}/libtaosws.so || : + ${csudo}rm -f ${lib64_link_dir}/libtaos.* || : + ${csudo}rm -f ${lib_link_dir}/libtaosws.so || : + ${csudo}rm -f ${lib64_link_dir}/libtaosws.so || : ${csudo}rm -f ${log_link_dir} || : ${csudo}rm -f ${data_link_dir} || : diff --git a/packaging/rpm/tdengine.spec b/packaging/rpm/tdengine.spec index 0a107a4108..000a82b6b4 100644 --- a/packaging/rpm/tdengine.spec +++ b/packaging/rpm/tdengine.spec @@ -223,6 +223,7 @@ if [ $1 -eq 0 ];then else bin_link_dir="/usr/bin" lib_link_dir="/usr/lib" + lib64_link_dir="/usr/lib64" inc_link_dir="/usr/include" data_link_dir="/usr/local/taos/data" @@ -235,13 +236,18 @@ if [ $1 -eq 0 ];then ${csudo}rm -f ${bin_link_dir}/udfd || : ${csudo}rm -f ${bin_link_dir}/taosadapter || : ${csudo}rm -f ${bin_link_dir}/taoskeeper || : + ${csudo}rm -f ${bin_link_dir}/taosdump || : + ${csudo}rm -f ${bin_link_dir}/taosBenchmark || : ${csudo}rm -f ${cfg_link_dir}/* || : ${csudo}rm -f ${inc_link_dir}/taos.h || : ${csudo}rm -f ${inc_link_dir}/taosdef.h || : ${csudo}rm -f ${inc_link_dir}/taoserror.h || : ${csudo}rm -f ${inc_link_dir}/tdef.h || : - ${csudo}rm -f ${inc_link_dir}/taosudf.h || : - ${csudo}rm -f ${lib_link_dir}/libtaos.* || : + ${csudo}rm -f ${inc_link_dir}/taosudf.h || : + ${csudo}rm -f ${inc_link_dir}/taows.h || : + ${csudo}rm -f ${lib_link_dir}/libtaos.so || : + ${csudo}rm -f ${lib_link_dir}/libtaosws.so || : + ${csudo}rm -f ${lib64_link_dir}/libtaosws.so || : ${csudo}rm -f ${log_link_dir} || : ${csudo}rm -f ${data_link_dir} || : diff --git a/packaging/tools/remove.sh b/packaging/tools/remove.sh index 378949591f..093c81eef4 100755 --- a/packaging/tools/remove.sh +++ b/packaging/tools/remove.sh @@ -12,6 +12,8 @@ RED='\033[0;31m' GREEN='\033[1;32m' NC='\033[0m' +PREFIX="taos" + if [ "$osType" != "Darwin" ]; then installDir="/usr/local/taos" bin_link_dir="/usr/bin" @@ -32,7 +34,6 @@ else inc_link_dir="/usr/local/include" fi -PREFIX="taos" serverName="${PREFIX}d" clientName="${PREFIX}" uninstallScript="rm${PREFIX}" @@ -46,8 +47,6 @@ explorerName="${PREFIX}-explorer" tarbitratorName="tarbitratord" productName="TDengine" -installDir="/usr/local/${PREFIX}" - #install main path install_main_dir=${installDir} data_link_dir=${installDir}/data diff --git a/packaging/tools/remove_client.sh b/packaging/tools/remove_client.sh index d183c10a31..de14cb38d9 100755 --- a/packaging/tools/remove_client.sh +++ b/packaging/tools/remove_client.sh @@ -63,10 +63,13 @@ function clean_bin() { } function clean_lib() { - # Remove link - ${csudo}rm -f ${lib_link_dir}/libtaos.* || : - ${csudo}rm -f ${lib64_link_dir}/libtaos.* || : - #${csudo}rm -rf ${v15_java_app_dir} || : + # Remove link + ${csudo}rm -f ${lib_link_dir}/libtaos.* || : + [ -f ${lib_link_dir}/libtaosws.* ] && ${csudo}rm -f ${lib_link_dir}/libtaosws.* || : + + ${csudo}rm -f ${lib64_link_dir}/libtaos.* || : + [ -f ${lib64_link_dir}/libtaosws.* ] && ${csudo}rm -f ${lib64_link_dir}/libtaosws.* || : + #${csudo}rm -rf ${v15_java_app_dir} || : } function clean_header() { @@ -76,6 +79,7 @@ function clean_header() { ${csudo}rm -f ${inc_link_dir}/taoserror.h || : ${csudo}rm -f ${inc_link_dir}/tdef.h || : ${csudo}rm -f ${inc_link_dir}/taosudf.h || : + ${csudo}rm -f ${inc_link_dir}/taosws.h || : } function clean_config() { From 14383a32a3080d61d2d779615248f6dff75a241d Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 22 Jul 2024 18:42:43 +0800 Subject: [PATCH 62/64] fix: sink function return code processing --- source/libs/executor/src/dataDeleter.c | 92 ++++++++++++++-------- source/libs/executor/src/dataDispatcher.c | 89 ++++++++++++--------- source/libs/executor/src/dataInserter.c | 95 ++++++++++++++++------- source/libs/executor/src/dataSinkMgt.c | 9 ++- 4 files changed, 184 insertions(+), 101 deletions(-) diff --git a/source/libs/executor/src/dataDeleter.c b/source/libs/executor/src/dataDeleter.c index aa377cd922..9f0ea0a87f 100644 --- a/source/libs/executor/src/dataDeleter.c +++ b/source/libs/executor/src/dataDeleter.c @@ -53,7 +53,7 @@ typedef struct SDataDeleterHandle { TdThreadMutex mutex; } SDataDeleterHandle; -static void toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInput, SDataDeleterBuf* pBuf) { +static int32_t toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInput, SDataDeleterBuf* pBuf) { int32_t numOfCols = LIST_LENGTH(pHandle->pSchema->pSlots); SDataCacheEntry* pEntry = (SDataCacheEntry*)pBuf->pData; @@ -65,14 +65,23 @@ static void toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInp pBuf->useSize = sizeof(SDataCacheEntry); SColumnInfoData* pColRes = (SColumnInfoData*)taosArrayGet(pInput->pData->pDataBlock, 0); + if (NULL == pColRes) { + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SColumnInfoData* pColSKey = (SColumnInfoData*)taosArrayGet(pInput->pData->pDataBlock, 1); + if (NULL == pColSKey) { + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SColumnInfoData* pColEKey = (SColumnInfoData*)taosArrayGet(pInput->pData->pDataBlock, 2); + if (NULL == pColEKey) { + QRY_ERR_RET(TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR); + } SDeleterRes* pRes = (SDeleterRes*)pEntry->data; pRes->suid = pHandle->pParam->suid; pRes->uidList = pHandle->pParam->pUidList; - strcpy(pRes->tableName, pHandle->pDeleter->tableFName); - strcpy(pRes->tsColName, pHandle->pDeleter->tsColName); + TAOS_STRCPY(pRes->tableName, pHandle->pDeleter->tableFName); + TAOS_STRCPY(pRes->tsColName, pHandle->pDeleter->tsColName); pRes->affectedRows = *(int64_t*)pColRes->pData; if (pRes->affectedRows) { @@ -88,16 +97,18 @@ static void toDataCacheEntry(SDataDeleterHandle* pHandle, const SInputData* pInp pBuf->useSize += pEntry->dataLen; - atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); - atomic_add_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + (void)atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); + (void)atomic_add_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + + return TSDB_CODE_SUCCESS; } -static bool allocBuf(SDataDeleterHandle* pDeleter, const SInputData* pInput, SDataDeleterBuf* pBuf) { +static int32_t allocBuf(SDataDeleterHandle* pDeleter, const SInputData* pInput, SDataDeleterBuf* pBuf) { uint32_t capacity = pDeleter->pManager->cfg.maxDataBlockNumPerQuery; if (taosQueueItemSize(pDeleter->pDataBlocks) > capacity) { qError("SinkNode queue is full, no capacity, max:%d, current:%d, no capacity", capacity, taosQueueItemSize(pDeleter->pDataBlocks)); - return false; + return TSDB_CODE_OUT_OF_MEMORY; } pBuf->allocSize = sizeof(SDataCacheEntry) + sizeof(SDeleterRes); @@ -105,55 +116,66 @@ static bool allocBuf(SDataDeleterHandle* pDeleter, const SInputData* pInput, SDa pBuf->pData = taosMemoryMalloc(pBuf->allocSize); if (pBuf->pData == NULL) { qError("SinkNode failed to malloc memory, size:%d, code:%d", pBuf->allocSize, TAOS_SYSTEM_ERROR(errno)); + return terrno; } - return NULL != pBuf->pData; + return TSDB_CODE_SUCCESS; } static int32_t updateStatus(SDataDeleterHandle* pDeleter) { - taosThreadMutexLock(&pDeleter->mutex); + (void)taosThreadMutexLock(&pDeleter->mutex); int32_t blockNums = taosQueueItemSize(pDeleter->pDataBlocks); int32_t status = (0 == blockNums ? DS_BUF_EMPTY : (blockNums < pDeleter->pManager->cfg.maxDataBlockNumPerQuery ? DS_BUF_LOW : DS_BUF_FULL)); pDeleter->status = status; - taosThreadMutexUnlock(&pDeleter->mutex); + (void)taosThreadMutexUnlock(&pDeleter->mutex); + return status; } static int32_t getStatus(SDataDeleterHandle* pDeleter) { - taosThreadMutexLock(&pDeleter->mutex); + (void)taosThreadMutexLock(&pDeleter->mutex); int32_t status = pDeleter->status; - taosThreadMutexUnlock(&pDeleter->mutex); + (void)taosThreadMutexUnlock(&pDeleter->mutex); + return status; } static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { SDataDeleterHandle* pDeleter = (SDataDeleterHandle*)pHandle; - SDataDeleterBuf* pBuf; + SDataDeleterBuf* pBuf = NULL; int32_t code = taosAllocateQitem(sizeof(SDataDeleterBuf), DEF_QITEM, 0, (void**)&pBuf); if (code) { return code; } - if (!allocBuf(pDeleter, pInput, pBuf)) { + code = allocBuf(pDeleter, pInput, pBuf); + if (code) { taosFreeQitem(pBuf); - return TSDB_CODE_OUT_OF_MEMORY; + return code; } - toDataCacheEntry(pDeleter, pInput, pBuf); - taosWriteQitem(pDeleter->pDataBlocks, pBuf); + QRY_ERR_JRET(toDataCacheEntry(pDeleter, pInput, pBuf)); + QRY_ERR_JRET(taosWriteQitem(pDeleter->pDataBlocks, pBuf)); *pContinue = (DS_BUF_LOW == updateStatus(pDeleter) ? true : false); + return TSDB_CODE_SUCCESS; + +_return: + + taosFreeQitem(pBuf); + + return code; } static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { SDataDeleterHandle* pDeleter = (SDataDeleterHandle*)pHandle; - taosThreadMutexLock(&pDeleter->mutex); + (void)taosThreadMutexLock(&pDeleter->mutex); pDeleter->queryEnd = true; pDeleter->useconds = useconds; - taosThreadMutexUnlock(&pDeleter->mutex); + (void)taosThreadMutexUnlock(&pDeleter->mutex); } static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRawLen, bool* pQueryEnd) { @@ -165,9 +187,9 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRaw } SDataDeleterBuf* pBuf = NULL; - taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); + (void)taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); if (pBuf != NULL) { - memcpy(&pDeleter->nextOutput, pBuf, sizeof(SDataDeleterBuf)); + TAOS_MEMCPY(&pDeleter->nextOutput, pBuf, sizeof(SDataDeleterBuf)); taosFreeQitem(pBuf); } @@ -192,35 +214,35 @@ static int32_t getDataBlock(SDataSinkHandle* pHandle, SOutputData* pOutput) { } SDataCacheEntry* pEntry = (SDataCacheEntry*)(pDeleter->nextOutput.pData); - memcpy(pOutput->pData, pEntry->data, pEntry->dataLen); + TAOS_MEMCPY(pOutput->pData, pEntry->data, pEntry->dataLen); pDeleter->pParam->pUidList = NULL; pOutput->numOfRows = pEntry->numOfRows; pOutput->numOfCols = pEntry->numOfCols; pOutput->compressed = pEntry->compressed; - atomic_sub_fetch_64(&pDeleter->cachedSize, pEntry->dataLen); - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + (void)atomic_sub_fetch_64(&pDeleter->cachedSize, pEntry->dataLen); + (void)atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); taosMemoryFreeClear(pDeleter->nextOutput.pData); // todo persistent pOutput->bufStatus = updateStatus(pDeleter); - taosThreadMutexLock(&pDeleter->mutex); + (void)taosThreadMutexLock(&pDeleter->mutex); pOutput->queryEnd = pDeleter->queryEnd; pOutput->useconds = pDeleter->useconds; pOutput->precision = pDeleter->pSchema->precision; - taosThreadMutexUnlock(&pDeleter->mutex); + (void)taosThreadMutexUnlock(&pDeleter->mutex); return TSDB_CODE_SUCCESS; } static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { SDataDeleterHandle* pDeleter = (SDataDeleterHandle*)pHandle; - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pDeleter->cachedSize); + (void)atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pDeleter->cachedSize); taosMemoryFreeClear(pDeleter->nextOutput.pData); taosArrayDestroy(pDeleter->pParam->pUidList); taosMemoryFree(pDeleter->pParam); while (!taosQueueEmpty(pDeleter->pDataBlocks)) { SDataDeleterBuf* pBuf = NULL; - taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); + (void)taosReadQitem(pDeleter->pDataBlocks, (void**)&pBuf); if (pBuf != NULL) { taosMemoryFreeClear(pBuf->pData); @@ -228,9 +250,10 @@ static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { } } taosCloseQueue(pDeleter->pDataBlocks); - taosThreadMutexDestroy(&pDeleter->mutex); + (void)taosThreadMutexDestroy(&pDeleter->mutex); taosMemoryFree(pDeleter->pManager); + return TSDB_CODE_SUCCESS; } @@ -247,8 +270,8 @@ int32_t createDataDeleter(SDataSinkManager* pManager, const SDataSinkNode* pData SDataDeleterHandle* deleter = taosMemoryCalloc(1, sizeof(SDataDeleterHandle)); if (NULL == deleter) { + code = terrno; taosMemoryFree(pParam); - code = TSDB_CODE_OUT_OF_MEMORY; goto _end; } @@ -276,17 +299,22 @@ int32_t createDataDeleter(SDataSinkManager* pManager, const SDataSinkNode* pData if (code) { goto _end; } - taosThreadMutexInit(&deleter->mutex, NULL); + code = taosThreadMutexInit(&deleter->mutex, NULL); + if (code) { + goto _end; + } *pHandle = deleter; return code; _end: + if (deleter != NULL) { - destroyDataSinker((SDataSinkHandle*)deleter); + (void)destroyDataSinker((SDataSinkHandle*)deleter); taosMemoryFree(deleter); } else { taosMemoryFree(pManager); } + return code; } diff --git a/source/libs/executor/src/dataDispatcher.c b/source/libs/executor/src/dataDispatcher.c index 3981cedd3f..9316ba960e 100644 --- a/source/libs/executor/src/dataDispatcher.c +++ b/source/libs/executor/src/dataDispatcher.c @@ -63,7 +63,7 @@ typedef struct SDataDispatchHandle { // The length of bitmap is decided by number of rows of this data block, and the length of each column data is // recorded in the first segment, next to the struct header // clang-format on -static void toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pInput, SDataDispatchBuf* pBuf) { +static int32_t toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pInput, SDataDispatchBuf* pBuf) { int32_t numOfCols = 0; SNode* pNode; @@ -88,6 +88,9 @@ static void toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pIn if (pHandle->pCompressBuf == NULL) { // allocate additional 8 bytes to avoid invalid write if compress failed to reduce the size pHandle->pCompressBuf = taosMemoryMalloc(pBuf->allocSize + 8); + if (NULL == pHandle->pCompressBuf) { + QRY_RET(terrno); + } pHandle->bufSize = pBuf->allocSize + 8; } else { if (pHandle->bufSize < pBuf->allocSize + 8) { @@ -96,9 +99,8 @@ static void toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pIn if (p != NULL) { pHandle->pCompressBuf = p; } else { - terrno = TSDB_CODE_OUT_OF_MEMORY; - qError("failed to prepare compress buf:%d, code: out of memory", pHandle->bufSize); - return; + qError("failed to prepare compress buf:%d, code: %x", pHandle->bufSize, terrno); + return terrno; } } } @@ -114,7 +116,7 @@ static void toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pIn pEntry->compressed = 0; pEntry->dataLen = dataLen; pEntry->rawLen = dataLen; - memcpy(pEntry->data, pHandle->pCompressBuf, dataLen); + TAOS_MEMCPY(pEntry->data, pHandle->pCompressBuf, dataLen); } } else { pEntry->dataLen = blockEncode(pInput->pData, pEntry->data, numOfCols); @@ -124,11 +126,13 @@ static void toDataCacheEntry(SDataDispatchHandle* pHandle, const SInputData* pIn pBuf->useSize += pEntry->dataLen; - atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); - atomic_add_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + (void)atomic_add_fetch_64(&pHandle->cachedSize, pEntry->dataLen); + (void)atomic_add_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + + return TSDB_CODE_SUCCESS; } -static bool allocBuf(SDataDispatchHandle* pDispatcher, const SInputData* pInput, SDataDispatchBuf* pBuf) { +static int32_t allocBuf(SDataDispatchHandle* pDispatcher, const SInputData* pInput, SDataDispatchBuf* pBuf) { /* uint32_t capacity = pDispatcher->pManager->cfg.maxDataBlockNumPerQuery; if (taosQueueItemSize(pDispatcher->pDataBlocks) > capacity) { @@ -142,69 +146,73 @@ static bool allocBuf(SDataDispatchHandle* pDispatcher, const SInputData* pInput, pBuf->pData = taosMemoryMalloc(pBuf->allocSize); if (pBuf->pData == NULL) { - qError("SinkNode failed to malloc memory, size:%d, code:%d", pBuf->allocSize, TAOS_SYSTEM_ERROR(errno)); + qError("SinkNode failed to malloc memory, size:%d, code:%x", pBuf->allocSize, terrno); + return terrno; } - return NULL != pBuf->pData; + return TSDB_CODE_SUCCESS; } static int32_t updateStatus(SDataDispatchHandle* pDispatcher) { - taosThreadMutexLock(&pDispatcher->mutex); + (void)taosThreadMutexLock(&pDispatcher->mutex); int32_t blockNums = taosQueueItemSize(pDispatcher->pDataBlocks); int32_t status = (0 == blockNums ? DS_BUF_EMPTY : (blockNums < pDispatcher->pManager->cfg.maxDataBlockNumPerQuery ? DS_BUF_LOW : DS_BUF_FULL)); pDispatcher->status = status; - taosThreadMutexUnlock(&pDispatcher->mutex); + (void)taosThreadMutexUnlock(&pDispatcher->mutex); return status; } static int32_t getStatus(SDataDispatchHandle* pDispatcher) { - taosThreadMutexLock(&pDispatcher->mutex); + (void)taosThreadMutexLock(&pDispatcher->mutex); int32_t status = pDispatcher->status; - taosThreadMutexUnlock(&pDispatcher->mutex); + (void)taosThreadMutexUnlock(&pDispatcher->mutex); return status; } static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { int32_t code = 0; SDataDispatchHandle* pDispatcher = (SDataDispatchHandle*)pHandle; - SDataDispatchBuf* pBuf; + SDataDispatchBuf* pBuf = NULL; code = taosAllocateQitem(sizeof(SDataDispatchBuf), DEF_QITEM, 0, (void**)&pBuf); if (code) { return code; } - if (!allocBuf(pDispatcher, pInput, pBuf)) { + code = allocBuf(pDispatcher, pInput, pBuf); + if (code) { taosFreeQitem(pBuf); - return TSDB_CODE_OUT_OF_MEMORY; - } - - toDataCacheEntry(pDispatcher, pInput, pBuf); - code = taosWriteQitem(pDispatcher->pDataBlocks, pBuf); - if (code != 0) { return code; } + QRY_ERR_JRET(toDataCacheEntry(pDispatcher, pInput, pBuf)); + QRY_ERR_JRET(taosWriteQitem(pDispatcher->pDataBlocks, pBuf)); + int32_t status = updateStatus(pDispatcher); *pContinue = (status == DS_BUF_LOW || status == DS_BUF_EMPTY); return TSDB_CODE_SUCCESS; + +_return: + + taosFreeQitem(pBuf); + return code; } static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { SDataDispatchHandle* pDispatcher = (SDataDispatchHandle*)pHandle; - taosThreadMutexLock(&pDispatcher->mutex); + (void)taosThreadMutexLock(&pDispatcher->mutex); pDispatcher->queryEnd = true; pDispatcher->useconds = useconds; - taosThreadMutexUnlock(&pDispatcher->mutex); + (void)taosThreadMutexUnlock(&pDispatcher->mutex); } static void resetDispatcher(struct SDataSinkHandle* pHandle) { SDataDispatchHandle* pDispatcher = (SDataDispatchHandle*)pHandle; - taosThreadMutexLock(&pDispatcher->mutex); + (void)taosThreadMutexLock(&pDispatcher->mutex); pDispatcher->queryEnd = false; - taosThreadMutexUnlock(&pDispatcher->mutex); + (void)taosThreadMutexUnlock(&pDispatcher->mutex); } static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRowLen, bool* pQueryEnd) { @@ -216,9 +224,9 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRow } SDataDispatchBuf* pBuf = NULL; - taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf); + (void)taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf); if (pBuf != NULL) { - memcpy(&pDispatcher->nextOutput, pBuf, sizeof(SDataDispatchBuf)); + TAOS_MEMCPY(&pDispatcher->nextOutput, pBuf, sizeof(SDataDispatchBuf)); taosFreeQitem(pBuf); } @@ -243,33 +251,34 @@ static int32_t getDataBlock(SDataSinkHandle* pHandle, SOutputData* pOutput) { } SDataCacheEntry* pEntry = (SDataCacheEntry*)(pDispatcher->nextOutput.pData); - memcpy(pOutput->pData, pEntry->data, pEntry->dataLen); + TAOS_MEMCPY(pOutput->pData, pEntry->data, pEntry->dataLen); pOutput->numOfRows = pEntry->numOfRows; pOutput->numOfCols = pEntry->numOfCols; pOutput->compressed = pEntry->compressed; - atomic_sub_fetch_64(&pDispatcher->cachedSize, pEntry->dataLen); - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); + (void)atomic_sub_fetch_64(&pDispatcher->cachedSize, pEntry->dataLen); + (void)atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pEntry->dataLen); taosMemoryFreeClear(pDispatcher->nextOutput.pData); // todo persistent pOutput->bufStatus = updateStatus(pDispatcher); - taosThreadMutexLock(&pDispatcher->mutex); + + (void)taosThreadMutexLock(&pDispatcher->mutex); pOutput->queryEnd = pDispatcher->queryEnd; pOutput->useconds = pDispatcher->useconds; pOutput->precision = pDispatcher->pSchema->precision; - taosThreadMutexUnlock(&pDispatcher->mutex); + (void)taosThreadMutexUnlock(&pDispatcher->mutex); return TSDB_CODE_SUCCESS; } static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { SDataDispatchHandle* pDispatcher = (SDataDispatchHandle*)pHandle; - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pDispatcher->cachedSize); + (void)atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pDispatcher->cachedSize); taosMemoryFreeClear(pDispatcher->nextOutput.pData); while (!taosQueueEmpty(pDispatcher->pDataBlocks)) { SDataDispatchBuf* pBuf = NULL; - taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf); + (void)taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf); if (pBuf != NULL) { taosMemoryFreeClear(pBuf->pData); taosFreeQitem(pBuf); @@ -280,7 +289,7 @@ static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { taosMemoryFreeClear(pDispatcher->pCompressBuf); pDispatcher->bufSize = 0; - taosThreadMutexDestroy(&pDispatcher->mutex); + (void)taosThreadMutexDestroy(&pDispatcher->mutex); taosMemoryFree(pDispatcher->pManager); return TSDB_CODE_SUCCESS; } @@ -297,7 +306,6 @@ int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pD SDataDispatchHandle* dispatcher = taosMemoryCalloc(1, sizeof(SDataDispatchHandle)); if (NULL == dispatcher) { - terrno = TSDB_CODE_OUT_OF_MEMORY; goto _return; } @@ -318,7 +326,11 @@ int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pD terrno = code; goto _return; } - taosThreadMutexInit(&dispatcher->mutex, NULL); + code = taosThreadMutexInit(&dispatcher->mutex, NULL); + if (code) { + terrno = code; + goto _return; + } if (NULL == dispatcher->pDataBlocks) { taosMemoryFree(dispatcher); @@ -330,6 +342,7 @@ int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pD return TSDB_CODE_SUCCESS; _return: + taosMemoryFree(pManager); return terrno; } diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c index 5ba2f8bf42..6f226ecb21 100644 --- a/source/libs/executor/src/dataInserter.c +++ b/source/libs/executor/src/dataInserter.c @@ -58,10 +58,17 @@ int32_t inserterCallback(void* param, SDataBuf* pMsg, int32_t code) { SSubmitRspParam* pParam = (SSubmitRspParam*)param; SDataInserterHandle* pInserter = pParam->pInserter; - pInserter->submitRes.code = code; - + if (code) { + pInserter->submitRes.code = code; + } + if (code == TSDB_CODE_SUCCESS) { pInserter->submitRes.pRsp = taosMemoryCalloc(1, sizeof(SSubmitRsp2)); + if (NULL == pInserter->submitRes.pRsp) { + pInserter->submitRes.code = terrno; + goto _return; + } + SDecoder coder = {0}; tDecoderInit(&coder, pMsg->pData, pMsg->len); code = tDecodeSSubmitRsp2(&coder, pInserter->submitRes.pRsp); @@ -77,6 +84,10 @@ int32_t inserterCallback(void* param, SDataBuf* pMsg, int32_t code) { for (int32_t i = 0; i < numOfTables; ++i) { SVCreateTbRsp* pRsp = taosArrayGet(pCreateTbList, i); + if (NULL == pRsp) { + pInserter->submitRes.code = TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + goto _return; + } if (TSDB_CODE_SUCCESS != pRsp->code) { code = pRsp->code; taosMemoryFree(pInserter->submitRes.pRsp); @@ -94,8 +105,10 @@ int32_t inserterCallback(void* param, SDataBuf* pMsg, int32_t code) { } _return: - tsem_post(&pInserter->ready); + + (void)tsem_post(&pInserter->ready); taosMemoryFree(pMsg->pData); + return TSDB_CODE_SUCCESS; } @@ -105,11 +118,15 @@ static int32_t sendSubmitRequest(SDataInserterHandle* pInserter, void* pMsg, int SMsgSendInfo* pMsgSendInfo = taosMemoryCalloc(1, sizeof(SMsgSendInfo)); if (NULL == pMsgSendInfo) { taosMemoryFreeClear(pMsg); - terrno = TSDB_CODE_OUT_OF_MEMORY; return terrno; } SSubmitRspParam* pParam = taosMemoryCalloc(1, sizeof(SSubmitRspParam)); + if (NULL == pParam) { + taosMemoryFreeClear(pMsg); + taosMemoryFreeClear(pMsgSendInfo); + return terrno; + } pParam->pInserter = pInserter; pMsgSendInfo->param = pParam; @@ -133,7 +150,7 @@ static int32_t submitReqToMsg(int32_t vgId, SSubmitReq2* pReq, void** pData, int len += sizeof(SSubmitReq2Msg); pBuf = taosMemoryMalloc(len); if (NULL == pBuf) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } ((SSubmitReq2Msg*)pBuf)->header.vgId = htonl(vgId); ((SSubmitReq2Msg*)pBuf)->header.contLen = htonl(len); @@ -149,6 +166,7 @@ static int32_t submitReqToMsg(int32_t vgId, SSubmitReq2* pReq, void** pData, int } else { taosMemoryFree(pBuf); } + return code; } @@ -162,12 +180,10 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp if (NULL == pReq) { if (!(pReq = taosMemoryMalloc(sizeof(SSubmitReq2)))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; goto _end; } if (!(pReq->aSubmitTbData = taosArrayInit(1, sizeof(SSubmitTbData)))) { - terrno = TSDB_CODE_OUT_OF_MEMORY; goto _end; } } @@ -208,6 +224,10 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp } SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, colIdx); + if (NULL == pColInfoData) { + terrno = TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + goto _end; + } void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes); switch (pColInfoData->info.type) { @@ -217,13 +237,17 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp ASSERT(pColInfoData->info.type == pCol->type); if (colDataIsNull_s(pColInfoData, j)) { SColVal cv = COL_VAL_NULL(pCol->colId, pCol->type); - taosArrayPush(pVals, &cv); + if (NULL == taosArrayPush(pVals, &cv)) { + goto _end; + } } else { void* data = colDataGetVarData(pColInfoData, j); SValue sv = (SValue){ .type = pCol->type, .nData = varDataLen(data), .pData = varDataVal(data)}; // address copy, no value SColVal cv = COL_VAL_VALUE(pCol->colId, sv); - taosArrayPush(pVals, &cv); + if (NULL == taosArrayPush(pVals, &cv)) { + goto _end; + } } break; } @@ -245,7 +269,9 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp } SColVal cv = COL_VAL_NULL(pCol->colId, pCol->type); // should use pCol->type - taosArrayPush(pVals, &cv); + if (NULL == taosArrayPush(pVals, &cv)) { + goto _end; + } } else { if (PRIMARYKEY_TIMESTAMP_COL_ID == pCol->colId && !needSortMerge) { if (*(int64_t*)var <= lastTs) { @@ -256,9 +282,11 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp } SValue sv = {.type = pCol->type}; - memcpy(&sv.val, var, tDataTypes[pCol->type].bytes); + TAOS_MEMCPY(&sv.val, var, tDataTypes[pCol->type].bytes); SColVal cv = COL_VAL_VALUE(pCol->colId, sv); - taosArrayPush(pVals, &cv); + if (NULL == taosArrayPush(pVals, &cv)) { + goto _end; + } } } else { uError("the column type %" PRIi16 " is undefined\n", pColInfoData->info.type); @@ -274,7 +302,9 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp tDestroySubmitTbData(&tbData, TSDB_MSG_FLG_ENCODE); goto _end; } - taosArrayPush(tbData.aRowP, &pRow); + if (NULL == taosArrayPush(tbData.aRowP, &pRow)) { + goto _end; + } } if (needSortMerge) { @@ -284,9 +314,12 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp } } - taosArrayPush(pReq->aSubmitTbData, &tbData); + if (NULL == taosArrayPush(pReq->aSubmitTbData, &tbData)) { + goto _end; + } _end: + taosArrayDestroy(pVals); if (terrno != 0) { *ppReq = NULL; @@ -294,9 +327,11 @@ _end: tDestroySubmitReq(pReq, TSDB_MSG_FLG_ENCODE); taosMemoryFree(pReq); } + return terrno; } *ppReq = pReq; + return TSDB_CODE_SUCCESS; } @@ -312,7 +347,9 @@ int32_t dataBlocksToSubmitReq(SDataInserterHandle* pInserter, void** pMsg, int32 for (int32_t i = 0; i < sz; i++) { SSDataBlock* pDataBlock = taosArrayGetP(pBlocks, i); - + if (NULL == pDataBlock) { + return TSDB_CODE_QRY_EXECUTOR_INTERNAL_ERROR; + } code = buildSubmitReqFromBlock(pInserter, &pReq, pDataBlock, pTSchema, uid, vgId, suid); if (code) { if (pReq) { @@ -334,7 +371,9 @@ int32_t dataBlocksToSubmitReq(SDataInserterHandle* pInserter, void** pMsg, int32 static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, bool* pContinue) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; if (!pInserter->explain) { - taosArrayPush(pInserter->pDataBlocks, &pInput->pData); + if (NULL == taosArrayPush(pInserter->pDataBlocks, &pInput->pData)) { + return terrno; + } void* pMsg = NULL; int32_t msgLen = 0; int32_t code = dataBlocksToSubmitReq(pInserter, &pMsg, &msgLen); @@ -350,7 +389,7 @@ static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, return code; } - tsem_wait(&pInserter->ready); + QRY_ERR_RET(tsem_wait(&pInserter->ready)); if (pInserter->submitRes.code) { return pInserter->submitRes.code; @@ -364,10 +403,10 @@ static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput, static void endPut(struct SDataSinkHandle* pHandle, uint64_t useconds) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; - taosThreadMutexLock(&pInserter->mutex); + (void)taosThreadMutexLock(&pInserter->mutex); pInserter->queryEnd = true; pInserter->useconds = useconds; - taosThreadMutexUnlock(&pInserter->mutex); + (void)taosThreadMutexUnlock(&pInserter->mutex); } static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRawLen, bool* pQueryEnd) { @@ -378,12 +417,12 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, int64_t* pRaw static int32_t destroyDataSinker(SDataSinkHandle* pHandle) { SDataInserterHandle* pInserter = (SDataInserterHandle*)pHandle; - atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pInserter->cachedSize); + (void)atomic_sub_fetch_64(&gDataSinkStat.cachedSize, pInserter->cachedSize); taosArrayDestroy(pInserter->pDataBlocks); taosMemoryFree(pInserter->pSchema); taosMemoryFree(pInserter->pParam); taosHashCleanup(pInserter->pCols); - taosThreadMutexDestroy(&pInserter->mutex); + (void)taosThreadMutexDestroy(&pInserter->mutex); taosMemoryFree(pInserter->pManager); return TSDB_CODE_SUCCESS; @@ -401,7 +440,6 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat SDataInserterHandle* inserter = taosMemoryCalloc(1, sizeof(SDataInserterHandle)); if (NULL == inserter) { taosMemoryFree(pParam); - terrno = TSDB_CODE_OUT_OF_MEMORY; goto _return; } @@ -432,28 +470,31 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat } inserter->pDataBlocks = taosArrayInit(1, POINTER_BYTES); - taosThreadMutexInit(&inserter->mutex, NULL); if (NULL == inserter->pDataBlocks) { - terrno = TSDB_CODE_OUT_OF_MEMORY; goto _return; } + QRY_ERR_JRET(taosThreadMutexInit(&inserter->mutex, NULL)); inserter->fullOrderColList = pInserterNode->pCols->length == inserter->pSchema->numOfCols; inserter->pCols = taosHashInit(pInserterNode->pCols->length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), false, HASH_NO_LOCK); + if (NULL == inserter->pCols) { + goto _return; + } + SNode* pNode = NULL; int32_t i = 0; FOREACH(pNode, pInserterNode->pCols) { SColumnNode* pCol = (SColumnNode*)pNode; - taosHashPut(inserter->pCols, &pCol->colId, sizeof(pCol->colId), &pCol->slotId, sizeof(pCol->slotId)); + QRY_ERR_JRET(taosHashPut(inserter->pCols, &pCol->colId, sizeof(pCol->colId), &pCol->slotId, sizeof(pCol->slotId))); if (inserter->fullOrderColList && pCol->colId != inserter->pSchema->columns[i].colId) { inserter->fullOrderColList = false; } ++i; } - tsem_init(&inserter->ready, 0, 0); + QRY_ERR_JRET(tsem_init(&inserter->ready, 0, 0)); *pHandle = inserter; return TSDB_CODE_SUCCESS; @@ -461,7 +502,7 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat _return: if (inserter) { - destroyDataSinker((SDataSinkHandle*)inserter); + (void)destroyDataSinker((SDataSinkHandle*)inserter); taosMemoryFree(inserter); } else { taosMemoryFree(pManager); diff --git a/source/libs/executor/src/dataSinkMgt.c b/source/libs/executor/src/dataSinkMgt.c index e711ffdf5c..55fc520477 100644 --- a/source/libs/executor/src/dataSinkMgt.c +++ b/source/libs/executor/src/dataSinkMgt.c @@ -23,20 +23,20 @@ SDataSinkStat gDataSinkStat = {0}; int32_t dsDataSinkMgtInit(SDataSinkMgtCfg* cfg, SStorageAPI* pAPI, void** ppSinkManager) { SDataSinkManager* pSinkManager = taosMemoryMalloc(sizeof(SDataSinkManager)); if (NULL == pSinkManager) { - return TSDB_CODE_OUT_OF_MEMORY; + return terrno; } pSinkManager->cfg = *cfg; pSinkManager->pAPI = pAPI; *ppSinkManager = pSinkManager; - return 0; // to avoid compiler eror + return TSDB_CODE_SUCCESS; // to avoid compiler eror } int32_t dsDataSinkGetCacheSize(SDataSinkStat* pStat) { pStat->cachedSize = atomic_load_64(&gDataSinkStat.cachedSize); - return 0; + return TSDB_CODE_SUCCESS; } int32_t dsCreateDataSinker(void* pSinkManager, const SDataSinkNode* pDataSink, DataSinkHandle* pHandle, void* pParam, const char* id) { @@ -56,6 +56,7 @@ int32_t dsCreateDataSinker(void* pSinkManager, const SDataSinkNode* pDataSink, D taosMemoryFree(pSinkManager); qError("invalid input node type:%d, %s", nodeType(pDataSink), id); + return TSDB_CODE_QRY_INVALID_INPUT; } @@ -97,6 +98,6 @@ void dsScheduleProcess(void* ahandle, void* pItem) { void dsDestroyDataSinker(DataSinkHandle handle) { SDataSinkHandle* pHandleImpl = (SDataSinkHandle*)handle; - pHandleImpl->fDestroy(pHandleImpl); + (void)pHandleImpl->fDestroy(pHandleImpl); taosMemoryFree(pHandleImpl); } From c4d31e7737129ef10cdd5be0456cf16a7e107151 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Mon, 22 Jul 2024 19:40:07 +0800 Subject: [PATCH 63/64] enh: refactor error code --- source/dnode/vnode/src/vnd/vnodeCfg.c | 256 ++++++------ source/dnode/vnode/src/vnd/vnodeCommit.c | 200 ++++------ source/dnode/vnode/src/vnd/vnodeSnapshot.c | 431 ++++++++++----------- source/dnode/vnode/src/vnd/vnodeSync.c | 34 +- source/libs/sync/src/syncMain.c | 7 +- 5 files changed, 439 insertions(+), 489 deletions(-) diff --git a/source/dnode/vnode/src/vnd/vnodeCfg.c b/source/dnode/vnode/src/vnd/vnodeCfg.c index 85981ac9aa..12e4fe7753 100644 --- a/source/dnode/vnode/src/vnd/vnodeCfg.c +++ b/source/dnode/vnode/src/vnd/vnodeCfg.c @@ -88,33 +88,33 @@ const ESyncRole vnodeStrToRole(char *str) { int vnodeEncodeConfig(const void *pObj, SJson *pJson) { const SVnodeCfg *pCfg = (SVnodeCfg *)pObj; - if (tjsonAddIntegerToObject(pJson, "vgId", pCfg->vgId) < 0) return -1; - if (tjsonAddStringToObject(pJson, "dbname", pCfg->dbname) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "dbId", pCfg->dbId) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "szPage", pCfg->szPage) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "szCache", pCfg->szCache) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "cacheLast", pCfg->cacheLast) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "cacheLastSize", pCfg->cacheLastSize) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "szBuf", pCfg->szBuf) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "isHeap", pCfg->isHeap) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "isWeak", pCfg->isWeak) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "isTsma", pCfg->isTsma) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "isRsma", pCfg->isRsma) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "precision", pCfg->tsdbCfg.precision) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "update", pCfg->tsdbCfg.update) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "compression", pCfg->tsdbCfg.compression) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "slLevel", pCfg->tsdbCfg.slLevel) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "daysPerFile", pCfg->tsdbCfg.days) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "minRows", pCfg->tsdbCfg.minRows) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "maxRows", pCfg->tsdbCfg.maxRows) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "keep0", pCfg->tsdbCfg.keep0) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "keep1", pCfg->tsdbCfg.keep1) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "keep2", pCfg->tsdbCfg.keep2) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "keepTimeOffset", pCfg->tsdbCfg.keepTimeOffset) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "s3ChunkSize", pCfg->s3ChunkSize) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "s3KeepLocal", pCfg->s3KeepLocal) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "s3Compact", pCfg->s3Compact) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "tsdbPageSize", pCfg->tsdbPageSize) < 0) return -1; + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vgId", pCfg->vgId)); + TAOS_CHECK_RETURN(tjsonAddStringToObject(pJson, "dbname", pCfg->dbname)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "dbId", pCfg->dbId)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "szPage", pCfg->szPage)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "szCache", pCfg->szCache)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "cacheLast", pCfg->cacheLast)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "cacheLastSize", pCfg->cacheLastSize)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "szBuf", pCfg->szBuf)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "isHeap", pCfg->isHeap)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "isWeak", pCfg->isWeak)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "isTsma", pCfg->isTsma)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "isRsma", pCfg->isRsma)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "precision", pCfg->tsdbCfg.precision)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "update", pCfg->tsdbCfg.update)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "compression", pCfg->tsdbCfg.compression)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "slLevel", pCfg->tsdbCfg.slLevel)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "daysPerFile", pCfg->tsdbCfg.days)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "minRows", pCfg->tsdbCfg.minRows)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "maxRows", pCfg->tsdbCfg.maxRows)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "keep0", pCfg->tsdbCfg.keep0)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "keep1", pCfg->tsdbCfg.keep1)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "keep2", pCfg->tsdbCfg.keep2)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "keepTimeOffset", pCfg->tsdbCfg.keepTimeOffset)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "s3ChunkSize", pCfg->s3ChunkSize)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "s3KeepLocal", pCfg->s3KeepLocal)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "s3Compact", pCfg->s3Compact)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "tsdbPageSize", pCfg->tsdbPageSize)); if (pCfg->tsdbCfg.retentions[0].keep > 0) { int32_t nRetention = 1; if (pCfg->tsdbCfg.retentions[1].freq > 0) { @@ -124,61 +124,67 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) { } } SJson *pNodeRetentions = tjsonCreateArray(); + if (pNodeRetentions == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } tjsonAddItemToObject(pJson, "retentions", pNodeRetentions); for (int32_t i = 0; i < nRetention; ++i) { SJson *pNodeRetention = tjsonCreateObject(); const SRetention *pRetention = pCfg->tsdbCfg.retentions + i; - tjsonAddIntegerToObject(pNodeRetention, "freq", pRetention->freq); - tjsonAddIntegerToObject(pNodeRetention, "freqUnit", pRetention->freqUnit); - tjsonAddIntegerToObject(pNodeRetention, "keep", pRetention->keep); - tjsonAddIntegerToObject(pNodeRetention, "keepUnit", pRetention->keepUnit); - tjsonAddItemToArray(pNodeRetentions, pNodeRetention); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pNodeRetention, "freq", pRetention->freq)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pNodeRetention, "freqUnit", pRetention->freqUnit)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pNodeRetention, "keep", pRetention->keep)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pNodeRetention, "keepUnit", pRetention->keepUnit)); + TAOS_CHECK_RETURN(tjsonAddItemToArray(pNodeRetentions, pNodeRetention)); } } - if (tjsonAddIntegerToObject(pJson, "tsdb.encryptAlgorithm", pCfg->tsdbCfg.encryptAlgorithm) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.vgId", pCfg->walCfg.vgId) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.fsyncPeriod", pCfg->walCfg.fsyncPeriod) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.retentionPeriod", pCfg->walCfg.retentionPeriod) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.rollPeriod", pCfg->walCfg.rollPeriod) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.retentionSize", pCfg->walCfg.retentionSize) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.segSize", pCfg->walCfg.segSize) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.level", pCfg->walCfg.level) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.clearFiles", pCfg->walCfg.clearFiles) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "wal.encryptAlgorithm", pCfg->walCfg.encryptAlgorithm) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "tdbEncryptAlgorithm", pCfg->tdbEncryptAlgorithm) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "sstTrigger", pCfg->sttTrigger) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashBegin", pCfg->hashBegin) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashEnd", pCfg->hashEnd) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashChange", pCfg->hashChange) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashMethod", pCfg->hashMethod) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashPrefix", pCfg->hashPrefix) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "hashSuffix", pCfg->hashSuffix) < 0) return -1; - - if (tjsonAddIntegerToObject(pJson, "syncCfg.replicaNum", pCfg->syncCfg.replicaNum) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "syncCfg.myIndex", pCfg->syncCfg.myIndex) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "syncCfg.changeVersion", pCfg->syncCfg.changeVersion) < 0) return -1; - - if (tjsonAddIntegerToObject(pJson, "vndStats.stables", pCfg->vndStats.numOfSTables) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "vndStats.ctables", pCfg->vndStats.numOfCTables) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "vndStats.ntables", pCfg->vndStats.numOfNTables) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "vndStats.timeseries", pCfg->vndStats.numOfTimeSeries) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "vndStats.ntimeseries", pCfg->vndStats.numOfNTimeSeries) < 0) return -1; + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "tsdb.encryptAlgorithm", pCfg->tsdbCfg.encryptAlgorithm)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.vgId", pCfg->walCfg.vgId)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.fsyncPeriod", pCfg->walCfg.fsyncPeriod)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.retentionPeriod", pCfg->walCfg.retentionPeriod)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.rollPeriod", pCfg->walCfg.rollPeriod)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.retentionSize", pCfg->walCfg.retentionSize)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.segSize", pCfg->walCfg.segSize)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.level", pCfg->walCfg.level)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.clearFiles", pCfg->walCfg.clearFiles)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "wal.encryptAlgorithm", pCfg->walCfg.encryptAlgorithm)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "tdbEncryptAlgorithm", pCfg->tdbEncryptAlgorithm)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "sstTrigger", pCfg->sttTrigger)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashBegin", pCfg->hashBegin)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashEnd", pCfg->hashEnd)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashChange", pCfg->hashChange)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashMethod", pCfg->hashMethod)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashPrefix", pCfg->hashPrefix)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "hashSuffix", pCfg->hashSuffix)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "syncCfg.replicaNum", pCfg->syncCfg.replicaNum)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "syncCfg.myIndex", pCfg->syncCfg.myIndex)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "syncCfg.changeVersion", pCfg->syncCfg.changeVersion)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vndStats.stables", pCfg->vndStats.numOfSTables)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vndStats.ctables", pCfg->vndStats.numOfCTables)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vndStats.ntables", pCfg->vndStats.numOfNTables)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vndStats.timeseries", pCfg->vndStats.numOfTimeSeries)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "vndStats.ntimeseries", pCfg->vndStats.numOfNTimeSeries)); SJson *nodeInfo = tjsonCreateArray(); - if (nodeInfo == NULL) return -1; - if (tjsonAddItemToObject(pJson, "syncCfg.nodeInfo", nodeInfo) < 0) return -1; + if (nodeInfo == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + TAOS_CHECK_RETURN(tjsonAddItemToObject(pJson, "syncCfg.nodeInfo", nodeInfo)); vDebug("vgId:%d, encode config, replicas:%d totalReplicas:%d selfIndex:%d changeVersion:%d", pCfg->vgId, pCfg->syncCfg.replicaNum, pCfg->syncCfg.totalReplicaNum, pCfg->syncCfg.myIndex, pCfg->syncCfg.changeVersion); for (int i = 0; i < pCfg->syncCfg.totalReplicaNum; ++i) { - SJson *info = tjsonCreateObject(); + SJson *info = tjsonCreateObject(); + if (info == NULL) { + return TSDB_CODE_OUT_OF_MEMORY; + } + SNodeInfo *pNode = (SNodeInfo *)&pCfg->syncCfg.nodeInfo[i]; - if (info == NULL) return -1; - if (tjsonAddIntegerToObject(info, "nodePort", pNode->nodePort) < 0) return -1; - if (tjsonAddStringToObject(info, "nodeFqdn", pNode->nodeFqdn) < 0) return -1; - if (tjsonAddIntegerToObject(info, "nodeId", pNode->nodeId) < 0) return -1; - if (tjsonAddIntegerToObject(info, "clusterId", pNode->clusterId) < 0) return -1; - if (tjsonAddStringToObject(info, "isReplica", vnodeRoleToStr(pNode->nodeRole)) < 0) return -1; - if (tjsonAddItemToArray(nodeInfo, info) < 0) return -1; + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(info, "nodePort", pNode->nodePort)); + TAOS_CHECK_RETURN(tjsonAddStringToObject(info, "nodeFqdn", pNode->nodeFqdn)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(info, "nodeId", pNode->nodeId)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(info, "clusterId", pNode->clusterId)); + TAOS_CHECK_RETURN(tjsonAddStringToObject(info, "isReplica", vnodeRoleToStr(pNode->nodeRole))); + TAOS_CHECK_RETURN(tjsonAddItemToArray(nodeInfo, info)); vDebug("vgId:%d, encode config, replica:%d ep:%s:%u dnode:%d", pCfg->vgId, i, pNode->nodeFqdn, pNode->nodePort, pNode->nodeId); } @@ -191,50 +197,50 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) { int32_t code; tjsonGetNumberValue(pJson, "vgId", pCfg->vgId, code); - if (code < 0) return -1; - if (tjsonGetStringValue(pJson, "dbname", pCfg->dbname) < 0) return -1; + if (code) return code; + if ((code = tjsonGetStringValue(pJson, "dbname", pCfg->dbname))) return code; tjsonGetNumberValue(pJson, "dbId", pCfg->dbId, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "szPage", pCfg->szPage, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "szCache", pCfg->szCache, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "cacheLast", pCfg->cacheLast, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "cacheLastSize", pCfg->cacheLastSize, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "szBuf", pCfg->szBuf, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "isHeap", pCfg->isHeap, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "isWeak", pCfg->isWeak, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "isTsma", pCfg->isTsma, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "isRsma", pCfg->isRsma, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "precision", pCfg->tsdbCfg.precision, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "update", pCfg->tsdbCfg.update, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "compression", pCfg->tsdbCfg.compression, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "slLevel", pCfg->tsdbCfg.slLevel, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "daysPerFile", pCfg->tsdbCfg.days, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "minRows", pCfg->tsdbCfg.minRows, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "maxRows", pCfg->tsdbCfg.maxRows, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "keep0", pCfg->tsdbCfg.keep0, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "keep1", pCfg->tsdbCfg.keep1, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "keep2", pCfg->tsdbCfg.keep2, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "keepTimeOffset", pCfg->tsdbCfg.keepTimeOffset, code); - if (code < 0) return -1; + if (code) return code; SJson *pNodeRetentions = tjsonGetObjectItem(pJson, "retentions"); int32_t nRetention = tjsonGetArraySize(pNodeRetentions); if (nRetention > TSDB_RETENTION_MAX) { @@ -244,52 +250,54 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) { SJson *pNodeRetention = tjsonGetArrayItem(pNodeRetentions, i); ASSERT(pNodeRetention != NULL); tjsonGetNumberValue(pNodeRetention, "freq", (pCfg->tsdbCfg.retentions)[i].freq, code); + if (code) return code; tjsonGetNumberValue(pNodeRetention, "freqUnit", (pCfg->tsdbCfg.retentions)[i].freqUnit, code); + if (code) return code; tjsonGetNumberValue(pNodeRetention, "keep", (pCfg->tsdbCfg.retentions)[i].keep, code); + if (code) return code; tjsonGetNumberValue(pNodeRetention, "keepUnit", (pCfg->tsdbCfg.retentions)[i].keepUnit, code); + if (code) return code; } tjsonGetNumberValue(pJson, "tsdb.encryptAlgorithm", pCfg->tsdbCfg.encryptAlgorithm, code); - if (code < 0) return -1; + if (code) return code; #if defined(TD_ENTERPRISE) if (pCfg->tsdbCfg.encryptAlgorithm == DND_CA_SM4) { if (tsEncryptKey[0] == 0) { - terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; - return -1; + return terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; } else { strncpy(pCfg->tsdbCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN); } } #endif tjsonGetNumberValue(pJson, "wal.vgId", pCfg->walCfg.vgId, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.fsyncPeriod", pCfg->walCfg.fsyncPeriod, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.retentionPeriod", pCfg->walCfg.retentionPeriod, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.rollPeriod", pCfg->walCfg.rollPeriod, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.retentionSize", pCfg->walCfg.retentionSize, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.segSize", pCfg->walCfg.segSize, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.level", pCfg->walCfg.level, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.clearFiles", pCfg->walCfg.clearFiles, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "wal.encryptAlgorithm", pCfg->walCfg.encryptAlgorithm, code); - if (code < 0) return -1; + if (code) return code; #if defined(TD_ENTERPRISE) if (pCfg->walCfg.encryptAlgorithm == DND_CA_SM4) { if (tsEncryptKey[0] == 0) { - terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; - return -1; + return terrno = TSDB_CODE_DNODE_INVALID_ENCRYPTKEY; } else { strncpy(pCfg->walCfg.encryptKey, tsEncryptKey, ENCRYPT_KEY_LEN); } } #endif tjsonGetNumberValue(pJson, "tdbEncryptAlgorithm", pCfg->tdbEncryptAlgorithm, code); - if (code < 0) return -1; + if (code) return code; #if defined(TD_ENTERPRISE) if (pCfg->tdbEncryptAlgorithm == DND_CA_SM4) { if (tsEncryptKey[0] == 0) { @@ -303,35 +311,35 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) { tjsonGetNumberValue(pJson, "sstTrigger", pCfg->sttTrigger, code); if (code < 0) pCfg->sttTrigger = TSDB_DEFAULT_SST_TRIGGER; tjsonGetNumberValue(pJson, "hashBegin", pCfg->hashBegin, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "hashEnd", pCfg->hashEnd, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "hashChange", pCfg->hashChange, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "hashMethod", pCfg->hashMethod, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "hashPrefix", pCfg->hashPrefix, code); if (code < 0) pCfg->hashPrefix = TSDB_DEFAULT_HASH_PREFIX; tjsonGetNumberValue(pJson, "hashSuffix", pCfg->hashSuffix, code); if (code < 0) pCfg->hashSuffix = TSDB_DEFAULT_HASH_SUFFIX; tjsonGetNumberValue(pJson, "syncCfg.replicaNum", pCfg->syncCfg.replicaNum, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "syncCfg.myIndex", pCfg->syncCfg.myIndex, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "syncCfg.changeVersion", pCfg->syncCfg.changeVersion, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "vndStats.stables", pCfg->vndStats.numOfSTables, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "vndStats.ctables", pCfg->vndStats.numOfCTables, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "vndStats.ntables", pCfg->vndStats.numOfNTables, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "vndStats.timeseries", pCfg->vndStats.numOfTimeSeries, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "vndStats.ntimeseries", pCfg->vndStats.numOfNTimeSeries, code); - if (code < 0) return -1; + if (code) return code; SJson *nodeInfo = tjsonGetObjectItem(pJson, "syncCfg.nodeInfo"); int arraySize = tjsonGetArraySize(nodeInfo); @@ -344,15 +352,15 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) { SNodeInfo *pNode = &pCfg->syncCfg.nodeInfo[i]; if (info == NULL) return -1; tjsonGetNumberValue(info, "nodePort", pNode->nodePort, code); - if (code < 0) return -1; + if (code) return code; tjsonGetStringValue(info, "nodeFqdn", pNode->nodeFqdn); tjsonGetNumberValue(info, "nodeId", pNode->nodeId, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(info, "clusterId", pNode->clusterId, code); - if (code < 0) return -1; + if (code) return code; char role[10] = {0}; code = tjsonGetStringValue(info, "isReplica", role); - if (code < 0) return -1; + if (code) return code; if (strlen(role) != 0) { pNode->nodeRole = vnodeStrToRole(role); } else { diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c index 12b26a4b26..96fb461188 100644 --- a/source/dnode/vnode/src/vnd/vnodeCommit.c +++ b/source/dnode/vnode/src/vnd/vnodeCommit.c @@ -125,20 +125,16 @@ int vnodeBegin(SVnode *pVnode) { TSDB_CHECK_CODE(code, lino, _exit); // begin meta - if (metaBegin(pVnode->pMeta, META_BEGIN_HEAP_BUFFERPOOL) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + code = metaBegin(pVnode->pMeta, META_BEGIN_HEAP_BUFFERPOOL); + TSDB_CHECK_CODE(code, lino, _exit); // begin tsdb - if (tsdbBegin(pVnode->pTsdb) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + code = tsdbBegin(pVnode->pTsdb); + TSDB_CHECK_CODE(code, lino, _exit); // begin sma - if (VND_IS_RSMA(pVnode) && smaBegin(pVnode->pSma) < 0) { - code = terrno; + if (VND_IS_RSMA(pVnode)) { + code = smaBegin(pVnode->pSma); TSDB_CHECK_CODE(code, lino, _exit); } @@ -171,54 +167,41 @@ int vnodeShouldCommit(SVnode *pVnode, bool atExit) { } int vnodeSaveInfo(const char *dir, const SVnodeInfo *pInfo) { + int32_t code = 0; + int32_t lino; char fname[TSDB_FILENAME_LEN]; - TdFilePtr pFile; - char *data; + TdFilePtr pFile = NULL; + char *data = NULL; snprintf(fname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME_TMP); - // encode info - data = NULL; - - if (vnodeEncodeInfo(pInfo, &data) < 0) { - vError("failed to encode json info."); - return -1; - } + code = vnodeEncodeInfo(pInfo, &data); + TSDB_CHECK_CODE(code, lino, _exit); // save info to a vnode_tmp.json pFile = taosOpenFile(fname, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC | TD_FILE_WRITE_THROUGH); if (pFile == NULL) { - vError("failed to open info file:%s for write:%s", fname, terrstr()); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } if (taosWriteFile(pFile, data, strlen(data)) < 0) { - vError("failed to write info file:%s error:%s", fname, terrstr()); - terrno = TAOS_SYSTEM_ERROR(errno); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } if (taosFsyncFile(pFile) < 0) { - vError("failed to fsync info file:%s error:%s", fname, terrstr()); - terrno = TAOS_SYSTEM_ERROR(errno); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } - taosCloseFile(&pFile); - - // free info binary - taosMemoryFree(data); - - vInfo("vgId:%d, vnode info is saved, fname:%s replica:%d selfIndex:%d changeVersion:%d", pInfo->config.vgId, fname, - pInfo->config.syncCfg.replicaNum, pInfo->config.syncCfg.myIndex, pInfo->config.syncCfg.changeVersion); - - return 0; - -_err: +_exit: + if (code) { + vError("vgId:%d %s failed at %s:%d since %s", pInfo->config.vgId, __func__, __FILE__, lino, tstrerror(code)); + } else { + vInfo("vgId:%d, vnode info is saved, fname:%s replica:%d selfIndex:%d changeVersion:%d", pInfo->config.vgId, fname, + pInfo->config.syncCfg.replicaNum, pInfo->config.syncCfg.myIndex, pInfo->config.syncCfg.changeVersion); + } taosCloseFile(&pFile); taosMemoryFree(data); - return -1; + return code; } int vnodeCommitInfo(const char *dir) { @@ -229,8 +212,7 @@ int vnodeCommitInfo(const char *dir) { snprintf(tfname, TSDB_FILENAME_LEN, "%s%s%s", dir, TD_DIRSEP, VND_INFO_FNAME_TMP); if (taosRenameFile(tfname, fname) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + return terrno = TAOS_SYSTEM_ERROR(errno); } vInfo("vnode info is committed, dir:%s", dir); @@ -238,6 +220,8 @@ int vnodeCommitInfo(const char *dir) { } int vnodeLoadInfo(const char *dir, SVnodeInfo *pInfo) { + int32_t code = 0; + int32_t lino; char fname[TSDB_FILENAME_LEN]; TdFilePtr pFile = NULL; char *pData = NULL; @@ -248,44 +232,35 @@ int vnodeLoadInfo(const char *dir, SVnodeInfo *pInfo) { // read info pFile = taosOpenFile(fname, TD_FILE_READ); if (pFile == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } if (taosFStatFile(pFile, &size, NULL) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } pData = taosMemoryMalloc(size + 1); if (pData == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); } if (taosReadFile(pFile, pData, size) < 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } pData[size] = '\0'; - taosCloseFile(&pFile); - // decode info - if (vnodeDecodeInfo(pData, pInfo) < 0) { - taosMemoryFree(pData); - return -1; + code = vnodeDecodeInfo(pData, pInfo); + TSDB_CHECK_CODE(code, lino, _exit); + +_exit: + if (code) { + vError("vgId:%d %s failed at %s:%d since %s", pInfo->config.vgId, __func__, __FILE__, lino, tstrerror(code)); } - taosMemoryFree(pData); - - return 0; - -_err: taosCloseFile(&pFile); - taosMemoryFree(pData); - return -1; + return code; } static int32_t vnodePrepareCommit(SVnode *pVnode, SCommitInfo *pInfo) { @@ -297,7 +272,8 @@ static int32_t vnodePrepareCommit(SVnode *pVnode, SCommitInfo *pInfo) { // wait last commit task vnodeAWait(&pVnode->commitTask); - if (syncNodeGetConfig(pVnode->sync, &pVnode->config.syncCfg) != 0) goto _exit; + code = syncNodeGetConfig(pVnode->sync, &pVnode->config.syncCfg); + TSDB_CHECK_CODE(code, lino, _exit); pVnode->state.commitTerm = pVnode->state.applyTerm; @@ -312,17 +288,16 @@ static int32_t vnodePrepareCommit(SVnode *pVnode, SCommitInfo *pInfo) { vnodeGetPrimaryDir(pVnode->path, pVnode->diskPrimary, pVnode->pTfs, dir, TSDB_FILENAME_LEN); vDebug("vgId:%d, save config while prepare commit", TD_VID(pVnode)); - if (vnodeSaveInfo(dir, &pInfo->info) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + code = vnodeSaveInfo(dir, &pInfo->info); + TSDB_CHECK_CODE(code, lino, _exit); tsdbPreCommit(pVnode->pTsdb); - metaPrepareAsyncCommit(pVnode->pMeta); + code = metaPrepareAsyncCommit(pVnode->pMeta); + TSDB_CHECK_CODE(code, lino, _exit); code = smaPrepareAsyncCommit(pVnode->pSma); - if (code) goto _exit; + TSDB_CHECK_CODE(code, lino, _exit); taosThreadMutexLock(&pVnode->mutex); ASSERT(pVnode->onCommit == NULL); @@ -459,10 +434,8 @@ static int vnodeCommitImpl(SCommitInfo *pInfo) { } // commit info - if (vnodeCommitInfo(dir) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + code = vnodeCommitInfo(dir); + TSDB_CHECK_CODE(code, lino, _exit); code = tsdbCommitCommit(pVnode->pTsdb); TSDB_CHECK_CODE(code, lino, _exit); @@ -472,10 +445,8 @@ static int vnodeCommitImpl(SCommitInfo *pInfo) { TSDB_CHECK_CODE(code, lino, _exit); } - if (metaFinishCommit(pVnode->pMeta, pInfo->txn) < 0) { - code = terrno; - TSDB_CHECK_CODE(code, lino, _exit); - } + code = metaFinishCommit(pVnode->pMeta, pInfo->txn); + TSDB_CHECK_CODE(code, lino, _exit); pVnode->state.committed = pInfo->info.state.committed; @@ -492,7 +463,7 @@ _exit: } else { vInfo("vgId:%d, commit end", TD_VID(pVnode)); } - return 0; + return code; } bool vnodeShouldRollback(SVnode *pVnode) { @@ -514,15 +485,15 @@ void vnodeRollback(SVnode *pVnode) { offset = strlen(tFName); snprintf(tFName + offset, TSDB_FILENAME_LEN - offset - 1, "%s%s", TD_DIRSEP, VND_INFO_FNAME_TMP); - (void)taosRemoveFile(tFName); + TAOS_UNUSED(taosRemoveFile(tFName)); } static int vnodeEncodeState(const void *pObj, SJson *pJson) { const SVState *pState = (SVState *)pObj; - if (tjsonAddIntegerToObject(pJson, "commit version", pState->committed) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "commit ID", pState->commitID) < 0) return -1; - if (tjsonAddIntegerToObject(pJson, "commit term", pState->commitTerm) < 0) return -1; + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "commit version", pState->committed)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "commit ID", pState->commitID)); + TAOS_CHECK_RETURN(tjsonAddIntegerToObject(pJson, "commit term", pState->commitTerm)); return 0; } @@ -532,70 +503,67 @@ static int vnodeDecodeState(const SJson *pJson, void *pObj) { int32_t code; tjsonGetNumberValue(pJson, "commit version", pState->committed, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "commit ID", pState->commitID, code); - if (code < 0) return -1; + if (code) return code; tjsonGetNumberValue(pJson, "commit term", pState->commitTerm, code); - if (code < 0) return -1; + if (code) return code; return 0; } static int vnodeEncodeInfo(const SVnodeInfo *pInfo, char **ppData) { - SJson *pJson; - char *pData; - - *ppData = NULL; + int32_t code = 0; + int32_t lino; + SJson *pJson = NULL; + char *pData = NULL; pJson = tjsonCreateObject(); if (pJson == NULL) { - return -1; + TSDB_CHECK_CODE(code = terrno, lino, _exit); } - if (tjsonAddObject(pJson, "config", vnodeEncodeConfig, (void *)&pInfo->config) < 0) { - goto _err; - } + code = tjsonAddObject(pJson, "config", vnodeEncodeConfig, (void *)&pInfo->config); + TSDB_CHECK_CODE(code, lino, _exit); - if (tjsonAddObject(pJson, "state", vnodeEncodeState, (void *)&pInfo->state) < 0) { - goto _err; - } + code = tjsonAddObject(pJson, "state", vnodeEncodeState, (void *)&pInfo->state); + TSDB_CHECK_CODE(code, lino, _exit); pData = tjsonToString(pJson); if (pData == NULL) { - goto _err; + TSDB_CHECK_CODE(code = terrno, lino, _exit); } tjsonDelete(pJson); - *ppData = pData; - return 0; - -_err: - tjsonDelete(pJson); - return -1; +_exit: + if (code) { + tjsonDelete(pJson); + *ppData = NULL; + } else { + *ppData = pData; + } + return code; } int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo) { - SJson *pJson = NULL; + int32_t code = 0; + int32_t lino; + SJson *pJson = NULL; pJson = tjsonParse(pData); if (pJson == NULL) { + TSDB_CHECK_CODE(code = TSDB_CODE_INVALID_DATA_FMT, lino, _exit); return -1; } - if (tjsonToObject(pJson, "config", vnodeDecodeConfig, (void *)&pInfo->config) < 0) { - goto _err; - } + code = tjsonToObject(pJson, "config", vnodeDecodeConfig, (void *)&pInfo->config); + TSDB_CHECK_CODE(code, lino, _exit); - if (tjsonToObject(pJson, "state", vnodeDecodeState, (void *)&pInfo->state) < 0) { - goto _err; - } + code = tjsonToObject(pJson, "state", vnodeDecodeState, (void *)&pInfo->state); + TSDB_CHECK_CODE(code, lino, _exit); +_exit: tjsonDelete(pJson); - - return 0; - -_err: - tjsonDelete(pJson); - return -1; + return code; } diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index a050734cb9..75ba2be100 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -17,20 +17,19 @@ #include "vnd.h" static int32_t vnodeExtractSnapInfoDiff(void *buf, int32_t bufLen, TFileSetRangeArray **ppRanges) { - int32_t code = -1; + int32_t code = 0; STsdbFSetPartList *pList = tsdbFSetPartListCreate(); if (pList == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; + code = terrno; goto _out; } - if (tDeserializeTsdbFSetPartList(buf, bufLen, pList) < 0) { - terrno = TSDB_CODE_INVALID_DATA_FMT; - goto _out; - } - if (tsdbFSetPartListToRangeDiff(pList, ppRanges) < 0) { - goto _out; - } - code = 0; + + code = tDeserializeTsdbFSetPartList(buf, bufLen, pList); + if (code) goto _out; + + code = tsdbFSetPartListToRangeDiff(pList, ppRanges); + if (code) goto _out; + _out: tsdbFSetPartListDestroy(&pList); return code; @@ -48,29 +47,29 @@ struct SVSnapReader { int8_t metaDone; SMetaSnapReader *pMetaReader; // tsdb - int8_t tsdbDone; + int8_t tsdbDone; TFileSetRangeArray *pRanges; - STsdbSnapReader *pTsdbReader; + STsdbSnapReader *pTsdbReader; // tsdb raw int8_t tsdbRAWDone; STsdbSnapRAWReader *pTsdbRAWReader; // tq - int8_t tqHandleDone; - STqSnapReader *pTqSnapReader; - int8_t tqOffsetDone; - STqSnapReader *pTqOffsetReader; - int8_t tqCheckInfoDone; - STqSnapReader *pTqCheckInfoReader; + int8_t tqHandleDone; + STqSnapReader *pTqSnapReader; + int8_t tqOffsetDone; + STqSnapReader *pTqOffsetReader; + int8_t tqCheckInfoDone; + STqSnapReader *pTqCheckInfoReader; // stream int8_t streamTaskDone; SStreamTaskReader *pStreamTaskReader; int8_t streamStateDone; SStreamStateReader *pStreamStateReader; // rsma - int8_t rsmaDone; + int8_t rsmaDone; TFileSetRangeArray *pRsmaRanges[TSDB_RETENTION_L2]; - SRSmaSnapReader *pRsmaReader; + SRSmaSnapReader *pRsmaReader; }; static TFileSetRangeArray **vnodeSnapReaderGetTsdbRanges(SVSnapReader *pReader, int32_t tsdbTyp) { @@ -88,14 +87,15 @@ static TFileSetRangeArray **vnodeSnapReaderGetTsdbRanges(SVSnapReader *pReader, } static int32_t vnodeSnapReaderDealWithSnapInfo(SVSnapReader *pReader, SSnapshotParam *pParam) { + int32_t code = 0; SVnode *pVnode = pReader->pVnode; - int32_t code = -1; if (pParam->data) { // decode SSyncTLV *datHead = (void *)pParam->data; if (datHead->typ != TDMT_SYNC_PREP_SNAPSHOT_REPLY) { - terrno = TSDB_CODE_INVALID_DATA_FMT; + code = TSDB_CODE_INVALID_DATA_FMT; + terrno = code; goto _out; } @@ -116,21 +116,25 @@ static int32_t vnodeSnapReaderDealWithSnapInfo(SVSnapReader *pReader, SSnapshotP ppRanges = vnodeSnapReaderGetTsdbRanges(pReader, subField->typ); if (ppRanges == NULL) { vError("vgId:%d, unexpected subfield type in snapshot param. subtyp:%d", TD_VID(pVnode), subField->typ); + code = TSDB_CODE_INVALID_DATA_FMT; goto _out; } - if (vnodeExtractSnapInfoDiff(buf, bufLen, ppRanges) < 0) { + code = vnodeExtractSnapInfoDiff(buf, bufLen, ppRanges); + if (code) { vError("vgId:%d, failed to get range diff since %s", TD_VID(pVnode), terrstr()); goto _out; } } break; case SNAP_DATA_RAW: { - if (tDeserializeTsdbRepOpts(buf, bufLen, &tsdbOpts) < 0) { + code = tDeserializeTsdbRepOpts(buf, bufLen, &tsdbOpts); + if (code) { vError("vgId:%d, failed to deserialize tsdb rep opts since %s", TD_VID(pVnode), terrstr()); goto _out; } } break; default: vError("vgId:%d, unexpected subfield type of snap info. typ:%d", TD_VID(pVnode), subField->typ); + code = TSDB_CODE_INVALID_DATA_FMT; goto _out; } } @@ -147,7 +151,7 @@ static int32_t vnodeSnapReaderDealWithSnapInfo(SVSnapReader *pReader, SSnapshotP vInfo("vgId:%d, vnode snap writer enabled replication mode: %s", TD_VID(pVnode), (pReader->tsdbDone ? "raw" : "normal")); } - code = 0; + _out: return code; } @@ -160,42 +164,43 @@ int32_t vnodeSnapReaderOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapReader pReader = (SVSnapReader *)taosMemoryCalloc(1, sizeof(*pReader)); if (pReader == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + code = TSDB_CODE_OUT_OF_MEMORY; + goto _exit; } pReader->pVnode = pVnode; pReader->sver = sver; pReader->ever = ever; // snapshot info - if (vnodeSnapReaderDealWithSnapInfo(pReader, pParam) < 0) { - goto _err; - } + code = vnodeSnapReaderDealWithSnapInfo(pReader, pParam); + if (code) goto _exit; // open tsdb snapshot raw reader if (!pReader->tsdbRAWDone) { ASSERT(pReader->sver == 0); code = tsdbSnapRAWReaderOpen(pVnode->pTsdb, ever, SNAP_DATA_RAW, &pReader->pTsdbRAWReader); - if (code) goto _err; + if (code) goto _exit; } // check snapshot ever SSnapshot snapshot = {0}; - vnodeGetSnapshot(pVnode, &snapshot); + code = vnodeGetSnapshot(pVnode, &snapshot); + if (code) goto _exit; if (ever != snapshot.lastApplyIndex) { vError("vgId:%d, abort reader open due to vnode snapshot changed. ever:%" PRId64 ", commit ver:%" PRId64, TD_VID(pVnode), ever, snapshot.lastApplyIndex); code = TSDB_CODE_SYN_INTERNAL_ERROR; - goto _err; + goto _exit; } - vInfo("vgId:%d, vnode snapshot reader opened, sver:%" PRId64 " ever:%" PRId64, TD_VID(pVnode), sver, ever); - *ppReader = pReader; - return code; - -_err: - vError("vgId:%d, vnode snapshot reader open failed since %s", TD_VID(pVnode), tstrerror(code)); - *ppReader = NULL; +_exit: + if (code) { + vError("vgId:%d, vnode snapshot reader open failed since %s", TD_VID(pVnode), tstrerror(code)); + *ppReader = NULL; + } else { + vInfo("vgId:%d, vnode snapshot reader opened, sver:%" PRId64 " ever:%" PRId64, TD_VID(pVnode), sver, ever); + *ppReader = pReader; + } return code; } @@ -245,6 +250,7 @@ void vnodeSnapReaderClose(SVSnapReader *pReader) { int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) { int32_t code = 0; + int32_t lino; SVnode *pVnode = pReader->pVnode; int32_t vgId = TD_VID(pReader->pVnode); @@ -261,31 +267,28 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) TdFilePtr pFile = taosOpenFile(fName, TD_FILE_READ); if (NULL == pFile) { code = TAOS_SYSTEM_ERROR(errno); - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } int64_t size; if (taosFStatFile(pFile, &size, NULL) < 0) { - code = TAOS_SYSTEM_ERROR(errno); taosCloseFile(&pFile); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } *ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + size + 1); if (*ppData == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; taosCloseFile(&pFile); - goto _err; + TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); } ((SSnapDataHdr *)(*ppData))->type = SNAP_DATA_CFG; ((SSnapDataHdr *)(*ppData))->size = size + 1; ((SSnapDataHdr *)(*ppData))->data[size] = '\0'; if (taosReadFile(pFile, ((SSnapDataHdr *)(*ppData))->data, size) < 0) { - code = TAOS_SYSTEM_ERROR(errno); taosMemoryFree(*ppData); taosCloseFile(&pFile); - goto _err; + TSDB_CHECK_CODE(code = TAOS_SYSTEM_ERROR(errno), lino, _exit); } taosCloseFile(&pFile); @@ -299,20 +302,18 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) // open reader if not if (pReader->pMetaReader == NULL) { code = metaSnapReaderOpen(pReader->pVnode->pMeta, pReader->sver, pReader->ever, &pReader->pMetaReader); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = metaSnapRead(pReader->pMetaReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->metaDone = 1; - code = metaSnapReaderClose(&pReader->pMetaReader); - if (code) goto _err; - } + pReader->metaDone = 1; + code = metaSnapReaderClose(&pReader->pMetaReader); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -322,20 +323,17 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (pReader->pTsdbReader == NULL) { code = tsdbSnapReaderOpen(pReader->pVnode->pTsdb, pReader->sver, pReader->ever, SNAP_DATA_TSDB, pReader->pRanges, &pReader->pTsdbReader); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tsdbSnapRead(pReader->pTsdbReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->tsdbDone = 1; - code = tsdbSnapReaderClose(&pReader->pTsdbReader); - if (code) goto _err; - } + pReader->tsdbDone = 1; + code = tsdbSnapReaderClose(&pReader->pTsdbReader); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -344,20 +342,17 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (pReader->pTsdbRAWReader == NULL) { ASSERT(pReader->sver == 0); code = tsdbSnapRAWReaderOpen(pReader->pVnode->pTsdb, pReader->ever, SNAP_DATA_RAW, &pReader->pTsdbRAWReader); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tsdbSnapRAWRead(pReader->pTsdbRAWReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->tsdbRAWDone = 1; - code = tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); - if (code) goto _err; - } + pReader->tsdbRAWDone = 1; + code = tsdbSnapRAWReaderClose(&pReader->pTsdbRAWReader); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -365,59 +360,53 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) vInfo("vgId:%d tq transform start", vgId); if (!pReader->tqHandleDone) { if (pReader->pTqSnapReader == NULL) { - code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_HANDLE, &pReader->pTqSnapReader); - if (code < 0) goto _err; + code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_HANDLE, + &pReader->pTqSnapReader); + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapRead(pReader->pTqSnapReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->tqHandleDone = 1; - code = tqSnapReaderClose(&pReader->pTqSnapReader); - if (code) goto _err; - } + pReader->tqHandleDone = 1; + code = tqSnapReaderClose(&pReader->pTqSnapReader); + TSDB_CHECK_CODE(code, lino, _exit); } } if (!pReader->tqCheckInfoDone) { if (pReader->pTqCheckInfoReader == NULL) { - code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_CHECKINFO, &pReader->pTqCheckInfoReader); - if (code < 0) goto _err; + code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_CHECKINFO, + &pReader->pTqCheckInfoReader); + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapRead(pReader->pTqCheckInfoReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->tqCheckInfoDone = 1; - code = tqSnapReaderClose(&pReader->pTqCheckInfoReader); - if (code) goto _err; - } + pReader->tqCheckInfoDone = 1; + code = tqSnapReaderClose(&pReader->pTqCheckInfoReader); + TSDB_CHECK_CODE(code, lino, _exit); } } if (!pReader->tqOffsetDone) { if (pReader->pTqOffsetReader == NULL) { - code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_OFFSET, &pReader->pTqOffsetReader); - if (code < 0) goto _err; + code = tqSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->ever, SNAP_DATA_TQ_OFFSET, + &pReader->pTqOffsetReader); + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapRead(pReader->pTqOffsetReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->tqOffsetDone = 1; - code = tqSnapReaderClose(&pReader->pTqOffsetReader); - if (code) goto _err; - } + pReader->tqOffsetDone = 1; + code = tqSnapReaderClose(&pReader->pTqOffsetReader); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -426,28 +415,19 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (!pReader->streamTaskDone) { if (pReader->pStreamTaskReader == NULL) { code = streamTaskSnapReaderOpen(pReader->pVnode->pTq, pReader->sver, pReader->sver, &pReader->pStreamTaskReader); - if (code) { - vError("vgId:%d open streamtask snapshot reader failed, code:%s", vgId, tstrerror(code)); - goto _err; - } + TSDB_CHECK_CODE(code, lino, _exit); } code = streamTaskSnapRead(pReader->pStreamTaskReader, ppData); - if (code) { - vError("vgId:%d error happens during read data from streatask snapshot, code:%s", vgId, tstrerror(code)); - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + vInfo("vgId:%d no streamTask snapshot", vgId); + goto _exit; } else { - if (*ppData) { - vInfo("vgId:%d no streamTask snapshot", vgId); - goto _exit; - } else { - pReader->streamTaskDone = 1; - code = streamTaskSnapReaderClose(pReader->pStreamTaskReader); - if (code) { - goto _err; - } - pReader->pStreamTaskReader = NULL; - } + pReader->streamTaskDone = 1; + code = streamTaskSnapReaderClose(pReader->pStreamTaskReader); + TSDB_CHECK_CODE(code, lino, _exit); + pReader->pStreamTaskReader = NULL; } } if (!pReader->streamStateDone) { @@ -457,21 +437,18 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (code) { pReader->streamStateDone = 1; pReader->pStreamStateReader = NULL; - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } } code = streamStateSnapRead(pReader->pStreamStateReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->streamStateDone = 1; - code = streamStateSnapReaderClose(pReader->pStreamStateReader); - if (code) goto _err; - pReader->pStreamStateReader = NULL; - } + pReader->streamStateDone = 1; + code = streamStateSnapReaderClose(pReader->pStreamStateReader); + TSDB_CHECK_CODE(code, lino, _exit); + pReader->pStreamStateReader = NULL; } } @@ -480,20 +457,17 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) // open if not if (pReader->pRsmaReader == NULL) { code = rsmaSnapReaderOpen(pReader->pVnode->pSma, pReader->sver, pReader->ever, &pReader->pRsmaReader); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = rsmaSnapRead(pReader->pRsmaReader, ppData); - if (code) { - goto _err; + TSDB_CHECK_CODE(code, lino, _exit); + if (*ppData) { + goto _exit; } else { - if (*ppData) { - goto _exit; - } else { - pReader->rsmaDone = 1; - code = rsmaSnapReaderClose(&pReader->pRsmaReader); - if (code) goto _err; - } + pReader->rsmaDone = 1; + code = rsmaSnapReaderClose(&pReader->pRsmaReader); + TSDB_CHECK_CODE(code, lino, _exit); } } @@ -501,21 +475,21 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) *nData = 0; _exit: - if (*ppData) { - SSnapDataHdr *pHdr = (SSnapDataHdr *)(*ppData); - - pReader->index++; - *nData = sizeof(SSnapDataHdr) + pHdr->size; - pHdr->index = pReader->index; - vDebug("vgId:%d, vnode snapshot read data, index:%" PRId64 " type:%d blockLen:%d ", vgId, pReader->index, - pHdr->type, *nData); + if (code) { + vError("vgId:%d, vnode snapshot read failed at %s:%d since %s", vgId, __FILE__, lino, tstrerror(code)); } else { - vInfo("vgId:%d, vnode snapshot read data end, index:%" PRId64, vgId, pReader->index); - } - return code; + if (*ppData) { + SSnapDataHdr *pHdr = (SSnapDataHdr *)(*ppData); -_err: - vError("vgId:%d, vnode snapshot read failed since %s", vgId, tstrerror(code)); + pReader->index++; + *nData = sizeof(SSnapDataHdr) + pHdr->size; + pHdr->index = pReader->index; + vDebug("vgId:%d, vnode snapshot read data, index:%" PRId64 " type:%d blockLen:%d ", vgId, pReader->index, + pHdr->type, *nData); + } else { + vInfo("vgId:%d, vnode snapshot read data end, index:%" PRId64, vgId, pReader->index); + } + } return code; } @@ -532,19 +506,19 @@ struct SVSnapWriter { SMetaSnapWriter *pMetaSnapWriter; // tsdb TFileSetRangeArray *pRanges; - STsdbSnapWriter *pTsdbSnapWriter; + STsdbSnapWriter *pTsdbSnapWriter; // tsdb raw STsdbSnapRAWWriter *pTsdbSnapRAWWriter; // tq - STqSnapWriter *pTqSnapHandleWriter; - STqSnapWriter *pTqSnapOffsetWriter; - STqSnapWriter *pTqSnapCheckInfoWriter; + STqSnapWriter *pTqSnapHandleWriter; + STqSnapWriter *pTqSnapOffsetWriter; + STqSnapWriter *pTqSnapCheckInfoWriter; // stream SStreamTaskWriter *pStreamTaskWriter; SStreamStateWriter *pStreamStateWriter; // rsma TFileSetRangeArray *pRsmaRanges[TSDB_RETENTION_L2]; - SRSmaSnapWriter *pRsmaSnapWriter; + SRSmaSnapWriter *pRsmaSnapWriter; }; TFileSetRangeArray **vnodeSnapWriterGetTsdbRanges(SVSnapWriter *pWriter, int32_t tsdbTyp) { @@ -563,18 +537,18 @@ TFileSetRangeArray **vnodeSnapWriterGetTsdbRanges(SVSnapWriter *pWriter, int32_t static int32_t vnodeSnapWriterDealWithSnapInfo(SVSnapWriter *pWriter, SSnapshotParam *pParam) { SVnode *pVnode = pWriter->pVnode; - int32_t code = -1; + int32_t code = 0; + int32_t lino; if (pParam->data) { SSyncTLV *datHead = (void *)pParam->data; if (datHead->typ != TDMT_SYNC_PREP_SNAPSHOT_REPLY) { - terrno = TSDB_CODE_INVALID_DATA_FMT; - goto _out; + TSDB_CHECK_CODE(code = TSDB_CODE_INVALID_DATA_FMT, lino, _exit); } STsdbRepOpts tsdbOpts = {0}; TFileSetRangeArray **ppRanges = NULL; - int32_t offset = 0; + int32_t offset = 0; while (offset + sizeof(SSyncTLV) < datHead->len) { SSyncTLV *subField = (void *)(datHead->val + offset); @@ -589,30 +563,30 @@ static int32_t vnodeSnapWriterDealWithSnapInfo(SVSnapWriter *pWriter, SSnapshotP ppRanges = vnodeSnapWriterGetTsdbRanges(pWriter, subField->typ); if (ppRanges == NULL) { vError("vgId:%d, unexpected subfield type in snapshot param. subtyp:%d", TD_VID(pVnode), subField->typ); - goto _out; - } - if (vnodeExtractSnapInfoDiff(buf, bufLen, ppRanges) < 0) { - vError("vgId:%d, failed to get range diff since %s", TD_VID(pVnode), terrstr()); - goto _out; + TSDB_CHECK_CODE(code = terrno, lino, _exit); } + + code = vnodeExtractSnapInfoDiff(buf, bufLen, ppRanges); + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_RAW: { - if (tDeserializeTsdbRepOpts(buf, bufLen, &tsdbOpts) < 0) { - vError("vgId:%d, failed to deserialize tsdb rep opts since %s", TD_VID(pVnode), terrstr()); - goto _out; - } + code = tDeserializeTsdbRepOpts(buf, bufLen, &tsdbOpts); + TSDB_CHECK_CODE(code, lino, _exit); } break; default: vError("vgId:%d, unexpected subfield type of snap info. typ:%d", TD_VID(pVnode), subField->typ); - goto _out; + TSDB_CHECK_CODE(code = TSDB_CODE_INVALID_DATA_FMT, lino, _exit); + goto _exit; } } vInfo("vgId:%d, vnode snap writer supported tsdb rep of format:%d", TD_VID(pVnode), tsdbOpts.format); } - code = 0; -_out: +_exit: + if (code) { + vError("vgId:%d %s failed at %s:%d since %s", TD_VID(pVnode), __func__, __FILE__, __LINE__, tstrerror(code)); + } return code; } @@ -634,6 +608,7 @@ static int32_t vnodeEnableBgTask(SVnode *pVnode) { int32_t vnodeSnapWriterOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapWriter **ppWriter) { int32_t code = 0; + int32_t lino; SVSnapWriter *pWriter = NULL; int64_t sver = pParam->start; int64_t ever = pParam->end; @@ -644,8 +619,7 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapWriter // alloc pWriter = (SVSnapWriter *)taosMemoryCalloc(1, sizeof(*pWriter)); if (pWriter == NULL) { - code = TSDB_CODE_OUT_OF_MEMORY; - goto _err; + TSDB_CHECK_CODE(code = TSDB_CODE_OUT_OF_MEMORY, lino, _exit); } pWriter->pVnode = pVnode; pWriter->sver = sver; @@ -655,19 +629,19 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapWriter pWriter->commitID = ++pVnode->state.commitID; // snapshot info - if (vnodeSnapWriterDealWithSnapInfo(pWriter, pParam) < 0) { - goto _err; + code = vnodeSnapWriterDealWithSnapInfo(pWriter, pParam); + TSDB_CHECK_CODE(code, lino, _exit); + +_exit: + if (code) { + vError("vgId:%d, vnode snapshot writer open failed since %s", TD_VID(pVnode), tstrerror(code)); + if (pWriter) taosMemoryFreeClear(pWriter); + *ppWriter = NULL; + } else { + vInfo("vgId:%d, vnode snapshot writer opened, sver:%" PRId64 " ever:%" PRId64 " commit id:%" PRId64, TD_VID(pVnode), + sver, ever, pWriter->commitID); + *ppWriter = pWriter; } - - vInfo("vgId:%d, vnode snapshot writer opened, sver:%" PRId64 " ever:%" PRId64 " commit id:%" PRId64, TD_VID(pVnode), - sver, ever, pWriter->commitID); - *ppWriter = pWriter; - return code; - -_err: - vError("vgId:%d, vnode snapshot writer open failed since %s", TD_VID(pVnode), tstrerror(code)); - if (pWriter) taosMemoryFreeClear(pWriter); - *ppWriter = NULL; return code; } @@ -785,14 +759,13 @@ _exit: static int32_t vnodeSnapWriteInfo(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { int32_t code = 0; + int32_t lino; SVnode *pVnode = pWriter->pVnode; SSnapDataHdr *pHdr = (SSnapDataHdr *)pData; // decode info - if (vnodeDecodeInfo(pHdr->data, &pWriter->info) < 0) { - code = TSDB_CODE_INVALID_MSG; - goto _exit; - } + code = vnodeDecodeInfo(pHdr->data, &pWriter->info); + TSDB_CHECK_CODE(code, lino, _exit); // change some value pWriter->info.state.commitID = pWriter->commitID; @@ -805,10 +778,8 @@ static int32_t vnodeSnapWriteInfo(SVSnapWriter *pWriter, uint8_t *pData, uint32_ pWriter->info.config = pVnode->config; pWriter->info.config.vndStats = vndStats; vDebug("vgId:%d, save config while write snapshot", pWriter->pVnode->config.vgId); - if (vnodeSaveInfo(dir, &pWriter->info) < 0) { - code = terrno; - goto _exit; - } + code = vnodeSaveInfo(dir, &pWriter->info); + TSDB_CHECK_CODE(code, lino, _exit); _exit: return code; @@ -816,6 +787,7 @@ _exit: int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { int32_t code = 0; + int32_t lino; SSnapDataHdr *pHdr = (SSnapDataHdr *)pData; SVnode *pVnode = pWriter->pVnode; @@ -824,7 +796,7 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { if (pHdr->index != pWriter->index + 1) { vError("vgId:%d, unexpected vnode snapshot msg. index:%" PRId64 ", expected index:%" PRId64, TD_VID(pVnode), pHdr->index, pWriter->index + 1); - return -1; + TSDB_CHECK_CODE(code = TSDB_CODE_INVALID_MSG, lino, _exit); } pWriter->index = pHdr->index; @@ -835,17 +807,17 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { switch (pHdr->type) { case SNAP_DATA_CFG: { code = vnodeSnapWriteInfo(pWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_META: { // meta if (pWriter->pMetaSnapWriter == NULL) { code = metaSnapWriterOpen(pVnode->pMeta, pWriter->sver, pWriter->ever, &pWriter->pMetaSnapWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = metaSnapWrite(pWriter->pMetaSnapWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_TSDB: case SNAP_DATA_DEL: { @@ -853,69 +825,69 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { if (pWriter->pTsdbSnapWriter == NULL) { code = tsdbSnapWriterOpen(pVnode->pTsdb, pWriter->sver, pWriter->ever, pWriter->pRanges, &pWriter->pTsdbSnapWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tsdbSnapWrite(pWriter->pTsdbSnapWriter, pHdr); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_RAW: { // tsdb if (pWriter->pTsdbSnapRAWWriter == NULL) { ASSERT(pWriter->sver == 0); code = tsdbSnapRAWWriterOpen(pVnode->pTsdb, pWriter->ever, &pWriter->pTsdbSnapRAWWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tsdbSnapRAWWrite(pWriter->pTsdbSnapRAWWriter, pHdr); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_TQ_HANDLE: { // tq handle if (pWriter->pTqSnapHandleWriter == NULL) { code = tqSnapWriterOpen(pVnode->pTq, pWriter->sver, pWriter->ever, &pWriter->pTqSnapHandleWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapHandleWrite(pWriter->pTqSnapHandleWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_TQ_CHECKINFO: { // tq checkinfo if (pWriter->pTqSnapCheckInfoWriter == NULL) { code = tqSnapWriterOpen(pVnode->pTq, pWriter->sver, pWriter->ever, &pWriter->pTqSnapCheckInfoWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapCheckInfoWrite(pWriter->pTqSnapCheckInfoWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_TQ_OFFSET: { // tq offset if (pWriter->pTqSnapOffsetWriter == NULL) { code = tqSnapWriterOpen(pVnode->pTq, pWriter->sver, pWriter->ever, &pWriter->pTqSnapOffsetWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = tqSnapOffsetWrite(pWriter->pTqSnapOffsetWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_STREAM_TASK: case SNAP_DATA_STREAM_TASK_CHECKPOINT: { if (pWriter->pStreamTaskWriter == NULL) { code = streamTaskSnapWriterOpen(pVnode->pTq, pWriter->sver, pWriter->ever, &pWriter->pStreamTaskWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = streamTaskSnapWrite(pWriter->pStreamTaskWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_STREAM_STATE_BACKEND: { if (pWriter->pStreamStateWriter == NULL) { code = streamStateSnapWriterOpen(pVnode->pTq, pWriter->sver, pWriter->ever, &pWriter->pStreamStateWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = streamStateSnapWrite(pWriter->pStreamStateWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; case SNAP_DATA_RSMA1: @@ -925,20 +897,19 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { if (pWriter->pRsmaSnapWriter == NULL) { code = rsmaSnapWriterOpen(pVnode->pSma, pWriter->sver, pWriter->ever, (void **)pWriter->pRsmaRanges, &pWriter->pRsmaSnapWriter); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } code = rsmaSnapWrite(pWriter->pRsmaSnapWriter, pData, nData); - if (code) goto _err; + TSDB_CHECK_CODE(code, lino, _exit); } break; default: break; } _exit: - return code; - -_err: - vError("vgId:%d, vnode snapshot write failed since %s, index:%" PRId64 " type:%d nData:%d", TD_VID(pVnode), - tstrerror(code), pHdr->index, pHdr->type, nData); + if (code) { + vError("vgId:%d, vnode snapshot write failed since %s, index:%" PRId64 " type:%d nData:%d", TD_VID(pVnode), + tstrerror(code), pHdr->index, pHdr->type, nData); + } return code; } diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 8f28871e3b..742d7e4f3f 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -387,7 +387,7 @@ static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { if (msgcb == NULL || msgcb->putToQueueFp == NULL) { rpcFreeCont(pMsg->pCont); pMsg->pCont = NULL; - return -1; + return TSDB_CODE_INVALID_PARA; } int32_t code = tmsgPutToQueue(msgcb, SYNC_RD_QUEUE, pMsg); @@ -400,13 +400,13 @@ static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { static int32_t vnodeSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { if (pMsg == NULL || pMsg->pCont == NULL) { - return -1; + return TSDB_CODE_INVALID_PARA; } if (msgcb == NULL || msgcb->putToQueueFp == NULL) { rpcFreeCont(pMsg->pCont); pMsg->pCont = NULL; - return -1; + return TSDB_CODE_INVALID_PARA; } int32_t code = tmsgPutToQueue(msgcb, SYNC_QUEUE, pMsg); @@ -485,8 +485,7 @@ static void vnodeSyncRollBackMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, SFsmCbMeta static int32_t vnodeSnapshotStartRead(const SSyncFSM *pFsm, void *pParam, void **ppReader) { SVnode *pVnode = pFsm->data; - int32_t code = vnodeSnapReaderOpen(pVnode, (SSnapshotParam *)pParam, (SVSnapReader **)ppReader); - return code; + return vnodeSnapReaderOpen(pVnode, (SSnapshotParam *)pParam, (SVSnapReader **)ppReader); } static void vnodeSnapshotStopRead(const SSyncFSM *pFsm, void *pReader) { @@ -496,8 +495,7 @@ static void vnodeSnapshotStopRead(const SSyncFSM *pFsm, void *pReader) { static int32_t vnodeSnapshotDoRead(const SSyncFSM *pFsm, void *pReader, void **ppBuf, int32_t *len) { SVnode *pVnode = pFsm->data; - int32_t code = vnodeSnapRead(pReader, (uint8_t **)ppBuf, len); - return code; + return vnodeSnapRead(pReader, (uint8_t **)ppBuf, len); } static int32_t vnodeSnapshotStartWrite(const SSyncFSM *pFsm, void *pParam, void **ppWriter) { @@ -514,8 +512,7 @@ static int32_t vnodeSnapshotStartWrite(const SSyncFSM *pFsm, void *pParam, void } } while (true); - int32_t code = vnodeSnapWriterOpen(pVnode, (SSnapshotParam *)pParam, (SVSnapWriter **)ppWriter); - return code; + return vnodeSnapWriterOpen(pVnode, (SSnapshotParam *)pParam, (SVSnapWriter **)ppWriter); } static int32_t vnodeSnapshotStopWrite(const SSyncFSM *pFsm, void *pWriter, bool isApply, SSnapshot *pSnapshot) { @@ -580,7 +577,7 @@ static void vnodeRestoreFinish(const SSyncFSM *pFsm, const SyncIndex commitIdx) if (pMeta->startInfo.startAllTasks == 1) { pMeta->startInfo.restartCount += 1; vDebug("vgId:%d in start tasks procedure, inc restartCounter by 1, remaining restart:%d", vgId, - pMeta->startInfo.restartCount); + pMeta->startInfo.restartCount); } else { pMeta->startInfo.startAllTasks = 1; streamMetaWUnLock(pMeta); @@ -636,7 +633,7 @@ static void vnodeBecomeLeader(const SSyncFSM *pFsm) { } } -static void vnodeBecomeAssignedLeader(const SSyncFSM* pFsm) { +static void vnodeBecomeAssignedLeader(const SSyncFSM *pFsm) { SVnode *pVnode = pFsm->data; vDebug("vgId:%d, become assigned leader", pVnode->config.vgId); if (pVnode->pTq) { @@ -662,12 +659,16 @@ static int32_t vnodeApplyQueueItems(const SSyncFSM *pFsm) { int32_t itemSize = tmsgGetQueueSize(&pVnode->msgCb, pVnode->config.vgId, APPLY_QUEUE); return itemSize; } else { - return -1; + return TSDB_CODE_INVALID_PARA; } } static SSyncFSM *vnodeSyncMakeFsm(SVnode *pVnode) { SSyncFSM *pFsm = taosMemoryCalloc(1, sizeof(SSyncFSM)); + if (pFsm == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; + } pFsm->data = pVnode; pFsm->FpCommitCb = vnodeSyncCommitMsg; pFsm->FpAppliedIndexCb = vnodeSyncAppliedIndex; @@ -724,7 +725,7 @@ int32_t vnodeSyncOpen(SVnode *pVnode, char *path, int32_t vnodeVersion) { pVnode->sync = syncOpen(&syncInfo, vnodeVersion); if (pVnode->sync <= 0) { vError("vgId:%d, failed to open sync since %s", pVnode->config.vgId, terrstr()); - return -1; + return terrno; } return 0; @@ -732,9 +733,10 @@ int32_t vnodeSyncOpen(SVnode *pVnode, char *path, int32_t vnodeVersion) { int32_t vnodeSyncStart(SVnode *pVnode) { vInfo("vgId:%d, start sync", pVnode->config.vgId); - if (syncStart(pVnode->sync) < 0) { - vError("vgId:%d, failed to start sync subsystem since %s", pVnode->config.vgId, terrstr()); - return -1; + int32_t code = syncStart(pVnode->sync); + if (code) { + vError("vgId:%d, failed to start sync subsystem since %s", pVnode->config.vgId, tstrerror(code)); + return code; } return 0; } diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index c7e654605b..b455e3355f 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -112,7 +112,7 @@ int32_t syncNodeGetConfig(int64_t rid, SSyncCfg* cfg) { if (pSyncNode == NULL) { sError("failed to acquire rid:%" PRId64 " of tsNodeReftId for pSyncNode", rid); - return -1; + return terrno; } *cfg = pSyncNode->raftCfg.cfg; @@ -2036,7 +2036,7 @@ void syncNodeBecomeAssignedLeader(SSyncNode* pSyncNode) { pSyncNode->hbrSlowNum = 0; // reset restoreFinish - //pSyncNode->restoreFinish = false; + // pSyncNode->restoreFinish = false; // state change pSyncNode->state = TAOS_SYNC_STATE_ASSIGNED_LEADER; @@ -2149,7 +2149,8 @@ int32_t syncNodeAssignedLeader2Leader(SSyncNode* pSyncNode) { SyncIndex lastIndex = pSyncNode->pLogStore->syncLogLastIndex(pSyncNode->pLogStore); sInfo("vgId:%d, become leader from assigned leader. term:%" PRId64 ", commit index:%" PRId64 "assigned commit index:%" PRId64 ", last index:%" PRId64, - pSyncNode->vgId, raftStoreGetTerm(pSyncNode), pSyncNode->commitIndex, pSyncNode->assignedCommitIndex, lastIndex); + pSyncNode->vgId, raftStoreGetTerm(pSyncNode), pSyncNode->commitIndex, pSyncNode->assignedCommitIndex, + lastIndex); return 0; } From bf03c2b3d8b013a5204b8af39b097961285b8bd5 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 22 Jul 2024 20:26:55 +0800 Subject: [PATCH 64/64] fix: tupleData --- source/libs/executor/src/executil.c | 3 +- tests/script/tsim/parser/select_with_tags.sim | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index c623e94a12..1042e6b30d 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1627,7 +1627,8 @@ static int32_t setSelectValueColumnInfo(SqlFunctionCtx* pCtx, int32_t numOfOutpu SHashObj* pSelectFuncs = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); for (int32_t i = 0; i < numOfOutput; ++i) { const char* pName = pCtx[i].pExpr->pExpr->_function.functionName; - if ((strcmp(pName, "_select_value") == 0) || (strcmp(pName, "_group_key") == 0)) { + if ((strcmp(pName, "_select_value") == 0) || (strcmp(pName, "_group_key") == 0) + || (strcmp(pName, "_group_const_value") == 0)) { pValCtx[num++] = &pCtx[i]; } else if (fmIsSelectFunc(pCtx[i].functionId)) { void* data = taosHashGet(pSelectFuncs, pName, strlen(pName)); diff --git a/tests/script/tsim/parser/select_with_tags.sim b/tests/script/tsim/parser/select_with_tags.sim index 0cc8a7db8a..a4c460a937 100644 --- a/tests/script/tsim/parser/select_with_tags.sim +++ b/tests/script/tsim/parser/select_with_tags.sim @@ -452,6 +452,43 @@ if $data04 != @abc0@ then return -1 endi +sql select ts, top(c1, 100), tbname, t1, t2 from select_tags_mt0 where tbname in ('select_tags_tb0', 'select_tags_tb1') partition by tbname order by ts; +if $row != 200 then + return -1 +endi + +if $data00 != @70-01-01 08:01:40.087@ then + return -1 +endi + +if $data10 != @70-01-01 08:01:40.088@ then + return -1 +endi + +if $data20 != @70-01-01 08:01:40.089@ then + return -1 +endi + +if $data90 != @70-01-01 08:01:40.096@ then + return -1 +endi + +if $data01 != 87 then + return -1 +endi + +if $data02 != @select_tags_tb0@ then + return -1 +endi + +if $data03 != 0 then + return -1 +endi + +if $data04 != @abc0@ then + return -1 +endi + sql select ts, top(c1, 2), t2, tbname, t2 from select_tags_mt0 where tbname in ('select_tags_tb0', 'select_tags_tb1') group by tbname,t2 order by ts; if $row != 4 then return -1