From 6c39f81c7bf06c307d604c6c6bc8edebf0312db0 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Tue, 16 Jul 2024 01:04:16 +0000 Subject: [PATCH 01/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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/39] 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 4688d4f0c1a4e27b47507fbe414b7ed2ed68b191 Mon Sep 17 00:00:00 2001 From: dmchen Date: Fri, 19 Jul 2024 07:14:10 +0000 Subject: [PATCH 15/39] 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 16/39] 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 a618667a5e63d29cf4330e38ccf87af416b98b2f Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 16:23:52 +0800 Subject: [PATCH 17/39] 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 60699c7895515d025a8314f67d38a5bd320bcb1a Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 17:53:56 +0800 Subject: [PATCH 18/39] 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 3f2abe8b00e1e1db50e71a454f3f0ad9ddb7eedc Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Fri, 19 Jul 2024 18:36:03 +0800 Subject: [PATCH 19/39] 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 5172d3cd8adf694c712b0e9ff65b6a38995d9e5f Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Fri, 19 Jul 2024 21:41:40 +0800 Subject: [PATCH 20/39] 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 21/39] 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 9d506d20f1b18711d0ca873bfe068afa4827bebf Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Sat, 20 Jul 2024 07:43:22 +0000 Subject: [PATCH 22/39] 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 23/39] 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 24/39] 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 02ea558db889568bbc797d054620d7b77133f3cf Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 15 Jul 2024 18:45:41 +0800 Subject: [PATCH 25/39] 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 26/39] 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 27/39] 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 28/39] 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 29/39] 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 30/39] 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 31/39] 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 6e70da62fb12e756fe89465a0202ef39c5b0bcde Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 12:51:25 +0800 Subject: [PATCH 32/39] 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 33/39] 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 34/39] 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 b43dcf2a26817acfb62dc81370bf256ba63d334e Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 13:38:30 +0800 Subject: [PATCH 35/39] 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 36/39] 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 37/39] 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 d02617aaf6c62b7110f34d9fc4f3ada702bb0d34 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Mon, 22 Jul 2024 14:42:50 +0800 Subject: [PATCH 38/39] 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 e3cbfb8b24c0c3cbc83ea4f8c33f95c0af72d198 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Mon, 22 Jul 2024 16:33:24 +0800 Subject: [PATCH 39/39] 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() {