diff --git a/include/common/tep.h b/include/common/tep.h index 6d09d0ce51e3af5f51461c27003025a8b58546f1..956cf6ec361531ed12bf20027f77d2136f8c8d7b 100644 --- a/include/common/tep.h +++ b/include/common/tep.h @@ -23,7 +23,7 @@ typedef struct SBlockOrderInfo { // bool hasNull; } SBlockOrderInfo; -int taosGetFqdnPortFromEp(const char *ep, uint16_t defaultPort, SEp *pEp); +int taosGetFqdnPortFromEp(const char *ep, SEp *pEp); void addEpIntoEpSet(SEpSet *pEpSet, const char *fqdn, uint16_t port); bool isEpsetEqual(const SEpSet *s1, const SEpSet *s2); diff --git a/include/common/tglobal.h b/include/common/tglobal.h index bb704f153644b5d469e429de753cf550dcd709d3..b54058d489466809bc763bb51eb90e1b2aa19700 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -20,24 +20,44 @@ extern "C" { #endif +#include "tcfg.h" #include "tdef.h" +// cluster +extern char tsFirst[]; +extern char tsSecond[]; +extern char tsLocalFqdn[]; +extern char tsLocalEp[]; +extern uint16_t tsServerPort; +extern int32_t tsVersion; +extern int32_t tsStatusInterval; +extern bool tsEnableTelemetryReporting; + // common -extern int32_t tsCompressMsgSize; -extern int32_t tsCompressColData; -extern int32_t tsMaxNumOfDistinctResults; -extern int tsCompatibleModel; // 2.0 compatible model -extern int8_t tsEnableSlaveQuery; -extern int8_t tsEnableAdjustMaster; -extern int8_t tsPrintAuth; -extern int64_t tsTickPerDay[3]; +extern int32_t tsRpcTimer; +extern int32_t tsRpcMaxTime; +extern bool tsRpcForceTcp; // all commands go to tcp protocol if this is enabled +extern int32_t tsMaxConnections; +extern int32_t tsMaxShellConns; +extern int32_t tsShellActivityTimer; +extern int32_t tsMaxTmrCtrl; +extern float tsNumOfThreadsPerCore; +extern int32_t tsNumOfCommitThreads; +extern float tsRatioOfQueryCores; +extern int32_t tsCompressMsgSize; +extern int32_t tsCompressColData; +extern int32_t tsMaxNumOfDistinctResults; +extern int32_t tsCompatibleModel; +extern bool tsEnableSlaveQuery; +extern bool tsPrintAuth; +extern int64_t tsTickPerDay[3]; // query buffer management extern int32_t tsQueryBufferSize; // maximum allowed usage buffer size in MB for each data node during query processing extern int64_t tsQueryBufferSizeBytes; // maximum allowed usage buffer size in byte for each data node -extern int32_t tsRetrieveBlockingModel; // retrieve threads will be blocked -extern int8_t tsKeepOriginalColumnName; -extern int8_t tsDeadLockKillQuery; +extern bool tsRetrieveBlockingModel; // retrieve threads will be blocked +extern bool tsKeepOriginalColumnName; +extern bool tsDeadLockKillQuery; // client extern int32_t tsMaxWildCardsLen; @@ -52,13 +72,34 @@ extern float tsStreamComputDelayRatio; // the delayed computing ration of the extern int32_t tsProjectExecInterval; extern int64_t tsMaxRetentWindow; +// build info +extern char version[]; +extern char compatible_version[]; +extern char gitinfo[]; +extern char gitinfoOfInternal[]; +extern char buildinfo[]; + +// lossy +extern char tsLossyColumns[]; +extern double tsFPrecision; +extern double tsDPrecision; +extern uint32_t tsMaxRange; +extern uint32_t tsCurRange; +extern char tsCompressor[]; + +// tfs +extern int32_t tsDiskCfgNum; +extern SDiskCfg tsDiskCfg[]; + #define NEEDTO_COMPRESSS_MSG(size) (tsCompressMsgSize != -1 && (size) > tsCompressMsgSize) -int32_t taosCfgDynamicOptions(char *msg); -bool taosCheckBalanceCfgOptions(const char *option, int32_t *vnodeId, int32_t *dnodeId); -void taosAddDataDir(int index, char *v1, int level, int primary); -void taosReadDataDirCfg(char *v1, char *v2, char *v3); -void taosPrintDataDirCfg(); +int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char *envFile, + const char *apolloUrl, bool tsc); +int32_t taosInitCfg(const char *cfgDir, const char *envFile, const char *apolloUrl, bool tsc); +void taosCleanupCfg(); +void taosCfgDynamicOptions(const char *option, const char *value); + +struct SConfig *taosGetCfg(); #ifdef __cplusplus } diff --git a/include/dnode/mgmt/dnode.h b/include/dnode/mgmt/dnode.h index d630fd0b1acf8beedce951d533a18440b49bed11..a929f7a3fbb858ffd32596c2d68aaa036cd51935 100644 --- a/include/dnode/mgmt/dnode.h +++ b/include/dnode/mgmt/dnode.h @@ -25,29 +25,12 @@ extern "C" { /* ------------------------ TYPES EXPOSED ---------------- */ typedef struct SDnode SDnode; -/* ------------------------ Environment ------------------ */ -typedef struct { - int32_t sver; - int32_t numOfCores; - uint16_t numOfCommitThreads; - bool enableTelem; - bool printAuth; - int32_t rpcTimer; - int32_t rpcMaxTime; - char timezone[TD_TIMEZONE_LEN]; - char locale[TD_LOCALE_LEN]; - char charset[TD_LOCALE_LEN]; - char buildinfo[64]; - char gitinfo[48]; -} SDnodeEnvCfg; - /** * @brief Initialize the environment * - * @param pOption Option of the environment * @return int32_t 0 for success and -1 for failure */ -int32_t dndInit(const SDnodeEnvCfg *pCfg); +int32_t dndInit(); /** * @brief clear the environment @@ -58,11 +41,6 @@ void dndCleanup(); /* ------------------------ SDnode ----------------------- */ typedef struct { int32_t numOfSupportVnodes; - int32_t statusInterval; - float numOfThreadsPerCore; - float ratioOfQueryCores; - int32_t maxShellConns; - int32_t shellActivityTimer; uint16_t serverPort; char dataDir[TSDB_FILENAME_LEN]; char localEp[TSDB_EP_LEN]; diff --git a/include/dnode/mnode/mnode.h b/include/dnode/mnode/mnode.h index 01855f6d92c2a5aa37cbb2a82de6d4236037cfbd..2680bb83edfca41187150f3f04daf4fa7c369017 100644 --- a/include/dnode/mnode/mnode.h +++ b/include/dnode/mnode/mnode.h @@ -44,26 +44,12 @@ typedef struct SMnodeLoad { int64_t compStorage; } SMnodeLoad; -typedef struct SMnodeCfg { - int32_t sver; - bool enableTelem; - bool printAuth; - int32_t statusInterval; - int32_t shellActivityTimer; - char *timezone; - char *locale; - char *charset; - char *buildinfo; - char *gitinfo; -} SMnodeCfg; - typedef struct { int32_t dnodeId; int64_t clusterId; int8_t replica; int8_t selfIndex; SReplica replicas[TSDB_MAX_REPLICA]; - SMnodeCfg cfg; SDnode *pDnode; PutReqToMWriteQFp putReqToMWriteQFp; PutReqToMReadQFp putReqToMReadQFp; diff --git a/include/libs/transport/trpc.h b/include/libs/transport/trpc.h index befd309582bb6452c5475c97387a5a89fffdf7e3..5e3860822ec161ef52eece2931b7c71dee4fb40d 100644 --- a/include/libs/transport/trpc.h +++ b/include/libs/transport/trpc.h @@ -84,13 +84,7 @@ typedef struct SRpcInit { void *parent; } SRpcInit; -typedef struct { - int32_t rpcTimer; - int32_t rpcMaxTime; - int32_t sver; -} SRpcCfg; - -int32_t rpcInit(SRpcCfg *pCfg); +int32_t rpcInit(); void rpcCleanup(); void *rpcOpen(const SRpcInit *pRpc); void rpcClose(void *); diff --git a/include/os/osEnv.h b/include/os/osEnv.h index 29898953e6667056e653562950d36514c4a60d42..4907fdaa9384d94a43db057469d3cea923d54165 100644 --- a/include/os/osEnv.h +++ b/include/os/osEnv.h @@ -47,6 +47,8 @@ void osSetLogReservedSpace(float sizeInGB); void osSetTempReservedSpace(float sizeInGB); void osSetDataReservedSpace(float sizeInGB); void osSetTimezone(const char *timezone); +void osSetLocale(const char *locale, const char *charset); +bool osSetEnableCore(bool enable); #ifdef __cplusplus } diff --git a/include/common/tcfg.h b/include/util/tcfg.h similarity index 100% rename from include/common/tcfg.h rename to include/util/tcfg.h diff --git a/include/libs/config/config.h b/include/util/tconfig.h similarity index 90% rename from include/libs/config/config.h rename to include/util/tconfig.h index 594c2586484cbbce46836bc4e7aae6a198a24fd0..2eb98a3ba8ad1d9e34311bb660965d3fcf14fa97 100644 --- a/include/libs/config/config.h +++ b/include/util/tconfig.h @@ -42,7 +42,6 @@ typedef enum { CFG_DTYPE_INT64, CFG_DTYPE_FLOAT, CFG_DTYPE_STRING, - CFG_DTYPE_IPSTR, CFG_DTYPE_DIR, CFG_DTYPE_LOCALE, CFG_DTYPE_CHARSET, @@ -52,6 +51,7 @@ typedef enum { typedef struct SConfigItem { ECfgSrcType stype; ECfgDataType dtype; + bool tsc; char *name; union { bool bval; @@ -82,13 +82,12 @@ void cfgCancelIterate(SConfig *pCfg, SConfigItem *pIter); SConfigItem *cfgGetItem(SConfig *pCfg, const char *name); int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcType stype); -int32_t cfgAddBool(SConfig *pCfg, const char *name, bool defaultVal); -int32_t cfgAddInt32(SConfig *pCfg, const char *name, int32_t defaultVal, int64_t minval, int64_t maxval); -int32_t cfgAddInt64(SConfig *pCfg, const char *name, int64_t defaultVal, int64_t minval, int64_t maxval); -int32_t cfgAddFloat(SConfig *pCfg, const char *name, float defaultVal, double minval, double maxval); -int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal); -int32_t cfgAddIpStr(SConfig *pCfg, const char *name, const char *defaultVa); -int32_t cfgAddDir(SConfig *pCfg, const char *name, const char *defaultVal); +int32_t cfgAddBool(SConfig *pCfg, const char *name, bool defaultVal, bool tsc); +int32_t cfgAddInt32(SConfig *pCfg, const char *name, int32_t defaultVal, int64_t minval, int64_t maxval, bool tsc); +int32_t cfgAddInt64(SConfig *pCfg, const char *name, int64_t defaultVal, int64_t minval, int64_t maxval, bool tsc); +int32_t cfgAddFloat(SConfig *pCfg, const char *name, float defaultVal, double minval, double maxval, bool tsc); +int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal, bool tsc); +int32_t cfgAddDir(SConfig *pCfg, const char *name, const char *defaultVal, bool tsc); int32_t cfgAddLocale(SConfig *pCfg, const char *name, const char *defaultVal); int32_t cfgAddCharset(SConfig *pCfg, const char *name, const char *defaultVal); int32_t cfgAddTimezone(SConfig *pCfg, const char *name, const char *defaultVal); @@ -96,7 +95,7 @@ int32_t cfgAddTimezone(SConfig *pCfg, const char *name, const char *defaultVal); const char *cfgStypeStr(ECfgSrcType type); const char *cfgDtypeStr(ECfgDataType type); -void cfgDumpCfg(SConfig *pCfg); +void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump); #ifdef __cplusplus } diff --git a/source/client/CMakeLists.txt b/source/client/CMakeLists.txt index c79382555664819f140dd145b0b8e704668a6881..3210c0c6de50889721279cebdf13c67d2e5474e5 100644 --- a/source/client/CMakeLists.txt +++ b/source/client/CMakeLists.txt @@ -8,7 +8,7 @@ target_include_directories( target_link_libraries( taos INTERFACE api - PRIVATE os util common transport parser planner catalog scheduler function qcom config + PRIVATE os util common transport parser planner catalog scheduler function qcom ) if(${BUILD_TEST}) diff --git a/source/client/inc/clientInt.h b/source/client/inc/clientInt.h index 60eb0200a7fb240af8a49f80ad35eb67e5e0d298..523921634bf548e8c0de1cd22b7ce8a75894f67f 100644 --- a/source/client/inc/clientInt.h +++ b/source/client/inc/clientInt.h @@ -32,7 +32,7 @@ extern "C" { #include "tmsgtype.h" #include "trpc.h" -#include "config.h" +#include "tconfig.h" #define CHECK_CODE_GOTO(expr, label) \ do { \ @@ -253,13 +253,6 @@ int hbAddConnInfo(SAppHbMgr* pAppHbMgr, SClientHbKey connKey, void* key, void* v // --- mq void hbMgrInitMqHbRspHandle(); - -// config -int32_t tscInitLog(const char *cfgDir, const char *envFile, const char *apolloUrl); -int32_t tscInitCfg(const char *cfgDir, const char *envFile, const char *apolloUrl); - -extern SConfig *tscCfg; - #ifdef __cplusplus } #endif diff --git a/source/client/src/clientCfg.c b/source/client/src/clientCfg.c deleted file mode 100644 index d1dafbed5c9a3fd0726a813711cef4da598dbb11..0000000000000000000000000000000000000000 --- a/source/client/src/clientCfg.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "clientInt.h" -#include "ulog.h" - -// todo refact -SConfig *tscCfg; - -static int32_t tscLoadCfg(SConfig *pConfig, const char *inputCfgDir, const char *envFile, const char *apolloUrl) { - char cfgDir[PATH_MAX] = {0}; - char cfgFile[PATH_MAX + 100] = {0}; - - taosExpandDir(inputCfgDir, cfgDir, PATH_MAX); - snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir); - - if (cfgLoad(pConfig, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) { - uError("failed to load from apollo url:%s since %s\n", apolloUrl, terrstr()); - return -1; - } - - if (cfgLoad(pConfig, CFG_STYPE_CFG_FILE, cfgFile) != 0) { - if (cfgLoad(pConfig, CFG_STYPE_CFG_FILE, cfgDir) != 0) { - uError("failed to load from config file:%s since %s\n", cfgFile, terrstr()); - return -1; - } - } - - if (cfgLoad(pConfig, CFG_STYPE_ENV_FILE, envFile) != 0) { - uError("failed to load from env file:%s since %s\n", envFile, terrstr()); - return -1; - } - - if (cfgLoad(pConfig, CFG_STYPE_ENV_VAR, NULL) != 0) { - uError("failed to load from global env variables since %s\n", terrstr()); - return -1; - } - - return 0; -} - -static int32_t tscAddLogCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "logDir", "/var/log/taos") != 0) return -1; - if (cfgAddBool(pCfg, "asyncLog", 1) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfLogLines", 10000000, 1000, 2000000000) != 0) return -1; - if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000) != 0) return -1; - if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "cDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "jniDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "tmrDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "uDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcDebugFlag", 0, 0, 255) != 0) return -1; - return 0; -} - -static int32_t tscSetLogCfg(SConfig *pCfg) { - osSetLogDir(cfgGetItem(pCfg, "logDir")->str); - tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval; - tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32; - tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32; - cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32; - jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32; - tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32; - uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32; - rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32; - - int32_t debugFlag = cfgGetItem(pCfg, "debugFlag")->i32; - taosSetAllDebugFlag(debugFlag); - return 0; -} - -int32_t tscInitLog(const char *cfgDir, const char *envFile, const char *apolloUrl) { - if (tsLogInited) return 0; - - SConfig *pCfg = cfgInit(); - if (pCfg == NULL) return -1; - - if (tscAddLogCfg(pCfg) != 0) { - printf("failed to add log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - if (tscLoadCfg(pCfg, cfgDir, envFile, apolloUrl) != 0) { - printf("failed to load log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - if (tscSetLogCfg(pCfg) != 0) { - printf("failed to set log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - const int32_t maxLogFileNum = 10; - if (taosInitLog("taoslog", maxLogFileNum) != 0) { - printf("failed to init log file since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - cfgDumpCfg(pCfg); - cfgCleanup(pCfg); - return 0; -} - -static int32_t tscAddEpCfg(SConfig *pCfg) { - char defaultFqdn[TSDB_FQDN_LEN] = {0}; - if (taosGetFqdn(defaultFqdn) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - if (cfgAddString(pCfg, "fqdn", defaultFqdn) != 0) return -1; - - int32_t defaultServerPort = 6030; - if (cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056) != 0) return -1; - - char defaultFirstEp[TSDB_EP_LEN] = {0}; - char defaultSecondEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); - snprintf(defaultSecondEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); - if (cfgAddString(pCfg, "firstEp", defaultFirstEp) != 0) return -1; - if (cfgAddString(pCfg, "secondEp", defaultSecondEp) != 0) return -1; - - return 0; -} - -static int32_t tscAddCfg(SConfig *pCfg) { - if (tscAddEpCfg(pCfg) != 0) return -1; - - // if (cfgAddString(pCfg, "buildinfo", buildinfo) != 0) return -1; - // if (cfgAddString(pCfg, "gitinfo", gitinfo) != 0) return -1; - // if (cfgAddString(pCfg, "version", version) != 0) return -1; - - // if (cfgAddDir(pCfg, "dataDir", osDataDir()) != 0) return -1; - if (cfgAddTimezone(pCfg, "timezone", "") != 0) return -1; - if (cfgAddLocale(pCfg, "locale", "") != 0) return -1; - if (cfgAddCharset(pCfg, "charset", "") != 0) return -1; - if (cfgAddInt32(pCfg, "numOfCores", 1, 1, 100000) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfCommitThreads", 4, 1, 1000) != 0) return -1; - // if (cfgAddBool(pCfg, "telemetryReporting", 0) != 0) return -1; - if (cfgAddBool(pCfg, "enableCoreFile", 0) != 0) return -1; - // if (cfgAddInt32(pCfg, "supportVnodes", 256, 0, 65536) != 0) return -1; - if (cfgAddInt32(pCfg, "statusInterval", 1, 1, 30) != 0) return -1; - if (cfgAddFloat(pCfg, "numOfThreadsPerCore", 1, 0, 10) != 0) return -1; - if (cfgAddFloat(pCfg, "ratioOfQueryCores", 1, 0, 5) != 0) return -1; - if (cfgAddInt32(pCfg, "shellActivityTimer", 3, 1, 120) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcTimer", 300, 100, 3000) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcMaxTime", 600, 100, 7200) != 0) return -1; - if (cfgAddInt32(pCfg, "maxConnections", 50000, 1, 100000) != 0) return -1; - return 0; -} - -int32_t tscCheckCfg(SConfig *pCfg) { - bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval; - taosSetCoreDump(enableCore); - - return 0; -} - -SConfig *tscInitCfgImp(const char *cfgDir, const char *envFile, const char *apolloUrl) { - SConfig *pCfg = cfgInit(); - if (pCfg == NULL) return NULL; - - if (tscAddCfg(pCfg) != 0) { - uError("failed to init tsc cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - if (tscLoadCfg(pCfg, cfgDir, envFile, apolloUrl) != 0) { - printf("failed to load tsc cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - if (tscCheckCfg(pCfg) != 0) { - uError("failed to check cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - cfgDumpCfg(pCfg); - return pCfg; -} - -int32_t tscInitCfg(const char *cfgDir, const char *envFile, const char *apolloUrl) { - tscCfg = tscInitCfgImp(cfgDir, envFile, apolloUrl); - if (tscCfg == NULL) return -1; - - return 0; -} \ No newline at end of file diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index f07048efbc0ed151ca63dbe782626d7078105a37..7ffb5dcd44c4e624939aec724a75bdeb7de43219 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -93,10 +93,10 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) { rpcInit.numOfThreads = numOfThread; rpcInit.cfp = processMsgFromServer; rpcInit.pfp = persistConnForSpecificMsg; - rpcInit.sessions = cfgGetItem(tscCfg, "maxConnections")->i32; + rpcInit.sessions = tsMaxConnections; rpcInit.connType = TAOS_CONN_CLIENT; rpcInit.user = (char *)user; - rpcInit.idleTime = cfgGetItem(tscCfg, "shellActivityTimer")->i32 * 1000; + rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.ckey = "key"; rpcInit.spi = 1; rpcInit.secret = (char *)auth; @@ -212,12 +212,12 @@ void taos_init_imp(void) { deltaToUtcInitOnce(); - if (tscInitLog(configDir, NULL, NULL) != 0) { + if (taosCreateLog("taoslog", 10, configDir, NULL, NULL, 1) != 0) { tscInitRes = -1; return; } - if (tscInitCfg(configDir, NULL, NULL) != 0) { + if (taosInitCfg(configDir, NULL, NULL, 1) != 0) { tscInitRes = -1; return; } @@ -225,11 +225,7 @@ void taos_init_imp(void) { initMsgHandleFp(); initQueryModuleMsgHandle(); - SRpcCfg rpcCfg = {0}; - rpcCfg.rpcTimer = cfgGetItem(tscCfg, "rpcTimer")->i32; - rpcCfg.rpcMaxTime = cfgGetItem(tscCfg, "rpcMaxTime")->i32; - rpcCfg.sver = 30000000; - rpcInit(&rpcCfg); + rpcInit(); SCatalogCfg cfg = {.maxDBCacheNum = 100, .maxTblCacheNum = 100}; catalogInit(&cfg); diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index c9b2e371a232d1bdaedf84d9f2a94a838d5f8830..f256feb2510b0a2c08b63afd7477dc9083208662 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -11,7 +11,7 @@ #include "tpagedbuf.h" #include "tref.h" -static int32_t initEpSetFromCfg(const char* ip, uint16_t port, SCorEpSet* pEpSet); +static int32_t initEpSetFromCfg(const char* firstEp, const char* secondEp, SCorEpSet* pEpSet); static SMsgSendInfo* buildConnectMsg(SRequestObj* pRequest); static void destroySendMsgInfo(SMsgSendInfo* pMsgBody); static void setQueryResultFromRsp(SReqResultInfo* pResultInfo, const SRetrieveTableRsp* pRsp); @@ -80,7 +80,19 @@ TAOS* taos_connect_internal(const char* ip, const char* user, const char* pass, } SCorEpSet epSet = {0}; - initEpSetFromCfg(ip, port, &epSet); + if (ip) { + if (initEpSetFromCfg(ip, NULL, &epSet) < 0) { + return NULL; + } + + if (port) { + epSet.epSet.eps[0].port = port; + } + } else { + if (initEpSetFromCfg(tsFirst, tsSecond, &epSet) < 0) { + return NULL; + } + } char* key = getClusterKey(user, secretEncrypt, ip, port); SAppInstInfo** pInst = NULL; @@ -267,40 +279,32 @@ _return: return pRequest; } -int initEpSetFromCfg(const char* ip, uint16_t port, SCorEpSet* pEpSet) { - SConfigItem* pFirst = cfgGetItem(tscCfg, "firstEp"); - SConfigItem* pSecond = cfgGetItem(tscCfg, "secondEp"); - SConfigItem* pPort = cfgGetItem(tscCfg, "serverPort"); +int initEpSetFromCfg(const char* firstEp, const char* secondEp, SCorEpSet* pEpSet) { + pEpSet->version = 0; // init mnode ip set SEpSet* mgmtEpSet = &(pEpSet->epSet); mgmtEpSet->numOfEps = 0; mgmtEpSet->inUse = 0; - pEpSet->version = 0; - if (ip != NULL) { - taosGetFqdnPortFromEp(ip, (uint16_t)pPort->i32, &mgmtEpSet->eps[0]); - mgmtEpSet->numOfEps++; - if (port) { - mgmtEpSet->eps[0].port = port; - } - } else { - if (pFirst->str[0] != 0) { - if (strlen(pFirst->str) >= TSDB_EP_LEN) { - terrno = TSDB_CODE_TSC_INVALID_FQDN; - return -1; - } - taosGetFqdnPortFromEp(pFirst->str, (uint16_t)pPort->i32, &mgmtEpSet->eps[0]); - mgmtEpSet->numOfEps++; + if (firstEp && firstEp[0] != 0) { + if (strlen(firstEp) >= TSDB_EP_LEN) { + terrno = TSDB_CODE_TSC_INVALID_FQDN; + return -1; } - if (pSecond->str[0] != 0) { - if (strlen(pSecond->str) >= TSDB_EP_LEN) { - terrno = TSDB_CODE_TSC_INVALID_FQDN; - return -1; - } - taosGetFqdnPortFromEp(pSecond->str, (uint16_t)pPort->i32, &mgmtEpSet->eps[1]); - mgmtEpSet->numOfEps++; + + taosGetFqdnPortFromEp(firstEp, &mgmtEpSet->eps[0]); + mgmtEpSet->numOfEps++; + } + + if (secondEp && secondEp[0] != 0) { + if (strlen(secondEp) >= TSDB_EP_LEN) { + terrno = TSDB_CODE_TSC_INVALID_FQDN; + return -1; } + + taosGetFqdnPortFromEp(secondEp, &mgmtEpSet->eps[mgmtEpSet->numOfEps]); + mgmtEpSet->numOfEps++; } if (mgmtEpSet->numOfEps == 0) { diff --git a/source/client/test/CMakeLists.txt b/source/client/test/CMakeLists.txt index 7f6ce81788f66dc8d5d2182b8f86813dbb49940a..ee5109860e52968d487cad9ace18153443974f32 100644 --- a/source/client/test/CMakeLists.txt +++ b/source/client/test/CMakeLists.txt @@ -8,13 +8,13 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST) ADD_EXECUTABLE(clientTest clientTests.cpp) TARGET_LINK_LIBRARIES( clientTest - PUBLIC os util common transport parser catalog scheduler function gtest taos qcom config + PUBLIC os util common transport parser catalog scheduler function gtest taos qcom ) ADD_EXECUTABLE(tmqTest tmqTest.cpp) TARGET_LINK_LIBRARIES( tmqTest - PUBLIC os util common transport parser catalog scheduler function gtest taos qcom config + PUBLIC os util common transport parser catalog scheduler function gtest taos qcom ) TARGET_INCLUDE_DIRECTORIES( diff --git a/source/common/src/tep.c b/source/common/src/tep.c index 3e98cae27923d7c845503e35f8fd0846440fd38e..970b6d954f1faa4f1f439f1f415e0d7059852311 100644 --- a/source/common/src/tep.c +++ b/source/common/src/tep.c @@ -4,7 +4,7 @@ #include "tglobal.h" #include "tlockfree.h" -int taosGetFqdnPortFromEp(const char *ep, uint16_t defaultPort, SEp* pEp) { +int taosGetFqdnPortFromEp(const char *ep, SEp* pEp) { pEp->port = 0; strcpy(pEp->fqdn, ep); @@ -15,7 +15,7 @@ int taosGetFqdnPortFromEp(const char *ep, uint16_t defaultPort, SEp* pEp) { } if (pEp->port == 0) { - pEp->port = defaultPort; + pEp->port = tsServerPort; return -1; } diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index b4c9efd77d6a93ea755cfa0902e54eb6a38561e9..425e1c8d6ee50dca1e9d6a6d70152021618ef10a 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -19,18 +19,39 @@ #include "taosdef.h" #include "taoserror.h" #include "tcompare.h" +#include "tconfig.h" #include "tep.h" #include "tglobal.h" #include "tlog.h" #include "tutil.h" #include "ulog.h" +SConfig *tsCfg = NULL; + +// cluster +char tsFirst[TSDB_EP_LEN] = {0}; +char tsSecond[TSDB_EP_LEN] = {0}; +char tsLocalFqdn[TSDB_FQDN_LEN] = {0}; +char tsLocalEp[TSDB_EP_LEN] = {0}; // Local End Point, hostname:port +uint16_t tsServerPort = 6030; +int32_t tsVersion = 30000000; +int32_t tsStatusInterval = 1; // second +bool tsEnableTelemetryReporting = 0; // common +int32_t tsRpcTimer = 300; +int32_t tsRpcMaxTime = 600; // seconds; +bool tsRpcForceTcp = 1; // disable this, means query, show command use udp protocol as default +int32_t tsMaxShellConns = 50000; +int32_t tsMaxConnections = 50000; +int32_t tsShellActivityTimer = 3; // second +float tsNumOfThreadsPerCore = 1.0f; +int32_t tsNumOfCommitThreads = 4; +float tsRatioOfQueryCores = 1.0f; int32_t tsMaxBinaryDisplayWidth = 30; -int8_t tsEnableSlaveQuery = 1; -int8_t tsEnableAdjustMaster = 1; -int8_t tsPrintAuth = 0; +bool tsEnableSlaveQuery = 1; +bool tsPrintAuth = 0; + /* * denote if the server needs to compress response message at the application layer to client, including query rsp, * metricmeta rsp, and multi-meter query rsp message body. The client compress the submit message to server. @@ -93,18 +114,21 @@ int32_t tsQueryBufferSize = -1; int64_t tsQueryBufferSizeBytes = -1; // in retrieve blocking model, the retrieve threads will wait for the completion of the query processing. -int32_t tsRetrieveBlockingModel = 0; +bool tsRetrieveBlockingModel = 0; // last_row(*), first(*), last_row(ts, col1, col2) query, the result fields will be the original column name -int8_t tsKeepOriginalColumnName = 0; +bool tsKeepOriginalColumnName = 0; // long query death-lock -int8_t tsDeadLockKillQuery = 0; +bool tsDeadLockKillQuery = 0; // tsdb config // For backward compatibility bool tsdbForceKeepFile = false; +int32_t tsDiskCfgNum = 0; +SDiskCfg tsDiskCfg[TFS_MAX_DISKS] = {0}; + /* * minimum scale for whole system, millisecond by default * for TSDB_TIME_PRECISION_MILLI: 86400000L @@ -113,414 +137,351 @@ bool tsdbForceKeepFile = false; */ int64_t tsTickPerDay[] = {86400000L, 86400000000L, 86400000000000L}; -int32_t (*monStartSystemFp)() = NULL; -void (*monStopSystemFp)() = NULL; -void (*monExecuteSQLFp)(char *sql) = NULL; +// lossy compress 6 +char tsLossyColumns[32] = ""; // "float|double" means all float and double columns can be lossy compressed. set empty + // can close lossy compress. +// below option can take effect when tsLossyColumns not empty +double tsFPrecision = 1E-8; // float column precision +double tsDPrecision = 1E-16; // double column precision +uint32_t tsMaxRange = 500; // max range +uint32_t tsCurRange = 100; // range +char tsCompressor[32] = "ZSTD_COMPRESSOR"; // ZSTD_COMPRESSOR or GZIP_COMPRESSOR + +static void taosAddDataDir(int32_t index, char *v1, int32_t level, int32_t primary) { + tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN); + tsDiskCfg[index].level = level; + tsDiskCfg[index].primary = primary; + uTrace("dataDir:%s, level:%d primary:%d is configured", v1, level, primary); +} -char *qtypeStr[] = {"rpc", "fwd", "wal", "cq", "query"}; +static void taosReadDataDirCfg(char *v1, char *v2, char *v3) { + if (tsDiskCfgNum == 1) { + SDiskCfg *cfg = &tsDiskCfg[0]; + uInfo("dataDir:%s, level:%d primary:%d is replaced by %s", cfg->dir, cfg->level, cfg->primary, v1); + } + taosAddDataDir(0, v1, 0, 1); + tsDiskCfgNum = 1; +} -static pthread_once_t tsInitGlobalCfgOnce = PTHREAD_ONCE_INIT; +static void taosPrintDataDirCfg() { + for (int32_t i = 0; i < tsDiskCfgNum; ++i) { + SDiskCfg *cfg = &tsDiskCfg[i]; + uInfo(" dataDir: %s", cfg->dir); + } +} +struct SConfig *taosGetCfg() { + return tsCfg; +} -int32_t taosCfgDynamicOptions(char *msg) { - #if 0 - char *option, *value; - int32_t olen, vlen; - int32_t vint = 0; +static int32_t taosLoadCfg(SConfig *pCfg, const char *inputCfgDir, const char *envFile, const char *apolloUrl) { + char cfgDir[PATH_MAX] = {0}; + char cfgFile[PATH_MAX + 100] = {0}; - paGetToken(msg, &option, &olen); - if (olen == 0) return -1; + taosExpandDir(inputCfgDir, cfgDir, PATH_MAX); + snprintf(cfgFile, sizeof(cfgFile), "%s" TD_DIRSEP "taos.cfg", cfgDir); - paGetToken(option + olen + 1, &value, &vlen); - if (vlen == 0) - vint = 135; - else { - vint = atoi(value); + if (cfgLoad(pCfg, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) { + uError("failed to load from apollo url:%s since %s\n", apolloUrl, terrstr()); + return -1; } - uInfo("change dynamic option: %s, value: %d", option, vint); - - for (int32_t i = 0; i < tsGlobalConfigNum; ++i) { - SGlobalCfg *cfg = tsGlobalConfig + i; - // if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_LOG)) continue; - if (cfg->valType != TAOS_CFG_VTYPE_INT32 && cfg->valType != TAOS_CFG_VTYPE_INT8) continue; - - int32_t cfgLen = (int32_t)strlen(cfg->option); - if (cfgLen != olen) continue; - if (strncasecmp(option, cfg->option, olen) != 0) continue; - if (cfg->valType == TAOS_CFG_VTYPE_INT32) { - *((int32_t *)cfg->ptr) = vint; - } else { - *((int8_t *)cfg->ptr) = (int8_t)vint; + if (cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgFile) != 0) { + if (cfgLoad(pCfg, CFG_STYPE_CFG_FILE, cfgDir) != 0) { + uError("failed to load from config file:%s since %s\n", cfgFile, terrstr()); + return -1; } + } - if (strncasecmp(cfg->option, "monitor", olen) == 0) { - if (1 == vint) { - if (monStartSystemFp) { - (*monStartSystemFp)(); - uInfo("monitor is enabled"); - } else { - uError("monitor can't be updated, for monitor not initialized"); - } - } else { - if (monStopSystemFp) { - (*monStopSystemFp)(); - uInfo("monitor is disabled"); - } else { - uError("monitor can't be updated, for monitor not initialized"); - } - } - return 0; - } - if (strncasecmp(cfg->option, "debugFlag", olen) == 0) { - taosSetAllDebugFlag(); - } - return 0; + if (cfgLoad(pCfg, CFG_STYPE_ENV_FILE, envFile) != 0) { + uError("failed to load from env file:%s since %s\n", envFile, terrstr()); + return -1; } - if (strncasecmp(option, "resetlog", 8) == 0) { - taosResetLog(); - taosPrintCfg(); - return 0; + if (cfgLoad(pCfg, CFG_STYPE_ENV_VAR, NULL) != 0) { + uError("failed to load from global env variables since %s\n", terrstr()); + return -1; } - if (strncasecmp(option, "resetQueryCache", 15) == 0) { - if (monExecuteSQLFp) { - (*monExecuteSQLFp)("resetQueryCache"); - uInfo("resetquerycache is executed"); - } else { - uError("resetquerycache can't be executed, for monitor not started"); - } + return 0; +} + +static void taosAddClientLogCfg(SConfig *pCfg) { + cfgAddDir(pCfg, "logDir", osLogDir(), 1); + cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000, 1); + cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, 1); + cfgAddBool(pCfg, "asyncLog", tsAsyncLog, 1); + cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, 1); + cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, 1); + cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, 1); + cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, 1); + cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, 1); + cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, 1); + cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, 1); + cfgAddDir(pCfg, "configDir", configDir, 1); + cfgAddDir(pCfg, "scriptDir", configDir, 1); + cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, 1); +} + +static void taosAddServerLogCfg(SConfig *pCfg) { + cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "tqDebugFlag", tqDebugFlag, 0, 255, 0); + cfgAddInt32(pCfg, "fsDebugFlag", fsDebugFlag, 0, 255, 0); +} + +static void taosAddClientCfg(SConfig *pCfg) { + char defaultFqdn[TSDB_FQDN_LEN] = {0}; + int32_t defaultServerPort = 6030; + char defaultFirstEp[TSDB_EP_LEN] = {0}; + char defaultSecondEp[TSDB_EP_LEN] = {0}; + taosGetFqdn(defaultFqdn); + snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); + snprintf(defaultSecondEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); + + cfgAddString(pCfg, "firstEp", defaultFirstEp, 1); + cfgAddString(pCfg, "secondEp", defaultSecondEp, 1); + cfgAddString(pCfg, "fqdn", defaultFqdn, 1); + cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056, 1); + cfgAddDir(pCfg, "tempDir", osTempDir(), 1); + cfgAddFloat(pCfg, "minimalTempDirGB", 1.0f, 0.001f, 10000000, 1); + cfgAddFloat(pCfg, "numOfThreadsPerCore", tsNumOfThreadsPerCore, 0, 10, 1); + cfgAddInt32(pCfg, "maxTmrCtrl", tsMaxTmrCtrl, 8, 2048, 1); + cfgAddInt32(pCfg, "rpcTimer", tsRpcTimer, 100, 3000, 1); + cfgAddInt32(pCfg, "rpcMaxTime", tsRpcMaxTime, 100, 7200, 1); + cfgAddBool(pCfg, "rpcForceTcp", tsRpcForceTcp, 1); + cfgAddInt32(pCfg, "shellActivityTimer", tsShellActivityTimer, 1, 120, 1); + cfgAddInt32(pCfg, "compressMsgSize", tsCompressMsgSize, -1, 100000000, 1); + cfgAddInt32(pCfg, "compressColData", tsCompressColData, -1, 100000000, 1); + cfgAddInt32(pCfg, "maxWildCardsLength", tsMaxWildCardsLen, 0, TSDB_MAX_FIELD_LEN, 1); + cfgAddInt32(pCfg, "maxRegexStringLen", tsMaxRegexStringLen, 0, TSDB_MAX_FIELD_LEN, 1); + cfgAddInt32(pCfg, "maxNumOfOrderedRes", tsMaxNumOfOrderedResults, 128, TSDB_MAX_ALLOWED_SQL_LEN, 1); + cfgAddBool(pCfg, "keepColumnName", tsKeepOriginalColumnName, 1); + cfgAddInt32(pCfg, "maxBinaryDisplayWidth", tsMaxBinaryDisplayWidth, 1, 65536, 1); + cfgAddTimezone(pCfg, "timezone", osTimezone()); + cfgAddLocale(pCfg, "locale", osLocale()); + cfgAddCharset(pCfg, "charset", osCharset()); + cfgAddBool(pCfg, "enableCoreFile", 0, 1); + cfgAddInt32(pCfg, "numOfCores", tsNumOfCores, 1, 100000, 1); + cfgAddString(pCfg, "version", version, 1); + cfgAddString(pCfg, "compatible_version", compatible_version, 1); + cfgAddString(pCfg, "gitinfo", gitinfo, 1); + cfgAddString(pCfg, "gitinfoOfInternal", gitinfoOfInternal, 1); + cfgAddString(pCfg, "buildinfo", buildinfo, 1); +} + +static void taosAddServerCfg(SConfig *pCfg) { + cfgAddInt32(pCfg, "supportVnodes", 256, 0, 65536, 0); + cfgAddDir(pCfg, "dataDir", osDataDir(), 0); + cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000, 0); + cfgAddInt32(pCfg, "numOfCommitThreads", tsNumOfCommitThreads, 1, 100, 0); + cfgAddFloat(pCfg, "ratioOfQueryCores", tsRatioOfQueryCores, 0, 2, 0); + cfgAddInt32(pCfg, "maxNumOfDistinctRes", tsMaxNumOfDistinctResults, 10 * 10000, 10000 * 10000, 0); + cfgAddBool(pCfg, "telemetryReporting", tsEnableTelemetryReporting, 0); + cfgAddInt32(pCfg, "maxConnections", tsMaxConnections, 1, 100000, 0); + cfgAddInt32(pCfg, "maxShellConns", tsMaxShellConns, 10, 50000000, 0); + cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, 0); + cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 10, 1000000, 0); + cfgAddInt32(pCfg, "minIntervalTime", tsMinIntervalTime, 1, 1000000, 0); + cfgAddInt32(pCfg, "maxStreamCompDelay", tsMaxStreamComputDelay, 10, 1000000000, 0); + cfgAddInt32(pCfg, "maxFirstStreamCompDelay", tsStreamCompStartDelay, 1000, 1000000000, 0); + cfgAddInt32(pCfg, "retryStreamCompDelay", tsRetryStreamCompDelay, 10, 1000000000, 0); + cfgAddFloat(pCfg, "streamCompDelayRatio", tsStreamComputDelayRatio, 0.1, 0.9, 0); + cfgAddInt32(pCfg, "queryBufferSize", tsQueryBufferSize, -1, 500000000000, 0); + cfgAddBool(pCfg, "retrieveBlockingModel", tsRetrieveBlockingModel, 0); + cfgAddBool(pCfg, "printAuth", tsPrintAuth, 0); + cfgAddBool(pCfg, "slaveQuery", tsEnableSlaveQuery, 0); + cfgAddBool(pCfg, "deadLockKillQuery", tsDeadLockKillQuery, 0); +} + +static void taosSetClientLogCfg(SConfig *pCfg) { + SConfigItem *pItem = cfgGetItem(pCfg, "logDir"); + osSetLogDir(cfgGetItem(pCfg, "logDir")->str); + osSetDataReservedSpace(cfgGetItem(pCfg, "minimalLogDirGB")->fval); + tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32; + tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval; + tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32; + cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32; + uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32; + rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32; + tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32; + jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32; +} + +static void taosSetServerLogCfg(SConfig *pCfg) { + dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32; + vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32; + mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32; + qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32; + wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32; + sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32; + tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32; + tqDebugFlag = cfgGetItem(pCfg, "tqDebugFlag")->i32; + fsDebugFlag = cfgGetItem(pCfg, "fsDebugFlag")->i32; +} + +static void taosSetClientCfg(SConfig *pCfg) { + tstrncpy(tsFirst, cfgGetItem(pCfg, "firstEp")->str, TSDB_EP_LEN); + tstrncpy(tsSecond, cfgGetItem(pCfg, "secondEp")->str, TSDB_EP_LEN); + tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_EP_LEN); + tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; + snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); + osSetTempDir(cfgGetItem(pCfg, "tempDir")->str); + osSetDataReservedSpace(cfgGetItem(pCfg, "minimalTempDirGB")->fval); + + tsNumOfThreadsPerCore = cfgGetItem(pCfg, "maxTmrCtrl")->fval; + tsMaxTmrCtrl = cfgGetItem(pCfg, "maxTmrCtrl")->i32; + tsRpcTimer = cfgGetItem(pCfg, "rpcTimer")->i32; + tsRpcMaxTime = cfgGetItem(pCfg, "rpcMaxTime")->i32; + tsRpcForceTcp = cfgGetItem(pCfg, "rpcForceTcp")->i32; + tsShellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->bval; + tsCompressMsgSize = cfgGetItem(pCfg, "compressMsgSize")->i32; + tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32; + tsMaxWildCardsLen = cfgGetItem(pCfg, "maxWildCardsLength")->i32; + tsMaxRegexStringLen = cfgGetItem(pCfg, "maxRegexStringLen")->i32; + tsMaxNumOfOrderedResults = cfgGetItem(pCfg, "maxNumOfOrderedRes")->i32; + tsKeepOriginalColumnName = cfgGetItem(pCfg, "keepColumnName")->bval; + tsMaxBinaryDisplayWidth = cfgGetItem(pCfg, "maxBinaryDisplayWidth")->i32; + + SConfigItem *pItem = cfgGetItem(pCfg, "timezone"); + osSetTimezone(pItem->str); + uDebug("timezone format changed from %s to %s", pItem->str, osTimezone()); + cfgSetItem(pCfg, "timezone", osTimezone(), pItem->stype); + + const char *locale = cfgGetItem(pCfg, "locale")->str; + const char *charset = cfgGetItem(pCfg, "charset")->str; + osSetLocale(locale, charset); + + if (tsNumOfCores <= 1) { + tsNumOfCores = 2; } -#endif - return false; + bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval; + taosSetCoreDump(enableCore); + + // todo + tsVersion = 30000000; } -// void taosAddDataDir(int index, char *v1, int level, int primary) { -// tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN); -// tsDiskCfg[index].level = level; -// tsDiskCfg[index].primary = primary; -// uTrace("dataDir:%s, level:%d primary:%d is configured", v1, level, primary); -// } - -#ifndef _STORAGE -// void taosReadDataDirCfg(char *v1, char *v2, char *v3) { -// if (tsDiskCfgNum == 1) { -// SDiskCfg *cfg = &tsDiskCfg[0]; -// uInfo("dataDir:%s, level:%d primary:%d is replaced by %s", cfg->dir, cfg->level, cfg->primary, v1); -// } -// taosAddDataDir(0, v1, 0, 1); -// tsDiskCfgNum = 1; -// } - -// void taosPrintDataDirCfg() { -// for (int i = 0; i < tsDiskCfgNum; ++i) { -// SDiskCfg *cfg = &tsDiskCfg[i]; -// uInfo(" dataDir: %s", cfg->dir); -// } -// } -#endif - - - -static void doInitGlobalConfig(void) { - osInit(); - srand(taosSafeRand()); -#if 0 - SGlobalCfg cfg = {0}; - - - cfg.option = "dataDir"; - cfg.ptr = osDataDir(); - cfg.valType = TAOS_CFG_VTYPE_DATA_DIRCTORY; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 0; - cfg.maxValue = 0; - cfg.ptrLength = TSDB_FILENAME_LEN; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - - cfg.option = "maxNumOfDistinctRes"; - cfg.ptr = &tsMaxNumOfDistinctResults; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW | TSDB_CFG_CTYPE_B_CLIENT; - cfg.minValue = 10 * 10000; - cfg.maxValue = 10000 * 10000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "minSlidingTime"; - cfg.ptr = &tsMinSlidingTime; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 10; - cfg.maxValue = 1000000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_MS; - taosAddConfigOption(cfg); - - cfg.option = "minIntervalTime"; - cfg.ptr = &tsMinIntervalTime; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 1; - cfg.maxValue = 1000000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_MS; - taosAddConfigOption(cfg); - - cfg.option = "maxStreamCompDelay"; - cfg.ptr = &tsMaxStreamComputDelay; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 10; - cfg.maxValue = 1000000000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_MS; - taosAddConfigOption(cfg); - - cfg.option = "maxFirstStreamCompDelay"; - cfg.ptr = &tsStreamCompStartDelay; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 1000; - cfg.maxValue = 1000000000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_MS; - taosAddConfigOption(cfg); - - cfg.option = "retryStreamCompDelay"; - cfg.ptr = &tsRetryStreamCompDelay; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 10; - cfg.maxValue = 1000000000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_MS; - - taosAddConfigOption(cfg); - cfg.option = "streamCompDelayRatio"; - cfg.ptr = &tsStreamComputDelayRatio; - cfg.valType = TAOS_CFG_VTYPE_FLOAT; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0.1f; - cfg.maxValue = 0.9f; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "compressMsgSize"; - cfg.ptr = &tsCompressMsgSize; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = -1; - cfg.maxValue = 100000000.0f; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "compressColData"; - cfg.ptr = &tsCompressColData; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = -1; - cfg.maxValue = 100000000.0f; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "maxWildCardsLength"; - cfg.ptr = &tsMaxWildCardsLen; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0; - cfg.maxValue = TSDB_MAX_FIELD_LEN; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_BYTE; - taosAddConfigOption(cfg); - - cfg.option = "maxRegexStringLen"; - cfg.ptr = &tsMaxRegexStringLen; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0; - cfg.maxValue = TSDB_MAX_FIELD_LEN; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_BYTE; - taosAddConfigOption(cfg); - - cfg.option = "maxNumOfOrderedRes"; - cfg.ptr = &tsMaxNumOfOrderedResults; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = TSDB_MAX_SQL_LEN; - cfg.maxValue = TSDB_MAX_ALLOWED_SQL_LEN; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "queryBufferSize"; - cfg.ptr = &tsQueryBufferSize; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = -1; - cfg.maxValue = 500000000000.0f; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_BYTE; - taosAddConfigOption(cfg); - - cfg.option = "retrieveBlockingModel"; - cfg.ptr = &tsRetrieveBlockingModel; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0; - cfg.maxValue = 1; - cfg.ptrLength = 1; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "keepColumnName"; - cfg.ptr = &tsKeepOriginalColumnName; - cfg.valType = TAOS_CFG_VTYPE_INT8; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW | TSDB_CFG_CTYPE_B_CLIENT; - cfg.minValue = 0; - cfg.maxValue = 1; - cfg.ptrLength = 1; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - - - cfg.option = "slaveQuery"; - cfg.ptr = &tsEnableSlaveQuery; - cfg.valType = TAOS_CFG_VTYPE_INT8; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0; - cfg.maxValue = 1; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - - cfg.option = "maxBinaryDisplayWidth"; - cfg.ptr = &tsMaxBinaryDisplayWidth; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT; - cfg.minValue = 1; - cfg.maxValue = 65536; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "tempDir"; - cfg.ptr = osTempDir(); - cfg.valType = TAOS_CFG_VTYPE_STRING; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT; - cfg.minValue = 0; - cfg.maxValue = 0; - cfg.ptrLength = PATH_MAX; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - // enable kill long query - cfg.option = "deadLockKillQuery"; - cfg.ptr = &tsDeadLockKillQuery; - cfg.valType = TAOS_CFG_VTYPE_INT8; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 0; - cfg.maxValue = 1; - cfg.ptrLength = 1; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - -#ifdef TD_TSZ - // lossy compress - cfg.option = "lossyColumns"; - cfg.ptr = lossyColumns; - cfg.valType = TAOS_CFG_VTYPE_STRING; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 0; - cfg.maxValue = 0; - cfg.ptrLength = tListLen(lossyColumns); - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "fPrecision"; - cfg.ptr = &fPrecision; - cfg.valType = TAOS_CFG_VTYPE_DOUBLE; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = MIN_FLOAT; - cfg.maxValue = 100000; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - - taosAddConfigOption(cfg); - - cfg.option = "dPrecision"; - cfg.ptr = &dPrecision; - cfg.valType = TAOS_CFG_VTYPE_DOUBLE; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 100000; - cfg.maxValue = 0; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "maxRange"; - cfg.ptr = &maxRange; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 0; - cfg.maxValue = 65536; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - - cfg.option = "range"; - cfg.ptr = &curRange; - cfg.valType = TAOS_CFG_VTYPE_INT32; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG; - cfg.minValue = 0; - cfg.maxValue = 65536; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosAddConfigOption(cfg); - assert(tsGlobalConfigNum == TSDB_CFG_MAX_NUM); -#else - // assert(tsGlobalConfigNum == TSDB_CFG_MAX_NUM - 5); -#endif - -#endif +static void taosSetServerCfg(SConfig *pCfg) { + osSetDataDir(cfgGetItem(pCfg, "dataDir")->str); + osSetTempReservedSpace(cfgGetItem(pCfg, "minimalDataDirGB")->fval); + + tsNumOfCommitThreads = cfgGetItem(pCfg, "numOfCommitThreads")->i32; + tsRatioOfQueryCores = cfgGetItem(pCfg, "ratioOfQueryCores")->fval; + tsMaxNumOfDistinctResults = cfgGetItem(pCfg, "maxNumOfDistinctRes")->i32; + tsEnableTelemetryReporting = cfgGetItem(pCfg, "telemetryReporting")->bval; + tsMaxConnections = cfgGetItem(pCfg, "maxConnections")->i32; + tsMaxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32; + tsStatusInterval = cfgGetItem(pCfg, "statusInterval")->i32; + tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32; + tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32; + tsMaxStreamComputDelay = cfgGetItem(pCfg, "maxStreamCompDelay")->i32; + tsStreamCompStartDelay = cfgGetItem(pCfg, "maxFirstStreamCompDelay")->i32; + tsRetryStreamCompDelay = cfgGetItem(pCfg, "retryStreamCompDelay")->i32; + tsStreamComputDelayRatio = cfgGetItem(pCfg, "streamCompDelayRatio")->fval; + tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32; + tsRetrieveBlockingModel = cfgGetItem(pCfg, "retrieveBlockingModel")->bval; + tsPrintAuth = cfgGetItem(pCfg, "printAuth")->bval; + tsEnableSlaveQuery = cfgGetItem(pCfg, "slaveQuery")->bval; + tsDeadLockKillQuery = cfgGetItem(pCfg, "deadLockKillQuery")->bval; + + if (tsQueryBufferSize >= 0) { + tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL; + } } -/* - * alter dnode 1 balance "vnode:1-dnode:2" - */ +int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char *envFile, + const char *apolloUrl, bool tsc) { + osInit(); + + SConfig *pCfg = cfgInit(); + if (pCfg == NULL) return -1; + + if (tsc) { + taosAddClientLogCfg(pCfg); + } else { + taosAddClientLogCfg(pCfg); + taosAddServerLogCfg(pCfg); + } + + if (taosLoadCfg(pCfg, cfgDir, envFile, apolloUrl) != 0) { + uError("failed to load cfg since %s", terrstr()); + cfgCleanup(pCfg); + return -1; + } -bool taosCheckBalanceCfgOptions(const char *option, int32_t *vnodeId, int32_t *dnodeId) { - int len = (int)strlen(option); - if (strncasecmp(option, "vnode:", 6) != 0) { - return false; + if (tsc) { + taosSetClientLogCfg(pCfg); + taosSetAllDebugFlag(cfgGetItem(pCfg, "debugFlag")->i32); + } else { + taosSetClientLogCfg(pCfg); + taosSetServerLogCfg(pCfg); + taosSetAllDebugFlag(cfgGetItem(pCfg, "debugFlag")->i32); } - int pos = 0; - for (; pos < len; ++pos) { - if (option[pos] == '-') break; + if (taosInitLog(logname, logFileNum) != 0) { + printf("failed to init log file since %s\n", terrstr()); + cfgCleanup(pCfg); + return -1; } - if (++pos >= len) return false; - if (strncasecmp(option + pos, "dnode:", 6) != 0) { - return false; + cfgCleanup(pCfg); + return 0; +} + +int32_t taosInitCfg(const char *cfgDir, const char *envFile, const char *apolloUrl, bool tsc) { + if (tsCfg != NULL) return 0; + tsCfg = cfgInit(); + + if (tsc) { + taosAddClientLogCfg(tsCfg); + taosAddClientCfg(tsCfg); + } else { + taosAddClientLogCfg(tsCfg); + taosAddServerLogCfg(tsCfg); + taosAddClientCfg(tsCfg); + taosAddServerCfg(tsCfg); } - *vnodeId = strtol(option + 6, NULL, 10); - *dnodeId = strtol(option + pos + 6, NULL, 10); - if (*vnodeId <= 1 || *dnodeId <= 0) { - return false; + if (taosLoadCfg(tsCfg, cfgDir, envFile, apolloUrl) != 0) { + uError("failed to load cfg since %s", terrstr()); + cfgCleanup(tsCfg); + tsCfg = NULL; + return -1; } - return true; + if (tsc) { + taosSetClientCfg(tsCfg); + } else { + taosSetClientCfg(tsCfg); + taosSetServerCfg(tsCfg); + } + + cfgDumpCfg(tsCfg, tsc, false); + return 0; } + +void taosCleanupCfg() { + if (tsCfg) { + cfgCleanup(tsCfg); + tsCfg = NULL; + } +} + +void taosCfgDynamicOptions(const char *option, const char *value) { + if (strcasecmp(option, "debugFlag") == 0) { + int32_t debugFlag = atoi(value); + taosSetAllDebugFlag(debugFlag); + } + + if (strcasecmp(option, "resetlog") == 0) { + taosResetLog(); + cfgDumpCfg(tsCfg, 1, false); + } +} \ No newline at end of file diff --git a/source/dnode/mgmt/daemon/CMakeLists.txt b/source/dnode/mgmt/daemon/CMakeLists.txt index a5773447616d86998b7581387223b73c56062fbe..e07c15c95a3bc9b4fee58255a9174472732684fe 100644 --- a/source/dnode/mgmt/daemon/CMakeLists.txt +++ b/source/dnode/mgmt/daemon/CMakeLists.txt @@ -6,4 +6,4 @@ target_include_directories( PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc" ) -target_link_libraries(taosd dnode config util os) +target_link_libraries(taosd dnode util os) diff --git a/source/dnode/mgmt/daemon/inc/dmnInt.h b/source/dnode/mgmt/daemon/inc/dmnInt.h index 19ec147769a684adb7f15e27e5f55a2484894ffa..82e95782cb89b966e8800cef7ca2de49cf78aad5 100644 --- a/source/dnode/mgmt/daemon/inc/dmnInt.h +++ b/source/dnode/mgmt/daemon/inc/dmnInt.h @@ -17,7 +17,7 @@ #ifndef _TD_DMN_INT_H_ #define _TD_DMN_INT_H_ -#include "config.h" +#include "tconfig.h" #include "dnode.h" #include "taoserror.h" #include "tglobal.h" @@ -28,15 +28,9 @@ extern "C" { #endif -int32_t dmnAddLogCfg(SConfig *pCfg); -int32_t dmnInitLog(const char *cfgDir, const char *envFile, const char *apolloUrl); -int32_t dmnLoadCfg(SConfig *pConfig, const char *inputCfgDir, const char *envFile, const char *apolloUrl); +SDnodeObjCfg dmnGetObjCfg(); -SConfig *dmnReadCfg(const char *cfgDir, const char *envFile, const char *apolloUrl); -SDnodeEnvCfg dmnGetEnvCfg(SConfig *pCfg); -SDnodeObjCfg dmnGetObjCfg(SConfig *pCfg); - -void dmnDumpCfg(SConfig *pCfg); +void dmnDumpCfg(); void dmnPrintVersion(); void dmnGenerateGrant(); diff --git a/source/dnode/mgmt/daemon/src/dmnCfg.c b/source/dnode/mgmt/daemon/src/dmnCfg.c index 65c3e67d974940448eb9f7d40bca432e6543d79a..1e7d1d11eaf3b8c99bba3e0e2c07943867403863 100644 --- a/source/dnode/mgmt/daemon/src/dmnCfg.c +++ b/source/dnode/mgmt/daemon/src/dmnCfg.c @@ -15,204 +15,23 @@ #define _DEFAULT_SOURCE #include "dmnInt.h" +#include "tconfig.h" -static int32_t dmnAddEpCfg(SConfig *pCfg) { - char defaultFqdn[TSDB_FQDN_LEN] = {0}; - if (taosGetFqdn(defaultFqdn) != 0) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - if (cfgAddString(pCfg, "fqdn", defaultFqdn) != 0) return -1; - - int32_t defaultServerPort = 6030; - if (cfgAddInt32(pCfg, "serverPort", defaultServerPort, 1, 65056) != 0) return -1; - - char defaultFirstEp[TSDB_EP_LEN] = {0}; - char defaultSecondEp[TSDB_EP_LEN] = {0}; - snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); - snprintf(defaultSecondEp, TSDB_EP_LEN, "%s:%d", defaultFqdn, defaultServerPort); - if (cfgAddString(pCfg, "firstEp", defaultFirstEp) != 0) return -1; - if (cfgAddString(pCfg, "secondEp", defaultSecondEp) != 0) return -1; - - return 0; -} - -static int32_t dmnAddDirCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "dataDir", osDataDir()) != 0) return -1; - if (cfgAddDir(pCfg, "tempDir", osTempDir()) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalDataDirGB", 2.0f, 0.001f, 10000000) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalTempDirGB", 1.0f, 0.001f, 10000000) != 0) return -1; - return 0; -} - -static int32_t dmnCheckDirCfg(SConfig *pCfg) { - osSetDataDir(cfgGetItem(pCfg, "dataDir")->str); - osSetTempDir(cfgGetItem(pCfg, "tempDir")->str); - osSetTempReservedSpace(cfgGetItem(pCfg, "minimalDataDirGB")->fval); - osSetDataReservedSpace(cfgGetItem(pCfg, "minimalTempDirGB")->fval); - return 0; -} - -static int32_t dmnAddVersionCfg(SConfig *pCfg) { - if (cfgAddString(pCfg, "buildinfo", buildinfo) != 0) return -1; - if (cfgAddString(pCfg, "gitinfo", gitinfo) != 0) return -1; - if (cfgAddString(pCfg, "version", version) != 0) return -1; - return 0; -} - -static int32_t dmnAddDnodeCfg(SConfig *pCfg) { - if (dmnAddEpCfg(pCfg) != 0) return -1; - if (dmnAddDirCfg(pCfg) != 0) return -1; - if (dmnAddVersionCfg(pCfg) != 0) return -1; - - if (cfgAddTimezone(pCfg, "timezone", "") != 0) return -1; - if (cfgAddLocale(pCfg, "locale", "") != 0) return -1; - if (cfgAddCharset(pCfg, "charset", "") != 0) return -1; - if (cfgAddInt32(pCfg, "numOfCores", 2, 1, 100000) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfCommitThreads", 4, 1, 1000) != 0) return -1; - if (cfgAddBool(pCfg, "telemetryReporting", 0) != 0) return -1; - if (cfgAddBool(pCfg, "enableCoreFile", 0) != 0) return -1; - if (cfgAddInt32(pCfg, "supportVnodes", 256, 0, 65536) != 0) return -1; - if (cfgAddInt32(pCfg, "statusInterval", 1, 1, 30) != 0) return -1; - if (cfgAddFloat(pCfg, "numOfThreadsPerCore", 1, 0, 10) != 0) return -1; - if (cfgAddFloat(pCfg, "ratioOfQueryCores", 1, 0, 5) != 0) return -1; - if (cfgAddInt32(pCfg, "maxShellConns", 50000, 10, 50000000) != 0) return -1; - if (cfgAddInt32(pCfg, "shellActivityTimer", 3, 1, 120) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcTimer", 300, 100, 3000) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcMaxTime", 600, 100, 7200) != 0) return -1; - - return 0; -} - -static void dmnSetDnodeCfg(SConfig *pCfg) { - SConfigItem *pItem = cfgGetItem(pCfg, "timezone"); - osSetTimezone(pItem->str); - uDebug("timezone format changed from %s to %s", pItem->str, osTimezone()); - cfgSetItem(pCfg, "timezone", osTimezone(), pItem->stype); -} - -static int32_t dmnCheckCfg(SConfig *pCfg) { - bool enableCore = cfgGetItem(pCfg, "enableCoreFile")->bval; - taosSetCoreDump(enableCore); - - dmnSetDnodeCfg(pCfg); - - if (dmnCheckDirCfg(pCfg) != 0) { - return -1; - } - - taosGetSystemInfo(); - - - if (tsNumOfCores <= 0) { - tsNumOfCores = 1; - } - - if (tsQueryBufferSize >= 0) { - tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL; - } - - return 0; -} - -SConfig *dmnReadCfg(const char *cfgDir, const char *envFile, const char *apolloUrl) { - SConfig *pCfg = cfgInit(); - if (pCfg == NULL) return NULL; - - if (dmnAddLogCfg(pCfg) != 0) { - uError("failed to add log cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - if (dmnAddDnodeCfg(pCfg) != 0) { - uError("failed to init dnode cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - if (dmnLoadCfg(pCfg, cfgDir, envFile, apolloUrl) != 0) { - uError("failed to load cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - if (dmnCheckCfg(pCfg) != 0) { - uError("failed to check cfg since %s", terrstr()); - cfgCleanup(pCfg); - return NULL; - } - - cfgDumpCfg(pCfg); - return pCfg; -} - -void dmnDumpCfg(SConfig *pCfg) { - printf("taos global config:\n"); - printf("==================================\n"); - - SConfigItem *pItem = cfgIterate(pCfg, NULL); - while (pItem != NULL) { - switch (pItem->dtype) { - case CFG_DTYPE_BOOL: - printf("cfg:%s, value:%u src:%s\n", pItem->name, pItem->bval, cfgStypeStr(pItem->stype)); - break; - case CFG_DTYPE_INT32: - printf("cfg:%s, value:%d src:%s\n", pItem->name, pItem->i32, cfgStypeStr(pItem->stype)); - break; - case CFG_DTYPE_INT64: - printf("cfg:%s, value:%" PRId64 " src:%s\n", pItem->name, pItem->i64, cfgStypeStr(pItem->stype)); - break; - case CFG_DTYPE_FLOAT: - printf("cfg:%s, value:%f src:%s\n", pItem->name, pItem->fval, cfgStypeStr(pItem->stype)); - break; - case CFG_DTYPE_STRING: - case CFG_DTYPE_IPSTR: - case CFG_DTYPE_DIR: - case CFG_DTYPE_LOCALE: - case CFG_DTYPE_CHARSET: - case CFG_DTYPE_TIMEZONE: - printf("cfg:%s, value:%s src:%s\n", pItem->name, pItem->str, cfgStypeStr(pItem->stype)); - break; - } - pItem = cfgIterate(pCfg, pItem); - } -} - -SDnodeEnvCfg dmnGetEnvCfg(SConfig *pCfg) { - SDnodeEnvCfg envCfg = {0}; - - const char *vstr = cfgGetItem(pCfg, "version")->str; - envCfg.sver = 30000000; - tstrncpy(envCfg.buildinfo, cfgGetItem(pCfg, "buildinfo")->str, sizeof(envCfg.buildinfo)); - tstrncpy(envCfg.gitinfo, cfgGetItem(pCfg, "gitinfo")->str, sizeof(envCfg.gitinfo)); - tstrncpy(envCfg.timezone, cfgGetItem(pCfg, "timezone")->str, sizeof(envCfg.timezone)); - tstrncpy(envCfg.locale, cfgGetItem(pCfg, "locale")->str, sizeof(envCfg.locale)); - tstrncpy(envCfg.charset, cfgGetItem(pCfg, "charset")->str, sizeof(envCfg.charset)); - envCfg.numOfCores = cfgGetItem(pCfg, "numOfCores")->i32; - envCfg.numOfCommitThreads = (uint16_t)cfgGetItem(pCfg, "numOfCommitThreads")->i32; - envCfg.enableTelem = cfgGetItem(pCfg, "telemetryReporting")->bval; - envCfg.rpcMaxTime = cfgGetItem(pCfg, "rpcMaxTime")->i32; - envCfg.rpcTimer = cfgGetItem(pCfg, "rpcTimer")->i32; - - return envCfg; -} - -SDnodeObjCfg dmnGetObjCfg(SConfig *pCfg) { +SDnodeObjCfg dmnGetObjCfg() { + SConfig *pCfg = taosGetCfg(); SDnodeObjCfg objCfg = {0}; objCfg.numOfSupportVnodes = cfgGetItem(pCfg, "supportVnodes")->i32; - objCfg.statusInterval = cfgGetItem(pCfg, "statusInterval")->i32; - objCfg.numOfThreadsPerCore = cfgGetItem(pCfg, "numOfThreadsPerCore")->fval; - objCfg.ratioOfQueryCores = cfgGetItem(pCfg, "ratioOfQueryCores")->fval; - objCfg.maxShellConns = cfgGetItem(pCfg, "maxShellConns")->i32; - objCfg.shellActivityTimer = cfgGetItem(pCfg, "shellActivityTimer")->i32; tstrncpy(objCfg.dataDir, cfgGetItem(pCfg, "dataDir")->str, sizeof(objCfg.dataDir)); - tstrncpy(objCfg.firstEp, cfgGetItem(pCfg, "firstEp")->str, sizeof(objCfg.firstEp)); tstrncpy(objCfg.secondEp, cfgGetItem(pCfg, "secondEp")->str, sizeof(objCfg.firstEp)); objCfg.serverPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32; tstrncpy(objCfg.localFqdn, cfgGetItem(pCfg, "fqdn")->str, sizeof(objCfg.localFqdn)); snprintf(objCfg.localEp, sizeof(objCfg.localEp), "%s:%u", objCfg.localFqdn, objCfg.serverPort); return objCfg; +} + +void dmnDumpCfg() { + SConfig *pCfg = taosGetCfg(); + cfgDumpCfg(pCfg, 0, 1); } \ No newline at end of file diff --git a/source/dnode/mgmt/daemon/src/dmnLog.c b/source/dnode/mgmt/daemon/src/dmnLog.c deleted file mode 100644 index 147357c845fd675843f4f8fcb3b25c9b76f03614..0000000000000000000000000000000000000000 --- a/source/dnode/mgmt/daemon/src/dmnLog.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "dmnInt.h" - -int32_t dmnAddLogCfg(SConfig *pCfg) { - if (cfgAddDir(pCfg, "logDir", osLogDir()) != 0) return -1; - if (cfgAddFloat(pCfg, "minimalLogDirGB", 1.0f, 0.001f, 10000000) != 0) return -1; - if (cfgAddBool(pCfg, "asyncLog", 1) != 0) return -1; - if (cfgAddInt32(pCfg, "numOfLogLines", 10000000, 1000, 2000000000) != 0) return -1; - if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000) != 0) return -1; - if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "dDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "vDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "mDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "cDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "jniDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "tmrDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "uDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "rpcDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "qDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "wDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "sDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "tsdbDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "tqDebugFlag", 0, 0, 255) != 0) return -1; - if (cfgAddInt32(pCfg, "fsDebugFlag", 0, 0, 255) != 0) return -1; - return 0; -} - -int32_t dmnSetLogCfg(SConfig *pCfg) { - osSetLogDir(cfgGetItem(pCfg, "logDir")->str); - osSetLogReservedSpace(cfgGetItem(pCfg, "minimalLogDirGB")->fval); - tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval; - tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32; - tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32; - dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32; - vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32; - mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32; - cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32; - jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32; - tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32; - uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32; - rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32; - qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32; - wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32; - sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32; - tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32; - tqDebugFlag = cfgGetItem(pCfg, "tqDebugFlag")->i32; - fsDebugFlag = cfgGetItem(pCfg, "fsDebugFlag")->i32; - - int32_t debugFlag = cfgGetItem(pCfg, "debugFlag")->i32; - taosSetAllDebugFlag(debugFlag); - - return 0; -} - -int32_t dmnInitLog(const char *cfgDir, const char *envFile, const char *apolloUrl) { - SConfig *pCfg = cfgInit(); - if (pCfg == NULL) return -1; - - if (dmnAddLogCfg(pCfg) != 0) { - printf("failed to add log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - if (dmnLoadCfg(pCfg, cfgDir, envFile, apolloUrl) != 0) { - printf("failed to load log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - if (dmnSetLogCfg(pCfg) != 0) { - printf("failed to set log cfg since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - if (taosInitLog("taosdlog", 1) != 0) { - printf("failed to init log file since %s\n", terrstr()); - cfgCleanup(pCfg); - return -1; - } - - cfgCleanup(pCfg); - return 0; -} - -int32_t dmnLoadCfg(SConfig *pConfig, const char *inputCfgDir, const char *envFile, const char *apolloUrl) { - char configDir[PATH_MAX] = {0}; - char configFile[PATH_MAX + 100] = {0}; - - taosExpandDir(inputCfgDir, configDir, PATH_MAX); - snprintf(configFile, sizeof(configFile), "%s" TD_DIRSEP "taos.cfg", configDir); - - if (cfgLoad(pConfig, CFG_STYPE_APOLLO_URL, apolloUrl) != 0) { - uError("failed to load from apollo url:%s since %s\n", apolloUrl, terrstr()); - return -1; - } - - if (cfgLoad(pConfig, CFG_STYPE_CFG_FILE, configFile) != 0) { - if (cfgLoad(pConfig, CFG_STYPE_CFG_FILE, configDir) != 0) { - uError("failed to load from config file:%s since %s\n", configFile, terrstr()); - return -1; - } - } - - if (cfgLoad(pConfig, CFG_STYPE_ENV_FILE, envFile) != 0) { - uError("failed to load from env file:%s since %s\n", envFile, terrstr()); - return -1; - } - - if (cfgLoad(pConfig, CFG_STYPE_ENV_VAR, NULL) != 0) { - uError("failed to load from global env variables since %s\n", terrstr()); - return -1; - } - - return 0; -} diff --git a/source/dnode/mgmt/daemon/src/dmnMain.c b/source/dnode/mgmt/daemon/src/dmnMain.c index 62f0db5fc52f982870153c8708ae15ef5f3cfb32..9ce09c0a5ded5f3d3dcb35478dd7004058ca28ba 100644 --- a/source/dnode/mgmt/daemon/src/dmnMain.c +++ b/source/dnode/mgmt/daemon/src/dmnMain.c @@ -72,15 +72,14 @@ static int32_t dmnParseOption(int32_t argc, char const *argv[]) { return 0; } -int32_t dmnRunDnode(SConfig *pCfg) { - SDnodeEnvCfg envCfg = dmnGetEnvCfg(pCfg); - if (dndInit(&envCfg) != 0) { +int32_t dmnRunDnode() { + if (dndInit() != 0) { uInfo("Failed to start TDengine, please check the log"); return -1; } - SDnodeObjCfg objCfg = dmnGetObjCfg(pCfg); - SDnode *pDnode = dndCreate(&objCfg); + SDnodeObjCfg objCfg = dmnGetObjCfg(); + SDnode *pDnode = dndCreate(&objCfg); if (pDnode == NULL) { uInfo("Failed to start TDengine, please check the log"); return -1; @@ -93,12 +92,11 @@ int32_t dmnRunDnode(SConfig *pCfg) { dndClose(pDnode); dndCleanup(); taosCloseLog(); + taosCleanupCfg(); return 0; } int main(int argc, char const *argv[]) { - osInit(); - if (dmnParseOption(argc, argv) != 0) { return -1; } @@ -113,23 +111,21 @@ int main(int argc, char const *argv[]) { return 0; } - if (dmnInitLog(configDir, dmn.envFile, dmn.apolloUrl) != 0) { + if (taosCreateLog("taosdlog", 1, configDir, dmn.envFile, dmn.apolloUrl, 0) != 0) { + uInfo("Failed to start TDengine since read config error"); return -1; } - SConfig *pCfg = dmnReadCfg(configDir, dmn.envFile, dmn.apolloUrl); - if (pCfg == NULL) { + if (taosInitCfg(configDir, dmn.envFile, dmn.apolloUrl, 0) != 0) { uInfo("Failed to start TDengine since read config error"); return -1; } if (dmn.dumpConfig) { - dmnDumpCfg(pCfg); - cfgCleanup(pCfg); + dmnDumpCfg(); + taosCleanupCfg(); return 0; } - int32_t code = dmnRunDnode(pCfg); - cfgCleanup(pCfg); - return code; + return dmnRunDnode(); } diff --git a/source/dnode/mgmt/impl/inc/dndEnv.h b/source/dnode/mgmt/impl/inc/dndEnv.h index 9eff246323fd640aa83f49dec1958274ade2b96f..7465dc14f73fc43076700f2711d9dd54bf0cf153 100644 --- a/source/dnode/mgmt/impl/inc/dndEnv.h +++ b/source/dnode/mgmt/impl/inc/dndEnv.h @@ -124,7 +124,6 @@ typedef struct { typedef struct SDnode { EStat stat; SDnodeObjCfg cfg; - SDnodeEnvCfg env; SDnodeDir dir; FileFd lockFd; SDnodeMgmt dmgmt; @@ -138,11 +137,6 @@ typedef struct SDnode { SStartupReq startup; } SDnode; -typedef struct { - int8_t once; - SDnodeEnvCfg cfg; -} SDnodeEnv; - #ifdef __cplusplus } #endif diff --git a/source/dnode/mgmt/impl/inc/dndInt.h b/source/dnode/mgmt/impl/inc/dndInt.h index 829fabd006f78daffb8da81e19d8255a7ddcbc10..417bc1e0411b4e185d7602aea9e02735ef1a1027 100644 --- a/source/dnode/mgmt/impl/inc/dndInt.h +++ b/source/dnode/mgmt/impl/inc/dndInt.h @@ -35,6 +35,7 @@ extern "C" { #include "tthread.h" #include "ttime.h" #include "tworker.h" +#include "tglobal.h" #include "dnode.h" diff --git a/source/dnode/mgmt/impl/src/dndBnode.c b/source/dnode/mgmt/impl/src/dndBnode.c index e37a1646608e4f6e2135d9adfeec8b0c700017b9..610579f6f5c7d7c7fbd8989fa2d767f29d8f97a0 100644 --- a/source/dnode/mgmt/impl/src/dndBnode.c +++ b/source/dnode/mgmt/impl/src/dndBnode.c @@ -179,7 +179,7 @@ static void dndBuildBnodeOption(SDnode *pDnode, SBnodeOpt *pOption) { pOption->sendRedirectRspFp = dndSendRedirectRsp; pOption->dnodeId = dndGetDnodeId(pDnode); pOption->clusterId = dndGetClusterId(pDnode); - pOption->sver = pDnode->env.sver; + pOption->sver = tsVersion; } static int32_t dndOpenBnode(SDnode *pDnode) { diff --git a/source/dnode/mgmt/impl/src/dndEnv.c b/source/dnode/mgmt/impl/src/dndEnv.c index b8f249f838203b57232c315a3503729fe2b13449..5bc3b756eaa1d7167f36ecf4c4818944398cb16a 100644 --- a/source/dnode/mgmt/impl/src/dndEnv.c +++ b/source/dnode/mgmt/impl/src/dndEnv.c @@ -25,7 +25,7 @@ #include "tfs.h" #include "wal.h" -static SDnodeEnv dndEnv = {0}; +static int8_t once = DND_ENV_INIT; EStat dndGetStat(SDnode *pDnode) { return pDnode->stat; } @@ -137,7 +137,6 @@ static int32_t dndCreateImp(SDnode *pDnode, SDnodeObjCfg *pCfg) { } memcpy(&pDnode->cfg, pCfg, sizeof(SDnodeObjCfg)); - memcpy(&pDnode->env, &dndEnv.cfg, sizeof(SDnodeEnvCfg)); return 0; } @@ -259,8 +258,8 @@ void dndClose(SDnode *pDnode) { dInfo("dnode object is closed, data:%p", pDnode); } -int32_t dndInit(const SDnodeEnvCfg *pCfg) { - if (atomic_val_compare_exchange_8(&dndEnv.once, DND_ENV_INIT, DND_ENV_READY) != DND_ENV_INIT) { +int32_t dndInit() { + if (atomic_val_compare_exchange_8(&once, DND_ENV_INIT, DND_ENV_READY) != DND_ENV_INIT) { terrno = TSDB_CODE_REPEAT_INIT; dError("failed to init dnode env since %s", terrstr()); return -1; @@ -270,8 +269,7 @@ int32_t dndInit(const SDnodeEnvCfg *pCfg) { taosBlockSIGPIPE(); taosResolveCRC(); - SRpcCfg rpcCfg = {.rpcTimer = pCfg->rpcTimer, .rpcMaxTime = pCfg->rpcMaxTime, .sver = pCfg->sver}; - if (rpcInit(&rpcCfg) != 0) { + if (rpcInit() != 0) { dError("failed to init rpc since %s", terrstr()); dndCleanup(); return -1; @@ -284,11 +282,8 @@ int32_t dndInit(const SDnodeEnvCfg *pCfg) { } SVnodeOpt vnodeOpt = { - .sver = pCfg->sver, - .timezone = pCfg->timezone, - .locale = pCfg->locale, - .charset = pCfg->charset, - .nthreads = pCfg->numOfCommitThreads, + .sver = tsVersion, + .nthreads = tsNumOfCommitThreads, .putReqToVQueryQFp = dndPutReqToVQueryQ, .sendReqToDnodeFp = dndSendReqToDnode }; @@ -299,13 +294,12 @@ int32_t dndInit(const SDnodeEnvCfg *pCfg) { return -1; } - memcpy(&dndEnv.cfg, pCfg, sizeof(SDnodeEnvCfg)); dInfo("dnode env is initialized"); return 0; } void dndCleanup() { - if (atomic_val_compare_exchange_8(&dndEnv.once, DND_ENV_READY, DND_ENV_CLEANUP) != DND_ENV_READY) { + if (atomic_val_compare_exchange_8(&once, DND_ENV_READY, DND_ENV_CLEANUP) != DND_ENV_READY) { dError("dnode env is already cleaned up"); return; } diff --git a/source/dnode/mgmt/impl/src/dndMgmt.c b/source/dnode/mgmt/impl/src/dndMgmt.c index b7f42fb465623687f468bb51874d1520f17abc7b..4827065e87cb3e62d737a4d572ff9ced9b0d978e 100644 --- a/source/dnode/mgmt/impl/src/dndMgmt.c +++ b/source/dnode/mgmt/impl/src/dndMgmt.c @@ -296,7 +296,7 @@ PRASE_DNODE_OVER: if (taosArrayGetSize(pMgmt->pDnodeEps) == 0) { SDnodeEp dnodeEp = {0}; dnodeEp.isMnode = 1; - taosGetFqdnPortFromEp(pDnode->cfg.firstEp, pDnode->cfg.serverPort, &dnodeEp.ep); + taosGetFqdnPortFromEp(pDnode->cfg.firstEp, &dnodeEp.ep); taosArrayPush(pMgmt->pDnodeEps, &dnodeEp); } @@ -357,23 +357,23 @@ void dndSendStatusReq(SDnode *pDnode) { SDnodeMgmt *pMgmt = &pDnode->dmgmt; taosRLockLatch(&pMgmt->latch); - req.sver = pDnode->env.sver; + req.sver = tsVersion; req.dver = pMgmt->dver; req.dnodeId = pMgmt->dnodeId; req.clusterId = pMgmt->clusterId; req.rebootTime = pMgmt->rebootTime; req.updateTime = pMgmt->updateTime; - req.numOfCores = pDnode->env.numOfCores; + req.numOfCores = tsNumOfCores; req.numOfSupportVnodes = pDnode->cfg.numOfSupportVnodes; memcpy(req.dnodeEp, pDnode->cfg.localEp, TSDB_EP_LEN); - req.clusterCfg.statusInterval = pDnode->cfg.statusInterval; + req.clusterCfg.statusInterval = tsStatusInterval; req.clusterCfg.checkTime = 0; char timestr[32] = "1970-01-01 00:00:00.00"; (void)taosParseTime(timestr, &req.clusterCfg.checkTime, (int32_t)strlen(timestr), TSDB_TIME_PRECISION_MILLI, 0); - memcpy(req.clusterCfg.timezone, pDnode->env.timezone, TD_TIMEZONE_LEN); - memcpy(req.clusterCfg.locale, pDnode->env.locale, TD_LOCALE_LEN); - memcpy(req.clusterCfg.charset, pDnode->env.charset, TD_LOCALE_LEN); + memcpy(req.clusterCfg.timezone, osTimezone(), TD_TIMEZONE_LEN); + memcpy(req.clusterCfg.locale, osLocale(), TD_LOCALE_LEN); + memcpy(req.clusterCfg.charset, osCharset(), TD_LOCALE_LEN); taosRUnLockLatch(&pMgmt->latch); req.pVloads = taosArrayInit(TSDB_MAX_VNODES, sizeof(SVnodeLoad)); @@ -475,7 +475,7 @@ void dndProcessStartupReq(SDnode *pDnode, SRpcMsg *pReq) { static void *dnodeThreadRoutine(void *param) { SDnode *pDnode = param; SDnodeMgmt *pMgmt = &pDnode->dmgmt; - int32_t ms = pDnode->cfg.statusInterval * 1000; + int32_t ms = tsStatusInterval * 1000; setThreadName("dnode-hb"); diff --git a/source/dnode/mgmt/impl/src/dndMnode.c b/source/dnode/mgmt/impl/src/dndMnode.c index c6db75c0575c3cc932e002c295d5e7e2c5d06e63..b69516b1b71537d75894371cffc4623729b4aea4 100644 --- a/source/dnode/mgmt/impl/src/dndMnode.c +++ b/source/dnode/mgmt/impl/src/dndMnode.c @@ -273,15 +273,6 @@ static void dndInitMnodeOption(SDnode *pDnode, SMnodeOpt *pOption) { pOption->putReqToMReadQFp = dndPutMsgToMReadQ; pOption->dnodeId = dndGetDnodeId(pDnode); pOption->clusterId = dndGetClusterId(pDnode); - pOption->cfg.sver = pDnode->env.sver; - pOption->cfg.enableTelem = pDnode->env.enableTelem; - pOption->cfg.statusInterval = pDnode->cfg.statusInterval; - pOption->cfg.shellActivityTimer = pDnode->cfg.shellActivityTimer; - pOption->cfg.timezone = pDnode->env.timezone; - pOption->cfg.charset = pDnode->env.charset; - pOption->cfg.locale = pDnode->env.locale; - pOption->cfg.gitinfo = pDnode->env.gitinfo; - pOption->cfg.buildinfo = pDnode->env.buildinfo; } static void dndBuildMnodeDeployOption(SDnode *pDnode, SMnodeOpt *pOption) { diff --git a/source/dnode/mgmt/impl/src/dndQnode.c b/source/dnode/mgmt/impl/src/dndQnode.c index 64545ec09f3eb55285e8bd494435fe7b582d2003..e5600fcaf0e0b66c39ed9276a3f46091de8af094 100644 --- a/source/dnode/mgmt/impl/src/dndQnode.c +++ b/source/dnode/mgmt/impl/src/dndQnode.c @@ -185,7 +185,7 @@ static void dndBuildQnodeOption(SDnode *pDnode, SQnodeOpt *pOption) { pOption->sendRedirectRspFp = dndSendRedirectRsp; pOption->dnodeId = dndGetDnodeId(pDnode); pOption->clusterId = dndGetClusterId(pDnode); - pOption->sver = pDnode->env.sver; + pOption->sver = tsVersion; } static int32_t dndOpenQnode(SDnode *pDnode) { diff --git a/source/dnode/mgmt/impl/src/dndSnode.c b/source/dnode/mgmt/impl/src/dndSnode.c index 77686a60271868ac5a6c25de1a78f0934e223f33..fb108559b14e994c9bb033fcc2a8d454c0973f32 100644 --- a/source/dnode/mgmt/impl/src/dndSnode.c +++ b/source/dnode/mgmt/impl/src/dndSnode.c @@ -179,7 +179,7 @@ static void dndBuildSnodeOption(SDnode *pDnode, SSnodeOpt *pOption) { pOption->sendRedirectRspFp = dndSendRedirectRsp; pOption->dnodeId = dndGetDnodeId(pDnode); pOption->clusterId = dndGetClusterId(pDnode); - pOption->sver = pDnode->env.sver; + pOption->sver = tsVersion; } static int32_t dndOpenSnode(SDnode *pDnode) { diff --git a/source/dnode/mgmt/impl/src/dndTransport.c b/source/dnode/mgmt/impl/src/dndTransport.c index 0aae145d2f3c9ab67c3546bb7cfa3dab49a141b6..8c64cc16c34f6ed0fbf573d5b2e36787f5070be9 100644 --- a/source/dnode/mgmt/impl/src/dndTransport.c +++ b/source/dnode/mgmt/impl/src/dndTransport.c @@ -189,7 +189,7 @@ static int32_t dndInitClient(SDnode *pDnode) { rpcInit.cfp = dndProcessResponse; rpcInit.sessions = 1024; rpcInit.connType = TAOS_CONN_CLIENT; - rpcInit.idleTime = pDnode->cfg.shellActivityTimer * 1000; + rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.user = INTERNAL_USER; rpcInit.ckey = INTERNAL_CKEY; rpcInit.spi = 1; @@ -344,7 +344,7 @@ static int32_t dndInitServer(SDnode *pDnode) { STransMgmt *pMgmt = &pDnode->tmgmt; dndInitMsgFp(pMgmt); - int32_t numOfThreads = (int32_t)((pDnode->env.numOfCores * pDnode->cfg.numOfThreadsPerCore) / 2.0); + int32_t numOfThreads = (int32_t)((tsNumOfCores * tsNumOfThreadsPerCore) / 2.0); if (numOfThreads < 1) { numOfThreads = 1; } @@ -355,9 +355,9 @@ static int32_t dndInitServer(SDnode *pDnode) { rpcInit.label = "D-S"; rpcInit.numOfThreads = numOfThreads; rpcInit.cfp = dndProcessRequest; - rpcInit.sessions = pDnode->cfg.maxShellConns; + rpcInit.sessions = tsMaxShellConns; rpcInit.connType = TAOS_CONN_SERVER; - rpcInit.idleTime = pDnode->cfg.shellActivityTimer * 1000; + rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.afp = dndRetrieveUserAuthInfo; rpcInit.parent = pDnode; diff --git a/source/dnode/mgmt/impl/src/dndVnodes.c b/source/dnode/mgmt/impl/src/dndVnodes.c index b82d991179a8b698b4be348a8f51ff164cb5e2d6..a0c0a02431c644b5a4f903d8ff54ff7593c8017f 100644 --- a/source/dnode/mgmt/impl/src/dndVnodes.c +++ b/source/dnode/mgmt/impl/src/dndVnodes.c @@ -421,7 +421,7 @@ static int32_t dndOpenVnodes(SDnode *pDnode) { pMgmt->totalVnodes = numOfVnodes; - int32_t threadNum = pDnode->env.numOfCores; + int32_t threadNum = tsNumOfCores; #if 1 threadNum = 1; #endif @@ -874,11 +874,11 @@ static int32_t dndInitVnodeWorkers(SDnode *pDnode) { SVnodesMgmt *pMgmt = &pDnode->vmgmt; int32_t maxFetchThreads = 4; - int32_t minFetchThreads = TMIN(maxFetchThreads, pDnode->env.numOfCores); - int32_t minQueryThreads = TMAX((int32_t)(pDnode->env.numOfCores * pDnode->cfg.ratioOfQueryCores), 1); + int32_t minFetchThreads = TMIN(maxFetchThreads, tsNumOfCores); + int32_t minQueryThreads = TMAX((int32_t)(tsNumOfCores * tsRatioOfQueryCores), 1); int32_t maxQueryThreads = minQueryThreads; - int32_t maxWriteThreads = TMAX(pDnode->env.numOfCores, 1); - int32_t maxSyncThreads = TMAX(pDnode->env.numOfCores / 2, 1); + int32_t maxWriteThreads = TMAX(tsNumOfCores, 1); + int32_t maxSyncThreads = TMAX(tsNumOfCores / 2, 1); SQWorkerPool *pQPool = &pMgmt->queryPool; pQPool->name = "vnode-query"; diff --git a/source/dnode/mgmt/impl/test/sut/src/server.cpp b/source/dnode/mgmt/impl/test/sut/src/server.cpp index f7b5ab45997e2975a3e60765faf62939a4319262..985625b41c28d2518e13a7b01db022b4f276f890 100644 --- a/source/dnode/mgmt/impl/test/sut/src/server.cpp +++ b/source/dnode/mgmt/impl/test/sut/src/server.cpp @@ -25,11 +25,6 @@ void* serverLoop(void* param) { SDnodeObjCfg TestServer::BuildOption(const char* path, const char* fqdn, uint16_t port, const char* firstEp) { SDnodeObjCfg cfg = {0}; cfg.numOfSupportVnodes = 16; - cfg.statusInterval = 1; - cfg.numOfThreadsPerCore = 1; - cfg.ratioOfQueryCores = 1; - cfg.maxShellConns = 1000; - cfg.shellActivityTimer = 30; cfg.serverPort = port; strcpy(cfg.dataDir, path); snprintf(cfg.localEp, TSDB_EP_LEN, "%s:%u", fqdn, port); diff --git a/source/dnode/mgmt/impl/test/sut/src/sut.cpp b/source/dnode/mgmt/impl/test/sut/src/sut.cpp index 5d2abd86c35cbe3a2ef8e227c131dc58b416782d..0073d0f1a83e17c80a8f8ce7d77624b501eba899 100644 --- a/source/dnode/mgmt/impl/test/sut/src/sut.cpp +++ b/source/dnode/mgmt/impl/test/sut/src/sut.cpp @@ -40,12 +40,7 @@ void Testbase::InitLog(const char* path) { } void Testbase::Init(const char* path, int16_t port) { - SDnodeEnvCfg cfg = {0}; - cfg.numOfCommitThreads = 1; - cfg.numOfCores = 1; - cfg.rpcMaxTime = 600; - cfg.rpcTimer = 300; - dndInit(&cfg); + dndInit(); char fqdn[] = "localhost"; char firstEp[TSDB_EP_LEN] = {0}; diff --git a/source/dnode/mnode/impl/inc/mndInt.h b/source/dnode/mnode/impl/inc/mndInt.h index 5c32da966b5fb84e96d351d1174c231656c301d6..e65535206d6cc1e23ae86d070b39d9c53336da41 100644 --- a/source/dnode/mnode/impl/inc/mndInt.h +++ b/source/dnode/mnode/impl/inc/mndInt.h @@ -24,6 +24,8 @@ #include "tqueue.h" #include "ttime.h" #include "wal.h" +#include "version.h" +#include "tglobal.h" #ifdef __cplusplus extern "C" { @@ -80,7 +82,6 @@ typedef struct SMnode { tmr_h mqTimer; tmr_h telemTimer; char *path; - SMnodeCfg cfg; int64_t checkTime; SSdb *pSdb; SDnode *pDnode; diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 39ea4b482c8a8798e5344c1972cb1844133b0320..a4c9334cbdf4bb291793934296c83f6dd68666d6 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -237,7 +237,7 @@ int32_t mndGetDnodeSize(SMnode *pMnode) { bool mndIsDnodeOnline(SMnode *pMnode, SDnodeObj *pDnode, int64_t curMs) { int64_t interval = TABS(pDnode->lastAccessTime - curMs); - if (interval > 3500 * pMnode->cfg.statusInterval) { + if (interval > 3500 * tsStatusInterval) { if (pDnode->rebootTime > 0) { pDnode->offlineReason = DND_REASON_STATUS_MSG_TIMEOUT; } @@ -272,24 +272,24 @@ static void mndGetDnodeData(SMnode *pMnode, SArray *pDnodeEps) { } static int32_t mndCheckClusterCfgPara(SMnode *pMnode, const SClusterCfg *pCfg) { - if (pCfg->statusInterval != pMnode->cfg.statusInterval) { - mError("statusInterval [%d - %d] cfg inconsistent", pCfg->statusInterval, pMnode->cfg.statusInterval); + if (pCfg->statusInterval != tsStatusInterval) { + mError("statusInterval [%d - %d] cfg inconsistent", pCfg->statusInterval, tsStatusInterval); return DND_REASON_STATUS_INTERVAL_NOT_MATCH; } - if ((0 != strcasecmp(pCfg->timezone, pMnode->cfg.timezone)) && (pMnode->checkTime != pCfg->checkTime)) { - mError("timezone [%s - %s] [%" PRId64 " - %" PRId64 "] cfg inconsistent", pCfg->timezone, pMnode->cfg.timezone, + if ((0 != strcasecmp(pCfg->timezone, osTimezone())) && (pMnode->checkTime != pCfg->checkTime)) { + mError("timezone [%s - %s] [%" PRId64 " - %" PRId64 "] cfg inconsistent", pCfg->timezone, osTimezone(), pCfg->checkTime, pMnode->checkTime); return DND_REASON_TIME_ZONE_NOT_MATCH; } - if (0 != strcasecmp(pCfg->locale, pMnode->cfg.locale)) { - mError("locale [%s - %s] cfg inconsistent", pCfg->locale, pMnode->cfg.locale); + if (0 != strcasecmp(pCfg->locale, osLocale())) { + mError("locale [%s - %s] cfg inconsistent", pCfg->locale, osLocale()); return DND_REASON_LOCALE_NOT_MATCH; } - if (0 != strcasecmp(pCfg->charset, pMnode->cfg.charset)) { - mError("charset [%s - %s] cfg inconsistent.", pCfg->charset, pMnode->cfg.charset); + if (0 != strcasecmp(pCfg->charset, osCharset())) { + mError("charset [%s - %s] cfg inconsistent.", pCfg->charset, osCharset()); return DND_REASON_CHARSET_NOT_MATCH; } @@ -355,12 +355,11 @@ static int32_t mndProcessStatusReq(SMnodeMsg *pReq) { bool needCheck = !online || dnodeChanged || reboot; if (needCheck) { - if (statusReq.sver != pMnode->cfg.sver) { + if (statusReq.sver != tsVersion) { if (pDnode != NULL) { pDnode->offlineReason = DND_REASON_VERSION_NOT_MATCH; } - mError("dnode:%d, status msg version:%d not match cluster:%d", statusReq.dnodeId, statusReq.sver, - pMnode->cfg.sver); + mError("dnode:%d, status msg version:%d not match cluster:%d", statusReq.dnodeId, statusReq.sver, tsVersion); terrno = TSDB_CODE_MND_INVALID_MSG_VERSION; goto PROCESS_STATUS_MSG_OVER; } @@ -666,19 +665,19 @@ static int32_t mndRetrieveConfigs(SMnodeMsg *pReq, SShowObj *pShow, char *data, int32_t cols = 0; cfgOpts[numOfRows] = "statusInterval"; - snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%d", pMnode->cfg.statusInterval); + snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%d", tsStatusInterval); numOfRows++; cfgOpts[numOfRows] = "timezone"; - snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", pMnode->cfg.timezone); + snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", osTimezone()); numOfRows++; cfgOpts[numOfRows] = "locale"; - snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", pMnode->cfg.locale); + snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", osLocale()); numOfRows++; cfgOpts[numOfRows] = "charset"; - snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", pMnode->cfg.charset); + snprintf(cfgVals[numOfRows], TSDB_CONIIG_VALUE_LEN, "%s", osCharset()); numOfRows++; for (int32_t i = 0; i < numOfRows; i++) { diff --git a/source/dnode/mnode/impl/src/mndProfile.c b/source/dnode/mnode/impl/src/mndProfile.c index 2dfdc8dc7ffb03c4ed9a55a7ee0da6ce42d967f1..e313c4d676e6e0770697ea879a0cf05271700538 100644 --- a/source/dnode/mnode/impl/src/mndProfile.c +++ b/source/dnode/mnode/impl/src/mndProfile.c @@ -63,7 +63,7 @@ static void mndCancelGetNextQuery(SMnode *pMnode, void *pIter); int32_t mndInitProfile(SMnode *pMnode) { SProfileMgmt *pMgmt = &pMnode->profileMgmt; - int32_t connCheckTime = pMnode->cfg.shellActivityTimer * 2; + int32_t connCheckTime = tsShellActivityTimer * 2; pMgmt->cache = taosCacheInit(TSDB_DATA_TYPE_INT, connCheckTime, true, (__cache_free_fn_t)mndFreeConn, "conn"); if (pMgmt->cache == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -117,7 +117,7 @@ static SConnObj *mndCreateConn(SMnode *pMnode, SRpcConnInfo *pInfo, int32_t pid, tstrncpy(connObj.user, pInfo->user, TSDB_USER_LEN); tstrncpy(connObj.app, app, TSDB_APP_NAME_LEN); - int32_t keepTime = pMnode->cfg.shellActivityTimer * 3; + int32_t keepTime = tsShellActivityTimer * 3; SConnObj *pConn = taosCachePut(pMgmt->cache, &connId, sizeof(int32_t), &connObj, sizeof(connObj), keepTime * 1000); if (pConn == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -143,7 +143,7 @@ static SConnObj *mndAcquireConn(SMnode *pMnode, int32_t connId) { return NULL; } - int32_t keepTime = pMnode->cfg.shellActivityTimer * 3; + int32_t keepTime = tsShellActivityTimer * 3; pConn->lastAccessTimeMs = keepTime * 1000 + (uint64_t)taosGetTimestampMs(); mTrace("conn:%d, acquired from cache, data:%p", pConn->id, pConn); diff --git a/source/dnode/mnode/impl/src/mndShow.c b/source/dnode/mnode/impl/src/mndShow.c index afb338e97d7c53bbc0e99cd46db0386f26270ffb..8fd0c282e15224a051225f04d911a98d2191e0a0 100644 --- a/source/dnode/mnode/impl/src/mndShow.c +++ b/source/dnode/mnode/impl/src/mndShow.c @@ -64,7 +64,7 @@ static SShowObj *mndCreateShowObj(SMnode *pMnode, SShowReq *pReq) { memcpy(showObj.db, pReq->db, TSDB_DB_FNAME_LEN); memcpy(showObj.payload, pReq->payload, pReq->payloadLen); - int32_t keepTime = pMnode->cfg.shellActivityTimer * 6 * 1000; + int32_t keepTime = tsShellActivityTimer * 6 * 1000; SShowObj *pShow = taosCachePut(pMgmt->cache, &showId, sizeof(int64_t), &showObj, size, keepTime); if (pShow == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; diff --git a/source/dnode/mnode/impl/src/mndTelem.c b/source/dnode/mnode/impl/src/mndTelem.c index 5292dd0a416437beae01554fa7f8648fb3989940..2f7d5e10b6ad743dc3093413ddae9920d682dad8 100644 --- a/source/dnode/mnode/impl/src/mndTelem.c +++ b/source/dnode/mnode/impl/src/mndTelem.c @@ -138,13 +138,9 @@ static void mndAddMemoryInfo(SMnode* pMnode, SBufferWriter* bw) { static void mndAddVersionInfo(SMnode* pMnode, SBufferWriter* bw) { STelemMgmt* pMgmt = &pMnode->telemMgmt; - - char vstr[32] = {0}; - taosVersionIntToStr(pMnode->cfg.sver, vstr, 32); - - mndAddStringField(bw, "version", vstr); - mndAddStringField(bw, "buildInfo", pMnode->cfg.buildinfo); - mndAddStringField(bw, "gitInfo", pMnode->cfg.gitinfo); + mndAddStringField(bw, "version", version); + mndAddStringField(bw, "buildInfo", buildinfo); + mndAddStringField(bw, "gitInfo", gitinfo); mndAddStringField(bw, "email", pMgmt->email); } @@ -270,7 +266,7 @@ static void mndGetEmail(SMnode* pMnode, char* filepath) { int32_t mndInitTelem(SMnode* pMnode) { STelemMgmt* pMgmt = &pMnode->telemMgmt; - pMgmt->enable = pMnode->cfg.enableTelem; + pMgmt->enable = tsEnableTelemetryReporting; taosInitRWLatch(&pMgmt->lock); mndGetEmail(pMnode, "/usr/local/taos/email"); diff --git a/source/dnode/mnode/impl/src/mnode.c b/source/dnode/mnode/impl/src/mnode.c index 299e66a7c011723bc3c43940d4041e0fc98bc0e9..5ade5685b88660dab070a0f6822057c9ee9bf86b 100644 --- a/source/dnode/mnode/impl/src/mnode.c +++ b/source/dnode/mnode/impl/src/mnode.c @@ -290,28 +290,13 @@ static int32_t mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) { pMnode->sendReqToDnodeFp = pOption->sendReqToDnodeFp; pMnode->sendReqToMnodeFp = pOption->sendReqToMnodeFp; pMnode->sendRedirectRspFp = pOption->sendRedirectRspFp; - pMnode->cfg.sver = pOption->cfg.sver; - pMnode->cfg.enableTelem = pOption->cfg.enableTelem; - pMnode->cfg.statusInterval = pOption->cfg.statusInterval; - pMnode->cfg.shellActivityTimer = pOption->cfg.shellActivityTimer; - pMnode->cfg.timezone = strdup(pOption->cfg.timezone); - pMnode->cfg.locale = strdup(pOption->cfg.locale); - pMnode->cfg.charset = strdup(pOption->cfg.charset); - pMnode->cfg.gitinfo = strdup(pOption->cfg.gitinfo); - pMnode->cfg.buildinfo = strdup(pOption->cfg.buildinfo); if (pMnode->sendReqToDnodeFp == NULL || pMnode->sendReqToMnodeFp == NULL || pMnode->sendRedirectRspFp == NULL || - pMnode->putReqToMWriteQFp == NULL || pMnode->dnodeId < 0 || pMnode->clusterId < 0 || - pMnode->cfg.statusInterval < 1) { + pMnode->putReqToMWriteQFp == NULL || pMnode->dnodeId < 0 || pMnode->clusterId < 0) { terrno = TSDB_CODE_MND_INVALID_OPTIONS; return -1; } - if (pMnode->cfg.timezone == NULL || pMnode->cfg.locale == NULL || pMnode->cfg.charset == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - return 0; } @@ -381,11 +366,6 @@ void mndClose(SMnode *pMnode) { mDebug("start to close mnode"); mndCleanupSteps(pMnode, -1); tfree(pMnode->path); - tfree(pMnode->cfg.charset); - tfree(pMnode->cfg.locale); - tfree(pMnode->cfg.timezone); - tfree(pMnode->cfg.gitinfo); - tfree(pMnode->cfg.buildinfo); tfree(pMnode); mDebug("mnode is closed"); } diff --git a/source/libs/CMakeLists.txt b/source/libs/CMakeLists.txt index da2ab5b4250a1e1be2f13fff4ef989ddca9c3037..aa6d204310dfc93c19d7543904ef795fc3c757fc 100644 --- a/source/libs/CMakeLists.txt +++ b/source/libs/CMakeLists.txt @@ -14,5 +14,4 @@ add_subdirectory(qcom) add_subdirectory(qworker) add_subdirectory(tfs) add_subdirectory(nodes) -add_subdirectory(config) add_subdirectory(scalar) diff --git a/source/libs/config/CMakeLists.txt b/source/libs/config/CMakeLists.txt deleted file mode 100644 index 596cc0b433fdca4c509ee569845e3c4cea08873a..0000000000000000000000000000000000000000 --- a/source/libs/config/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -aux_source_directory(src CONFIG_SRC) -add_library(config STATIC ${CONFIG_SRC}) -target_include_directories( - config - PUBLIC "${CMAKE_SOURCE_DIR}/include/libs/config" - PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc" -) - -target_link_libraries(config os util common) - -if(${BUILD_TEST}) - ADD_SUBDIRECTORY(test) -endif(${BUILD_TEST}) \ No newline at end of file diff --git a/source/libs/config/inc/cfgInt.h b/source/libs/config/inc/cfgInt.h deleted file mode 100644 index 6497393792210f0db7a5bcbacdadafee0cfb0e1c..0000000000000000000000000000000000000000 --- a/source/libs/config/inc/cfgInt.h +++ /dev/null @@ -1,47 +0,0 @@ - -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#ifndef _TD_CFG_INT_H_ -#define _TD_CFG_INT_H_ - -#include "config.h" -#include "taoserror.h" -#include "thash.h" -#include "tutil.h" -#include "ulog.h" -#include "tglobal.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct SConfig { - ECfgSrcType stype; - SHashObj *hash; -} SConfig; - -int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath); -int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *filepath); -int32_t cfgLoadFromEnvVar(SConfig *pConfig); -int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url); - -int32_t cfgSetItem(SConfig *pConfig, const char *name, const char *value, ECfgSrcType stype); - -#ifdef __cplusplus -} -#endif - -#endif /*_TD_CFG_INT_H_*/ diff --git a/source/libs/config/src/cfgApolloUrl.c b/source/libs/config/src/cfgApolloUrl.c deleted file mode 100644 index f35eca70c385407f7dc7d3504089ac825faf6721..0000000000000000000000000000000000000000 --- a/source/libs/config/src/cfgApolloUrl.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "cfgInt.h" - -int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { - uInfo("load from apoll url %s", url); - return 0; -} \ No newline at end of file diff --git a/source/libs/config/src/cfgCfgFile.c b/source/libs/config/src/cfgCfgFile.c deleted file mode 100644 index 4eb835be7ff9362c82c8a7c99d24ce37a91f7d32..0000000000000000000000000000000000000000 --- a/source/libs/config/src/cfgCfgFile.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "cfgInt.h" - -int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { - char *line, *name, *value, *value2, *value3; - int olen, vlen, vlen2, vlen3; - ssize_t _bytes = 0; - size_t len = 1024; - - FILE *fp = fopen(filepath, "r"); - if (fp == NULL) { - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - - line = malloc(len); - - while (!feof(fp)) { - memset(line, 0, len); - - name = value = value2 = value3 = NULL; - olen = vlen = vlen2 = vlen3 = 0; - - _bytes = tgetline(&line, &len, fp); - if (_bytes < 0) { - break; - } - - line[len - 1] = 0; - - paGetToken(line, &name, &olen); - if (olen == 0) continue; - name[olen] = 0; - - paGetToken(name + olen + 1, &value, &vlen); - if (vlen == 0) continue; - value[vlen] = 0; - - paGetToken(value + vlen + 1, &value2, &vlen2); - if (vlen2 != 0) { - value2[vlen2] = 0; - paGetToken(value2 + vlen2 + 1, &value3, &vlen3); - if (vlen3 != 0) value3[vlen3] = 0; - } - - cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE); - // taosReadConfigOption(name, value, value2, value3); - } - - fclose(fp); - tfree(line); - - uInfo("load from cfg file %s success", filepath); - return 0; -} \ No newline at end of file diff --git a/source/libs/config/src/cfgEnvFile.c b/source/libs/config/src/cfgEnvFile.c deleted file mode 100644 index a12d1cd1d5aa93ab4b439a730be7306b61b33cf0..0000000000000000000000000000000000000000 --- a/source/libs/config/src/cfgEnvFile.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "cfgInt.h" - -int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *filepath) { - uInfo("load from env file %s", filepath); - return 0; -} \ No newline at end of file diff --git a/source/libs/config/src/cfgEnvVar.c b/source/libs/config/src/cfgEnvVar.c deleted file mode 100644 index c3b3df404742ec35bf51f4a72ec314d731bc438d..0000000000000000000000000000000000000000 --- a/source/libs/config/src/cfgEnvVar.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#define _DEFAULT_SOURCE -#include "cfgInt.h" - -int32_t cfgLoadFromEnvVar(SConfig *pConfig) { - uInfo("load from global env variables"); - return 0; -} \ No newline at end of file diff --git a/source/libs/config/test/CMakeLists.txt b/source/libs/config/test/CMakeLists.txt deleted file mode 100644 index 1e63d5025dc975b8af50fd5ef3adfe2dae2e0772..0000000000000000000000000000000000000000 --- a/source/libs/config/test/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -enable_testing() - -aux_source_directory(. CFG_TEST_SRC) -add_executable(cfg_test ${CFG_TEST_SRC}) -target_link_libraries( - cfg_test - PUBLIC config - PUBLIC gtest_main -) - -add_test( - NAME cfg_test - COMMAND cfg_test -) diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index cc05d433eb013b32abaed70290fbdeb0b7208584..8200ab049c7819a060e139b8f76aa5aaca564084 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -132,8 +132,7 @@ do { \ } while (0) int32_t getMaximumIdleDurationSec() { - // todo - return 6; //tsShellActivityTimer * 2; + return tsShellActivityTimer * 2; } static int32_t getExprFunctionId(SExprInfo *pExprInfo) { @@ -5302,12 +5301,10 @@ SOperatorInfo* createExchangeOperatorInfo(const SArray* pSources, const SArray* rpcInit.label = "EX"; rpcInit.numOfThreads = 1; rpcInit.cfp = qProcessFetchRsp; - // todo - rpcInit.sessions = 50000; //tsMaxConnections; + rpcInit.sessions = tsMaxConnections; rpcInit.connType = TAOS_CONN_CLIENT; rpcInit.user = (char *)"root"; - // todo - rpcInit.idleTime = 6; //tsShellActivityTimer * 1000; + rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.ckey = "key"; rpcInit.spi = 1; rpcInit.secret = (char *)"dcc5bed04851fec854c035b2e40263b6"; diff --git a/source/libs/qcom/src/queryUtil.c b/source/libs/qcom/src/queryUtil.c index b29817a3187e83c545140f44bf06f988d8b8b1a4..a2165453d55820078292eedb7085f7877f459092 100644 --- a/source/libs/qcom/src/queryUtil.c +++ b/source/libs/qcom/src/queryUtil.c @@ -85,11 +85,10 @@ static void* pTaskQueue = NULL; int32_t initTaskQueue() { double factor = 4.0; - // todo - // int32_t numOfThreads = TMAX((int)(tsNumOfCores * tsNumOfThreadsPerCore / factor), 2); - int32_t numOfThreads = TMAX((int)(tsNumOfCores * 1.0f / factor), 2); - int32_t queueSize = 25000; //tsMaxConnections * 2; + int32_t numOfThreads = TMAX((int)(tsNumOfCores * tsNumOfThreadsPerCore / factor), 2); + + int32_t queueSize = tsMaxConnections * 2; pTaskQueue = taosInitScheduler(queueSize, numOfThreads, "tsc"); if (NULL == pTaskQueue) { qError("failed to init task queue"); diff --git a/source/libs/transport/src/rpcMain.c b/source/libs/transport/src/rpcMain.c index cfd01bf3be7c4b0256dde3a3669b88dbaf69fb40..e1319da1624b0b32c9cd0e987768e0ea8e66e022 100644 --- a/source/libs/transport/src/rpcMain.c +++ b/source/libs/transport/src/rpcMain.c @@ -42,8 +42,6 @@ int tsRpcMaxRetry; int tsRpcHeadSize; int tsRpcOverhead; -int32_t tsRpcForceTcp = 1; // disable this, means query, show command use udp protocol as default - SHashObj *tsFqdnHash; #ifndef USE_UV @@ -146,10 +144,6 @@ typedef struct SRpcConn { static int tsRpcRefId = -1; static int32_t tsRpcNum = 0; -int32_t tsRpcTimer = 300; -int32_t tsRpcMaxTime = 600; // seconds; -uint32_t tsVersion = 0; - // static pthread_once_t tsRpcInit = PTHREAD_ONCE_INIT; // server:0 client:1 tcp:2 udp:0 @@ -229,9 +223,7 @@ static void rpcInitImp(void) { tsFqdnHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); } -int32_t rpcInit(SRpcCfg *pCfg) { - tsRpcTimer = pCfg->rpcTimer; - tsRpcMaxTime = pCfg->rpcMaxTime; +int32_t rpcInit() { pthread_once(&tsRpcInitOnce, rpcInitImp); return 0; } diff --git a/source/libs/transport/src/trans.c b/source/libs/transport/src/trans.c index 09aee6c8bcad1255173f9912ff1ddb83e4fab02a..b45683617f6343f5df79fb85e95e44aac3a8c056 100644 --- a/source/libs/transport/src/trans.c +++ b/source/libs/transport/src/trans.c @@ -112,7 +112,7 @@ void rpcSendRedirectRsp(void* thandle, const SEpSet* pEpSet) { int rpcReportProgress(void* pConn, char* pCont, int contLen) { return -1; } void rpcCancelRequest(int64_t rid) { return; } -int32_t rpcInit(SRpcCfg* pCfg) { +int32_t rpcInit() { // impl later return 0; } diff --git a/source/os/src/osEnv.c b/source/os/src/osEnv.c index 6fad7e4f3265fa65a106b022f84cb403b9e6a387..173db8405b138d34844527693fa13f0c73a5558b 100644 --- a/source/os/src/osEnv.c +++ b/source/os/src/osEnv.c @@ -31,6 +31,7 @@ typedef struct SOsEnv { char locale[TD_LOCALE_LEN]; char charset[TD_CHARSET_LEN]; int8_t daylight; + bool enableCoreFile; } SOsEnv; static SOsEnv env = {0}; @@ -73,9 +74,12 @@ void osSetLogReservedSpace(float sizeInGB) { env.logSpace.reserved = sizeInGB; } void osSetTempReservedSpace(float sizeInGB) { env.tempSpace.reserved = sizeInGB; } void osSetDataReservedSpace(float sizeInGB) { env.dataSpace.reserved = sizeInGB; } void osSetTimezone(const char *timezone) { taosSetSystemTimezone(timezone, env.timezone, &env.daylight); } +void osSetLocale(const char *locale, const char *charset) { taosSetSystemLocale(locale, charset); } +bool osSetEnableCore(bool enable) { env.enableCoreFile = enable; } void osInit() { srand(taosSafeRand()); + taosGetSystemInfo(); #if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) taosWinSocketInit(); @@ -88,21 +92,27 @@ void osInit() { strcpy(env.tempDir, tmpDir); } - strcpy(configDir, "C:\\TDengine\\cfg"); + if (configDir[0] == 0) { + strcpy(configDir, "C:\\TDengine\\cfg"); + } strcpy(env.dataDir, "C:\\TDengine\\data"); strcpy(env.logDir, "C:\\TDengine\\log"); strcpy(env.tempDir, "C:\\Windows\\Temp"); strcpy(env.osName, "Windows"); #elif defined(_TD_DARWIN_64) - strcpy(configDir, "/tmp/taosd"); + if (configDir[0] == 0) { + strcpy(configDir, "/tmp/taosd"); + } strcpy(env.dataDir, "/usr/local/var/lib/taos"); strcpy(env.logDir, "/usr/local/var/log/taos"); strcpy(env.tempDir, "/usr/local/etc/taos"); strcpy(env.osName, "Darwin"); #else - strcpy(configDir, "/etc/taos"); + if (configDir[0] == 0) { + strcpy(configDir, "/etc/taos"); + } strcpy(env.dataDir, "/var/lib/taos"); strcpy(env.logDir, "/var/log/taos"); strcpy(env.tempDir, "/tmp"); diff --git a/source/os/src/osLocale.c b/source/os/src/osLocale.c index e006a337a0817a9f94d0d694ead331c20d4a1dff..47546f7deb2ddaf03106fd63e6f82a716f23a7fd 100644 --- a/source/os/src/osLocale.c +++ b/source/os/src/osLocale.c @@ -75,13 +75,8 @@ void taosSetSystemLocale(const char *inLocale, const char *inCharSet) { char *locale = setlocale(LC_CTYPE, inLocale); // default locale or user specified locale is not valid, abort launch - if (inLocale == NULL) { - printf("Invalid locale:%s, please set the valid locale in config file\n", inLocale); - } - - if (strlen(inCharSet) == 0) { - printf("failed to get charset, please set the valid charset in config file\n"); - exit(-1); + if (inLocale == NULL || strlen(inLocale) == 0) { + //printf("Invalid locale:%s, please set the valid locale in config file\n", inLocale); } if (!taosValidateEncodec(inCharSet)) { diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 4a8cc5ecbc92656bd372af9684039339ccca33c8..5bbd7e59a50dbd988117a8611ae2d5c918a0b72c 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -20,7 +20,7 @@ int32_t tsTotalMemoryMB = 0; int64_t tsPageSize = 0; int64_t tsOpenMax = 0; int64_t tsStreamMax = 0; -int32_t tsNumOfCores = 1; +int32_t tsNumOfCores = 2; #if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32) /* diff --git a/source/libs/config/src/config.c b/source/util/src/tconfig.c similarity index 76% rename from source/libs/config/src/config.c rename to source/util/src/tconfig.c index b23826ceacc696669af94c2dbc729897e2fa5efd..0f4ba419f354e2f5b696b50ff2c49c3d312d18c4 100644 --- a/source/libs/config/src/config.c +++ b/source/util/src/tconfig.c @@ -14,12 +14,25 @@ */ #define _DEFAULT_SOURCE -#include "cfgInt.h" -#include "tep.h" -#include "tmsg.h" - -#define CFG_NAME_PRINT_LEN 22 -#define CFG_SRC_PRINT_LEN 12 +#include "tconfig.h" +#include "taoserror.h" +#include "thash.h" +#include "tutil.h" +#include "ulog.h" + +#define CFG_NAME_PRINT_LEN 24 +#define CFG_SRC_PRINT_LEN 12 + +typedef struct SConfig { + ECfgSrcType stype; + SHashObj *hash; +} SConfig; + +int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath); +int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *filepath); +int32_t cfgLoadFromEnvVar(SConfig *pConfig); +int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url); +int32_t cfgSetItem(SConfig *pConfig, const char *name, const char *value, ECfgSrcType stype); SConfig *cfgInit() { SConfig *pCfg = calloc(1, sizeof(SConfig)); @@ -131,23 +144,6 @@ static int32_t cfgCheckAndSetDir(SConfigItem *pItem, const char *inputDir) { return 0; } -static int32_t cfgCheckAndSetIpStr(SConfigItem *pItem, const char *ip) { - uint32_t value = taosInetAddr(ip); - if (value == INADDR_NONE) { - uError("ip:%s is not a valid ip address", ip); - return -1; - } - - tfree(pItem->str); - pItem->str = strdup(ip); - if (pItem->str == NULL) { - terrno = TSDB_CODE_OUT_OF_MEMORY; - return -1; - } - - return 0; -} - static int32_t cfgSetBool(SConfigItem *pItem, const char *value, ECfgSrcType stype) { bool tmp = false; if (strcasecmp(value, "true") == 0) { @@ -223,20 +219,6 @@ static int32_t cfgSetString(SConfigItem *pItem, const char *value, ECfgSrcType s return 0; } -static int32_t cfgSetIpStr(SConfigItem *pItem, const char *value, ECfgSrcType stype) { - char *tmp = strdup(value); - if (tmp == NULL || cfgCheckAndSetIpStr(pItem, value) != 0) { - free(tmp); - terrno = TSDB_CODE_OUT_OF_MEMORY; - uError("cfg:%s, type:%s src:%s value:%s failed to dup since %s, use last src:%s value:%s", pItem->name, - cfgDtypeStr(pItem->dtype), cfgStypeStr(stype), value, terrstr(), cfgStypeStr(pItem->stype), pItem->str); - return -1; - } - - pItem->stype = stype; - return 0; -} - static int32_t cfgSetDir(SConfigItem *pItem, const char *value, ECfgSrcType stype) { char *tmp = strdup(value); if (tmp == NULL || cfgCheckAndSetDir(pItem, value) != 0) { @@ -310,8 +292,6 @@ int32_t cfgSetItem(SConfig *pCfg, const char *name, const char *value, ECfgSrcTy return cfgSetFloat(pItem, value, stype); case CFG_DTYPE_STRING: return cfgSetString(pItem, value, stype); - case CFG_DTYPE_IPSTR: - return cfgSetIpStr(pItem, value, stype); case CFG_DTYPE_DIR: return cfgSetDir(pItem, value, stype); case CFG_DTYPE_TIMEZONE: @@ -366,43 +346,43 @@ static int32_t cfgAddItem(SConfig *pCfg, SConfigItem *pItem, const char *name) { return 0; } -int32_t cfgAddBool(SConfig *pCfg, const char *name, bool defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_BOOL, .bval = defaultVal}; +int32_t cfgAddBool(SConfig *pCfg, const char *name, bool defaultVal, bool tsc) { + SConfigItem item = {.dtype = CFG_DTYPE_BOOL, .bval = defaultVal, .tsc = tsc}; return cfgAddItem(pCfg, &item, name); } -int32_t cfgAddInt32(SConfig *pCfg, const char *name, int32_t defaultVal, int64_t minval, int64_t maxval) { +int32_t cfgAddInt32(SConfig *pCfg, const char *name, int32_t defaultVal, int64_t minval, int64_t maxval, bool tsc) { if (defaultVal < minval || defaultVal > maxval) { terrno = TSDB_CODE_OUT_OF_RANGE; return -1; } - SConfigItem item = {.dtype = CFG_DTYPE_INT32, .i32 = defaultVal, .imin = minval, .imax = maxval}; + SConfigItem item = {.dtype = CFG_DTYPE_INT32, .i32 = defaultVal, .imin = minval, .imax = maxval, .tsc = tsc}; return cfgAddItem(pCfg, &item, name); } -int32_t cfgAddInt64(SConfig *pCfg, const char *name, int64_t defaultVal, int64_t minval, int64_t maxval) { +int32_t cfgAddInt64(SConfig *pCfg, const char *name, int64_t defaultVal, int64_t minval, int64_t maxval, bool tsc) { if (defaultVal < minval || defaultVal > maxval) { terrno = TSDB_CODE_OUT_OF_RANGE; return -1; } - SConfigItem item = {.dtype = CFG_DTYPE_INT64, .i64 = defaultVal, .imin = minval, .imax = maxval}; + SConfigItem item = {.dtype = CFG_DTYPE_INT64, .i64 = defaultVal, .imin = minval, .imax = maxval, .tsc = tsc}; return cfgAddItem(pCfg, &item, name); } -int32_t cfgAddFloat(SConfig *pCfg, const char *name, float defaultVal, double minval, double maxval) { +int32_t cfgAddFloat(SConfig *pCfg, const char *name, float defaultVal, double minval, double maxval, bool tsc) { if (defaultVal < minval || defaultVal > maxval) { terrno = TSDB_CODE_OUT_OF_RANGE; return -1; } - SConfigItem item = {.dtype = CFG_DTYPE_FLOAT, .fval = defaultVal, .fmin = minval, .fmax = maxval}; + SConfigItem item = {.dtype = CFG_DTYPE_FLOAT, .fval = defaultVal, .fmin = minval, .fmax = maxval, .tsc = tsc}; return cfgAddItem(pCfg, &item, name); } -int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_STRING}; +int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal, bool tsc) { + SConfigItem item = {.dtype = CFG_DTYPE_STRING, .tsc = tsc}; item.str = strdup(defaultVal); if (item.str == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; @@ -411,17 +391,8 @@ int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal) { return cfgAddItem(pCfg, &item, name); } -int32_t cfgAddIpStr(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_IPSTR}; - if (cfgCheckAndSetIpStr(&item, defaultVal) != 0) { - return -1; - } - - return cfgAddItem(pCfg, &item, name); -} - -int32_t cfgAddDir(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_DIR}; +int32_t cfgAddDir(SConfig *pCfg, const char *name, const char *defaultVal, bool tsc) { + SConfigItem item = {.dtype = CFG_DTYPE_DIR, .tsc = tsc}; if (cfgCheckAndSetDir(&item, defaultVal) != 0) { return -1; } @@ -430,7 +401,7 @@ int32_t cfgAddDir(SConfig *pCfg, const char *name, const char *defaultVal) { } int32_t cfgAddLocale(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_LOCALE}; + SConfigItem item = {.dtype = CFG_DTYPE_LOCALE, .tsc = 1}; if (cfgCheckAndSetLocale(&item, defaultVal) != 0) { return -1; } @@ -439,7 +410,7 @@ int32_t cfgAddLocale(SConfig *pCfg, const char *name, const char *defaultVal) { } int32_t cfgAddCharset(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_CHARSET}; + SConfigItem item = {.dtype = CFG_DTYPE_CHARSET, .tsc = 1}; if (cfgCheckAndSetCharset(&item, defaultVal) != 0) { return -1; } @@ -448,7 +419,7 @@ int32_t cfgAddCharset(SConfig *pCfg, const char *name, const char *defaultVal) { } int32_t cfgAddTimezone(SConfig *pCfg, const char *name, const char *defaultVal) { - SConfigItem item = {.dtype = CFG_DTYPE_TIMEZONE}; + SConfigItem item = {.dtype = CFG_DTYPE_TIMEZONE, .tsc = 1}; if (cfgCheckAndSetTimezone(&item, defaultVal) != 0) { return -1; } @@ -491,8 +462,6 @@ const char *cfgDtypeStr(ECfgDataType type) { return "float"; case CFG_DTYPE_STRING: return "string"; - case CFG_DTYPE_IPSTR: - return "ipstr"; case CFG_DTYPE_DIR: return "dir"; case CFG_DTYPE_LOCALE: @@ -506,15 +475,23 @@ const char *cfgDtypeStr(ECfgDataType type) { } } -void cfgDumpCfg(SConfig *pCfg) { - uInfo(" global config"); - uInfo("================================================================="); +void cfgDumpCfg(SConfig *pCfg, bool tsc, bool dump) { + if (dump) { + printf(" global config"); + printf("\n"); + printf("================================================================="); + printf("\n"); + } else { + uInfo(" global config"); + uInfo("================================================================="); + } char src[CFG_SRC_PRINT_LEN + 1] = {0}; char name[CFG_NAME_PRINT_LEN + 1] = {0}; SConfigItem *pItem = cfgIterate(pCfg, NULL); while (pItem != NULL) { + if (tsc && !pItem->tsc) continue; tstrncpy(src, cfgStypeStr(pItem->stype), CFG_SRC_PRINT_LEN); for (int32_t i = 0; i < CFG_SRC_PRINT_LEN; ++i) { if (src[i] == 0) src[i] = ' '; @@ -527,107 +504,126 @@ void cfgDumpCfg(SConfig *pCfg) { switch (pItem->dtype) { case CFG_DTYPE_BOOL: - uInfo("%s %s %u", src, name, pItem->bval); + if (dump) { + printf("%s %s %u", src, name, pItem->bval); + printf("\n"); + } else { + uInfo("%s %s %u", src, name, pItem->bval); + } + break; case CFG_DTYPE_INT32: - uInfo("%s %s %d", src, name, pItem->i32); + if (dump) { + printf("%s %s %d", src, name, pItem->i32); + printf("\n"); + } else { + uInfo("%s %s %d", src, name, pItem->i32); + } break; case CFG_DTYPE_INT64: - uInfo("%s %s %" PRId64, src, name, pItem->i64); + if (dump) { + printf("%s %s %" PRId64, src, name, pItem->i64); + printf("\n"); + } else { + uInfo("%s %s %" PRId64, src, name, pItem->i64); + } break; case CFG_DTYPE_FLOAT: - uInfo("%s %s %f", src, name, pItem->fval); + if (dump) { + printf("%s %s %f", src, name, pItem->fval); + printf("\n"); + } else { + uInfo("%s %s %f", src, name, pItem->fval); + } break; case CFG_DTYPE_STRING: - case CFG_DTYPE_IPSTR: case CFG_DTYPE_DIR: case CFG_DTYPE_LOCALE: case CFG_DTYPE_CHARSET: case CFG_DTYPE_TIMEZONE: - uInfo("%s %s %s", src, name, pItem->str); + if (dump) { + printf("%s %s %s", src, name, pItem->str); + printf("\n"); + } else { + uInfo("%s %s %s", src, name, pItem->str); + } break; } pItem = cfgIterate(pCfg, pItem); } - uInfo("================================================================="); + if (dump) { + printf("================================================================="); + printf("\n"); + } else { + uInfo("================================================================="); + } } -#if 0 -// int32_t cfgCheck(SConfig *pCfg) { -// SConfigItem *pItem = NULL; -// pItem = cfgGetItem(pCfg, "serverPort"); -// if (pItem != NULL) { -// tsServerPort = (uint16_t)pItem->i32; -// } - -// pItem = cfgGetItem(pCfg, "firstEp"); -// if (pItem != NULL) { -// tstrncpy(tsFirst, pItem->str, TSDB_EP_LEN); -// } +int32_t cfgLoadFromEnvVar(SConfig *pConfig) { + uInfo("load from global env variables"); + return 0; +} -// snprintf(tsLocalEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort); -// uInfo("localEp is: %s", tsLocalEp); +int32_t cfgLoadFromEnvFile(SConfig *pConfig, const char *filepath) { + uInfo("load from env file %s", filepath); + return 0; +} -// SEp ep = {0}; -// if (tsFirst[0] == 0) { -// strcpy(tsFirst, tsLocalEp); -// } else { -// taosGetFqdnPortFromEp(tsFirst, &ep); -// snprintf(tsFirst, TSDB_EP_LEN, "%s:%u", ep.fqdn, ep.port); -// } +int32_t cfgLoadFromCfgFile(SConfig *pConfig, const char *filepath) { + char *line, *name, *value, *value2, *value3; + int olen, vlen, vlen2, vlen3; + ssize_t _bytes = 0; + size_t len = 1024; -// pItem = cfgGetItem(pCfg, "secondEp"); -// if (pItem != NULL) { -// tstrncpy(tsSecond, pItem->str, TSDB_EP_LEN); -// } + FILE *fp = fopen(filepath, "r"); + if (fp == NULL) { + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } -// if (tsSecond[0] == 0) { -// strcpy(tsSecond, tsLocalEp); -// } else { -// taosGetFqdnPortFromEp(tsSecond, &ep); -// snprintf(tsSecond, TSDB_EP_LEN, "%s:%u", ep.fqdn, ep.port); -// } + line = malloc(len); -// pItem = cfgGetItem(pCfg, "dataDir"); -// if (pItem != NULL) { -// tstrncpy(osDataDir(), pItem->str, PATH_MAX); -// } + while (!feof(fp)) { + memset(line, 0, len); -// if (tsDiskCfgNum <= 0) { -// taosAddDataDir(0, osDataDir(), 0, 1); -// tsDiskCfgNum = 1; -// uTrace("dataDir:%s, level:0 primary:1 is configured by default", osDataDir()); -// } + name = value = value2 = value3 = NULL; + olen = vlen = vlen2 = vlen3 = 0; -// if (taosDirExist(osTempDir()) != 0) { -// return -1; -// } + _bytes = tgetline(&line, &len, fp); + if (_bytes < 0) { + break; + } -// taosGetSystemInfo(); + line[len - 1] = 0; -// tsSetLocale(); + paGetToken(line, &name, &olen); + if (olen == 0) continue; + name[olen] = 0; -// // SGlobalCfg *cfg_timezone = taosGetConfigOption("timezone"); -// // if (cfg_timezone && cfg_timezone->cfgStatus == TAOS_CFG_CSTATUS_FILE) { -// tsSetTimeZone(); -// // } + paGetToken(name + olen + 1, &value, &vlen); + if (vlen == 0) continue; + value[vlen] = 0; -// pItem = cfgGetItem(pCfg, "numOfCores"); -// if (pItem != NULL) { -// tsNumOfCores = pItem->i32; -// } + paGetToken(value + vlen + 1, &value2, &vlen2); + if (vlen2 != 0) { + value2[vlen2] = 0; + paGetToken(value2 + vlen2 + 1, &value3, &vlen3); + if (vlen3 != 0) value3[vlen3] = 0; + } -// if (tsNumOfCores <= 0) { -// tsNumOfCores = 1; -// } + cfgSetItem(pConfig, name, value, CFG_STYPE_CFG_FILE); + // taosReadConfigOption(name, value, value2, value3); + } -// if (tsQueryBufferSize >= 0) { -// tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL; -// } + fclose(fp); + tfree(line); -// cfgPrintCfg(pCfg); + uInfo("load from cfg file %s success", filepath); + return 0; +} -// return 0; -// } -#endif \ No newline at end of file +int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { + uInfo("load from apoll url %s", url); + return 0; +} \ No newline at end of file diff --git a/source/util/src/ttimer.c b/source/util/src/ttimer.c index ca0c6e9a2443892b8813b106f72a0eb39e87cac9..2c04603269c302bb6b85515f3ffb9a8b25fa5a3c 100644 --- a/source/util/src/ttimer.c +++ b/source/util/src/ttimer.c @@ -111,7 +111,7 @@ typedef struct time_wheel_t { tmr_obj_t** slots; } time_wheel_t; -uint32_t tsMaxTmrCtrl = 512; +int32_t tsMaxTmrCtrl = 512; static pthread_once_t tmrModuleInit = PTHREAD_ONCE_INIT; static pthread_mutex_t tmrCtrlMutex; diff --git a/source/util/test/CMakeLists.txt b/source/util/test/CMakeLists.txt index ee0ade03b858707b5ef1bafb2554798709271e98..d6b779b6e32b98b0f729d71a428bd4ea5512f731 100644 --- a/source/util/test/CMakeLists.txt +++ b/source/util/test/CMakeLists.txt @@ -51,4 +51,12 @@ target_link_libraries(queue_test os util gtest_main) add_test( NAME queue_test COMMAND queue_test +) + +# cfgTest +add_executable(cfgTest "cfgTest.cpp") +target_link_libraries(cfgTest os util gtest_main) +add_test( + NAME cfgTest + COMMAND cfgTest ) \ No newline at end of file diff --git a/source/libs/config/test/cfgTest.cpp b/source/util/test/cfgTest.cpp similarity index 81% rename from source/libs/config/test/cfgTest.cpp rename to source/util/test/cfgTest.cpp index 7c70e1a8f88fc17e398c75460b0c861fcba1e4bf..c352a4c21b057e015da375cf3f54854f9208710a 100644 --- a/source/libs/config/test/cfgTest.cpp +++ b/source/util/test/cfgTest.cpp @@ -10,7 +10,7 @@ */ #include -#include "config.h" +#include "tconfig.h" class CfgTest : public ::testing::Test { protected: @@ -43,7 +43,6 @@ TEST_F(CfgTest, 01_Str) { EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_INT64), "int64"); EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_FLOAT), "float"); EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_STRING), "string"); - EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_IPSTR), "ipstr"); EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir"); EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir"); EXPECT_STREQ(cfgDtypeStr(CFG_DTYPE_DIR), "dir"); @@ -55,15 +54,14 @@ TEST_F(CfgTest, 02_Basic) { SConfig *pConfig = cfgInit(); ASSERT_NE(pConfig, nullptr); - EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0), 0); - EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16), 0); - EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16), 0); - EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16), 0); - EXPECT_EQ(cfgAddString(pConfig, "test_string", "4"), 0); - EXPECT_EQ(cfgAddIpStr(pConfig, "test_ipstr", "192.168.0.1"), 0); - EXPECT_EQ(cfgAddDir(pConfig, "test_dir", "/tmp"), 0); + EXPECT_EQ(cfgAddBool(pConfig, "test_bool", 0, 0), 0); + EXPECT_EQ(cfgAddInt32(pConfig, "test_int32", 1, 0, 16, 0), 0); + EXPECT_EQ(cfgAddInt64(pConfig, "test_int64", 2, 0, 16, 0), 0); + EXPECT_EQ(cfgAddFloat(pConfig, "test_float", 3, 0, 16, 0), 0); + EXPECT_EQ(cfgAddString(pConfig, "test_string", "4", 0), 0); + EXPECT_EQ(cfgAddDir(pConfig, "test_dir", "/tmp", 0), 0); - EXPECT_EQ(cfgGetSize(pConfig), 7); + EXPECT_EQ(cfgGetSize(pConfig), 6); int32_t size = 0; SConfigItem *pItem = cfgIterate(pConfig, NULL); @@ -84,9 +82,6 @@ TEST_F(CfgTest, 02_Basic) { case CFG_DTYPE_STRING: printf("index:%d, cfg:%s value:%s\n", size, pItem->name, pItem->str); break; - case CFG_DTYPE_IPSTR: - printf("index:%d, cfg:%s value:%s\n", size, pItem->name, pItem->str); - break; case CFG_DTYPE_DIR: printf("index:%d, cfg:%s value:%s\n", size, pItem->name, pItem->str); break; @@ -99,7 +94,7 @@ TEST_F(CfgTest, 02_Basic) { } cfgCancelIterate(pConfig, pItem); - EXPECT_EQ(cfgGetSize(pConfig), 7); + EXPECT_EQ(cfgGetSize(pConfig), 6); pItem = cfgGetItem(pConfig, "test_bool"); EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT); @@ -131,12 +126,6 @@ TEST_F(CfgTest, 02_Basic) { EXPECT_STREQ(pItem->name, "test_string"); EXPECT_STREQ(pItem->str, "4"); - pItem = cfgGetItem(pConfig, "test_ipstr"); - EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT); - EXPECT_EQ(pItem->dtype, CFG_DTYPE_IPSTR); - EXPECT_STREQ(pItem->name, "test_ipstr"); - EXPECT_STREQ(pItem->str, "192.168.0.1"); - pItem = cfgGetItem(pConfig, "test_dir"); EXPECT_EQ(pItem->stype, CFG_STYPE_DEFAULT); EXPECT_EQ(pItem->dtype, CFG_DTYPE_DIR);